BAB III PEMBAHASAN...28 BAB III PEMBAHASAN 3.1. Tinjauan Perusahaan Toko Cahaya Barokah merupakan...
Transcript of BAB III PEMBAHASAN...28 BAB III PEMBAHASAN 3.1. Tinjauan Perusahaan Toko Cahaya Barokah merupakan...
28
BAB III
PEMBAHASAN
3.1. Tinjauan Perusahaan
Toko Cahaya Barokah merupakan perusahaan yang bergerak dibidang pembelian
dan penjualan barang dagang yang berlokasi di Kp. Bojong Loa, Desa Pabuaran, kec.
Pabuaran, kab. Subang. Dalam pelaksanaan kegiatan rutin di Toko Cahaya Barokah
terdapat aturan yang ditentukan, dalam hal ini struktur organisasi yang
menggambarkan garis perintah dan penerimaan perintah serta fungsi-fungsi
pelaksanaan tersebut sehingga semua menjadi lancar. Penulis akan menerangkan
sejarah dan struktur organisasi ditempat penulis melaksanakan riset untuk pembuatan
Tugas Akhir (TA) ini sebgai berikut:
3.1.1. Sejarah Perusahaan
Toko Cahaya Barokah berdiri dari tahun 1990 jauh sebelum alfamart dan indomart
ada. Salah satu faktor yang membuat toko kelontongan Cahaya Barokah masih dapat
bertahan pada era yang serba komputer adalah kesetiaan pelanggan. Sedangkan
banyaknya bisnis serupa yang sudah tidak mampu bersaing banyaknya indomart dan
alfamart yang didirikan tahun belakang ini.
29
3.1.2. Struktur Organisasi Dan Fungsi
Struktur organisasi Toko Cahaya Barokah Pabuaran dibuat dengan tujuan
memudahkan koordinasi antar bagian, sehingga menjalankan kegiatannya sudah
menerapkan sistem pembagian kerja yang standar.
Berikut gambar struktur organisasi Toko Cahaya Barokah Pabuaran :
buaran
Sumber : Toko Cahaya Barokah Pabuaran
Gambar III.1
Stuktur Organisasi Toko Cahaya Barokah Pabuaran
Untuk melengkapi struktur organisasi suatu perusahaan, diperlikan uraian
tugas yang akan menjelaskan tentang wewenang dan tanggung jawab masing-masing
fungsi dalam perusahaan. Uraian jabatan pada Toko Cahaya Barokah Pabuaran adalah
sebagai berikut :
1. Tanggung jawab Pemilik Toko
a. Bertanggung jawab atas kelancaran toko
b. Bertanggung jawab atas harga, kualitas, kuantitas, dan kountinuitas barang
c. Bertanggung jawab atas mengatur gaji karyawan
Tugas Pemilik toko
a. Mengontrol kinerja perusahaan
Pemilik
Bagian Gudang Bagian Pembelian Bagian Keuangan
30
2. Tugas Bagian Gudang
a. Cek PO (Purchase Orer) dan Faktur
Cek penerimaan barang yang memenuhi kualitas, kuantitas, dan kadarluarsa.
b. Mengatur jumlah barang yang akan dipajang atau disimpan di gudang.
c. Mengeluarkan barang ke toko jika barang di toko telah terjual.
d. Mengamankan barang, menjaga kebersihan gudang
3. Tugas Bagian Pembelian
a. Bertanggung jawab atas penerimaan barang
b. Bertanggung jawab atas Quality Barang
c. Bertanggung jawab atas order mingguan/ bulanan (periodik)
d. Bertanggung jawab atas schedule supplier
4. Tugas Bagian Keuangan
a. Bertanggung jawab atas memeriksa keaslian dan kelengkapan dokumen tagihan
b. Bertanggung jawab serta mengatur pemasukan dan pengeluaran keuangan
c. Bertanggung jawab atas menyusun bukti-bukti laporan secara baik dan benar
d. Bertanggung jawab atas menetapkan prosedur pelaksanaan secara rinci tentang
keuangan
3.2. Tinjauan Kasus
Tahapan-tahapan kegiatan yang dilakukan oleh perusahaan dalam melakukan
aktifitas dan rutinitas dari Toko Cahaya Barokah dengan prosedur sistem berjalan.
Adapun prosedur sistem berjalan untuk pembelian barang dagang secara tunai
yang diterapkan pada Toko Cahaya Barokah terdiri dari :
31
3.2.1 Proses Bisnis Sistem Berjalan
1. Prosedur Pengecekan Dan Pemesanan
Bagian gudang melakukan pengecekkan terhadap barang yang kosong jika barang
yang disimpan tidak ada maka bagian gudang akan mencatat dalam nota pesanan
kemudian nota tersebut diserahkan kepada pemilik toko setelah nota pesanan
diterima pemilik toko melakukan pesanan kepada sales kemudian sales menerima
nota pesanan
2. Prosedur Penerimaan Dan Pembayaran
Setelah sales menerima nota pesanan kemudian sales menyiapkan barang beserta
surat jalan dan faktur pembelian sebanyak 2(dua) rangkap kemudian diserahkan
kebagian pengiriman untuk diserahkan kepada bagian gudang setelah menerima
barang bagian gudang mengecek barang beserta barang dengan faktur dan surat
jalan jika ada barang yang tidak sesuai bagian gudang akan melingkari faktur dan
surat jalan dan mengembalikan barang kepada bagian pengiriman untuk nantinya
dikirimkan kembali barang yang sesuai, jika barang dan faktur sesuai maka bagian
gudang menyerahkan faktur dan suarat jalan 2(dua) rangkap kepada pemilik toko.
Setelah itu pemilik toko mendatangani faktur dan surat jalan 2(dua) rangkap dan
melakukan pembayaran secara tunai. Kemudian bagian pengirim menyerahkan
faktur dan surat jalan rangkap 1(satu) kepada pemilik sedangkan salinnannya
dibawa kembali kepada pemilik.
3. Prosedur Laporan
Setelah itu bagian gudang melihat laporan barang masuk di gudang untuk
melakukan pencatatan berdasarkan penerimaan dan pengeluaran barang dicatat
didalam buku stok barang.
34
Gambar III.4. Laporan
3.2.3 Spesifikasi Dokumen Masukan
A. Spesifikasi Dokumen Masukan
1. Nama Dokumen : Buku Stok Barang
Fungsi : Untuk Mengetahui Barang Yang Kosong
Sumber : Karyawan
Tujuan : Pemilik Toko
Media : Buku Besar
Jumlah : 1 Lembar
Bentuk : Lampiran A.1
35
2. Nama Dokumen : Faktur Penjualan Rangkap 2
Fungsi : Bukti Pembayaran
Sumber : Karyawan
Tujuan : Pemilik Toko
Media : Kertas Faktur
Jumlah : 2 Lembar
Frekuensi : Setiap Transaksi Pembayaran
Bentuk : Lampiran A.2
3. Nama Dokumen : Surat Jalan Rangkap 1
Fungsi : Bukti Pembayaran
Sumber : Karyawan
Tujuan : Pemilik Toko
Media : Kertas Surat Jalan
Jumlah : 1 Lembar
Frekuensi : Setiap Transaksi Pembayaran
Bentuk : Lampiran A.3
3.2.4. Spesifikasi Dokumen Keluaran
B. Spesifikasi Dokumen Keluaran
1. Nama Dokumen : Nota Pesanan
Fungsi : Pesan Barang
Sumber : Karyawan
Tujuan : Konsumen
Media : Kertas
36
Jumlah : 1 Lembar
Frekuensi : Setiap Konsumen melakukan pembayaran
Bentuk : Lampiran B.1
3.2.5 Permasalahan Pokok
Bentuk sistem yang baik akan sangat dibutuhkan dalam organisasi apapun,sehingga
usaha-usaha yang dioprasikan sesuai dengan keinginan yang diharapkan,akan tetapi
perlu disadari bawa dengan adanya perkembangan zaman yang sedemikian pesat yang
mengakibatkan semua ketentuan dan cara pengolahan bentuk usaha harus dapat sesuai
dan pengaturan aktivitas yang baik sering timbul berbagai masalah. Melihat dari
semua proses yang terjadi, ada beberapa masalah yang dihadapi di Toko Cahaya
Barokah dalam sistem pembelian barang dagang secara tunai . Adapun permasalahan
tersebut diantaranya:
a. Tidak adanya penggunaan program dalam mengelola data terutama dalam
menghitung pembelian sehingga sering terjadi kesalahan penghitungan.
b. Adanya keterlambatan informasi dalam pembuatan laporan sehingga untuk
penyajian data memelukan waktu yang lama (tidak efisien).
c. Menyimpan arsip atau dokumen secara manual lebih banyak resiko, karena
kemungkinan ada arsip atau dokumen yang hilang atau rusak.
3.2.6. Pemecahan Masalah
Untuk mengatasi pemasalahan tersebut, maka penulis memberikan alternatif
pemecahan masalah yaitu berupa sistem yang sudah terkomputerisasi. Sistem yang
sudah terkomputerisasi tersebut mempunyai kelebihan diantaranya:
37
a. Dibuatkannya suatu sistem komputerisasi sehingga dalam pencatatan yang
dilakukan akan lebih cepat dan akurat.
b. Dalam pembuatan laporan lebih efektif dan kesalahan nilai kemungkinan sangat
kecil karena penggunaan media komputer sebagai alat bantu dalam pemprosesan data
sehingga dapat diperoleh informasi yang lebih cepat, tepat dan akurat.
c. Penyimpanan data tidak hanya dilakukan dengan di arsipkan dalam bentuk kertas,
dapat juga dalam bentuk disket dan harddisk.
3.3. Analisis Kebutuhan Software
Analisis kebutuhan software untuk program pembelian barang dagang secara tunai
di toko cahaya barokah, Diusulkan dengan prosedur diantaranya.
3.3.1. Analisis Kebutuhan
Analisis kebutuhan software untuk program pembelian barang dagang secara tunai
di toko cahaya barokah, Diusulkan dengan prosedur diantaranya :
A. Halaman Admin
A.1 Admin dapat melakukan login pada form login
A.2 Admin dapat mengelola pembelian
A.3 Admin dapat mengelola data barang
A.4 Admin dapat mengelola data supplier
A.5 Admin dapat mengelola jurnal
A.6 Admin dapat mengelola data laporan
B. Halaman Pemilik
B.1 Bagian keuangan dapat login pada form login
B.2 Bagian keuangan dapat mengakses laporan
38
3.3.2. Use Case Diagram
A.1. Use Case Diagram Dalam Bentuk Login
Gambar III.5
Use Case Diagram Login
Tabel III.1 Deskripsi Use case Halaman Login
Use Case Narative Halaman Admin
Tujuan Admin dapat melihat data yang ada di dalam
sistem halaman admin
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman admin yang di dalamnya ada data
mengelola pembelian, mengelola data barang,
mengelola data supplier, mengelola jurnal,
mengelola laporan.
39
A.2. Use Case Diagram Dalam Bentuk Mengelola Pembelian
Gambar III.6
Use Case Diagram Mengelola Data Pembelian
Tabel III.2 Deskripsi Use case Halaman Mengelola Pembelian
Use Case Narative Halaman Admin
Tujuan Admin dapat melihat data yang ada di dalam
sistem halaman mengelola pembelian
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman mengelola pembelian dan mencatat
semua data yang mengelola pembelian.
40
A.3. Use Case Diagram Bentuk Mengelola Data Barang
Gambar III.7
Use Case Diagram Data Barang
Tabel III.3 Deskripsi Use case Halaman Mengelola Data Barang
Use Case Narative Halaman Admin
Tujuan Admin dapat melihat data yang ada di dalam
sistem halaman mengelola data barang
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman mengelola data barang.
41
A.4. Use Case Diagram Dalam Bentuk Mengelola Data Supplier
Gambar III.8
Use Case Diagram Data Supplier
Tabel III.4 Deskripsi Use case Halaman Mengelola Data Supplier
Use Case Narative Halaman Admin
Tujuan Admin dapat melihat data yang ada di dalam
sistem halaman mengelola data supplier
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman mengelola data supplier mencatat semua
data supplier.
42
A.5 Use Case Diagram Dalam Mengelola Jurnal
Gambar III.9
Use Case Diagram Jurnal
Tabel III.5 Deskripsi Use case Halaman Mengelola Jurnal
Use Case Narative Halaman Admin
Tujuan Admin dapat melihat data yang ada di dalam
sistem halaman mengelola jurnal
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman mengelola jurnal dan memasukkan
semua data jurnal yang ada.
43
A.6 Use Case Diagram Dalam Mengelola data Laporan
Gambar III.10
Use Case Diagram Laporan
Tabel III.6 Deskripsi Use case Halaman Mengelola Laporan
Use Case Narative Halaman Admin
Tujuan Admin dapat melihat data yang ada di dalam
sistem halaman mengelola laporan
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman mengelola laporan untuk mengecek
semua data laporan yang ada didalam sistem.
44
B.1 Use Case Diagram Dalam Mengelola data Login
Gambar III.11
Use Case Diagram Login
Tabel III.7 Deskripsi Use case Halaman Login
Use Case Narative Halaman Pemilik
Tujuan Pemilik dapat melihat data yang ada di dalam
sistem halaman pemilik
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman pemilik yang di dalamnya ada data
mengakses data laporan.
45
B.2 Use Case Diagram Dalam Mengakses Laporan
Gambar III.12
Use Case Diagram Mengakses Laporan
Tabel III.8 Deskripsi Use case Halaman Mengakses Laporan
Use Case Narative Halaman Admin
Tujuan Pemilik dapat melihat data yang ada di dalam
sistem halaman mengakses laporan
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke
halaman mengakses laporan dan mengecek
semua data laporan yang masuk ke dalam sistem.
46
Tabel III.9 Skenario utama Admin
Skenario Utama
Aktor Admin
Kondisi awal Aktor membuka aplikasi halaman admin
Aksi Aktor Reaksi Sistem
1. Aktor memilih
mengelola Pembelian
2. Aktor memilih
mengelola data barang
3. Aktor memilih
mengelola data supplier
4. Aktor memilih
mengelola jurnal
5. Aktor memilih
mengelola laporan
Sistem ini akan menampilakn informasi mengelola
pembelian
Sistem ini akan menampilkan informasi mengelola
data barang
Sistem ini akan menampilkan informasi mengelola
data supplier
Sistem ini akan menampilakan informasi mengelola
jurnal
Sistem ini akan menampilkan informasi mengelola
laporan
Kondisi akhir Jika perintah sesuai maka sistem akan menampilkan
apa yang di inginkan
47
Tabel III.10 Skenario Utama Pemilik
Skenario Utama
Aktor Pemilik
Kondisi awal Aktor membuka aplikasi halaman pemilik
Aksi Aktor Reaksi Sistem
1. Aktor memilih
Mengakses Laporan
Sistem ini akan menampilakan informasi mengakses
laporan
Kondisi Akhir Jika perintah sesuai maka sistem akan menampilkan apa
yang di inginkan
51
A.5. Activity Diagram Mengelola Data Supplier
Gambar III.16
Activity Diagram Mengelola Data Supplier
56
3.4. Desain
3.4.1 Entity Relationship Diagram (ERD)
Gambar III.21
Entity Relationship Diagram (ERD)
Melakukan
Supplier
Kode supplier
Nama supplier
Alamat
No telepon
Memiliki
Pembelian
Id pengguna
No pembelian
Tanggal
pembelianKode supplier
Total pembelian
Memiliki
Detail pembelian
No pembelian
Kode barang
Jumlah pembelian
Harga
Memiliki
Barang
Nama Barang
Kode barang
Satuan
Satuan Konversi
Harga
Jumlah barang
Jumlah konversi
Total jumlah
MelakukanPengguna
Id pengguna
Nama pengguna
Password
Hak akses
Jurnal
Id pengguna
No jurnal
Tanggal jurnal
Keterangan
Memiliki
Jurnal detail
No jurnal
Kode akun
DebetKredit
MembuatPerkiraan
Nama akun
Kode akun
Jenis akun
Saldo normal
1
M
1
1
11
1
M
M
1
1
M
1M
57
3.4.2. Logical Record Structure (LRS)
Gambar III.22
Logical Record Structure (LRS)
Pengguna
*id_pengguna
nama_pengguna
Password
hak_akses
Jurnal
*no_jurnal
tgl_jurnal
keterangan
id_pengguna
Detail_jurnal
*no_jurnal
kode_akun
debet
kredit
Pembelian
*no_pembelian
tgl_pembelian
kode_supplier
total_pembelian
*id_pengguna
Supplier
*kode_supplier
nama_supplier
alamat_supplier
no_tlpDetail_pembelian
*no_pembelian
kode_pembelian
jml_pembelian
harga
Barang
*kode_barang
nama_brg
jml_brg
Satuan
jml_konversi
satuan_konversi
Harga
total_jml
Perkiraan
*kode_akun
nama_akun
jenis_akun
saldo_normal
1
1
1
1
M
1
M
1
M
1
M
M
1
1
58
3.4.3. Spesifikasi File
a. Spesifikasi File Data Login
Nama Database : Pengguna
Nama File : Pengguna
Tipe File : Master
Akses File : Random
Panjang Record : 90 Karakter
Field Key : Id_pengguna
Tabel III.11
Spesifikasi File Login
No Nama Field Tipe Size Ket
1. id_pengguna Char 10 Primary key
2. nama_pengguna Varchar 35
3. Username Char 10
4. Password Varchar 35
b. Spesifikasi File Data Pembelian
Nama Database : Pembelian
Nama File : Pembelian
Tipe File : Transaksi
Akses File : Random
Penjang Record : 35 Karakter
Field key : No_pembelian
Tabel III.12
Spesipikasi File Pembelian
No Nama Field Tipe Size Ket
1. No pembelian Char 10 Primary key
2. Id pengguna Char 10
3. Kode supplier Char 5
4. Tanggal pembelian Date
5. Total pembelian Int 10
59
c. Spesifikasi File Data Detail Pembelian
Nama Database : Detail Pembelian
Nama File : Detail Pembelian
Tipe File : Transaksi
Akses File : Random
Penjang Record : 22 Karakter
Field key : -
Tabel III.13
Spesifikasi File Detail Pembelian
No Nama Field Tipe Size Ket
1. No pembelian Char 10 Primary key
2. Kode barang Char 8
3. Jumlah pembelian Int 4
4. Harga Double
d. Spesifikasi File Data Barang
Nama Database : Barang
Nama File : Barang
Tipe File : Master
Akses File : Random
Penjang Record : 78 Karakter
Field key : Kode_barang
60
Tabel III.14
Spesifikasi File Data Barang
No Nama Field Tipe Size Ket
1. Nama barang Varchar 35 Primary key
2. Kode barang Char 8
3. Jumlah barang Int 5
4. Harga Int 10
5. Satuan Varchar 5
6. Satuan koversi Varchar 5
7. Harga Int 10
8. Total jumlah Int 6
e. Spesifikasi File Data Supplier
Nama Database : Supplier
Nama File : Supplier
Tipe File : Master
Akses File : Random
Penjang Record : 153 Karakter
Field key : Kode_supplier
Tabel III.15
Spesifikasi File Data Supplier
No Nama Field Tipe Size Ket
1. Nama Supplier Char 5 Primary key
2. Kode supplier Varchar 35
3. Alamat supplier Varchar 100
4. No telepon Varchar 13
f. Spesifikasi File Data Jurnal
Nama Database : Jurnal
Nama File : Jurnal
Tipe File : Transaksi
Akses File : Random
Penjang Record : 117 Karakter
61
Field key : No_jurnal
Tabel III.16
Spesifikasi File Jurnal
No Nama Field Tipe Size Ket
1. No jurnal Char 7 Primary key
2. Id pengguna Char 10
3. Tanggal jurnal Date
4. Keterangan Varchar 100
g. Spesifikasi File Data Detail Jurnal
Nama Database : Detail Jurnal
Nama File : Detail Jurnal
Tipe File : Transaksi
Akses File : Random
Penjang Record : 32 Karakter
Field key : -
Tabel III.17
Spesifikasi File Jurnal Detail
No Nama Field Tipe Size Ket
1. No jurnal Char 7 Primary key
2. Kode akun Char 5
3. Debet Int 10
4. Kredit Int 10
h. Spesifikasi File Data Perkiraan
Nama Database : Perkiraan
Nama File : Perkiraan
Tipe File : Master
Akses File : Random
62
Penjang Record : 71 Karakter
Field key : Kode_akun
Tabel III.18
Spesifikasi File Perkiraan
No Nama Field Tipe Size Ket
1. Kode akun Char 5 Primary key
2. Nama akun Varchar 35
3. Jenis akun Varchar 25
4. Saldo normal Varchar 6
3.4.4. Sequence Diagram
A.1 Sequence Diagram Login Admin
Gambar III. 23
Sequence Diagram Login
65
B.1 Sequence Diagram Login Pemilik
Gambar III. 26
Sequence Diagram Login
B.2 Sequence Diagram Mengakses Laporan
Gambar III.27
Sequence Diagram Mengakses Laporan
66
3.4.5. Deployment Diagram
Gambar III .28
Deployment Diagram
3.4.6. User Interface
Gambar III.29
User Interface Form Login
70
Gambar III.36
User Interface Form Pembelian Barang
Gambar III.37
User Interface Pembelian Barang Disimpan
73
Gambar III.42
User Interface Form Stok Barang
Gambar III.43
User Interface Data Laporan Pembelian
74
Gambar III.44
User Interface Laporan Pembelian Dilihat
Gambar III.45
User Interface Laporan Jurnal
75
Gambar III.46
User Interface Laporan Jurnal Dilihat
Gambar III.47
User Interface Form Login Pemilik
76
3.5 Implementasi
3.5.1. Code Generation
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package form;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ListIterator;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import model.Barang;
import model.DetailPembelian;
import model.Pembelian;
import model.Supplier;
import cahayabarokah.CahayaBarokah;
/**
*
* @author ucill
*/
public class FormPembelian extends javax.swing.JFrame {
/**
* Creates new form FormPembelian
*/
String KodeBarang = "";
String Status = "";
int row = -1;
Barang barang = new Barang();
Pembelian pembelian = new Pembelian();
DetailPembelian detailPembelian = new DetailPembelian();
Supplier supplier = new Supplier();
77
DefaultComboBoxModel tm1 = null;
DefaultTableModel model, modelData;
TableColumn cKode, cJumlah;
JTextField textKode = new JTextField();
JTextField textJumlah = new JTextField();
NumberFormat nf = new DecimalFormat("#");
public FormPembelian() {
initComponents();
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
int x, y;
x = (int) ((d.getWidth() - getSize().width) / 2);
y = (int) ((d.getHeight() - getSize().height) / 2);
tm1 = (DefaultComboBoxModel) tsupplier.getModel();
setLocation(x, y);
model = (DefaultTableModel) tbldetail.getModel();
modelData = (DefaultTableModel) tbldata.getModel();
textKode.setFont(new Font("BellGothic BT", 0, 16));
textJumlah.setFont(new Font("BellGothic BT", 0, 16));
tbldetail.getTableHeader().setFont(new Font("BellGothic BT", 1, 16));
tbldetail.setRowHeight(30);
tbldata.getTableHeader().setFont(new Font("BellGothic BT", 1, 16));
tbldata.setRowHeight(30);
cKode = (TableColumn) tbldetail.getColumnModel().getColumn(0);
cJumlah = (TableColumn) tbldetail.getColumnModel().getColumn(2);
cKode.setCellEditor(new DefaultCellEditor(textKode));
cJumlah.setCellEditor(new DefaultCellEditor(textJumlah));
textKode.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
row = tbldetail.getSelectedRow();
textKode.setText(textKode.getText().toUpperCase());
if (!"".equals(textKode.getText())) {
getDataBarang(textKode.getText(), row);
for (int i = 0; i < model.getRowCount() - 1; i++) {
String kode = model.getValueAt(i, 0).toString();
if (kode.equalsIgnoreCase(textKode.getText()) && row != i) {
78
model.setValueAt(null, row, 0);
model.setValueAt(null, row, 1);
model.setValueAt(null, row, 2);
model.setValueAt(null, row, 3);
model.setValueAt(null, row, 4);
textKode.setText(null);
JOptionPane.showMessageDialog(rootPane, "Data sudah ada!", "Info",
JOptionPane.ERROR_MESSAGE);
break;
}
}
}
}
if (e.getKeyCode() == KeyEvent.VK_F1) {
textKode.setText(new FormCariBarang(null, true).cariBarang());
row = tbldetail.getSelectedRow();
textKode.setText(textKode.getText().toUpperCase());
if (!"".equals(textKode.getText())) {
getDataBarang(textKode.getText(), row);
for (int i = 0; i < model.getRowCount() - 1; i++) {
String kode = model.getValueAt(i, 0).toString();
if (kode.equalsIgnoreCase(textKode.getText()) && row != i) {
model.setValueAt(null, row, 0);
model.setValueAt(null, row, 1);
model.setValueAt(null, row, 2);
model.setValueAt(null, row, 3);
model.setValueAt(null, row, 4);
textKode.setText(null);
JOptionPane.showMessageDialog(rootPane, "Data sudah ada!", "Info",
JOptionPane.ERROR_MESSAGE);
break;
}
}
}
}
}
});
textJumlah.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
if (!Character.isDigit(e.getKeyChar()) && e.getKeyChar() !=
KeyEvent.VK_BACK_SPACE && e.getKeyChar() != KeyEvent.VK_DELETE) {
textJumlah.setEditable(false);
JOptionPane.showMessageDialog(rootPane, "Input hanya boleh berupa angka!",
"Error", JOptionPane.ERROR_MESSAGE);
} else {
textJumlah.setEditable(true);
//getDataBarang(model.getValueAt(row, 0).toString(), row);
79
}
if (textJumlah.getText().equals("")) {
textJumlah.setText("0");
}
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
try {
if (!"".equals(model.getValueAt(row, 1).toString())) {
int jumlah = Integer.parseInt(textJumlah.getText());
model.setValueAt(barang.getHarga() * jumlah, row, 4);
hitungTotal();
}
} catch (Exception ex) {
}
}
}
});
tbldetail.setSelectionBackground(Color.lightGray);
aktif();
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date dt = new java.util.Date();
ttanggal.setText(df.format(dt));
daftarSupplier();
tabs.setSelectedIndex(1);
ttotal.setText("");
daftarPembelian();
aktif();
}
private void aktif() {
bbatal.setEnabled(!"".equals(Status));
bsimpan.setEnabled(!"".equals(Status));
btambah.setEnabled("".equals(Status));
tabs.setEnabledAt(0, !"".equals(Status));
tabs.setEnabledAt(1, "".equals(Status));
}
private void bersihForm() {
tsupplier.setSelectedItem("");
tno.setText("");
ttotal.setText("");
model.setRowCount(0);
tbldetail.repaint();
80
}
private void hitungTotal() {
double total = 0;
for (int i = 0; i < model.getRowCount(); i++) {
// total + = (double) model.getValueAt(i, 4);
try {
total += Double.parseDouble(model.getValueAt(i, 4).toString());
} catch (Exception ex) {
}
}
ttotal.setText(nf.format(total));
}
private void daftarSupplier() {
List<Supplier> listSupplier = supplier.daftarSupplier();
ListIterator li = listSupplier.listIterator();
tm1.removeAllElements();
tsupplier.addItem("");
while (li.hasNext()) {
Supplier pny = (Supplier) li.next();
tsupplier.addItem(pny.getKode_supplier() + "-" + pny.getNama_supplier());
}
}
private void getDataBarang(String kode, int row) {
barang = barang.cariKodeBarang(kode);
if (barang.getNama_brg() == null) {
JOptionPane.showMessageDialog(rootPane, "Data barang yang anda cari tidak ada!",
"Error", JOptionPane.ERROR_MESSAGE);
model.setValueAt(null, row, 0);
model.setValueAt(null, row, 1);
model.setValueAt(null, row, 2);
model.setValueAt(null, row, 3);
model.setValueAt(null, row, 4);
} else {
model.setValueAt(kode.toUpperCase(), row, 0);
model.setValueAt(barang.getNama_brg(), row, 1);
model.setValueAt(1, row, 2);
model.setValueAt(barang.getHarga(), row, 3);
try {
int jumlah = Integer.parseInt(model.getValueAt(row, 2).toString());
model.setValueAt(barang.getHarga() * jumlah, row, 4);
} catch (Exception ex) {
}
}
hitungTotal();
}
private void daftarPembelian(){
List<Pembelian> lp = pembelian.daftarPembelian();
81
ListIterator li = lp.listIterator();
modelData.setRowCount(0);
tbldata.repaint();
while(li.hasNext()){
pembelian = (Pembelian) li.next();
supplier = supplier.cariKodeSupplier(pembelian.getKode_supplier());
Object[] data = {
pembelian.getNo_pembelian(),
pembelian.getTgl_pembelian(),
supplier.getNama_supplier(),
pembelian.getTotal_pembelian()
};
modelData.addRow(data);
}
}
private void daftarPembelian(Date tgl1, Date tgl2){
List<Pembelian> lp = pembelian.cariPembelianPeriode(new
java.sql.Date(tgl1.getTime()), new java.sql.Date(tgl2.getTime()));
ListIterator li = lp.listIterator();
modelData.setRowCount(0);
tbldata.repaint();
while(li.hasNext()){
pembelian = (Pembelian) li.next();
supplier = supplier.cariKodeSupplier(pembelian.getKode_supplier());
Object[] data = {
pembelian.getNo_pembelian(),
pembelian.getTgl_pembelian(),
supplier.getNama_supplier(),
pembelian.getTotal_pembelian()
};
modelData.addRow(data);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jTextField8 = new javax.swing.JTextField();
jDateChooser2 = new com.toedter.calendar.JDateChooser();
tabs = new javax.swing.JTabbedPane();
jPanel2 = new javax.swing.JPanel();
jLabel7 = new javax.swing.JLabel();
82
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
tsupplier = new javax.swing.JComboBox<>();
jScrollPane2 = new javax.swing.JScrollPane();
tbldetail = new javax.swing.JTable();
tno = new javax.swing.JTextField();
ttanggal = new javax.swing.JTextField();
ttotal = new javax.swing.JTextField();
jLabel13 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jPanel1 = new javax.swing.JPanel();
jLabel12 = new javax.swing.JLabel();
bcari = new javax.swing.JButton();
jScrollPane3 = new javax.swing.JScrollPane();
tbldata = new javax.swing.JTable();
tgl1 = new com.toedter.calendar.JDateChooser();
tgl2 = new com.toedter.calendar.JDateChooser();
btutup = new javax.swing.JButton();
bbatal = new javax.swing.JButton();
bsimpan = new javax.swing.JButton();
btambah = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
jPanel4 = new javax.swing.JPanel();
jLabel14 = new javax.swing.JLabel();
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
jTextField8.setText("jTextField8");
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
tabs.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
jLabel7.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
jLabel7.setText("No Pembelian");
jLabel8.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
jLabel8.setText("Tanggal Pembelian");
jLabel9.setFont(new java.awt.Font("BellGothic BT", 0, 24)); // NOI18N
jLabel9.setText("Total Pembelian");
83
jLabel10.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
jLabel10.setText("Kode Supplier");
tsupplier.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
tsupplier.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item
1", "Item 2", "Item 3", "Item 4" }));
tbldetail.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
tbldetail.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Kode Barang", "Nama Barang", "Jumlah Beli", "Harga Barang", "Subtotal"
}
) {
boolean[] canEdit = new boolean [] {
true, false, true, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
tbldetail.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
tbldetailFocusGained(evt);
}
});
tbldetail.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tbldetailMouseClicked(evt);
}
});
tbldetail.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
tbldetailKeyPressed(evt);
}
});
jScrollPane2.setViewportView(tbldetail);
tno.setEditable(false);
tno.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
tno.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tnoActionPerformed(evt);
}
});
ttanggal.setEditable(false);
ttanggal.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
ttotal.setEditable(false);
ttotal.setFont(new java.awt.Font("BellGothic BT", 0, 36)); // NOI18N
84
ttotal.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
jLabel13.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
jLabel13.setText("Tekan [DEL] untuk hapus");
jLabel11.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
jLabel11.setText("Tekan [F1] untuk pencarian");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE,
926, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel2Layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jLabel9))
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addComponent(jLabel7)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addComponent(jLabel8,
javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel10)))
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addComponent(tno, javax.swing.GroupLayout.PREFERRED_SIZE,
124, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tsupplier,
javax.swing.GroupLayout.PREFERRED_SIZE, 307,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ttanggal,
javax.swing.GroupLayout.PREFERRED_SIZE, 167,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel11)
.addGap(27, 27, 27)
85
.addComponent(jLabel13)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(ttotal, javax.swing.GroupLayout.PREFERRED_SIZE, 353,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(20, 20, 20)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE
LINE)
.addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tno, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE
LINE)
.addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ttanggal, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE
LINE)
.addComponent(tsupplier, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(16, 16, 16)
.addComponent(jLabel9)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(28, 28, 28)
.addComponent(ttotal, javax.swing.GroupLayout.PREFERRED_SIZE, 49,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel2Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE
LINE)
86
.addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE,
30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE,
30, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(7, 7, 7)))
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 195,
Short.MAX_VALUE)
.addContainerGap())
);
tabs.addTab("Input Pembelian", jPanel2);
jLabel12.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
jLabel12.setText("Tanggal Transaksi");
bcari.setFont(new java.awt.Font("BellGothic BT", 0, 15)); // NOI18N
bcari.setText("Cari");
bcari.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bcariActionPerformed(evt);
}
});
tbldata.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
tbldata.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"No Pembelian", "Tanggal Pembelian", "Supplier", "Total Pembelian"
}
));
jScrollPane3.setViewportView(tbldata);
tgl1.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
tgl2.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE,
926, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jLabel12)
87
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(tgl1, javax.swing.GroupLayout.PREFERRED_SIZE, 123,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tgl2, javax.swing.GroupLayout.PREFERRED_SIZE, 123,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(bcari, javax.swing.GroupLayout.PREFERRED_SIZE, 81,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addComponent(tgl1, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tgl2, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(bcari, javax.swing.GroupLayout.PREFERRED_SIZE, 30,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 405,
Short.MAX_VALUE)
.addContainerGap())
);
tabs.addTab("Data Pembelian", jPanel1);
btutup.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
btutup.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/form/images/keluar.png"))); // NOI18N
btutup.setText("Tutup");
btutup.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btutupActionPerformed(evt);
}
});
bbatal.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
bbatal.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/form/images/batal.png"))); // NOI18N
bbatal.setText("Batal");
bbatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
88
bbatalActionPerformed(evt);
}
});
bsimpan.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
bsimpan.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/form/images/save.png"))); // NOI18N
bsimpan.setText("Simpan");
bsimpan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bsimpanActionPerformed(evt);
}
});
btambah.setFont(new java.awt.Font("BellGothic BT", 0, 16)); // NOI18N
btambah.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/form/images/tambah.png"))); // NOI18N
btambah.setText("Tambah");
btambah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btambahActionPerformed(evt);
}
});
jPanel4.setBackground(new java.awt.Color(255, 102, 0));
jLabel14.setFont(new java.awt.Font("BellGothic BT", 0, 48)); // NOI18N
jLabel14.setForeground(new java.awt.Color(255, 255, 255));
jLabel14.setText("Pembelian Barang");
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel4Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel14)
.addContainerGap())
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 60,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
89
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator1)
.addComponent(tabs)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addComponent(btambah, javax.swing.GroupLayout.PREFERRED_SIZE,
110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bsimpan, javax.swing.GroupLayout.PREFERRED_SIZE,
110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bbatal, javax.swing.GroupLayout.PREFERRED_SIZE, 110,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addComponent(btutup, javax.swing.GroupLayout.PREFERRED_SIZE, 110,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
.addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(21, 21, 21)
.addComponent(tabs)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(9, 9, 9)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btutup, javax.swing.GroupLayout.PREFERRED_SIZE, 45,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btambah, javax.swing.GroupLayout.PREFERRED_SIZE, 45,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(bsimpan, javax.swing.GroupLayout.PREFERRED_SIZE, 45,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(bbatal, javax.swing.GroupLayout.PREFERRED_SIZE, 45,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(14, 14, 14))
);
pack();
90
}// </editor-fold>
private void tnoActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void btutupActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
CahayaBarokah.showWindow(new FormBeranda(), CahayaBarokah.panel);
}
private void tbldetailKeyPressed(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
if (evt.getKeyCode() == KeyEvent.VK_DELETE) {
if (!"".equals(KodeBarang)) {
row = tbldetail.getSelectedRow();
model.removeRow(row);
tbldetail.repaint();
hitungTotal();
if (model.getRowCount() == 0) {
model.setRowCount(1);
}
}
}
if (evt.getKeyCode() == KeyEvent.VK_TAB) {
try {
double subtotal = Double.parseDouble(model.getValueAt(model.getRowCount() -
1, 4).toString());
if (subtotal > 0) {
model.setRowCount(model.getRowCount() + 1);
tbldetail.repaint();
}
} catch (Exception ex) {
}
}
if (evt.getKeyCode() == KeyEvent.VK_UP || evt.getKeyCode() ==
KeyEvent.VK_DOWN) {
System.out.println(row);
}
}
private void tbldetailMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
try {
row = tbldetail.getSelectedRow();
KodeBarang = (String) model.getValueAt(row, 0);
} catch (Exception e) {
}
}
private void bbatalActionPerformed(java.awt.event.ActionEvent evt) {
91
// TODO add your handling code here:
Status = "";
tno.setText("");
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date dt = new java.util.Date();
ttanggal.setText(df.format(dt));
tabs.setSelectedIndex(1);
bersihForm();
aktif();
}
private void btambahActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.Status = "Tambah";
bersihForm();
tno.setText(pembelian.noAuto());
aktif();
tabs.setSelectedIndex(0);
model.setRowCount(1);
}
private void bsimpanActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if ("".equals(tsupplier.getSelectedItem().toString())) {
JOptionPane.showMessageDialog(rootPane, "Supplier belum dipilih", "Galat",
JOptionPane.ERROR_MESSAGE);
return;
}
if (model.getRowCount() == 0 || "".equals(ttotal.getText()) ||
"0".equals(ttotal.getText())) {
JOptionPane.showMessageDialog(rootPane, "Belum ada barang yang dipilih",
"Galat", JOptionPane.ERROR_MESSAGE);
return;
}
pembelian.setNo_pembelian(tno.getText());
java.util.Date dt = new java.util.Date();
java.sql.Date sdate = new java.sql.Date(dt.getTime());
pembelian.setNo_pembelian(tno.getText());
pembelian.setTgl_pembelian(sdate);
String[] Sup = tsupplier.getSelectedItem().toString().split("-");
pembelian.setKode_supplier(Sup[0]);
pembelian.setTotal_pembelian(Double.parseDouble(ttotal.getText()));
pembelian.setId_pengguna(CahayaBarokah.id_pengguna);
pembelian.tambahPembelian();
for (int i = 0; i < model.getRowCount(); i++) {
try {
92
String Kode = (String) model.getValueAt(i, 0);
int Jumlah = Integer.parseInt(model.getValueAt(i, 2).toString());
double Harga = Double.parseDouble(model.getValueAt(i, 3).toString());
if (Jumlah * Harga > 0) {
detailPembelian.setNo_pembelian(tno.getText());
detailPembelian.setKode_brg(Kode);
detailPembelian.setJml_pembelian(Jumlah);
detailPembelian.setHarga(Harga);
detailPembelian.tambahDetailPembelian();
barang = barang.cariKodeBarang(Kode);
barang.setJml_brg(barang.getJml_brg()+Jumlah);
barang.setJml_konversi(barang.getJml_konversi() *
(barang.getJml_brg()+Jumlah));
barang.ubahBarang(Kode);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
tno.setText("");
tsupplier.setSelectedItem("");
model.getDataVector().removeAllElements();
tbldetail.repaint();
JOptionPane.showMessageDialog(rootPane, "Transaksi berhasil dilakukan", "Info",
JOptionPane.INFORMATION_MESSAGE);
tabs.setSelectedIndex(1);
Status = "";
aktif();
daftarPembelian();
}
private void tbldetailFocusGained(java.awt.event.FocusEvent evt) {
// TODO add your handling code here:
}
private void bcariActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(tgl1.getDate()==null || tgl2.getDate()==null){
daftarPembelian();
}else{
daftarPembelian(tgl1.getDate(), tgl2.getDate());
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
93
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and
feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Windows".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(FormPembelian.class.getName()).log(java.util.logging.L
evel.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(FormPembelian.class.getName()).log(java.util.logging.L
evel.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(FormPembelian.class.getName()).log(java.util.logging.L
evel.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(FormPembelian.class.getName()).log(java.util.logging.L
evel.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FormPembelian().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton bbatal;
private javax.swing.JButton bcari;
private javax.swing.JButton bsimpan;
private javax.swing.JButton btambah;
private javax.swing.JButton btutup;
private com.toedter.calendar.JDateChooser jDateChooser2;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
94
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField jTextField8;
private javax.swing.JTabbedPane tabs;
private javax.swing.JTable tbldata;
private javax.swing.JTable tbldetail;
private com.toedter.calendar.JDateChooser tgl1;
private com.toedter.calendar.JDateChooser tgl2;
private javax.swing.JTextField tno;
private javax.swing.JComboBox<String> tsupplier;
private javax.swing.JTextField ttanggal;
private javax.swing.JTextField ttotal;
// End of variables declaration
}
package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author sintia
*/
public class Pembelian {
private Connection Koneksi;
private String no_pembelian;
private Date tgl_pembelian;
private String kode_supplier;
private double total_pembelian;
private String id_pengguna;
private String PesanError;
public Pembelian() {
95
try {
Class.forName("com.mysql.jdbc.Driver");
Koneksi = DriverManager.getConnection("jdbc:mysql://localhost/cahaya_barokah?",
"root", "");
} catch (ClassNotFoundException | SQLException ex) {
this.PesanError = ex.getMessage();
System.out.println(this.PesanError);
}
}
public Connection getKoneksi() {
return Koneksi;
}
public void setKoneksi(Connection Koneksi) {
this.Koneksi = Koneksi;
}
public String getNo_pembelian() {
return no_pembelian;
}
public void setNo_pembelian(String no_pembelian) {
this.no_pembelian = no_pembelian;
}
public Date getTgl_pembelian() {
return tgl_pembelian;
}
public void setTgl_pembelian(Date tgl_pembelian) {
this.tgl_pembelian = tgl_pembelian;
}
public String getKode_supplier() {
return kode_supplier;
}
public void setKode_supplier(String kode_supplier) {
this.kode_supplier = kode_supplier;
}
public String getId_pengguna() {
return id_pengguna;
}
public void setId_pengguna(String id_pengguna) {
this.id_pengguna = id_pengguna;
}
public double getTotal_pembelian() {
return total_pembelian;
}
96
public void setTotal_pembelian(double total_pembelian) {
this.total_pembelian = total_pembelian;
}
public String getPesanError() {
return PesanError;
}
public List<Pembelian> daftarPembelian() {
try {
this.PesanError = "";
String Cmd = "SELECT * FROM pembelian";
List<Pembelian> lpb = new ArrayList();
Statement st = Koneksi.createStatement();
ResultSet rs = st.executeQuery(Cmd);
while (rs.next()) {
Pembelian pb = new Pembelian();
pb.setNo_pembelian(rs.getString("no_pembelian"));
pb.setTgl_pembelian(rs.getDate("tgl_pembelian"));
pb.setKode_supplier(rs.getString("kode_supplier"));
pb.setTotal_pembelian(rs.getDouble("total_pembelian"));
pb.setId_pengguna(rs.getString("id_pengguna"));
lpb.add(pb);
}
return lpb;
} catch (SQLException ex) {
this.PesanError = ex.getMessage();
return null;
}
}
public List<Pembelian> cariPembelianPeriode(Date tgl1, Date tgl2) {
try {
this.PesanError = "";
String Cmd = "SELECT * FROM pembelian WHERE tgl_pembelian BETWEEN ?
AND ?";
List<Pembelian> lpb = new ArrayList();
PreparedStatement ps = Koneksi.prepareStatement(Cmd);
ps.setDate(1, tgl1);
ps.setDate(2, tgl2);
ResultSet rs = ps.executeQuery();
Pembelian pb = new Pembelian();
while (rs.next()) {
pb.setNo_pembelian(rs.getString("no_pembelian"));
pb.setTgl_pembelian(rs.getDate("tgl_pembelian"));
pb.setKode_supplier(rs.getString("kode_supplier"));
pb.setTotal_pembelian(rs.getDouble("total_pembelian"));
97
pb.setId_pengguna(rs.getString("id_pengguna"));
lpb.add(pb);
}
return lpb;
} catch (SQLException ex) {
ex.printStackTrace();
this.PesanError = ex.getMessage();
return null;
}
}
public int tambahPembelian() {
try {
this.PesanError = "";
String Cmd = "INSERT INTO pembelian (no_pembelian, tgl_pembelian,
kode_supplier, total_pembelian, id_pengguna) VALUES (?,?,?,?,?)";
PreparedStatement ps = Koneksi.prepareStatement(Cmd);
ps.setString(1, this.no_pembelian);
ps.setDate(2, this.tgl_pembelian);
ps.setString(3, this.kode_supplier);
ps.setDouble(4, this.total_pembelian);
ps.setString(5, this.id_pengguna);
return ps.executeUpdate();
} catch (SQLException ex) {
this.PesanError = ex.getMessage();
System.out.println(this.PesanError);
return -1;
}
}
public int ubahStatusPembelian(String No, int status) {
try {
this.PesanError = "";
String Cmd = "UPDATE pembelian SET status_bayar=? WHERE no_pembelian=?";
PreparedStatement ps = Koneksi.prepareStatement(Cmd);
ps.setInt(1, status);
ps.setString(2, No);
return ps.executeUpdate();
} catch (SQLException ex) {
this.PesanError = ex.getMessage();
return -1;
}
}
public int hapusPembelian(String No) {
try {
this.PesanError = "";
String Cmd = "DELETE FROM pembelian WHERE no_pembelian=?";
PreparedStatement ps = Koneksi.prepareStatement(Cmd);
98
ps.setString(1, No);
return ps.executeUpdate();
} catch (SQLException ex) {
this.PesanError = ex.getMessage();
return -1;
}
}
public Pembelian cariNoPembelian(String No) {
this.PesanError = "";
try {
String Cmd = "SELECT * FROM pembelian WHERE no_pembelian=?";
PreparedStatement ps = Koneksi.prepareStatement(Cmd);
ps.setString(1, No);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
this.setNo_pembelian(rs.getString("no_pembelian"));
this.setTgl_pembelian(rs.getDate("tgl_pembelian"));
this.setKode_supplier(rs.getString("kode_supplier"));
this.setTotal_pembelian(rs.getDouble("total_pembelian"));
this.setId_pengguna(rs.getString("id_pengguna"));
} else {
this.setNo_pembelian(null);
this.setTgl_pembelian(null);
this.setKode_supplier(null);
this.setTotal_pembelian(0);
}
return this;
} catch (SQLException ex) {
ex.printStackTrace();
this.PesanError = ex.getMessage();
return null;
}
}
public String noAuto() {
try {
String Cmd = "SELECT * FROM pembelian ORDER BY
SUBSTR(no_pembelian,3,8) * 1 DESC LIMIT 1";
Statement st = Koneksi.createStatement();
ResultSet rs = st.executeQuery(Cmd);
if (rs.next()) {
String No = rs.getString("no_pembelian");
System.out.println(No);
No = No.substring(2, 7);
No = "PB" + String.format("%05d", Integer.parseInt(No) + 1);
return No;
} else {
return "PB00001";
100
3.5.2. Blackbox Testing
1. Form Login Admin
Tabel III.19
Hasil Pengujian Black Box Testing Form Login Admin
No Skenario
Pengujian
Test case Hasil yang
diharapkan
Hasil
pengujian
Kesimpulan
1. Nama user
dan password
tidak diisi
kemudian klik
tombol login
Nama user :
(kosong)
Password :
(kosong)
Sistem akan
menolak
akses dan
menampilkan
pesan “ Text
Box Harus
Diisi”
Sesuai
Harapan
Valid
2. Mengetikan
nama user
dan password
tidak diisi
atau kosong
kemudian klik
tombol login
Nama user :
(sintia.aja)
Password :
(kosong)
Sistem akan
menolak
akses dan
menampilkan
pesan “ Text
Box
Password
Harus Diisi”
Sesuai
Harapan
Valid
3. Nama user
tidak diisi
(kosong) dan
password diisi
kemudian klik
tombol login
Nama user :
(kosong)
Password :
(12345678)
Sistem akan
menolak
Akses dan
menampilkan
pesan
“Password
keliru”
Sesuai
Harapan
Valid
4. Mengetikan
salah atau
kondisi salah
pada Nama
atau Password
kemudian klik
tombol login
Nama user :
Sintia.aja
( benar)
Password :
admin (salah)
Sistem akan
menolak
akses akan
kembali
diarahkan ke
halaman
login dan
menampilkan
pesan “
Password
keliru ”
Sesuai
harapan
Valid
101
5. Mengetikan
Nama user
dan Password
dengan data
yang benar
kemudian klik
tombol login
Nama user :
Sintia.aja
(benar)
Password :
12345678
(benar)
Sistem akan
menerima
akses login
dan akan
menampilkan
“ Login
Berhasil !”
Sesuai
harapan
Valid
2.Form Pembelian
Tabel III.20
Hasil Pengujian Blackbox Testing Form Pembelian
No Skenario
Pengujian
Test Case Hasil yang
diharapkan
Hasil
Pengujian
Kesimpulan
1 Nama
pembelian
tidak diisi klik
oke
Nama
Pembelian
(Kosong)
Sistem akan
menolak dan
menampilkan
“ nama
pembelian
harus diisi ”
Sesuai
harapan
Valid
2 Data tidak
diisi klik
simpan
Nama
pembelian
(Kosong)
Jumlah
(Kosong)
Sistem akan
menolak dan
menampilkan
pesan “
terdapat input
yang kosong”
Sesuai
harapan
Valid
3 Nama barang
dan jumlah
diisi semua
klik simpan
Nama barang
(BR00003)J
Jumlah (20)
Sistem akan
menerima dan
menyimpan
data lalu
menampilkan
bukti
pembelian
Sesuai
harapan
Valid
102
4 Id barang dan
jumlah diisi
semua klik
simpan dan
cetak
Id barang
(BR00003)
Jumlah (20)
Total
pembelian
(2500)
Sistem akan
menerima dan
menyimpan
data lalu
menampilkan
bukti
pembelian
Sesuai
harapan
Valid
3.5.3. Spesifikasi Hardware dan Software
Tabel III.21
Spesifikasi Hardware dan Software
Kebutuhan Keterangan
Sistem Windows 10 64-bit
Processor Intel ®, @ 2,199 GHz
RAM 4.00 GB
Harddisk 5.00 GB
Monitor 14”LED
Printer Dot Matrix
Mouse Standard
Software
Kebutuhan menjalankan aplikasi secara local
Bahasa script programming : JAVA, NetBeans
Web Server : Apache 3.2.
DBSM : MySQL