BAB IV
PERANCANGAN SISTEM USULAN
4.1. Analisa Kebutuhan Software 4.1.1. Tahapan Analisis
Berikut spesifikasi kebutuhan (system requirement) dari website POS pada Maktab Abu Ahmad:
1. Halaman Kasir
A1. Kasir dapat melakukan Login untuk masuk ke halaman kasir A2. Kasir dapat memilih menu Beranda
A3. Kasir dapat memilih menu Transaksi Penjualan untuk menginput transaki penjualan
A4. Kasir dapat memilih menu Laporan Penjualan untuk mengelola laporan penjualan
A5. Kasir dapat memilih menu Pelanggan untuk mengelola data pelanggan A6. Kasir dapat memilih menu Logout untuk keluar dari halaman kasir 2. Halaman Admin
B1. Admin dapat melakukan Login untuk masuk ke halaman admin B2. Admin dapat memilih menu Beranda
B3. Admin dapat memilih menu Persediaan Masuk dan Persediaan Keluar untuk menginput data persediaan masuk dan persediaan keluar
B4. Admin dapat memilih menu Barang untuk mengelola data barang B5. Admin dapat memilih menu Kategori untuk mengelola data kategori B6. Admin dapat memilih menu Pemasok untuk mengelola data pemasok
B7. Admin dapat memilih menu Pengguna untuk mengelola data pengguna B8. Admin dapat memilih menu Laporan Persediaan Masuk dan Persediaan
Keluar untuk mengelola laporan persediaan masuk dan persediaan keluar B9. Admin dapat memilih menu Logout untuk keluar dari halaman admin
4.1.2. Rancangan Diagram Use Case 1. Usecase Diagram
Gambar IV.1 Usecase Diagram
Tabel IV.1
Deskripsi Use Case Diagram Login Use Case Name Login
Requirements Admin dan Kasir harus memasukan username dan password
Goal Admin dapat masuk ke sistem untuk mengelola data Pre-Conditions Menginput username dan password
Post-Conditions Admin dan Kasir dapat masuk ke aplikasi Failed and
Conditions
Gagal login username atau password salah
Actors Admin dan Kasir
Main Flow/Basic Path
1. Admin dan Kasir menginput username dan password 2. Admin dan Kasir masuk ke aplikasi
Tabel IV.2
Deskripsi Use Case Diagram Input Data Transaksi Penjualan Use Case Name Input data transaksi penjualan
Requirements Kasir harus login
Goal Kasir dapat masuk ke sistem untuk menginput data penjualan
Pre-Conditions Kasir memilih menu penjualan Post-Conditions Data transaksi penjualan tersimpan Failed and
Conditions
1. Kasir tidak dapat mengakeses halaman penjualan 2. Data transaksi tidak tersimpan
Actors Kasir
Main Flow/Basic Path
1. Kasir melakukan login
2. Kasir memilih menu penjualan 3. Kasir mencetak nota penjualan
Tabel IV.3
Deskripsi Use Case Diagram Input Data Persediaan Masuk dan Keluar Use Case Name Input data persediaan
Requirements Admin harus login
Goal Admin dapat masuk ke sistem untuk menginput data persediaan
Pre-Conditions Admin memilih menu persediaan Post-Conditions Data persediaan tersimpan Failed and
Conditions
1. Admin tidak dapat mengakeses halaman persediaan 2. Data persediaan tidak tersimpan
Actors Admin
Main Flow/Basic Path
1. Admin melakukan login
2. Admin memilih menu persediaan
Tabel IV.4
Deskripsi Use Case Diagram Mengelola Data Barang Use Case Name Mengelola data barang
Requirements Admin harus login
Goal Admin dapat mengelola data barang Pre-Conditions Admin memilih menu data barang Post-Conditions Data barang berhasil tersimpan Failed and
Conditions
1. Admin tidak dapat mengakeses halaman data barang 2. Data barang tidak tersimpan
Actors Admin
Main Flow/Basic Path
1. Admin melakukan login
2. Admin memilih menu data barang
Tabel IV.5
Deskripsi Use Case Diagram Mengelola Data Pegawai Use Case Name Mengelola data pegawai
Requirements Admin harus login
Goal Admin dapat mengelola data pegawai Pre-Conditions Admin memilih menu pegawai Post-Conditions Data pegawai tersimpan Failed and
Conditions
1. Admin tidak dapat mengakeses halaman pegawai 2. Data pegawai tidak tersimpan
Actors Admin
Main Flow/Basic Path
1. Admin melakukan login 2. Admin memilih menu pegawai
Tabel IV.6
Deskripsi Use Case Diagram Mengelola Data Pemasok Use Case Name Mengelola data pemasok
Requirements Admin harus login
Goal Admin dapat mengelola data pemasok Pre-Conditions Admin memilih menu pemasok Post-Conditions Data pemasok tersimpan Failed and
Conditions
1. Admin tidak dapat mengakeses halaman pemasok 2. Data pemasok tidak tersimpan
Actors Admin
Main Flow/Basic Path
1. Admin melakukan login
2. Admin memilih menu pemasok
Tabel IV.7
Deskripsi Use Case Diagram Mengelola Data Pelanggan Use Case Name Mengelola data pelanggan
Requirements Kasir harus login
Goal Kasir dapat mengelola data pelanggan Pre-Conditions Kasir memilih menu pelanggan Post-Conditions Data pelanggan tersimpan Failed and
Conditions
1. Kasir tidak dapat mengakeses halaman pelanggan 2. Data pelanggan tidak tersimpan
Actors Kasir
Main Flow/Basic Path
1. Kasir melakukan login
2. Kasir memilih menu pelanggan Tabel IV.8
Deskripsi Use Case Diagram Mengelola Data Kategori Use Case Name Mengelola data kategori
Requirements Admin harus login
Goal Admin dapat mengelola data kategori Pre-Conditions Admin memilih menu kategori Post-Conditions Data kategori tersimpan Failed and
Conditions
1. Admin tidak dapat mengakeses halaman kategori 2. Data kategori tersimpan
Actors Admin
Main Flow/Basic Path
1. Admin melakukan login 2. Admin memilih menu kategori
Tabel IV.9
Deskripsi Use Case Diagram Laporan Penjualan Use Case Name Laporan Penjualan
Requirements Kasir harus login
Goal Kasir dapat masuk ke sistem untuk mengelola data laporan penjualan
Pre-Conditions Kasir memilih menu laporan penjualan Post-Conditions Kasir halaman laporan penjualan Failed and
Conditions
Kasir tidak dapat mengakeses halaman laporan penjualan
Actors Kasir
Main Flow/Basic Path
1. Kasir melakukan login
2. Kasir memilih menu laporan penjualan 3. Kasir mencetak laporan penjualan
Tabel IV.10
Deskripsi Use Case Diagram Laporan Persediaan Use Case Name Laporan Persediaan
Requirements Admin harus login
Goal Admin dapat masuk ke sistem untuk mengelola data laporan persediaan
Pre-Conditions Admin memilih menu laporan persediaan Post-Conditions Tampil halaman laporan persediaan Failed and
Conditions
Admin tidak dapat mengakese halaman laporan persediaan
Actors Admin
Main Flow/Basic Path
1. Admin melakukan login
2. Admin memilih menu laporan persediaan 3. Admin mencetak laporan persediaan
4.1.3. Activity Diagram 1. Activity Diagram Login
Gambar IV.2 Activity Diagram Login
2. Activity Diagram Penjualan
Gambar IV.3
Activity Diagram Penjualan
3. Activity Diagram Persediaan
Gambar IV.4
Activity Diagram Persediaan
4. Activity Diagram Barang
Gambar IV.5 Activity Diagram Barang
5. Activity Diagram Pegawai
Gambar IV.6 Activity Diagram Pegawai
6. Activity Diagram Pemasok
Gambar IV.7 Activity Diagram Pemasok
7. Activity Diagram Pelanggan
Gambar IV.8
Activity Diagram Pelanggan
8. Activity Diagram Kategori
Gambar IV.9 Activity Diagram Kategori
9. Activity Diagram Laporan Penjualan
Gambar IV.10
Activity Diagram Laporan Penjualan
10. Activity Diagram Laporan Persediaan
Gambar IV.11
Activity Diagram Laporan Persediaan
4.2. Desain 4.2.1. Database
A. Entity Relationship Diagram (ERD)
Gambar IV.12
Entity Relationship Diagram
B. Logical Record Structure (LRS)
Gambar IV.13 Logical Record Structure
C. Spesifikasi File 1. Spesifikasi file user
Nama File : User
Akronim : User
Tipe File : File Master
Akses File : Random
Panjang Record : 342
Kunci File : Id_user
Tabel IV.11 Spesifikasi File User
No Elemen Data Nama Field Type Size Ket
1 Id user Id_user int 11 Primary Key
2 Nama nama varchar 50
3 Username username varchar 25
4 Password password varchar 30
5 Alamat alamat varchar 200
6 Telpon telpon varchar 15
7 Level level int 11
2. Spesifikasi file penjualan
Nama File : Penjualan
Akronim : Penjualan
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 94
Kunci File : Id_penjualan
Tabel IV.12
Spesifikasi File Penjualan
No Elemen Data Nama Field Type Size Ket
1 Id penjualan id_penjualan Int 11 Primary Key
2 Faktur faktur Varchar 50 Unique
3 Id user id_user Int 11 Foreign key
4 Diskon diskon Int 11
5 Total Harga total_harga Double
6 Total Bayar total_bayar Int 11
7 Uang Bayar uang_bayar Double
8 Kembalian kembalian Double
9 Tanggal tanggal date
3. Spesifikasi file persediaan
Nama File : Persediaan
Akronim : Persediaan
Tipe File : File Master
Akses File : Random
Panjang Record : 55
Kunci File : Id_persediaan
Tabel IV.13
Spesifikasi File Persediaan
No Elemen Data Nama Field Type Size Ket
1 Id penjualan id_persediaan Int 11 Primary Key
2 Id produk Id_produk Int 11 Foreign key
3 Id user Id_user Int 11 Foreign key
4 Id pemasok Id_pemasok Int 11 Foreign key
5 Qty Qty Int 11
7 Tipe Tipe Enum
8 Harga beli Harga_beli Double
9 Harga jual Harga_jual Double
10 Tanggal tanggal date
4. Spesifikasi file detail penjualan
Nama File : Detail Penjualan
Akronim : Detail Penjualan
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 77
Kunci File : Id_detail_penjualan
Tabel IV.14
Spesifikasi File Detail Penjualan
No Elemen Data Nama Field Type Size Ket
1 Id detail penjualan Id_detail_penjualan Int 11 Primary Key
2 Id produk Id_produk Int 11 Foreign key
3 Id penjualan Id_penjualan Int 11 Foreign key
4 Harga Harga Int 11
5 Diskon produk Diskon_produk Int 11
6 Total Total Int 11
7 Qty Qty Int 11
5. Spesifikasi file produk
Nama File : Produk
Akronim : Produk
Tipe File : File Master
Akses File : Random
Panjang Record : 244
Kunci File : Id_produk
Tabel IV.15 Spesifikasi File Produk
No Elemen Data Nama Field Type Size Ket
1 Id produk id_produk Int 11 Primary Key
2 Kode produk kode_produk Varchar 50 3 Nama produk nama_produk Varchar 50
4 harga harga Int 11
5 Harga beli Harga_beli Int 11
6 Stok stok Text
7 Id kategori id_kategori Int 11 Foreign key
8 Gambar gambar Varchar 100
9 Tanggal tanggal date
6. Spesifikasi file kategori
Nama File : Kategori
Akronim : Kategori
Tipe File : File Master
Akses File : Random
Panjang Record : 61
Kunci File : Id_kategori
Tabel IV.16 Spesifikasi File Kategori
No Elemen Data Nama Field Type Size Ket
1 Id kategori id_kategori Int 11 Primary Key
2 Nama kategori Nama_kategori Varchar 50
7. Spesifikasi file pemasok
Nama File : Pemasok
Akronim : Pemasok
Tipe File : File Master
Akses File : Random
Panjang Record : 276
Kunci File : Id_pemasok
Tabel IV.17 Spesifikasi File Pemasok
No Elemen Data Nama Field Type Size Ket
1 Id pemasok id_pemasok Int 11 Primary Key
2 Nama pemasok Nama_pemasok Varchar 50
3 Alamat alamat Varchar 200
4 Telpon telpon Varchar 15
5 Deskripsi deskripsi Text
4.2.2. Software Architectur A. Class Diagram
Gambar IV.14 Class Diagram
B. Sequence Diagram 1. Sequence Diagram Login
Gambar IV.15 Sequence Diagram Login
2. Sequence Diagram Penjualan
Gambar IV.16
Sequence Diagram Penjualan
3. Sequence Diagram Persediaan
Gambar IV.17
Sequence Diagram Persediaan
4. Sequence Diagram Barang
Gambar IV.18 Sequence Diagram Barang
5. Sequence Diagram Pengguna
Gambar IV.19
Sequence Diagram Pengguna
6. Sequence Diagram Pemasok
Gambar IV.20
Sequence Diagram Pemasok
7. Sequence Diagram Pelanggan
Gambar IV.21
Sequence Diagram Pelanggan
8. Sequence Diagram Kategori
Gambar IV.22
Sequence Diagram Kategori
9. Sequence Diagram Laporan Penjualan
Gambar IV.23
Sequence Diagram Laporan Penjualan
10. Sequence Diagram Laporan Persediaan
Gambar IV.24
Sequence Diagram Laporan Persediaan
C. Devloyment Diagram
Gambar IV.25 Devloyment Diagram
D. Component Diagram
Gambar IV.26 Component Diagram
4.2.3. User Interface A. Interface Kasir 1. Interface Login
Gambar IV.27 Interface Login
Halaman login merupakan halaman untuk login. Pengguna diharuskan untuk memasukan username dan password agar dapat masuk ke dalam sistem Point Of Sale (POS) Maktab Abu Ahmad.
2. Interface Beranda
Gambar IV.28 Interface Beranda
Halaman ini merupakan halaman utama setelah login sebagai kasir. Terdapat beberapa menu untuk mengelola dan melakukan transaksi.
3. Interface Transaksi Penjualan
Gambar IV.29 Interface Transaksi Penjualan
Halaman ini merupakan halaman transaksi penjualan. Terdapat form-form dan daftar barang yang bisa dipilih untuk dimasukkan ke dalam keranjang.
4. Interface Laporan Penjualan
Gambar IV.30 Interface Laporan Penjualan
Halaman ini merupakan halaman yang berfungsi untuk melakukan pengumpulan data transaksi penjualan dan akan diserahkan kepada pemilik.
5. Interface Data Pelanggan
Gambar IV.31 Interface Data Pelanggan
Halaman ini merupakan halaman yang berfungsi untuk melihat, menambah dan merubah data pelanggan.
6. Interface Data Penjualan
Gambar IV.32 Interface Data Penjualan
Halaman ini merupakan halaman yang berfungsi untuk melihat data penjualan yang sudah terjadi pada toko Maktab Abu Ahmad.
7. Interface Detail Penjualan
Gambar IV.33 Interface Detail Penjualan
Halaman ini merupakan halaman yang berfungsi untuk melihat detail barang dan mencetak Struk Penjualan.
B. Interface Admin
1. Interface Data Pengguna
Gambar IV.34 Interface Data Pengguna
Halaman ini merupakan halaman yang berfungsi untuk melihat, menambah dan merubah data pengguna.
2. Interface Data Kategori
Gambar IV.35 Interface Data Kategori
Halaman ini merupakan halaman yang berfungsi untuk melihat, menambah dan merubah data kategori.
3. Interface Data Pemasok
Gambar IV.36 Interface Data Pemasok
Halaman ini merupakan halaman yang berfungsi untuk melihat, menambah dan merubah data pemasok.
4. Interface Data Produk
Gambar IV.37 Interface Data Produk
Halaman ini merupakan halaman yang berfungsi untuk melihat, menambah dan merubah data produk.
5. Interface Persediaan Masuk
Gambar IV.38 Interface Persediaan Masuk
Halaman ini merupakan halaman persediaan masuk. Jika ada pembeliaan barang, admin harus memasukan ke persediaan masuk agar stok dan harga terupdate.
6. Interface Persediaan Keluar
Gambar IV.39 Interface Persediaan Keluar
Halaman ini merupakan halaman persediaan keluar. Jika ada barang rusak, hilang ataupun salah input jumlah saat persediaan masuk, admin harus memasukan data tersebut sesuai dengan keterangan.
4.3. Code Generation
Code Generation dari aplikasi Point Of Sale Maktab Abu Ahmad menggunakan model MVC (Model, View, Controller).
4.3.1. Model
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class penjualan_m extends CI_Model { public function get_data_penjualan() {
$this->db->select('*, detail_penjualan.harga as harga_jual');
$this->db->from('detail_penjualan');
$this->db->join('produk', 'detail_penjualan.id_produk = produk.id_produk');
$this->db->join('penjualan', 'detail_penjualan.id_penjualan = penjualan.id_penjualan');
$this->db->order_by('id_detail_penjualan', 'desc');
$query = $this->db->get();
return $query;
}
public function kode_penjualan() {
$query = $this->db->query("SELECT
MAX(MID(kode_penjualan,9,4)) AS kode_penjualan FROM penjualan WHERE MID(kode_penjualan,3,6) = DATE_FORMAT(CURDATE(), '%y%m%d')");
if($query->num_rows() > 0) {
$row = $query->row();
$int = ((int)$row->kode_penjualan) + 1;
$no = sprintf("%'.04d", $int);
} else {
$no = "0001";
}
$kode_penjualan = "MR".date('ymd').$no;
return $kode_penjualan;
}
public function get_keranjang($params = null) {
$this->db->select('*, keranjang.harga as keranjang_harga');
$this->db->from('keranjang');
$this->db->join('produk', 'keranjang.id_produk = produk.id_produk');
if($params != null) {
$this->db->where($params);
}
$this->db->where('id_user', $this->session->userdata('iduser'));
$query = $this->db->get();
return $query;
}
public function tambah_keranjang($post) {
$query = $this->db->query("SELECT MAX(id_keranjang) AS no_keranjang FROM keranjang");
if($query->num_rows() > 0) {
$row = $query->row();
$no_ker = ((int)$row->no_keranjang) + 1;
}else{
$no_ker = "1";
}
$params = array(
'id_keranjang' => $no_ker,
'id_produk' => $post['id_produk'], 'harga' => $post['harga'], 'qty' => $post['qty'],
'total' => $post['harga'] * $post['qty'],
'id_user' => $this->session->userdata('iduser') );
$this->db->insert('keranjang', $params);
}
function qty_keranjang($post) {
$sql = "UPDATE keranjang SET harga = '$post[harga]', qty = qty + '$post[qty]',
total = '$post[harga]' * qty
WHERE id_produk = '$post[id_produk]'";
$this->db->query($sql);
}
public function hapus_keranjang($params = null) {
if($params != null){
$this->db->where($params);
}
$this->db->delete('keranjang');
}
public function edit_keranjang($post) {
$params = array(
'harga' => $post['harga'], 'qty' => $post['qty'], 'diskon_produk' => $post['diskon'], 'total' => $post['total'], );
$this->db->where('id_keranjang', $post['id_keranjang']);
$this->db->update('keranjang', $params);
}
public function simpan_penjualan($post) {
$params = array(
'kode_penjualan' => $this->kode_penjualan(),
'id_pelanggan' => $post['id_pelanggan'] == "" ? null :
$post['id_pelanggan'],
'total_harga' => $post['subtotal'],
'diskon' => $post['diskon'],
'total_bayar' => $post['total_bayar'], 'uang_bayar' => $post['cash'],
'kembalian' => $post['kembalian'],
'ket' => $post['ket'],
'tanggal' => $post['tanggal'],
'id_user' => $this->session-
>userdata('iduser') );
$this->db->insert('penjualan', $params);
return $this->db->insert_id();
}
function simpan_detail($params) {
$this->db->insert_batch('detail_penjualan', $params);
}
public function get_penjualan($id = null)
{
$this->db->select('*, user.username as user_name');
$this->db->from('penjualan');
$this->db->join('pelanggan', 'penjualan.id_pelanggan = pelanggan.id_pelanggan', 'left');
$this->db->join('user', 'penjualan.id_user = user.id_user');
if($id != null) {
$this->db->where('id_penjualan', $id);
}
$query = $this->db->get();
return $query;
}
public function get_detail_penjualan($id_penjualan = null) {
$this->db->from('detail_penjualan');
$this->db->join('produk', 'detail_penjualan.id_produk = produk.id_produk');
if($id_penjualan != null) {
$this->db->where('detail_penjualan.id_penjualan',
$id_penjualan);
}
$query = $this->db->get();
return $query;
} }
4.3.2. View
<section class="content-header">
<h1>Penjualan
<small>Pejualan Barang</small>
</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-user"></i></a></li>
<li class="active">Penjualan</li>
</ol>
</section>
<section class="content">
<div class="row">
<div class="col-lg-4">
<div class="box box-widget">
<div class="box-body">
<div align="right">
<h4>No. Faktur : <b><span id="nota"><?= $kode_penjualan ?></span></b></h4>
<h1><b><span id="total2" style="font-size: 50pt">0</span></b></h1>
</div></div></div></div>
<div class="col-lg-4">
<div class="box box-widget">
<div class="box-body">
<table width="100%">tr>
<td style="vertical-align: top; width: 30%">
<label for="kode_produk">Kode Produk</label></td><td>
<div class="form-group input-group">
<input type="hidden" id="id_produk">
<input type="hidden" id="nama_produk">
<input type="hidden" id="harga">
<input type="hidden" id="stok">
<input type="text" id="kode_produk" class="form-control" autofocus>
<span class="input-group-btn">
<button type="button" class="btn btn-info btn-flat" data-toggle="modal" data- target="#modal-produk">
<i class="fa fa-search"></i>
</button>
</span>
</div>td>tr>tr>
<td style="vertical-align: top">
<label for="qty">Qty</label>
</td>
<td>
<div class="form-group">
<input type="number" id="qty" value="1" class="form-control">
</div></td></tr>tr><td></td><td>
<div class="form-group">
<button type="button" id="add" class="btn btn-info btn-flat">
<i class="fa fa-cart-plus"></i> Tambah </button>
</div></td>tr>
</table>div></div>div>
<div class="col-lg-4">
<div class="box box-widget">
<div class="box-body">
<table width="100%">
<tr>
<td style="vertical-align: top">
<label for="tanggal">Tanggal</label>
</td>
<td>
<div class="form-group">
<input type="date" id="tanggal" class="form-control" value="<?=date('Y-m-d')?>">
</div></td></tr>tr>
<td style="vertical-align: top; width: 30%">
<label for="user">Kasir</label>
</td><td>
<div class="form-group">
<input type="text" id="user" class="form-control" value="<?=$this->fungsi-
>user_login()->nama?>" readonly></div></td></tr><tr>
<td style="vertical-align: top">
<label for="pelanggan">Pelanggan</label></td>td>
<div class="form-group">
<select id="pelanggan" class="form-control">
<option value="">Umum</option>
<?php foreach ($pelanggan as $user => $data) { echo '<option value="'.$data->id_pelanggan.'">'.$data->nama_pelanggan.'</option>'; } ?>
</select>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="box box-widget">
<div class="box-body table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>No</th>
<th>Kode Produk</th>
<th>Nama Produk</th>
<th width="10%">Harga</th>
<th class="text-center" width="10%">Qty/Gram</th>
<th class="text-center" width="10%">Diskon Produk</th>
<th class="text-center" width="15%">Total</th>
<th class="text-center" width="20%">Aksi</th></tr>
</thead>
<tbody id='tabel_keranjang'>
<?php $this->view('transaksi/penjualan/data_keranjang') ?>
</tbody></table>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-3">
<div class="box box-widget">
<div class="box-body">
<table><tr>
<td style="vertical-align: top; width: 30%">
<label for="qty">Sub Total</label></td>td>
<div class="form-group">
<input type="number" id="sub_total" class="form-control" readonly ="">
</div>td></tr><tr>
<td style="vertical-align: top; width: 30%">
<div class="form-group">
<label for="diskon">Diskon</label>
</div></td>td>
<div class="form-group">
<input type="number" id="diskon" value="0" min="0" class="form-control">
</div></td></tr><tr>
<td style="vertical-align: top">
<label for="total_bayar">Total Bayar</label>td>td>
<div class="form-group">
<input type="number" id="total_bayar" value="" class="form-control" readonly>
</div></td></tr></table></div></div></div>
<div class="col-lg-3">
<div class="box box-widget">
<div class="box-body">
<table><tr>
<td style="vertical-align: top; width: 40%">
<label for="cash">Uang Bayar</label>
</td>td>
<div class="form-group">
<input type="number" id="cash" value="0" min="0" class="form-control">
</div></td></tr><tr>
<td style="vertical-align: top">
<label for="kembalian">Kembalian</label></td><td>
<div class="form-group">
<input type="number" id="kembalian" class="form-control" readonly>
</div></td></tr></table></div></div>div>
<div class="col-lg-3">
<div class="box box-widget">
<div class="box-body">
<table><tr>
<td style="vertical-align: top">
<label for="ket">Ket.</label>
</td>
<td>
<div class="form-group">
<textarea id="ket" rows="3" class="form-control"></textarea>
</div></td></tr>
</table></div>div></div>
<div class="col-lg-3">
<div class="form-group">
<form>
<button id="hapus" class="btn btn-flat btn-warning">
<i class="fa fa-refresh"></i> Batal
</button><br><br>
</form>
<button id="simpan" class="btn btn-flat btn-lg btn-success">
<i class="fa fa-paper-plane-o"></i> Simpan
</button>
</div>
</div>
</div>
</section>
<div class="modal fade" id="modal-produk">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title">Pilih Kode Produk</h4>
</div>
<div class="modal-body table-responsive">
<table class="table table-bordered table-striped" id="table1">
<thead>
<tr>
<th>Kode Produk</th>
<th>Nama Produk</th>
<th>Nama Kategori</th>
<th>Harga</th>
<th>Stok</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php foreach($produk as $user => $data) { ?>
<tr>
<td><?=$data->kode_produk?></td>
<td><?=$data->nama_produk?></td>
<td><?=$data->nama_kategori?></td>
<td><?=indo_currency($data->harga)?></td>
<td class="text-center"><?=$data->stok?></td>
<td>
<button id="select" class="btn btn-xs btn-info"
data-id_produk="<?=$data->id_produk?>"
data-kode_produk="<?=$data->kode_produk?>"
data-harga="<?=$data->harga?>"
data-stok="<?=$data->stok?>">
<i class="fa fa-check"></i> Pilih </button>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="modal fade" id="keranjang-edit">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title">Edit Keranjang</h4>
</div>
<div class="modal-body">
<input type="hidden" id="id_keranjang_produk">
<div class="form-group">
<label for="nama">Produk</label>
<div class="row">
<div class="col-md-5">
<input type="text" id="kode" class="form-control" readonly>
</div>
<div class="col-md-7">
<input type="text" id="nama" class="form-control" readonly>
</div>
</div>
</div>
<div class="form-group">
<label for="harga_produk">Harga</label>
<input type="number" id="harga_produk" class="form-control" readonly>
</div>
<div class="form-group">
<label for="qty_produk">Qty</label>
<input type="number" id="qty_produk" min="1" class="form-control">
</div>
<div class="form-group">
<label for="total_sebelum">Total Sebelum Diskon</label>
<input type="number" id="total_sebelum" class="form-control" readonly>
</div>
<div class="form-group">
<label for="diskon_produk">Diskon Produk</label>
<input type="number" id="diskon_produk" min="0" class="form-control">
</div>
<div class="form-group">
<label for="total_sesudah">Total Sesudah Diskon</label>
<input type="number" id="total_sesudah" class="form-control" readonly>
</div>
</div>
<div class="modal-footer">
<div class="pull-right">
<button type="button" id="edit_keranjang" class="btn btn-flat- btn- success">
<i class="fa fa-paper-plane"></i> Simpan
</button>
</div>
</div>
</div>
</div>
</div>
<script>
// pilih produk
$(document).on('click', '#select', function() { $('#id_produk').val($(this).data('id_produk')) $('#kode_produk').val($(this).data('kode_produk')) $('#harga').val($(this).data('harga'))
$('#stok').val($(this).data('stok')) $('#modal-produk').modal('hide') })
$(document).on('click', '#add', function() { var id_produk = $('#id_produk').val() var harga = $('#harga').val()
var stok = $('#stok').val() var qty = $('#qty').val() if(id_produk == '') {
alert('Produk belum dipilih') $('#kode_produk').focus() } else if(stok < 1) {
alert('Stok tidak mencukupi') $('#id_produk').val('')
$('#kode_produk').val('') $('#kode_produk').focus() } else if(qty <= 0) {
alert('Qty tidak boleh kosong') $('#id_produk').val('')
$('#kode_produk').val('') $('#kode_produk').focus() } else if(qty > stok) {
alert('Stok tidak mencukupi') $('#id_produk').val('')
$('#kode_produk').val('') $('#kode_produk').focus() } else {
$.ajax({
type: 'POST',
url: '<?=site_url('penjualan/proses')?>',
data: {'add' : true, 'id_produk' : id_produk, 'harga' : harga, 'qty' : qty},
dataType: 'json',
success: function(result) {
if(result.success == true) {
$('#tabel_keranjang').load('<?=site_url('penjualan/data_keranjang')?>', function() {
kalkukali()
})
$('#id_produk').val('')
$('#kode_produk').val('')
$('#qty').val('1')
$('#kode_produk').focus()
}else {
alert('Gagal menambah produk')
}
}
})
} })
$(document).on('click', '#hapus_keranjang', function(){
if(confirm('Apakah ingin menghapus?')) {
var id_keranjang = $(this).data('id_keranjang')
$.ajax({
type: 'POST',
url: '<?=site_url('penjualan/hapus_keranjang')?>',
dataType: 'json',
data: {'id_keranjang': id_keranjang},
success: function(result) {
if(result.success == true) {
$('#tabel_keranjang').load('<?=site_url('penjualan/data_keranjang')?>', function() {
kalkukali()
})
} else {
alert('menghapus produk keranjang gagal');
}
}
})
} })
$(document).on('click', '#update_keranjang', function() {
$('#id_keranjang_produk').val($(this).data('id_keranjang')) $('#kode').val($(this).data('kode_produk'))
$('#nama').val($(this).data('nama_produk')) $('#harga_produk').val($(this).data('harga')) $('#qty_produk').val($(this).data('qty'))
$('#total_sebelum').val($(this).data('harga') * $(this).data('qty')) $('#diskon_produk').val($(this).data('diskon'))
$('#total_sesudah').val($(this).data('total')) $('#modal-produk').modal('hide')
})
function count_edit() {
var harga = $('#harga_produk').val() var qty = $('#qty_produk').val() var diskon = $('#diskon_produk').val()
total_sebelum = harga * qty
$('#total_sebelum').val(total_sebelum) total = (harga - diskon) * qty
$('#total_sesudah').val(total) if(diskon == '') {
$('#diskon_produk').val(0) }
}
$(document).on('keyup mouseup', '#harga_produk, #qty_produk, #diskon_produk', function(){
count_edit() })
$(document).on('click', '#edit_keranjang', function() { var id_keranjang = $('#id_keranjang_produk').val() var harga = $('#harga_produk').val()
var qty = $('#qty_produk').val() var diskon = $('#diskon_produk').val() var total = $('#total_sesudah').val() if(harga == '' || harga < 1) {
alert('Harga tidak boleh kosong') $('#harga_produk').focus() } else if(qty == '' || qty < 1) { alert('Qty minimal 1') $('#qty_produk').focus() } else {
$.ajax({
type: 'POST',
url: '<?=site_url('penjualan/proses')?>',
data: {'edit_keranjang' : true, 'id_keranjang' : id_keranjang, 'harga' : harga, 'qty' : qty, 'diskon' : diskon, 'total' : total},
dataType: 'json',
success: function(result) {
if(result.success == true) {
$('#tabel_keranjang').load('<?=site_url('penjualan/data_keranjang')?>', function() {
kalkukali()
})
$('#keranjang-edit').modal('hide');
}else {
alert('Gagal edit keranjang')
}
}
})
} })
function kalkukali() { var subtotal = 0;
$('#tabel_keranjang tr').each(function(){
subtotal += parseInt($(this).find('#total').text()) })
isNaN(subtotal) ? $('#sub_total').val(0) : $('#sub_total').val(subtotal) var diskon = $('#diskon').val()
var total_bayar = subtotal - diskon if(isNaN(total_bayar)) {
$('#total_bayar').val(0) $('#total2').text(0) } else {
$('#total_bayar').val(total_bayar) $('#total2').text(total_bayar) }
var cash = $('#cash').val();
cash != 0 ? $('#kembalian').val(cash - total_bayar) : $('#kembalian').val(0) if(diskon == '') {
$('#diskon').val(0) }
}
$(document).on('keyup mouseup', '#diskon, #cash', function(){
kalkukali() })
$(document).ready(function(){
kalkukali() })
$(document).on('click', '#simpan', function() { var id_pelanggan = $('#pelanggan').val() var subtotal = $('#sub_total').val() var diskon = $('#diskon').val()
var total_bayar = $('#total_bayar').val() var cash = $('#cash').val()
var kembalian = $('#kembalian').val() var ket = $('#ket').val()
var tanggal = $('#tanggal').val() if(subtotal < 1) {
alert('Keranjang masih kosong') $('#kode_produk').focus() } else if (cash < 1) {
alert('Uang Bayar belum di isi') $('#cash').focus()
} else {
if(confirm('Simpan penjualan?')) {
$.ajax({
type: 'POST',
url: '<?=site_url('penjualan/proses')?>',
data: {'simpan': true, 'id_pelanggan': id_pelanggan, 'subtotal': subtotal, 'diskon':
diskon, 'total_bayar': total_bayar, 'cash': cash, 'kembalian': kembalian, 'ket': ket, 'tanggal': tanggal},
dataType: 'json',
success: function(result) {
if(result.success) {
alert('Penjualan berhasil disimpan');
window.open('<?=site_url('penjualan/cetak/')?>' + result.id_penjualan, '_blank')
} else {
alert('Proses penjualan gagal');
}
location.href='<?=site_url('penjualan')?>'
}
})
}
} })
$(document).on('click', '#hapus', function(){
if(confirm('Apakah Anda Yakin??')) { $.ajax({
type: 'POST',
url: '<?=site_url('penjualan/hapus_keranjang')?>', dataType: 'json',
data: {'hapus': true}, success: function(result) { if(result.success == true) {
$('#tabel_keranjang').load('<?=site_url('penjualan/data_keranjang')?>', function() {
kalkukali() })
} } })
$('#diskon').val(0) $('#cash').val(0)
$('#pelanggan').val(0).change() $('#kode_produk').val('') $('#kode_produk').focus() }
})
</script>