25
BAB III
PEMBAHASAN
3.1. Tinjauan Perusahaan
Dalam pelaksanaan kegiatan rutin di PT. Sabang Mandiri Abadi terdapat
struktur organisasi yang menggambarkan fungsi-fungsi pelaksanaan tersebut.
Penulis akan menerangkan sejarah perusahaan dan struktur organisasi dalam
pembuatan tugas akhir ini.
3.1.1. Sejarah Perusahaan
PT. Sabang Mandiri Abadi berdiri pada tahun 2002 yang didirikan oleh
Bapak Onnes Kamil Kok yang beralamatkan di Jl. Palmerah Barat No.9, Jakarta
Barat. Perusahaan ini merupakan perusahaan yang bergerak dibidang distribusi
dalam penjualan produk sepatu, sandal, dan tas yang diberikan nama Fladeo yang
bisa ditemui di department store seperti Matahari Department Store dan juga
Ramayana Department Store.
Fladeo sendiri berfokus pada kepuasan konsumen terhadap kualitas barang
itu sendiri, yang hingga saat ini dapat bertahan dan berkembang dalam persaingan
dengan barang merk lainnya. Selain itu, fladeo juga menyediakan berbagai model
dan jenis sepatu dan sandal baik untuk dewasa maupun anak-anak dengan
berbagai pilihan warna dan model yang menarik untuk para konsumennya.
26
PT. Sabang Mandiri Abadi terus mengembangkan strategi untuk
memperkuat posisi sebagai pemimpin bisnis sepatu, sandal, dan tas di Indonesia,
dengan visi dan misi sebagai berikut.
Visi Perusahaan:
1. Memperbagus penampilan counter dengan membuka counter baru dan
merenovasi counter lama dengan konsep desain toko dan display terbaru untuk
menarik pembeli dan menambah penjualan.
2. Mempersiapkan strategi pemasaran yang matang untuk menyambut periode
back to school, lebaran, dan natal melalui promosi iklan.
3. Menjadikan perusahaan yang compatible, dipercaya, serta terdepan.
Misi Perusahaan:
1. PT. Sabang Mandiri Abadi berkomitmen memberikan yang terbaik melalui
kepemimpinan dan perbaikan terus-menerus dalam kegiatan perdagangan dan
berusaha meningkatkan penjualan.
2. Mengoptimalkan sumber daya manusia.
3. Memberikan pelayanan terbaik bagi semua konsumen.
Nomor SIUP PT. Sabang Mandiri Abadi Jakarta : 10462 - 03/ PK / 1.824.271
3.1.2. Struktur Organisasi dan Fungsi
Struktur organisasi menunjukkan kerangka dan susunan diantara fungsi-
fungsi, bagian atau posisi, maupun orang yang menunjukkan kedudukan, tugas,
wewenang, dan tanggung jawab yang berbeda dalam satu perusahaan. Adapun
struktur organisasi PT. Sabang Mandiri Abadi sebagai berikut :
27
KOMISARIS
DIREKTUR
UTAMA
DIREKTUR
MANAGER
PURCHASING
MANAGER
MARKETING
MANAGER
FINANCE
ADMIN PAJAK
BAGIAN
FINANCE
KEPALA GUDANG
BAGIAN
PURCHASING
BAGIAN
GUDANG
SUPERVISOR
KOORDINATOR
SPG/SPB
Gambar III.1
Struktur Organisasi PT.Sabang Mandiri Abadi
Adapun fungsi dari tiap-tiap bagian tersebut diuraikan sebagai berikut :
1. Komisaris
Bertanggung jawab dalam mengawasi jalannya perusahaan serta memberikan
masukan-masukan yang berguna bagi kemajuan perusahaan.
2. Direktur Utama
Bertanggung jawab memimpin perusahaan dan menjalankan perusahaan
dengan menerbitkan kebijakan-kebijakan perusahaan, dan memilih, menetapkan,
mengawasi tugas dari kepala bagian (manager) dan para karyawan.
28
3. Direktur
Direktur bertanggung jawab mengkoordinasikan dan mengawasi semua
kegiatan di perusahaan mulai dari bidang administrasi, kepegawaian hingga
pembelian, kualitas produk, persediaan dan penjualan barang
4. Manager Finance
a. Mengkoordinasi dan mengontrol perencanaan, pelaporan, serta
pembayaran kewajiban pajak perusahaan.
b. Mengelola fungsi akuntansi dalam memproses data dan informasi
keuangan untuk menghasilkan laporan keuangan yang dibutuhkan
perusahaan secara akurat.
5. Manager Purchasing
Bertugas mengevaluasi supplier, mereview kuliatas barang, dan melakukan
pengecekan untuk memastikan produk dari supplier terbaik dalam hal kualitas dan
jadwal pengiriman.
6. Manager Marketing
Bertanggung jawab melakukan perencanaan strategi pemasaran dengan
mengikuti perkembangan pasar, terutama terhadap produk yang sejenis dari
perusahaan pesaing.
7. Admin Pajak
Bertanggung jawab untuk mengatur segala sesuatu tang berkaitan dengan
perpajakan perusahaan.
29
8. Bagian Finance
Bertanggung jawab atas pembuatan laporan pembelian dan pembayaran tiap
supplier.
9. Kepala Gudang
Bertugas mengkoordinasi, mengontrol, dan mengevaluasi semua kegiatan
penerimaan, penyimpanan, dan persediaam stok barang yang akan didistribusikan.
10. Bagian Purchasing
Bagian purchasing bertanggung jawab atas pelaksanaan pembelian tunai
maupun kredit untuk kepentingan operasioanal dan mencatat semua kegiatan
pembelian.
11. Bagian Gudang
Bertugas menerima barang dan juga memeriksa barang yang dikirim supplier.
12. Supervisor
Supervisor memiliki tugas strategis karena langsung terjun di lapangan
melaksanakan semua rencana yang telah ditetapkan manager marketing.
13. Koordinator
Bertugas mengatur kinerja bawahannya (SPG/SPB) dan juga bertanggung
jawab atas toko atau counter (area penjualan).
30
14. SPG/SPB
Membantu supervisor dan koordinator dalam mengelola barang dagangan di
counter (area penjualan).
3.2. Tinjauan Kasus
Kemajuan teknologi yang cukup pesat ini, tentunya kebutuhan akan
informasi dan komunikasi sangat dibutuhkan dalam mengembangkan suatu
keputusan dalam hal bisnis. Dalam hal ini terdapat perusahaan yang gagal dalam
usahanya yang disebabkan oleh beberapa faktor salah satunya data yang tidak
terjaga kerahasiaannya karena tidak tertata dengan baik.
Oleh karena itu, penulis bermaksud untuk membuat suatu aplikasi sistem
yang dapat menyediakan informasi dengan tepat.
3.2.1. Proses Bisnis Sistem Berjalan
Adapun proses pembelian barang secara kredit pada PT. Sabang Mandiri
Abadi adalah sebagai berikut:
1. Proses pemesanan barang
Pada proses pemesanan barang, supplier datang membawa sample lalu bagian
purchasing menerima sample dan memilih sample yang akan dipesan dan
melakukan penawaran harga atas barang yang akan dipesan. Setelah itu bagian
purchasing membuat Purchase Order (PO) dengan jelas mengenai barang yang
akan dipesan, waktu pengiriman , harga yang telah disepakati, serta waktu
pembayaran yang telah disepakati dengan supplier dan setelah itu memberikan
PO ke direktur untuk di Acc, setelah direktur menerima PO dan meng Acc PO
31
tersebut kemudian PO yang sudah di ACC diserahkan ke supplier sebagai bukti
pemesanan pembelian barang dan dilampirkan saat ingin mengirim barang.
2. Proses penerimaan barang
Setelah menerima PO yang sudah di ACC lalu supplier mengirim barang,
kemudian bagian gudang menerima barang tersebut. Setelah itu bagian gudang
memeriksa kualitas barang tersebut dan apabila barang yang diterima sesuai
dengan yang dipesan maka bagian gudang mencatat ke daftar penerimaan
barang dan menandatangani Surat Jalan (SJ) dari supplier tersebut, sedangkan
apabila barang yang dikirim tidak sesuai dengan yang dipesan atau terdapat
cacat maka barang tersebut akan di retur ke supplier lalu supplier menerima
retur barang tersebut. Setelah itu, bagian gudang menyerahkan dokumen-
dokumen yang supplier lampirkan saat mengirim barang seperti Surat Jalan
(SJ) yang telah ditandatangani, faktur, dan PO untuk diserahkan ke bagian
finance.
3. Proses pembayaran
Setelah bagian finance menerima dokumen-dokumen tersebut, lalu bagian
finance membuat pelunasan pembayaran berdasarkan dokumen-dokumen
tersebut dan menyiapkan giro. Setelah selesai membuat pelunasan pembayaran
dan menyiapkan giro lalu bagian finance menginformasikan ke supplier untuk
mengambil pelunasan pembayaran dan giro. Setelah menerima informasi lalu
supplier datang membawa tanda terima atas total pembelian yang harus dibayar
dan diberikan ke bagian finance. Bagian finance menerima tanda terima lalu
tanda terima tersebut dicek dan disesuaikan dengan pelunasan pembayaran
yang telah dibuat. Kemudian bagian finance memberikan pelunasan
32
pembayaran dan giro ke supplier. Setelah supplier menerima pelunasan
pembayaran dan giro lalu supplier membuat kwitansi dan memberikan kwitansi
tersebut ke bagian finance.
4. Proses pembuatan laporan
Setelah selesai melakukan proses pembayaran, bagian finance membuat
laporan pembelian untuk diserahkan ke direktur.
3.2.2. Activity Diagram
Adapun activity diagram dari proses pembelian barang secara kredit pada
PT. Sabang Mandiri Abadi adalah sebagai berikut:
1. Activity Diagram Proses Pemesanan Barang
Gambar III.2
Activity Diagram Proses Pemesanan Barang
33
2. Activity Diagram Proses Penerimaan Barang
Gambar III.3
Activity Diagram Proses Penerimaan Barang
3. Activity Diagram Proses Pembayaran
Gambar III.4
Activity Diagram Proses Pembayaran
34
4. Activity Diagram Proses Pembuatan Laporan
Gambar: III.5
Activity Diagram Proses Pembuatan Laporan
3.2.3. Dokumen Masukan
Bentuk dokumen masukan (input) yang dibutuhkan dalam spesifikasi
sistem berjalan adalah :
1. Nama Dokumen : Purchase Order
Fungsi Dokumen : Sebagai bukti pemesanan barang
Sumber : Bagian purchasing
Tujuan : Supplier
Frekuensi : Setiap akan memesan barang
Media : Kertas
Jumlah : 4 rangkap
Format : Lihat lampiran A.1
2. Nama Dokumen : Invoice
Fungsi Dokumen : Sebagai bukti penagihan
Sumber : Supplier
35
Tujuan : Bagian gudang
Frekuensi : Setiap akan menagih pembayaran
Media : Kertas
Jumlah : Satu lembar
Format : Lihat lampiran A.2
3. Nama Dokumen : Surat Jalan
Fungsi Dokumen : Sebagai bukti pengiriman barang
Sumber : Supplier
Tujuan : Bagian gudang
Frekuensi : Setiap akan mengirimkan barang
Media : Kertas
Jumlah : Satu lembar
Format : Lihat lampiran A.3
4. Nama Dokumen : Tanda Terima
Fungsi Dokumen : Sebagai bukti penagihan
Sumber : Supplier
Tujuan : Bagian finance
Frekuensi : Setiap ada tagihan
Media : Kertas
Jumlah : Satu lembar
Format : Lihat lampiran A.4
5. Nama Dokumen : Daftar penerimaan barang
Fungsi Dokumen : Sebagai bukti penerimaan barang
Sumber : Bagian gudang
36
Tujuan : Bagian purchasing
Frekuensi : Setiap menerima barang dari supplier
Media : Kertas
Jumlah : Satu lembar
Format : Lihat lampiran A.5
3.2.4. Dokumen Keluaran
Bentuk dokumen keluaran (output) yang dibutuhkan dalam spesifikasi
sistem berjalan adalah :
1. Nama Dokumen : Pelunasan Pembayaran
Fungsi Dokumen : Sebagai bukti pelunasan pembayaran pembelian barang
Sumber : Bagian finance
Tujuan : Supplier
Frekuensi : Setiap pelunasan pembayaran atas pembelian barang
Media : Kertas
Jumlah : Satu lembar
Format : Lihat lampiran B.1
2. Nama Dokumen : Laporan Pembelian
Fungsi Dokumen : Sebagai laporan pembelian barang
Sumber : Bagian Finance
Tujuan : Direktur
Frekuensi : Setiap bulan
Media : Kertas
Jumlah : Satu lembar
Format : Lihat lampiran B.2
37
3.2.5. Permasalahan Pokok
Sistem pembelian barang secara kredit yang telah berjalan di PT. Sabang
Mandiri Abadi Jakarta umumnya telah berjalan dengan baik. Tetapi terkadang
timbul permasalahan yang dihadapi dalam proses pembelian barang secara kredit
tersebut. Adapun permasalahannya sebagai berikut:
1. Sistem pembelian barang secara kredit yang masih manual sering terjadi
kekeliruan atau kesalahan dalam pencatatan data pembelian dikarenakan
kurang teliti.
2. Dalam proses pengarsipan data masih dilakukan dengan cara manual mencatat
dibuku, sehingga butuh waktu lama untuk pencarian apabila data diperlukan.
3.2.6. Pemecahan Masalah
Dari permasalahan yang terjadi pada PT. Sabang Mandiri Abadi Jakarta
penulis mencoba memberikan alternatif pemecahan masalah sebagai berikut:
1. Perlu adanya perubahan dalam sistem agar lebih efektif dan efisien dalam
proses pembelian barang.
2. Mengubah sistem manual menjadi sistem yang terkomputerisasi sehingga
dalam pengarsipan data sampai pembuatan laporan pembelian akan lebih
akurat dan lebih cepat, sehingga mempermudah dalam proses pembelian
barang.
38
3.3. Analisis Kebutuhan Software
Analisa kebutuhan software sebagai langkah awal untuk menentukan
gambaran perangkat yang akan dihasilkan ketika membuat sebuah sistem
perangkat lunak.
Berdasarkan proses bisnis pembelian barang secara kredit pada PT. Sabang
Mandiri Abadi, proses selanjutnya adalah analisa kebutuhan dari sistem
pembelian barang secara kredit.
3.3.1. Analisis Kebutuhan
1. Analisa kebutuhan Bagian Purchasing
A.1. Bagian Purchasing dapat melakukan Login ke dalam sistem
A.2. Bagian Purchasing Mengelola Menu Utama
A.3. Bagian Purchasing Mengelola Menu Master
A.3.1. Bagian Purchasing Mengelola Form Data Supplier
A.3.2. Bagian Purchasing Mengelola Form Data Barang
A.3.3. Bagian Purchasing Mengelola Form Data User
A.4. Bagian Purchasing Mengelola Menu Transaksi
A.4.1. Bagian Purchasing Mengelola Form Purchase Order
A.4.2. Bagian Purchasing Mengelola Form Penerimaan Barang
A.5. Bagian Purchasing Mengelola Menu Laporan
A.5.1. Bagian Purchasing Mengelola Laporan Penerimaan Barang
A.6. Bagian Purchasing Mengelola Menu Utility
A.6.1. Bagian Purchasing Mengelola Form Backup Database
A.7. Bagian Purchasing dapat melakukan Logout
39
2. Analisa kebutuhan Bagian Finance
B.1. Bagian Finance dapat melakukan Login kedalam sistem
B.2. Bagian Finance Mengelola Menu Utama
B.3. Bagian Finance Mengelola Menu Master
B.3.1. Bagian Finance Mengelola Data Perkiraan
B.3.2. Bagian Finance Mengelola Data User
B.4. Bagian Finance Mengelola Menu Transaksi
B.4.1. Bagian Finance Mengelola Form Transaksi Pembelian
B.4.2. Bagian Finance Mengelola Form Pelunasan Pembayaran
B.4.3. Bagian Finance Mengelola Form Jurnal
B.5. Bagian Finance Mengelola Menu Laporan
B.5.1. Bagian Finance Mengelola Laporan Pembelian
B.5.3. Bagian Finance Mengelola Laporan Pengeluaran Kas
B.6. Bagian Finance Mengelola Menu Utility
B.6.1. Bagian Finance Mengelola Form Backup Database
B.7. Bagian Finance dapat melakukan Logout
40
3.3.2. Use Case Diagram
A. Use Case Diagram Bagian Purchasing
Gambar III.6
Use Case Diagram Bagian Purchasing
Tabel III.1 Deskripsi Use Case Diagram Bagian Purchasing
Use Case Narative Halaman Bagian Purchasing
Tujuan Bagian Purchasing dapat melihat data yang ada di dalam
sistem halaman Bagian Purchasing.
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke halaman
bagian purchasing yang di dalamnya ada data supplier, data
barang, data user, purchase order, penerimaan barang,
laporan penerimaan barang, backup database.
Skenario Utama
Aktor Bagian Purchasing
Kondisi Awal Aktor membuka aplikasi halaman bagian purchasing
41
Aksi Aktor Reaksi Sistem
1. Aktor memilih
data supplier
2. Aktor memilih
data barang
3. Aktor memilih
data user
4. Aktor memilih
purchase order
5. Aktor memilih
penerimaan
barang
6. Aktor memilih
laporan
penerimaan
barang
7. Aktor memilih
backup database
Sistem ini akan menampilkan informasi data supplier
Sistem ini akan menampilkan informasi data barang
Sistem ini akan menampilkan informasi data user
Sistem ini akan menampilkan informasi purchase order
Sistem ini akan menampilkan informasi penerimaan barang
Sistem ini akan menampilkan informasi laporan penerimaan
barang
Sistem ini akan menampilkan informasi backup database
Kondisi Akhir Jika perintah sesuai maka sistem akan menampilkan apa
yang di inginkan
B. Use Case Diagram Bagian Finance
Gambar III.7
Use Case Diagram Bagian Finance
42
Tabel III.2 Deskripsi Use Case Diagram Bagian Finance
Use Case Narative Halaman Bagian Finance
Tujuan Bagian Finance dapat melihat data yang ada di dalam sistem
halaman Bagian Finance.
Deskripsi Sistem ini memungkinkan aktor untuk masuk ke halaman
bagian finance yang di dalamnya ada data perkiraan, data
user, transaksi pembelian, pelunasan pembayaran, jurnal,
laporan pembelian, laporan pengeluaran kas, backup
database.
Skenario Utama
Aktor Bagian Finance
Kondisi Awal Aktor membuka aplikasi halaman bagian finance
Aksi Aktor Reaksi Sistem
1. Aktor memilih
data perkiraan
2. Aktor memilih
data user
3. Aktor memilih
transaksi
pembelian
4. Aktor memilih
pelunasan
pembayaran
5. Aktor memilih
jurnal
6. Aktor memilih
laporan
pembelian
7. Aktor memilih
laporan
pengeluaran
kas
8. Aktor memilih
backup
database
Sistem ini akan menampilkan informasi data perkiraan
Sistem ini akan menampilkan informasi data user
Sistem ini akan menampilkan informasi transaksi pembelian
Sistem ini akan menampilkan informasi pelunasan
pembayaran
Sistem ini akan menampilkan informasi jurnal
Sistem ini akan menampilkan informasi laporan pembelian
Sistem ini akan menampilkan informasi laporan pengeluaran
kas
Sistem ini akan menampilkan informasi backup database
Kondisi Akhir Jika perintah sesuai maka sistem akan menampilkan apa
yang di inginkan.
43
3.3.3. Activity Diagram
A. Activity Diagram Menu Master Data Supplier
Gambar III.8
Activity Diagram Menu Master Data Supplier
44
B. Activity Diagram Menu Master Data Perkiraan
Gambar III.9
Activity Diagram Menu Master Data Perkiraan
45
C. Activity Diagram Menu Transaksi Purchase Order
Gambar III.10
Activity Diagram Menu Transaksi Purchase Order
46
D. Activity Diagram Menu Transaksi Pembelian
Gambar III.11
Activity Diagram Menu Transaksi Pembelian
47
3.4. Desain
3.4.1. Entity Relationship Diagram (ERD)
Gambar III.12
Entity Relationship Diagram
48
3.4.2. Logical Record Structure (LRS)
Gambar III.13
Logical Record Structure
49
3.4.3. Spesifikasi File
Spesifikasi file yang digunakan dalam rancang bangun sistem pembelian
barang secara kredit pada PT. Sabang Mandiri Abadi terdiri dari :
1. Spesifikasi File Data User
Nama Database : user
Nama File : Data User
Tipe File : File Master
Akses File : Random
Panjang Record : 78 karakter
Field Key : Username
Tabel III.3
Spesifikasi File Data User
No Elemen Data Akronim Tipe Panjang Keterangan
1 Username Username Varchar 8 Primary Key
2 Nama Nama Varchar 50
3 Hak Akses Hak_Akses Varchar 10
4 Password Password Varchar 10
2. Spesifikasi File Data Barang
Nama Database : barang
Nama File : Data Barang
Tipe File : File Master
50
Akses File : Random
Panjang Record : 50 karakter
Field Key : Kd_Barang
Tabel III.4
Spesifikasi File Data Barang
No Elemen Data Akronim Tipe Panjang Keterangan
1 Kode Barang Kd_Barang Varchar 8 Primary Key
2 Nama Barang Nama_Barang Varchar 20
3 Harga Beli Hrg_Beli Double
4 Harga Jual Hrg_Jual Double
5 Kode Supplier Kd_Supplier Varchar 7
6 Warna Warna Varchar 10
7 size Size Varchar 5
8 foto foto Mediumblob
3. Spesifikasi File Data Supplier
Nama Database : supplier
Nama File : Data Supplier
Tipe File : File Master
Akses File : Random
Panjang Record : 109 karakter
Field Key : Kd_Supplier
51
Tabel III.5
Spesifikasi File Data Supplier
No Elemen Data Akronim Tipe Panjang Keterangan
1 Kode Supplier Kd_Supplier Varchar 7 Primary Key
2 Nama Supplier Nm_Supplier Varchar 25
3 Alamat Alamat Varchar 50
4 Telepon Telepon Varchar 12
5 Kota Kota Varchar 15
4. Spesifikasi File Purchase Order
Nama Database : purchase_order
Nama File : Purchase Order
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 30 karakter
Field Key : No_PO
Tabel III.6
Spesifikasi File Purchase Order
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Purchase Order No_PO Varchar 12 Primary Key
2 Tanggal Purchase Order Tgl_PO Date
52
3 Tangal Kirim Tgl_Kirim Date
4 Kode Supplier Kd_Supplier Varchar 3 Foreign Key
5 Total Quantity Total_Qty Int 11
6 Username Username varchar 4
5. Spesifikasi File Detail Purchase Order
Nama Database : detail_purchase_order
Nama File : Detail Purchase Order
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 42 karakter
Field Key : Id
Tabel III.7
Spesifikasi File Detail Purchase Order
No Elemen Data Akronim Tipe Panjang Keterangan
1 Id Id Int 11 Primary Key
2 Nomor Purchase Order No_PO varchar 12
3 Kode Barang Kd_Barang varchar 8 Foreign Key
4 Quantity Order Qty_Order int 11
5 Harga Beli Hrg_Beli double
53
6 Harga Jual Hrg_Jual double
6. Spesifikasi File Penerimaan Barang
Nama Database : penerimaan_barang
Nama File : Penerimaan Barang
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 17 karakter
Field Key : No_Tanda_Terima
Tabel III.8
Spesifikasi File Penerimaan Barang
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Tanda Terima No_Tanda_Terima Varchar 5 Primary Key
2 Nomor Purchase Order No_PO Varchar 12
3 Tanggal Terima Barang Tgl_Terima_Barang Date
7. Spesifikasi File Transaksi Pembelian
Nama Database : transaksi_pembelian
Nama File : Transaksi Pembelian
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 24 karakter
Field Key : No_Transaksi
54
Tabel III.9
Spesifikasi File Transaksi Pembelian
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Transaksi No_Transaksi varchar 9 Primary Key
2 Nomor Tanda Terima No_Tanda_Terima varchar 7
3 Nomor Invoice No_Invoice varchar 8
4 Total Transaksi Total_Transaksi double
8. Spesifikasi File Pelunasan Pembayaran
Nama Database : pelunasan_pembayaran
Nama File : Pelunasan Pembayaran
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 7 karakter
Field Key : No_Pembayaran
Tabel III.10
Spesifikasi File Pelunasan Pembayaran
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Pembayaran No_Pembayaran varchar 7 Primary Key
2 Jatuh Tempo Jth_Tempo date
3 Total Bayar Total_Bayar double
55
9. Spesifikasi File Detail Pelunasan Pembayaran
Nama Database : detail_pelunasan_pembayaran
Nama File : Detail Pelunasan Pembayaran
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 27 karakter
Field Key : Id
Tabel III.11
Spesifikasi File Detail Pelunasan Pembayaran
No Elemen Data Akronim Tipe Panjang Keterangan
1 Identitas Id int 11 Primary Key
2 Nomor Pembayaran No_Pembayaran varchar 7
3 Nomor Transaksi No_Transaksi varchar 9
10. Spesifikasi File Jurnal
Nama Database : jurnal
Nama File : Jurnal
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 33 karakter
Field Key : No_Jurnal
56
Tabel III.12
Spesifikasi File Jurnal
No Elemen Data Akronim Tipe Panjang Keterangan
1 Nomor Jurnal No_Jurnal varchar 6 Primary Key
2 Nomor Pembayaran No_Pembayaran varchar 7
3 Tanggal Jurnal Tgl_Jurnal Date
4 Keterangan Ket varchar 20
11. Spesifikasi File Detail Jurnal
Nama Database : detail_jurnal
Nama File : Detail Jurnal
Tipe File : File Transaksi
Akses File : Random
Panjang Record : 21 karakter
Field Key : Id
Tabel III.13
Spesifikasi File Detail Jurnal
No Elemen Data Akronim Tipe Panjang Keterangan
1 Identitas Id Int 11 Primary Key
2 Nomor Jurnal No_Jurnal Varchar 6
3 Kode Perkiraan Kd_Perkiraan Varchar 4
57
4 Debet Debet Double
5 Kredit Kredit Double
12. Spesifikasi File Data Perkiraan
Nama Database : data_perkiraan
Nama File : Data Perkiraan
Tipe File : File Master
Akses File : Random
Panjang Record : 19 karakter
Field Key : Kd_Perkiraan
Tabel III.14
Spesifikasi File Data Perkiraan
No Elemen Data Akronim Tipe Panjang Keterangan
1 Kode Perkiraan Kd_Perkiraan Varchar 4 Primary Key
2 Nama Perkiraan Nm_Perkiraan Varchar 15
58
3.4.4. Sequence Diagram
A. Sequence Diagram Login
Gambar III.14
Sequence Diagram Login
59
B. Sequence Diagram Data Supplier
Gambar III.15
Sequence Diagram Data Supplier
60
C. Sequence Diagram Purchase Order
Gambar III.16
Sequence Diagram Purchase Order
61
D. Sequence Diagram Transaksi Pembelian
Gambar III.17
Sequence Diagram Transaksi Pembelian
62
3.4.5. Deployment Diagram
Gambar III.18
Deployment Diagram
63
3.4.6. User Interface
Gambar III.19
User Interface Form Login Bagian Purchasing
Gambar III.20
User Interface Menu Utama Bagian Purchasing
64
Gambar III.21
User Interface Form Data Supplier
Gambar III.22
User Interface Form Data Barang
65
Gambar III.23
User Interface Form Data User
Gambar III.24
User Interface Form Purchase Order
66
Gambar III.25
User Interface Form Penerimaan Barang
Gambar III.26
User Interface Form Laporan Penerimaan Barang
67
Gambar III.27
User Interface Purchase Order
Gambar III.28
User Interface Laporan Penerimaan Barang
68
Gambar III.29
User Interface Form Login Bagian Finance
Gambar III.30
User Interface Menu Utama Bagian Finance
69
Gambar III.31
User Interface Form Data Perkiraan
Gambar III.32
User Interface Form Data User
70
Gambar III.33
User Interface Form Transaksi Pembelian
Gambar III.34
User Interface Form Pelunasan Pembayaran
71
Gambar III.35
User Interface Form Jurnal
Gambar III.36
User Interface Form Laporan Pembelian
72
Gambar III.37
User Interface Form Laporan Pengeluaran Kas
Gambar III.38
User Interface Pelunasan Pembayaran
73
Gambar III.39
User Interface Laporan Pembelian
Gambar III.40
User Interface Laporan Pengeluaran Kas
74
3.5. Implementasi
3.5.1. Code Generation
A. Form Login
package fladeoapp.form;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;
import javax.persistence.EntityManager;
import fladeoapp.FladeoApp;
import fladeoapp.data.User;
import java.awt.event.KeyEvent;
import javax.persistence.Query;
import java.util.List;
import javax.swing.JOptionPane;
public class FormLogin extends javax.swing.JFrame {
private String nama;
private String hakAkses;
private String username;
private String password;
int xx;
int xy;
/**
* Creates new form FormLogin
*/
public FormLogin() {
initComponents();
setLocationRelativeTo(null);
setShape(new RoundRectangle2D.Double(0, 0, 400, 450, 10, 10));
user();
password();
}
public void user(){
txtLogin.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
txtLogin.setText("");
txtLogin.setForeground(Color.WHITE);
}
75
});
txtLogin.setForeground((new Color(204, 204, 204)));
txtLogin.setText("fnc1");
}
public void password(){
txtPassword.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
txtPassword.setText("");
txtPassword.setForeground(Color.WHITE);
}
});
txtLogin.setForeground((new Color(204, 204, 204)));
txtPassword.setText("1234");
}
private void login(){
if(txtLogin.getText().equals("Root") &&
txtPassword.getText().equals("Root")){
User userLogin = new User();
userLogin.setNama("Root");
userLogin.setHakAkses("Root");
FormUtama formUtama = new FormUtama(userLogin);
formUtama.getMenuTransaksi().setEnabled(false);
formUtama.getMenuLaporan().setEnabled(false);
formUtama.getMenuMasterUtility().setEnabled(false);
formUtama.getMasterItemAkun().setVisible(false);
formUtama.getMasterItemBarang().setVisible(false);
formUtama.getMasterItemSupplier().setVisible(false);
JOptionPane.showMessageDialog(null, "Login sebagai Root!");
this.dispose();
formUtama.setVisible(true);
return;
}
EntityManager em=null;
try {
em=FladeoApp.emf.createEntityManager();
Query q=em.createQuery("SELECT u FROM User u WHERE u.username
= :username");
q.setParameter("username", txtLogin.getText());
List<User> list = q.getResultList();
if(!list.isEmpty()){
for(User us : list){
nama = us.getNama();
hakAkses = us.getHakAkses();
username = us.getUsername();
password = us.getPassword();
76
}
if(txtPassword.getText().equals(password)){
User userLogin = new User();
userLogin.setUsername(username);
userLogin.setHakAkses(hakAkses);
userLogin.setNama(nama);
FormUtama formUtama = new FormUtama(userLogin);
JOptionPane.showMessageDialog(this, "Selamat datang,
"+nama+"","Welcome", JOptionPane.INFORMATION_MESSAGE);
if(hakAkses.equalsIgnoreCase("FINANCE")){
formUtama.getMasterItemAkun().setVisible(true);
formUtama.getTransItemPembelian().setVisible(true);
formUtama.getTransItemPembayaran().setVisible(true);
formUtama.getTransItemJurnal().setVisible(true);
formUtama.getLapItemPembelian().setVisible(true);
formUtama.getLapItemKas().setVisible(true);
formUtama.getMasterItemSupplier().setVisible(false);
formUtama.getMasterItemBarang().setVisible(false);
formUtama.getTransItemPO().setVisible(false);
formUtama.getTransItemPB().setVisible(false);
formUtama.getLapItemTerimaBarang().setVisible(false);
}else if(hakAkses.equalsIgnoreCase("PURCHASING")){
formUtama.getMasterItemSupplier().setVisible(true);
formUtama.getMasterItemBarang().setVisible(true);
formUtama.getTransItemPO().setVisible(true);
formUtama.getTransItemPB().setVisible(true);
formUtama.getLapItemTerimaBarang().setVisible(true);
formUtama.getMasterItemAkun().setVisible(false);
formUtama.getTransItemPembelian().setVisible(false);
formUtama.getTransItemPembayaran().setVisible(false);
formUtama.getTransItemJurnal().setVisible(false);
formUtama.getLapItemPembelian().setVisible(false);
formUtama.getLapItemKas().setVisible(false);
}
this.dispose();
formUtama.setVisible(true);
}else{
JOptionPane.showMessageDialog(null, "Password salah!");
txtPassword.setText("");
txtPassword.requestFocus();
}
}else{
JOptionPane.showMessageDialog(null, "Username tidak ditemukan!");
77
txtLogin.setText("");
txtPassword.setText("");
txtLogin.requestFocus();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 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() {
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
btnClose = new javax.swing.JButton();
jPanel4 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jPanel5 = new javax.swing.JPanel();
jLabel5 = new javax.swing.JLabel();
jSeparator2 = new javax.swing.JSeparator();
txtLogin = new javax.swing.JTextField();
jSeparator3 = new javax.swing.JSeparator();
txtPassword = new javax.swing.JPasswordField();
jSeparator1 = new javax.swing.JSeparator();
btnLogin = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setUndecorated(true);
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
formMouseDragged(evt);
}
});
addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
formMousePressed(evt);
}
});
78
getContentPane().setLayout(new
org.netbeans.lib.awtextra.AbsoluteLayout());
jPanel1.setBackground(new java.awt.Color(214, 48, 49));
jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jPanel2.setBackground(new java.awt.Color(255, 255, 255));
jPanel2.setPreferredSize(new java.awt.Dimension(400, 450));
jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel1.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/images/Fladeo Logo.png"))); //
NOI18N
jPanel2.add(jLabel1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(130, 0, -1, 70));
btnClose.setBackground(new java.awt.Color(153, 0, 0));
btnClose.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
btnClose.setForeground(new java.awt.Color(255, 255, 255));
btnClose.setText("X");
btnClose.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCloseActionPerformed(evt);
}
});
jPanel2.add(btnClose, new
org.netbeans.lib.awtextra.AbsoluteConstraints(360, 0, -1, -1));
jPanel1.add(jPanel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0,
400, 70));
jPanel4.setBackground(new java.awt.Color(255, 118, 117));
jPanel4.setPreferredSize(new java.awt.Dimension(400, 100));
jPanel4.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel3.setBackground(new java.awt.Color(255, 255, 255));
jLabel3.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel3.setForeground(new java.awt.Color(255, 255, 255));
jLabel3.setText("Masukan Username");
jPanel4.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(70,
0, -1, 30));
jPanel1.add(jPanel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(0,
180, -1, 30));
jLabel4.setBackground(new java.awt.Color(255, 255, 255));
jLabel4.setFont(new java.awt.Font("Segoe UI", 0, 22)); // NOI18N
jLabel4.setForeground(new java.awt.Color(255, 255, 255));
79
jLabel4.setText("Form Login");
jPanel1.add(jLabel4, new
org.netbeans.lib.awtextra.AbsoluteConstraints(140, 110, -1, 40));
jPanel5.setBackground(new java.awt.Color(255, 118, 117));
jPanel5.setPreferredSize(new java.awt.Dimension(400, 100));
jPanel5.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel5.setBackground(new java.awt.Color(255, 255, 255));
jLabel5.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel5.setForeground(new java.awt.Color(255, 255, 255));
jLabel5.setText("Masukan Password");
jPanel5.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(70,
0, -1, 30));
jPanel1.add(jPanel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(0,
270, -1, 30));
jSeparator2.setForeground(new java.awt.Color(255, 255, 255));
jPanel1.add(jSeparator2, new
org.netbeans.lib.awtextra.AbsoluteConstraints(130, 150, 130, 10));
txtLogin.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtLogin.setForeground(new java.awt.Color(255, 255, 255));
txtLogin.setText("FIN-001");
txtLogin.setBorder(null);
txtLogin.setCaretColor(new java.awt.Color(255, 255, 255));
txtLogin.setOpaque(false);
jPanel1.add(txtLogin, new org.netbeans.lib.awtextra.AbsoluteConstraints(70,
220, 253, 30));
jSeparator3.setForeground(new java.awt.Color(255, 255, 255));
jPanel1.add(jSeparator3, new
org.netbeans.lib.awtextra.AbsoluteConstraints(70, 250, 250, 10));
txtPassword.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtPassword.setForeground(new java.awt.Color(255, 255, 255));
txtPassword.setText("jPasswordField1");
txtPassword.setBorder(null);
txtPassword.setCaretColor(new java.awt.Color(255, 255, 255));
txtPassword.setOpaque(false);
txtPassword.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
txtPasswordKeyPressed(evt);
}
});
jPanel1.add(txtPassword, new
org.netbeans.lib.awtextra.AbsoluteConstraints(70, 310, 250, 30));
80
jSeparator1.setForeground(new java.awt.Color(255, 255, 255));
jPanel1.add(jSeparator1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(70, 340, 250, 10));
btnLogin.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
btnLogin.setText("Login");
btnLogin.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLoginActionPerformed(evt);
}
});
jPanel1.add(btnLogin, new
org.netbeans.lib.awtextra.AbsoluteConstraints(70, 360, 250, -1));
getContentPane().add(jPanel1, new
org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, 450));
pack();
}// </editor-fold>
private void txtPasswordKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER){
btnLoginActionPerformed(null);
}
}
private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {
if("".equals(txtLogin.getText())&&"".equals(txtPassword.getText())){
JOptionPane.showMessageDialog(null, "Masukan Username dan
Password!");
}else if("".equals(txtLogin.getText())){
JOptionPane.showMessageDialog(null, "Masukan Username!");
}else if("".equals(txtPassword.getText())){
JOptionPane.showMessageDialog(null, "Masukan password!");
}else{
login();
}
}
private void formMousePressed(java.awt.event.MouseEvent evt) {
xx = evt.getX();
xy = evt.getY();
}
private void formMouseDragged(java.awt.event.MouseEvent evt) {
int x = evt.getXOnScreen();
int y = evt.getYOnScreen();
this.setLocation(x -xx, y -xy);
81
}
private void btnCloseActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* 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(FormLogin.class.getName()).log(java.util.log
ging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(FormLogin.class.getName()).log(java.util.log
ging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(FormLogin.class.getName()).log(java.util.log
ging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(FormLogin.class.getName()).log(java.util.log
ging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
82
new FormLogin().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btnClose;
private javax.swing.JButton btnLogin;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JSeparator jSeparator3;
private javax.swing.JTextField txtLogin;
private javax.swing.JPasswordField txtPassword;
// End of variables declaration
}
B. Form Data Supplier
package fladeoapp.form;
import fladeoapp.controller.SupplierController;
import fladeoapp.data.Supplier;
import fladeoapp.FladeoApp;
import java.awt.Font;
import java.awt.event.KeyEvent;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
public class FormSupplier extends javax.swing.JInternalFrame implements
NavigatorFormInterface{
Supplier supplier = new Supplier();
SupplierController supCont = new SupplierController(FladeoApp.emf);
DefaultTableModel model;
FormUtama formUtama = FormUtama.staticUtama;
boolean update = false;
83
String updateKode = "";
/**
* Creates new form FormSupplier
*/
public FormSupplier() {
initComponents();
((javax.swing.plaf.basic.BasicInternalFrameUI)this.getUI()).setNorthPane(null);
this.setBorder(null);
model=new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
model.addColumn("Kode Supplier");
model.addColumn("Nama");
model.addColumn("Telepon");
model.addColumn("Kota");
model.addColumn("Alamat");
tableSupplier.getTableHeader().setFont(new Font("Segoe UI", Font.BOLD,
12));
tidakAktif();
formUtama.buttonOff();
formUtama.getTambahBtn().setEnabled(true);
panjangKarakter();
}
private void panjangKarakter(){
txtKode.setDocument(new JTextFieldLimit((3)));
txtNmSupplier.setDocument(new JTextFieldLimit((25)));
txtAlamat.setDocument(new JTextFieldLimit((50)));
txtTelp.setDocument(new JTextFieldLimit((12)));
txtKota.setDocument(new JTextFieldLimit((15)));
}
private void tidakAktif(){
txtKode.setEnabled(false);
txtNmSupplier.setEnabled(false);
txtTelp.setEnabled(false);
txtKota.setEnabled(false);
txtAlamat.setEnabled(false);
txtCari.setEnabled(false);
}
private void showTable(){
84
tableSupplier.setModel(supCont.findAllSupplier(model));
}
private void cariTable(String cari){
DefaultTableModel x=supCont.searchSupplier(model,cari);
if(x.getRowCount()==0){
JOptionPane.showMessageDialog(null, "Data tidak ditemukan!");
}else{
if(cari.isEmpty()){
showTable();
}else{
tableSupplier.setModel(supCont.searchSupplier(model,cari));
}
}
}
private void seleksiBaris(){
tableSupplier.getSelectionModel().addListSelectionListener(new
ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int baris=tableSupplier.getSelectedRow();
if(baris != -1){
txtKode.setText(tableSupplier.getValueAt(baris, 0).toString());
txtNmSupplier.setText(tableSupplier.getValueAt(baris, 1).toString());
txtTelp.setText(tableSupplier.getValueAt(baris, 2).toString());
txtKota.setText(tableSupplier.getValueAt(baris, 3).toString());
txtAlamat.setText(tableSupplier.getValueAt(baris, 4).toString());
txtKode.requestFocus();
}
}
});
}
private void validasiKodeSupplier(){
supplier = supCont.findSupplier(txtKode.getText());
if(supplier != null){
if(JOptionPane.showConfirmDialog(null, "Kode Supplier eksis! Mau edit
data?", "Warning",
JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
txtNmSupplier.setText(supplier.getNmSupplier());
txtTelp.setText(supplier.getTelepon());
txtKota.setText(supplier.getKota());
txtAlamat.setText(supplier.getAlamat());
txtNmSupplier.requestFocus();
}else{
txtKode.setText("");
txtNmSupplier.setText("");
85
txtTelp.setText("");
txtKota.setText("");
txtAlamat.setText("");
txtKode.requestFocus();
}
}
}
/**
* 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() {
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
txtNmSupplier = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
txtTelp = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
txtKota = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
txtAlamat = new javax.swing.JTextArea();
txtKode = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
tableSupplier = new javax.swing.JTable();
jLabel6 = new javax.swing.JLabel();
txtCari = new javax.swing.JTextField();
setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBackground(new java.awt.Color(255, 118, 117));
jLabel3.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel3.setForeground(new java.awt.Color(255, 255, 255));
jLabel3.setText("Nama Supplier");
txtNmSupplier.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
86
txtNmSupplier.setForeground(new java.awt.Color(51, 51, 51));
jLabel4.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel4.setForeground(new java.awt.Color(255, 255, 255));
jLabel4.setText("No. Telepon");
txtTelp.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTelp.setForeground(new java.awt.Color(51, 51, 51));
txtTelp.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtTelpKeyTyped(evt);
}
});
jLabel5.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel5.setForeground(new java.awt.Color(255, 255, 255));
jLabel5.setText("Kota");
txtKota.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtKota.setForeground(new java.awt.Color(51, 51, 51));
jLabel1.setFont(new java.awt.Font("Segoe UI", 0, 24)); // NOI18N
jLabel1.setForeground(new java.awt.Color(255, 255, 255));
jLabel1.setText("Form Supplier");
jSeparator1.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel2.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setText("Kode Supplier");
jLabel7.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel7.setForeground(new java.awt.Color(255, 255, 255));
jLabel7.setText("Alamat");
txtAlamat.setColumns(20);
txtAlamat.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtAlamat.setForeground(new java.awt.Color(51, 51, 51));
txtAlamat.setLineWrap(true);
txtAlamat.setRows(5);
txtAlamat.setWrapStyleWord(true);
jScrollPane2.setViewportView(txtAlamat);
txtKode.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtKode.setForeground(new java.awt.Color(51, 51, 51));
txtKode.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtKodeKeyTyped(evt);
87
}
});
javax.swing.GroupLayout jPanel1Layout = new
javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addComponent(jSeparator1,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel5,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtKota,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel2,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtKode,
javax.swing.GroupLayout.PREFERRED_SIZE, 80,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(188, 188, 188)
88
.addComponent(jLabel7,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel3,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtNmSupplier,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel4,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtTelp,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(303, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(77, 77, 77)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE, 122,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
89
.addComponent(jSeparator1,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel2)
.addComponent(jLabel7)
.addComponent(txtKode,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel3)
.addComponent(txtNmSupplier,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel4)
.addComponent(txtTelp,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel5)
.addComponent(txtKota,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(21, Short.MAX_VALUE))
);
tableSupplier.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
tableSupplier.setForeground(new java.awt.Color(51, 51, 51));
90
tableSupplier.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Kode Supplier", "Nama", "Telepon", "Kota", "Alamat"
}
));
tableSupplier.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tableSupplierMouseClicked(evt);
}
});
jScrollPane1.setViewportView(tableSupplier);
jLabel6.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel6.setForeground(new java.awt.Color(51, 51, 51));
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel6.setText("Cari Supplier");
txtCari.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtCari.setForeground(new java.awt.Color(51, 51, 51));
txtCari.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
txtCariKeyPressed(evt);
}
});
javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 995, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
91
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS
ELINE)
.addComponent(jLabel6)
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void txtCariKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER){
cariTable(txtCari.getText());
}
}
private void txtTelpKeyTyped(java.awt.event.KeyEvent evt) {
char c=evt.getKeyChar();
if(!(Character.isDigit(c) || (c==KeyEvent.VK_BACK_SPACE) ||
c==KeyEvent.VK_DELETE)){
getToolkit().beep();
evt.consume();
}
}
92
private void txtKodeKeyTyped(java.awt.event.KeyEvent evt) {
char keyChar = evt.getKeyChar();
if (Character.isLowerCase(keyChar)) {
evt.setKeyChar(Character.toUpperCase(keyChar));
}
}
private void tableSupplierMouseClicked(java.awt.event.MouseEvent evt) {
if(evt.getClickCount() == 2){
if(JOptionPane.showConfirmDialog(null, "Edit data ini?", "Warning",
JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
int row = tableSupplier.getSelectedRow();
supplier = supCont.findSupplier(tableSupplier.getValueAt(row,
0).toString());
txtKode.setText(supplier.getKdSupplier());
txtNmSupplier.setText(supplier.getNmSupplier());
txtTelp.setText(supplier.getTelepon());
txtKota.setText(supplier.getKota());
txtAlamat.setText(supplier.getAlamat());
txtNmSupplier.requestFocus();
update = true;
updateKode = supplier.getKdSupplier();
}
}
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTable tableSupplier;
private javax.swing.JTextArea txtAlamat;
private javax.swing.JTextField txtCari;
private javax.swing.JTextField txtKode;
private javax.swing.JTextField txtKota;
private javax.swing.JTextField txtNmSupplier;
private javax.swing.JTextField txtTelp;
// End of variables declaration
93
@Override
public void aktif() {
txtKode.setEnabled(true);
txtNmSupplier.setEnabled(true);
txtTelp.setEnabled(true);
txtKota.setEnabled(true);
txtAlamat.setEnabled(true);
txtCari.setEnabled(true);
bersih();
txtKode.requestFocus();
seleksiBaris();
formUtama.getSimpanBtn().setEnabled(true);
formUtama.getDeleteBtn().setEnabled(true);
}
@Override
public void bersih() {
txtKode.setText("");
txtNmSupplier.setText("");
txtTelp.setText("");
txtKota.setText("");
txtAlamat.setText("");
txtCari.setText("");
txtKode.requestFocus();
showTable();
update = false;
}
@Override
public void simpan() {
if(txtNmSupplier.getText().isEmpty() || txtTelp.getText().isEmpty() ||
txtKota.getText().isEmpty() || txtAlamat.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Data belum lengkap!");
}else if(txtKode.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Kode harus diisi!");
}else if(txtKode.getText().length() < 3){
JOptionPane.showMessageDialog(null, "Kode harus 3 digit!");
}else{
supplier=supCont.findSupplier(txtKode.getText());
Supplier Sup=new Supplier();
if(supplier==null){
supplier = supCont.findSupplierByName(txtNmSupplier.getText());
if(supplier != null){
JOptionPane.showMessageDialog(null, "Nama supplier eksis!");
return;
}
Sup.setKdSupplier(txtKode.getText());
Sup.setNmSupplier(txtNmSupplier.getText());
94
Sup.setTelepon(txtTelp.getText());
Sup.setKota(txtKota.getText());
Sup.setAlamat(txtAlamat.getText());
try{
supCont.save(Sup);
}catch(Exception ex){
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, "Data baru berhasil
disimpan!");
bersih();
}else{
if(update == true &&
updateKode.equalsIgnoreCase(txtKode.getText())){
Supplier s = new Supplier();
s = supCont.findSupplierByName(txtNmSupplier.getText());
if(s != null){
JOptionPane.showMessageDialog(null, "Nama supplier eksis!");
bersih();
return;
}else{
Sup.setKdSupplier(txtKode.getText());
Sup.setNmSupplier(txtNmSupplier.getText());
Sup.setTelepon(txtTelp.getText());
Sup.setKota(txtKota.getText());
Sup.setAlamat(txtAlamat.getText());
try{
supCont.update(Sup);
}catch(Exception ex){
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, "Data berhasil diupdate!");
bersih();
}
}else{
JOptionPane.showMessageDialog(null, "Data Eksis!");
bersih();
}
}
}
}
@Override
public void hapus() {
int baris = tableSupplier.getSelectedRow();
if(baris==-1){
JOptionPane.showMessageDialog(null, "Pilih data yang mau dihapus!");
}else{
95
try{
supCont.delete(txtKode.getText());
JOptionPane.showMessageDialog(null, "Data telah dihapus!");
}catch(Exception ex){
ex.printStackTrace();
}
bersih();
}
}
@Override
public void cari() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
@Override
public void tampil() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
}
C. Form Data Perkiraan
package fladeoapp.form;
import fladeoapp.controller.DataPerkiraanController;
import fladeoapp.data.DataPerkiraan;
import fladeoapp.FladeoApp;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
public class FormPerkiraan extends javax.swing.JInternalFrame implements
NavigatorFormInterface{
DataPerkiraan dataAkun = new DataPerkiraan();
DataPerkiraanController perkiraanCont = new
DataPerkiraanController(FladeoApp.emf);
DefaultTableModel model;
96
FormUtama formUtama = FormUtama.staticUtama;
/**
* Creates new form FormAkun
*/
public FormPerkiraan() {
initComponents();
((javax.swing.plaf.basic.BasicInternalFrameUI)this.getUI()).setNorthPane(null);
this.setBorder(null);
model=new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
model.addColumn("Kode Perkiraan");
model.addColumn("Nama Perkiraan");
tableAkun.getTableHeader().setFont(new Font("Segoe UI", Font.BOLD,
12));
tidakAktif();
panjangKarakter();
}
private void panjangKarakter(){
txtKdAkun.setDocument(new JTextFieldLimit((4)));
txtNamaAkun.setDocument(new JTextFieldLimit((15)));
}
private void tidakAktif(){
txtKdAkun.setEnabled(false);
txtNamaAkun.setEnabled(false);
txtCari.setEnabled(false);
formUtama.getTambahBtn().setEnabled(true);
}
private void showTable(){
model.getDataVector().removeAllElements();
model.fireTableDataChanged();
List<DataPerkiraan> listPerkiraan = perkiraanCont.findAllPerkiraan();
for(DataPerkiraan perkiraan : listPerkiraan){
Object[] obj = new Object[2];
obj[0] = perkiraan.getKdPerkiraan();
obj[1] = perkiraan.getNmPerkiraan();
model.addRow(obj);
}
tableAkun.setModel(model);
}
97
private void cariTable(String cari){
DefaultTableModel x=perkiraanCont.findOneAkunToTable(model,cari);
if(x.getRowCount()==0){
JOptionPane.showMessageDialog(null, "Data tidak ditemukan!");
}else{
if(cari.isEmpty()){
showTable();
}else{
tableAkun.setModel(perkiraanCont.findOneAkunToTable(model,cari));
}
}
}
private void seleksiBaris(){
tableAkun.getSelectionModel().addListSelectionListener(new
ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int baris=tableAkun.getSelectedRow();
if(baris != -1){
txtKdAkun.setText(tableAkun.getValueAt(baris, 0).toString());
txtNamaAkun.setText(tableAkun.getValueAt(baris, 1).toString());
}
}
});
}
/**
* 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() {
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
txtNamaAkun = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
txtKdAkun = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
tableAkun = new javax.swing.JTable();
jLabel6 = new javax.swing.JLabel();
txtCari = new javax.swing.JTextField();
98
setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBackground(new java.awt.Color(255, 118, 117));
jLabel3.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel3.setForeground(new java.awt.Color(255, 255, 255));
jLabel3.setText("Nama Perkiraan");
txtNamaAkun.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtNamaAkun.setForeground(new java.awt.Color(51, 51, 51));
jLabel1.setFont(new java.awt.Font("Segoe UI", 0, 24)); // NOI18N
jLabel1.setForeground(new java.awt.Color(255, 255, 255));
jLabel1.setText("Form Perkiraan");
jSeparator1.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel2.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setText("Kode Perkiraan");
txtKdAkun.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtKdAkun.setForeground(new java.awt.Color(51, 51, 51));
txtKdAkun.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtKdAkunKeyTyped(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new
javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addComponent(jSeparator1,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1,
javax.swing.GroupLayout.Alignment.LEADING,
99
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING, false)
.addComponent(jLabel3,
javax.swing.GroupLayout.DEFAULT_SIZE, 118, Short.MAX_VALUE)
.addComponent(jLabel2,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING)
.addComponent(txtNamaAkun,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtKdAkun,
javax.swing.GroupLayout.PREFERRED_SIZE, 115,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(633, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel2)
.addComponent(txtKdAkun,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
100
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel3)
.addComponent(txtNamaAkun,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(85, Short.MAX_VALUE))
);
tableAkun.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
tableAkun.setForeground(new java.awt.Color(51, 51, 51));
tableAkun.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null},
{null, null},
{null, null},
{null, null}
},
new String [] {
"Kode Perkiraan", "Nama Perkiraan"
}
));
jScrollPane1.setViewportView(tableAkun);
jLabel6.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel6.setForeground(new java.awt.Color(51, 51, 51));
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel6.setText("Cari");
txtCari.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtCari.setForeground(new java.awt.Color(51, 51, 51));
txtCari.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
txtCariKeyPressed(evt);
}
});
javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
101
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 995, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS
ELINE)
.addComponent(jLabel6)
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void txtCariKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER){
cariTable(txtCari.getText());
}
102
}
private void txtKdAkunKeyTyped(java.awt.event.KeyEvent evt) {
char c=evt.getKeyChar();
if(!(Character.isDigit(c) || (c==KeyEvent.VK_BACK_SPACE) ||
c==KeyEvent.VK_DELETE)){
getToolkit().beep();
evt.consume();
}
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel6;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTable tableAkun;
private javax.swing.JTextField txtCari;
private javax.swing.JTextField txtKdAkun;
private javax.swing.JTextField txtNamaAkun;
// End of variables declaration
@Override
public void aktif() {
txtKdAkun.setEnabled(true);
txtNamaAkun.setEnabled(true);
txtCari.setEnabled(true);
bersih();
seleksiBaris();
formUtama.buttonOn();
}
@Override
public void bersih() {
txtNamaAkun.setText("");
txtCari.setText("");
txtKdAkun.setText("");
txtKdAkun.requestFocus();
showTable();
}
@Override
public void simpan() {
103
if(txtNamaAkun.getText().equalsIgnoreCase("") ||
txtKdAkun.getText().equalsIgnoreCase("")){
JOptionPane.showMessageDialog(null, "Masukan nama perkiraan!");
}else{
dataAkun=perkiraanCont.findDataPerkiraan(txtKdAkun.getText());
DataPerkiraan da=new DataPerkiraan();
if(dataAkun==null){
da.setKdPerkiraan(txtKdAkun.getText());
da.setNmPerkiraan(txtNamaAkun.getText());
try{
perkiraanCont.save(da);
}catch(Exception ex){
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, "Data berhasil disimpan!");
}else{
da.setKdPerkiraan(txtKdAkun.getText());
da.setNmPerkiraan(txtNamaAkun.getText());
try{
perkiraanCont.update(da);
}catch(Exception ex){
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, "Data berhasil diupdate!");
}
bersih();
}
}
@Override
public void hapus() {
int baris = tableAkun.getSelectedRow();
if(baris==-1){
JOptionPane.showMessageDialog(null, "Pilih data yang mau dihapus!");
}else{
try{
perkiraanCont.delete(txtKdAkun.getText());
JOptionPane.showMessageDialog(null, "Data telah dihapus!");
}catch(Exception ex){
ex.printStackTrace();
}
bersih();
}
}
@Override
104
public void cari() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
@Override
public void tampil() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
}
D. Form Purchase Order
package fladeoapp.form;
import fladeoapp.controller.PurchaseOrderController;
import fladeoapp.data.PurchaseOrder;
import fladeoapp.FladeoApp;
import fladeoapp.data.User;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.JDesktopPane;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
public class FormPurchaseOrder extends javax.swing.JInternalFrame implements
NavigatorFormInterface{
PurchaseOrder po = new PurchaseOrder();
PurchaseOrderController poCont = new
PurchaseOrderController(FladeoApp.emf);
User userLogin = new User();
DefaultTableModel model;
boolean tombolKembali = false;
FormUtama formUtama = FormUtama.staticUtama;
/**
* Creates new form FormPurchaseOrder
*/
public FormPurchaseOrder(User user) {
initComponents();
((javax.swing.plaf.basic.BasicInternalFrameUI)this.getUI()).setNorthPane(null);
this.setBorder(null);
105
model=new DefaultTableModel();
model.addColumn("Nomor PO");
model.addColumn("Tgl. Buat");
model.addColumn("Tgl. Kirim");
model.addColumn("Supplier");
model.addColumn("Total Qty");
model.addColumn("Username");
tablePO.getTableHeader().setFont(new Font("Segoe UI", Font.BOLD, 12));
tidakAktif();
userLogin = user;
formUtama.buttonOff();
formUtama.getTambahBtn().setEnabled(true);
}
private void tidakAktif(){
txtNoPO.setEnabled(false);
txtTglBuat.setEnabled(false);
txtTglKirim.setEnabled(false);
txtSupplier.setEnabled(false);
txtTotalQty.setEnabled(false);
txtUsername.setEnabled(false);
txtCari.setEnabled(false);
btnBuatPO.setEnabled(false);
btnDetailPO.setEnabled(false);
}
private void showTable(){
model.getDataVector().removeAllElements();
model.fireTableDataChanged();
List<Object[]> listPO = poCont.findAllPurchaseOrder();
for(Object[] po : listPO){
model.addRow(po);
}
tablePO.setModel(model);
}
private void cariTable(String cari){
List<Object[]> listPO = poCont.searchPurchaseOrder(cari);
if(listPO.isEmpty()){
JOptionPane.showMessageDialog(null, "Data tidak ditemukan!");
}else{
if(cari.isEmpty()){
showTable();
}else{
model.getDataVector().removeAllElements();
model.fireTableDataChanged();
for(Object[] po : listPO){
model.addRow(po);
106
}
tablePO.setModel(model);
}
}
}
private void seleksiBaris(){
tablePO.getSelectionModel().addListSelectionListener(new
ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int baris=tablePO.getSelectedRow();
if(baris != -1){
txtNoPO.setText(tablePO.getValueAt(baris, 0).toString());
txtTglBuat.setText(tablePO.getValueAt(baris, 1).toString());
txtTglKirim.setText(tablePO.getValueAt(baris, 2).toString());
txtSupplier.setText(tablePO.getValueAt(baris, 3).toString());
txtTotalQty.setText(tablePO.getValueAt(baris, 4).toString());
txtUsername.setText(tablePO.getValueAt(baris, 5).toString());
}
}
});
}
/**
* 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() {
jLabel5 = new javax.swing.JLabel();
txtNamaAkun2 = new javax.swing.JTextField();
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
txtTglBuat = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
txtNoPO = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
txtTglKirim = new javax.swing.JTextField();
txtSupplier = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
107
txtTotalQty = new javax.swing.JTextField();
txtUsername = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
btnBuatPO = new javax.swing.JButton();
btnDetailPO = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tablePO = new javax.swing.JTable();
jLabel6 = new javax.swing.JLabel();
txtCari = new javax.swing.JTextField();
jLabel5.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel5.setForeground(new java.awt.Color(255, 255, 255));
jLabel5.setText("Tgl. Kirim");
txtNamaAkun2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtNamaAkun2.setForeground(new java.awt.Color(51, 51, 51));
setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBackground(new java.awt.Color(255, 118, 117));
jLabel3.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel3.setForeground(new java.awt.Color(255, 255, 255));
jLabel3.setText("Tgl. buat");
txtTglBuat.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTglBuat.setForeground(new java.awt.Color(51, 51, 51));
jLabel1.setFont(new java.awt.Font("Segoe UI", 0, 24)); // NOI18N
jLabel1.setForeground(new java.awt.Color(255, 255, 255));
jLabel1.setText("Form Purchase Order");
jSeparator1.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel2.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setText("Nomor PO");
txtNoPO.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtNoPO.setForeground(new java.awt.Color(51, 51, 51));
jLabel4.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel4.setForeground(new java.awt.Color(255, 255, 255));
jLabel4.setText("Tgl. Kirim");
txtTglKirim.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTglKirim.setForeground(new java.awt.Color(51, 51, 51));
108
txtSupplier.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtSupplier.setForeground(new java.awt.Color(51, 51, 51));
jLabel7.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel7.setForeground(new java.awt.Color(255, 255, 255));
jLabel7.setText("Supplier");
jLabel8.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel8.setForeground(new java.awt.Color(255, 255, 255));
jLabel8.setText("Total Qty");
txtTotalQty.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTotalQty.setForeground(new java.awt.Color(51, 51, 51));
txtUsername.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtUsername.setForeground(new java.awt.Color(51, 51, 51));
jLabel9.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel9.setForeground(new java.awt.Color(255, 255, 255));
jLabel9.setText("Username");
btnBuatPO.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
btnBuatPO.setText("Buat PO Baru");
btnBuatPO.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBuatPOActionPerformed(evt);
}
});
btnDetailPO.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
btnDetailPO.setText("Lihat Detail PO");
btnDetailPO.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnDetailPOActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new
javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
109
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel2,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtNoPO,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel7,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtSupplier,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel3,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtTglBuat,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel8,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtTotalQty,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addComponent(jSeparator1,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
110
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel4,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtTglKirim,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel9,
javax.swing.GroupLayout.PREFERRED_SIZE, 90,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtUsername,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(btnBuatPO,
javax.swing.GroupLayout.PREFERRED_SIZE, 180,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnDetailPO,
javax.swing.GroupLayout.PREFERRED_SIZE, 180,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(btnBuatPO)
111
.addComponent(btnDetailPO))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel2)
.addComponent(txtNoPO,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7)
.addComponent(txtSupplier,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel3)
.addComponent(txtTglBuat,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel8)
.addComponent(txtTotalQty,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel4)
.addComponent(txtTglKirim,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel9)
.addComponent(txtUsername,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
112
tablePO.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
tablePO.setForeground(new java.awt.Color(51, 51, 51));
tablePO.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Nomor PO", "Tgl. Buat", "Tgl. Kirim", "Supplier", "Total Qty",
"Username"
}
));
jScrollPane1.setViewportView(tablePO);
jLabel6.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel6.setForeground(new java.awt.Color(51, 51, 51));
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel6.setText("Cari ");
txtCari.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtCari.setForeground(new java.awt.Color(51, 51, 51));
txtCari.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
txtCariKeyPressed(evt);
}
});
javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 995, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
113
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS
ELINE)
.addComponent(jLabel6)
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void txtCariKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER){
cariTable(txtCari.getText());
}
}
private void btnBuatPOActionPerformed(java.awt.event.ActionEvent evt) {
po = null;
FormDetailPurchaseOrder formDetail = new
FormDetailPurchaseOrder(userLogin, po, tombolKembali);
JDesktopPane desktopPane = getDesktopPane();
desktopPane.add(formDetail);
formDetail.setVisible(true);
this.dispose();
}
private void btnDetailPOActionPerformed(java.awt.event.ActionEvent evt) {
114
po = poCont.findPurchaseOrder(txtNoPO.getText());
FormDetailPurchaseOrder formDetail = new
FormDetailPurchaseOrder(userLogin, po, tombolKembali);
JDesktopPane desktopPane = getDesktopPane();
desktopPane.add(formDetail);
formDetail.setVisible(true);
this.dispose();
}
// Variables declaration - do not modify
private javax.swing.JButton btnBuatPO;
private javax.swing.JButton btnDetailPO;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTable tablePO;
private javax.swing.JTextField txtCari;
private javax.swing.JTextField txtNamaAkun2;
private javax.swing.JTextField txtNoPO;
private javax.swing.JTextField txtSupplier;
private javax.swing.JTextField txtTglBuat;
private javax.swing.JTextField txtTglKirim;
private javax.swing.JTextField txtTotalQty;
private javax.swing.JTextField txtUsername;
// End of variables declaration
@Override
public void aktif() {
txtCari.setEnabled(true);
btnBuatPO.setEnabled(true);
btnDetailPO.setEnabled(true);
bersih();
seleksiBaris();
}
@Override
public void bersih() {
txtNoPO.setText("");
115
txtTglBuat.setText("");
txtTglKirim.setText("");
txtSupplier.setText("");
txtTotalQty.setText("");
txtUsername.setText("");
txtCari.setText("");
showTable();
}
@Override
public void simpan() {
JOptionPane.showMessageDialog(null, "Buat PO baru untuk menyimpan
data!");
}
@Override
public void hapus() {
int baris = tablePO.getSelectedRow();
if(baris == -1){
JOptionPane.showMessageDialog(null, "Pilih data yang mau dihapus!");
}else{
PurchaseOrder pOrder = new PurchaseOrder();
try {
pOrder = poCont.findPurchaseOrder(txtNoPO.getText());
poCont.delete(pOrder.getNoPO());
} catch (Exception e) {
e.printStackTrace();
}
bersih();
}
}
@Override
public void cari() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
@Override
public void tampil() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
}
116
E. Form Transaksi Pembelian
package fladeoapp.form;
import fladeoapp.FladeoApp;
import fladeoapp.controller.PenerimaanBarangController;
import fladeoapp.controller.TransaksiPembelianController;
import fladeoapp.data.PenerimaanBarang;
import fladeoapp.data.TransaksiPembelian;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class FormTransaksiPembelian extends javax.swing.JInternalFrame
implements NavigatorFormInterface{
TransaksiPembelian transaksi = new TransaksiPembelian();
PenerimaanBarang penerimaanBarang = new PenerimaanBarang();
TransaksiPembelianController transCont = new
TransaksiPembelianController(FladeoApp.emf);
PenerimaanBarangController pbCont = new
PenerimaanBarangController(FladeoApp.emf);
SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM yyyy",
Locale.forLanguageTag("id-ID"));
DefaultTableModel model;
DecimalFormat myFormatter = new DecimalFormat("###,###.##");
FormUtama formUtama = FormUtama.staticUtama;
/**
* Creates new form FormTransaksiPembelian
*/
public FormTransaksiPembelian() {
initComponents();
117
((javax.swing.plaf.basic.BasicInternalFrameUI)this.getUI()).setNorthPane(null);
this.setBorder(null);
model=new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
model.addColumn("No. Transaksi");
model.addColumn("No. Tanda Terima");
model.addColumn("No. Invoice");
model.addColumn("Total Transaksi");
tableTransaksi.getTableHeader().setFont(new Font("Segoe UI", Font.BOLD,
12));
tidakAktif();
panjangKarakter();
formUtama.buttonOff();
formUtama.getTambahBtn().setEnabled(true);
}
private void tidakAktif(){
txtNoTrans.setEnabled(false);
txtNoInvoice.setEnabled(false);
cmbTandaTerima.setEnabled(false);
txtTglTandaTerima.setEnabled(false);
txtNoPO.setEnabled(false);
txtSupplier.setEnabled(false);
txtTglPO.setEnabled(false);
txtTglKirim.setEnabled(false);
txtTotalQty.setEnabled(false);
txtTotalBeli.setEnabled(false);
txtTotalTrans.setEnabled(false);
txtCari.setEnabled(false);
}
private void panjangKarakter(){
txtNoInvoice.setDocument(new JTextFieldLimit((10)));
}
private void comboBoxTandaTerima(){
List<Object[]> listPO =
pbCont.findAllNomorNotExistInTransaksiPembelian();
List<Object> list = new ArrayList<>();
for (Object[] po : listPO) {
list.add(po[0]);
}
cmbTandaTerima.setModel(new DefaultComboBoxModel(list.toArray()));
118
}
private void showDataPenerimaanBarang(){
List<Object[]> listObj =
pbCont.findTotalPenerimaanBarang(cmbTandaTerima.getSelectedItem().toString
());
for(Object[] obj : listObj){
//pb.Tgl_Terima_Barang, pb.No_PO, sp.Nm_Supplier, po.Tgl_PO,
po.Tgl_Kirim, po.Total_Qty
txtTglTandaTerima.setText(sdf.format((Date) obj[1]));
txtNoPO.setText((String) obj[2]);
txtSupplier.setText((String) obj[3]);
txtTglPO.setText(sdf.format((Date) obj[4]));
txtTglKirim.setText(sdf.format((Date) obj[5]));
txtTotalQty.setText(myFormatter.format(obj[6]));
txtTotalBeli.setText(myFormatter.format(obj[7]));
txtTotalTrans.setText(myFormatter.format(obj[8]));
}
}
private void showTable(){
model.getDataVector().removeAllElements();
model.fireTableDataChanged();
List<TransaksiPembelian> listPO = transCont.findAllTransaksiPembelian();
for(TransaksiPembelian tp : listPO){
Object[] obj = new Object[4];
obj[0] = tp.getNoTransaksi();
obj[1] = tp.getNoTandaTerima();
obj[2] = tp.getNoInvoice();
obj[3] = tp.getTotalTransaksi();
model.addRow(obj);
}
tableTransaksi.setModel(model);
}
private void seleksiBaris(){
tableTransaksi.getSelectionModel().addListSelectionListener(new
ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int baris=tableTransaksi.getSelectedRow();
if(baris != -1){
txtNoTrans.setText(tableTransaksi.getValueAt(baris, 0).toString());
Object[] obj = {tableTransaksi.getValueAt(baris, 1)};
cmbTandaTerima.setModel(new DefaultComboBoxModel(obj));
txtNoInvoice.setText(tableTransaksi.getValueAt(baris, 2).toString());
showDataPenerimaanBarang();
119
}
}
});
}
private void cariTable(String cari){
List<Object[]> listPb = transCont.searchTransaksiPembelian(cari);
if(listPb.isEmpty()){
JOptionPane.showMessageDialog(null, "Data tidak ditemukan!");
}else{
if(cari.isEmpty()){
showTable();
}else{
model.getDataVector().removeAllElements();
model.fireTableDataChanged();
for(Object[] pb : listPb){
model.addRow(pb);
}
tableTransaksi.setModel(model);
}
}
}
private void renderTableTotal(){
TableCellRenderer tbr = new DefaultTableCellRenderer(){
//SimpleDateFormat sdf=new SimpleDateFormat("dd MMMM yyyy",
Locale.forLanguageTag("in-ID"));
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column){
if(value instanceof Number){
value = myFormatter.format(value);
}
return super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
}
};
tableTransaksi.getColumnModel().getColumn(3).setCellRenderer(tbr);
}
/**
* 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.
120
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
txtNoInvoice = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jSeparator1 = new javax.swing.JSeparator();
jLabel2 = new javax.swing.JLabel();
txtNoTrans = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
txtNoPO = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
txtSupplier = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
txtTglPO = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
txtTglTandaTerima = new javax.swing.JTextField();
jLabel10 = new javax.swing.JLabel();
txtTglKirim = new javax.swing.JTextField();
jLabel12 = new javax.swing.JLabel();
txtTotalQty = new javax.swing.JTextField();
jLabel13 = new javax.swing.JLabel();
txtTotalBeli = new javax.swing.JTextField();
jLabel14 = new javax.swing.JLabel();
txtTotalTrans = new javax.swing.JTextField();
cmbTandaTerima = new javax.swing.JComboBox<>();
jScrollPane1 = new javax.swing.JScrollPane();
tableTransaksi = new javax.swing.JTable();
jLabel6 = new javax.swing.JLabel();
txtCari = new javax.swing.JTextField();
jPanel1.setBackground(new java.awt.Color(255, 118, 117));
jLabel3.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel3.setForeground(new java.awt.Color(255, 255, 255));
jLabel3.setText("No. Invoice");
txtNoInvoice.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtNoInvoice.setForeground(new java.awt.Color(51, 51, 51));
jLabel1.setFont(new java.awt.Font("Segoe UI", 0, 24)); // NOI18N
jLabel1.setForeground(new java.awt.Color(255, 255, 255));
jLabel1.setText("Form Transaksi");
121
jSeparator1.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel2.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setText("No. Transaksi");
txtNoTrans.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtNoTrans.setForeground(new java.awt.Color(51, 51, 51));
txtNoTrans.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtNoTransKeyTyped(evt);
}
});
jLabel4.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel4.setForeground(new java.awt.Color(255, 255, 255));
jLabel4.setText("No. Tanda Terima");
jLabel5.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel5.setForeground(new java.awt.Color(255, 255, 255));
jLabel5.setText("No. PO");
txtNoPO.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtNoPO.setForeground(new java.awt.Color(51, 51, 51));
txtNoPO.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtNoPOKeyTyped(evt);
}
});
jLabel7.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel7.setForeground(new java.awt.Color(255, 255, 255));
jLabel7.setText("Supplier");
txtSupplier.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtSupplier.setForeground(new java.awt.Color(51, 51, 51));
txtSupplier.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtSupplierKeyTyped(evt);
}
});
jLabel8.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel8.setForeground(new java.awt.Color(255, 255, 255));
jLabel8.setText("Tgl. PO");
txtTglPO.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTglPO.setForeground(new java.awt.Color(51, 51, 51));
122
txtTglPO.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtTglPOKeyTyped(evt);
}
});
jLabel9.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel9.setForeground(new java.awt.Color(255, 255, 255));
jLabel9.setText("Tgl. Tanda Terima");
txtTglTandaTerima.setFont(new java.awt.Font("Segoe UI", 0, 14)); //
NOI18N
txtTglTandaTerima.setForeground(new java.awt.Color(51, 51, 51));
txtTglTandaTerima.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtTglTandaTerimaActionPerformed(evt);
}
});
jLabel10.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel10.setForeground(new java.awt.Color(255, 255, 255));
jLabel10.setText("Tgl. Kirim");
txtTglKirim.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTglKirim.setForeground(new java.awt.Color(51, 51, 51));
txtTglKirim.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtTglKirimKeyTyped(evt);
}
});
jLabel12.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel12.setForeground(new java.awt.Color(255, 255, 255));
jLabel12.setText("Total Qty");
txtTotalQty.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTotalQty.setForeground(new java.awt.Color(51, 51, 51));
txtTotalQty.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtTotalQtyKeyTyped(evt);
}
});
jLabel13.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel13.setForeground(new java.awt.Color(255, 255, 255));
jLabel13.setText("Total Beli");
123
txtTotalBeli.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTotalBeli.setForeground(new java.awt.Color(51, 51, 51));
txtTotalBeli.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtTotalBeliKeyTyped(evt);
}
});
jLabel14.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel14.setForeground(new java.awt.Color(255, 255, 255));
jLabel14.setText("Total Transaksi");
txtTotalTrans.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtTotalTrans.setForeground(new java.awt.Color(51, 51, 51));
txtTotalTrans.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
txtTotalTransKeyTyped(evt);
}
});
cmbTandaTerima.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
cmbTandaTerima.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmbTandaTerimaActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new
javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addComponent(jSeparator1,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
124
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel9,
javax.swing.GroupLayout.PREFERRED_SIZE, 107,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(txtTglTandaTerima))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING, false)
.addComponent(jLabel3,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel2,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel4,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addComponent(txtNoInvoice,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtNoTrans,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cmbTandaTerima,
javax.swing.GroupLayout.Alignment.LEADING, 0, 160,
Short.MAX_VALUE))))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING, false)
.addComponent(jLabel8,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel7,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
125
.addComponent(jLabel5,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel10)
.addGap(16, 16, 16)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addComponent(txtSupplier,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtNoPO,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtTglPO)
.addComponent(txtTglKirim,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.PREFERRED_SIZE, 160,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.LEADING, false)
.addComponent(jLabel14,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel13,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel12,
javax.swing.GroupLayout.PREFERRED_SIZE, 72,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING, false)
.addComponent(txtTotalBeli,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE)
.addComponent(txtTotalQty,
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtTotalTrans))))
.addContainerGap(188, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
126
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADI
NG)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.TRAILING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel12)
.addComponent(txtTotalQty,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel13)
.addComponent(txtTotalBeli,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel14)
.addComponent(txtTotalTrans,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(32, 32, 32))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1,
javax.swing.GroupLayout.PREFERRED_SIZE, 10,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
127
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel2)
.addComponent(txtNoTrans,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel5)
.addComponent(txtNoPO,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel3)
.addComponent(txtNoInvoice,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7)
.addComponent(txtSupplier,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
.addComponent(jLabel4)
.addComponent(jLabel8)
.addComponent(txtTglPO,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cmbTandaTerima,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignm
ent.BASELINE)
128
.addComponent(jLabel9)
.addComponent(txtTglTandaTerima,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10)
.addComponent(txtTglKirim,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(21, Short.MAX_VALUE))
);
tableTransaksi.setFont(new java.awt.Font("Segoe UI", 0, 12)); // NOI18N
tableTransaksi.setForeground(new java.awt.Color(51, 51, 51));
tableTransaksi.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"No. Transaksi", "No. Tanda Terima", "No. Invoice", "Total Transaksi"
}
));
jScrollPane1.setViewportView(tableTransaksi);
jLabel6.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
jLabel6.setForeground(new java.awt.Color(51, 51, 51));
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING);
jLabel6.setText("Cari");
txtCari.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
txtCari.setForeground(new java.awt.Color(51, 51, 51));
txtCari.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
txtCariKeyPressed(evt);
}
});
javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
129
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA
DING)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 985, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS
ELINE)
.addComponent(jLabel6)
.addComponent(txtCari,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 294, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void txtNoTransKeyTyped(java.awt.event.KeyEvent evt) {
}
private void txtCariKeyPressed(java.awt.event.KeyEvent evt) {
130
if(evt.getKeyCode()==KeyEvent.VK_ENTER){
cariTable(txtCari.getText());
}
}
private void txtNoPOKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
private void txtSupplierKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
private void txtTglPOKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
private void txtTglTandaTerimaActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
}
private void txtTglKirimKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
private void txtTotalQtyKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
private void txtTotalBeliKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
private void txtTotalTransKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
}
private void cmbTandaTerimaActionPerformed(java.awt.event.ActionEvent
evt) {
showDataPenerimaanBarang();
}
// Variables declaration - do not modify
private javax.swing.JComboBox<String> cmbTandaTerima;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
131
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTable tableTransaksi;
private javax.swing.JTextField txtCari;
private javax.swing.JTextField txtNoInvoice;
private javax.swing.JTextField txtNoPO;
private javax.swing.JTextField txtNoTrans;
private javax.swing.JTextField txtSupplier;
private javax.swing.JTextField txtTglKirim;
private javax.swing.JTextField txtTglPO;
private javax.swing.JTextField txtTglTandaTerima;
private javax.swing.JTextField txtTotalBeli;
private javax.swing.JTextField txtTotalQty;
private javax.swing.JTextField txtTotalTrans;
// End of variables declaration
@Override
public void aktif() {
cmbTandaTerima.setEnabled(true);
txtCari.setEnabled(true);
txtNoInvoice.setEnabled(true);
bersih();
seleksiBaris();
renderTableTotal();
formUtama.getSimpanBtn().setEnabled(true);
}
@Override
public void bersih() {
txtNoTrans.setText(transCont.nomorOtomatis());
txtNoInvoice.setText("");
txtTglTandaTerima.setText("");
txtNoPO.setText("");
txtSupplier.setText("");
txtTglPO.setText("");
txtTglKirim.setText("");
132
txtTotalQty.setText("");
txtTotalBeli.setText("");
txtTotalTrans.setText("");
txtCari.setText("");
comboBoxTandaTerima();
showTable();
}
@Override
public void simpan(){
if(txtNoInvoice.getText().isEmpty() || txtNoPO.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Data belum lengkap!");
return;
}
if(cmbTandaTerima.getItemCount() == 0){
JOptionPane.showMessageDialog(null, "Data tanda terima kosong!");
return;
}else{
List<Object[]> list =
transCont.searchTransaksiPembelian(cmbTandaTerima.getSelectedItem().toString
());
if(!list.isEmpty()){
JOptionPane.showMessageDialog(null, "No tanda terima eksis!");
}else{
try {
transaksi = new TransaksiPembelian();
transaksi.setNoTransaksi(txtNoTrans.getText());
transaksi.setNoTandaTerima(cmbTandaTerima.getSelectedItem().toString());
transaksi.setNoInvoice(txtNoInvoice.getText());
Number number = myFormatter.parse(txtTotalTrans.getText());
transaksi.setTotalTransaksi(number.doubleValue());
transCont.save(transaksi);
JOptionPane.showMessageDialog(null, "Data berhasil disimpan!");
bersih();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
@Override
public void hapus() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
133
}
@Override
public void cari() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
@Override
public void tampil() {
throw new UnsupportedOperationException("Not supported yet."); //To
change body of generated methods, choose Tools | Templates.
}
}
3.5.2. Blackbox Testing
A. Form Login Bagian Purchasing
Tabel III.15
Hasil Pengujian Blackbox Testing Form Login
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
“Username
tidak
ditemukan!”
Sesuai
harapan
Valid
2. Mengetikkan
Username dan
Password
tidak diisi atau
kosong
kemudian klik
tombol login
Username:
Pch1
Password:
(kosong)
Sistem akan
menolak akses
dan
menampilkan
pesan
“Masukan
Password”
Sesuai
harapan
Valid
3. Username
tidak diisi
(kosong) dan
Password diisi
kemudian klik
tombol login
Username:
(kosong)
Password:
1234
Sistem akan
menolak akses
dan
menampilkan
pesan
“Masukan
Username”
Sesuai
harapan
Valid
134
4. Mengetikkan
salah satu
kondisi salah
pada
Username
atau Password
kemudian klik
tombol login
Username:
Pch1
(benar)
Password:
admin
(salah)
Sistem akan
menolak akses
dan
menampilkan
pesan
“Password
salah”
Sesuai
harapan
Valid
5. Mengetikkan
Username dan
Password
dengan data
yang benar
kemudian klik
tombol login
Username:
Pch1
(benar)
Password:
1234
(benar)
Sistem akan
menerima
akses login dan
akan
menampilkan
pesan “Selamat
datang”
Sesuai
harapan
Valid
B. Form Tambah Data Supplier
Tabel III.16
Hasil Pengujian Blackbox Testing Form Tambah Supplier
No. Skenario
pengujian
Test case Hasil yang
diharapkan
Hasil
pengujian
Kesimpulan
1. Tidak mengisi
semua form
kemudian klik
simpan
Kode Supplier:
(kosong)
Nama
Supplier:
(kosong)
Telepon:
(kosong)
Kota:
(kosong)
Alamat:
(kosong)
Sistem akan
menolak dan
menampilkan
pesan “Data
belum
lengkap!”
Sesuai
harapan
Valid
2. Mengetikkan
di form
dengan salah
satu tidak di
isi, kemudian
klik simpan
Kode Supplier:
(TLA)
Nama
Supplier:
(Tritunggal
Laris Abadi)
Telepon:
(0215359373)
Kota:
(Bandung)
Alamat:
Sistem akan
menolak dan
menampilkan
pesan “Data
belum
lengkap!”
Sesuai
harapan
Valid
135
(kosong)
3. Mengetikkan
di form
dengan data
benar
Kode Supplier:
(TLA)
Nama
Supplier:
(Tritunggal
Laris Abadi)
Telepon:
(0215359373)
Kota:
(Bandung)
Alamat:
(Jl. Pahlawan
No.12)
Sistem akan
dan
menampilkan
pesan “Data
baru berhasil
disimpan”
Sesuai
harapan
Valid
4. Mengetikkan
di form
dengan kode
barang yang
sudah ada atau
sudah terdaftar
sebelumnya
Kode Supplier:
(TLA)
Nama
Supplier:
(Tritunggal
Laris Abadi)
Telepon:
(0215359373)
Kota:
(Bandung)
Alamat:
(Jl. Pahlawan
No.12)
Sistem akan
menampilkan
pesan “Data
Eksis”
Sesuai
harapan
Valid
C. Form Transaksi Pembelian
Tabel III.17
Hasil Pengujian Blackbox Testing Form Transaksi Pembelian
No. Skenario
pengujian
Test case Hasil yang
diharapkan
Hasil
pengujian
Kesimpulan
1. Tidak mengisi
semua form
kemudian klik
simpan
No.Invoice:
(kosong)
Sistem akan
menolak akses
dan
menampilkan
pesan “Data
belum
lengkap!”
Sesuai
harapan
Valid
2. Mengetikkan
di form
dengan data
No.Invoice
20212
Sistem akan
menampilkan
pesan “Data
Sesuai
harapan
Valid
136
benar Password:
(kosong)
berhasil
disimpan”
3.5.3. Spesifikasi Hardware dan Software
Tabel III.18
Spesifikasi Hardware dan Software
Kebutuhan Keterangan
Sistem Windows 8.1 64-bit
Processor Intel(R) Celeron(R) CPU N2840 @2.16 GHz
RAM 2 GB
Harddisk 400 GB
Monitor 11”LED
Keyboard 108 key
Printer Jet Laser
Mouse Standard
Software Kebutuhan menjalankan aplikasi secara local :
Bahasa script programming : Netbeans IDE 8.1
DBMS : MYSQL