BAB III PEMBAHASAN...28 BAB III PEMBAHASAN 3.1. Tinjauan Perusahaan Toko Cahaya Barokah merupakan...

75
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.

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.

32

3.2.2 Aktivity Diagram

Gambar III.2. Pengecekan Dan Pemesanan

33

Gambar III.3. Penerimaan Dan Pembayaran

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

48

3.3.3. Activity Diagram

A.1 Activity Diagram Login

Gambar III.13

Activity Diagram Login

49

A.2 Activity Diagram Mengelola Pembelian

Gambar III.14

Activity Diagram Pembelian

50

A.3. Activity Diagram Mengelola Data Barang

Gambar III.15

Activity Diagram Data Barang

51

A.5. Activity Diagram Mengelola Data Supplier

Gambar III.16

Activity Diagram Mengelola Data Supplier

52

A.6. Activity Diagram Mengelola Jurnal

Gambar III.17

Activity Diagram Mengelola Jurnal

53

A.7. Activity Diagram Mengelola Laporan

Gambar III.18

Activity Diagram Laporan

54

B.1 Activity Diagram Login

Gambar III.19

Activity Diagram Login

55

B.2. Activity Diagram Mengakses Laporan

Gambar III.20

Activity Diagram Mengakses Laporan

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

63

A.2 Sequence Diagram Pembelian

Gambar III.24

Sequence Diagram Pembelian

64

A.3. Sequence Diagram Laporan

Gambar III.25

Sequence Diagram Laporan

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

67

Gambar III.30

User Interface Form Login Salah

Gambar III.31

User Interface Form Beranda

68

Gambar III.32

User Interface Form Barang

Gambar III.33

User Interface Data Barang Disimpan

69

Gambar III.34

User Interface Form Supplier

Gambar III.35

User Interface Data Supplier Disimpan

70

Gambar III.36

User Interface Form Pembelian Barang

Gambar III.37

User Interface Pembelian Barang Disimpan

71

Gambar III.38

User Interface Form Perkiraan

Gambar III.39

User Interface Form Perkiraan Disimpan

72

Gambar III.40

User Interface Form Jurnal

Gambar III.41

User Interface Data Jurnal 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";

99

}

} catch (SQLException ex) {

this.PesanError = ex.getMessage();

return "";

}

}

}

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