Upload
others
View
11
Download
0
Embed Size (px)
Citation preview
26
BAB III
PEMBAHASAN
3.1 Tinjauan Perusahaan
3.1.1. Sejarah Perusahaan
CV. Karunia Mas Service adalah perusahaan yang bergerak dibidang sewa
forklift untuk wilayah Jabodetabek dan beberapa kota di Pulau Jawa yaitu Jawa
Tengah dan Jawa Timur. CV. Karunia Mas Service beralamat di Jalan Alinda
Kencana Permai I Blok B2 No. 1-2, Kelurahan Kaliabang Tengah, Kecamatan
Bekasi Utara, Kota Bekasi 17125.
CV. Karunia Mas Service didirikan pada tahun 2000 oleh Bapak Hartanto
yang lahir di Magelang, 19 Agustus 1966. Sebelum berdirinya perusahaan ini,
Bapak Hartanto juga merupakan seorang pegawai biasa yaitu bekerja menjadi
seorang mekanik diperusahaan cukup ternama. Namun pada tahun 1997 terjadi
krisis moneter sehingga diperusahaan tersebut harus melakukan pengurangan
karyawan. Sejak saat itu Bapak Hartanto memutuskan untuk membuka usaha
sendiri yaitu memperbaiki forklift diperusahaan-perusahaan yang membutuhkan
tenaga ahli untuk perbaikan. Setelah beberapa tahun membuka usaha service
forklift, akhirnya Bapak Hartanto melihat peluang bisnis untuk membuat
usahanya semakin maju dan berkembang dengan membuka usaha sewa forklift
dan service forklift. Hingga saat ini terhitung forklift yang dimiliki sebanyak 250
forklift dengan berbagai jenis dan merek. Serta memiliki banyak customer dan
27
supplier di berbagai wilayah Jabodetabek dan beberapa kota di Pulau Jawa yaitu
Jawa Tengah dan Jawa Timur.
CV. Karunia Mas Service berkomitmen untuk selalu konsisten dalam
memberikan pelayanan kepada customer dan memiliki mekanik yang terlatih serta
dukungan peralatan yang lengkap.
Suatu perusahaan yang baik pastilah memiliki visi dan misi agar kinerja
perusahaan memiliki tujuan nyata saat perusahaan berjalan.
Visi dan Misi dari CV. Karunia Mas Service, yaitu :
1. Visi
a. Menjadi perusahaan yang sukses dan maju.
b. Menjadi perusahaan jasa yang berkualitas.
2. Misi
a. Memberikan layanan yang terbaik.
b. Menjadi mitra kerja terpercaya sehingga customer merasa puas dengan
layanan yang diberikan.
c. Memberikan produk-produk yang berkualitas dan harga terjangkau.
28
3.1.2. Struktur Organisasi dan Fungsi
STRUKTUR ORGANISASI
CV KARUNIA MAS SERVICE
TAHUN 2018
Sumber : CV Karunia Mas Service
Gambar III. 1
Struktur Orgaisasi CV Karunia Mas Service
29
Fungsi dari bagian-bagian struktur organisasi yang ada di CV. Karunia
Mas Service adalah :
1. Direktur
a. Mengkoordinir semua kegiatan yang berhubungan dengan
ketenagakerjaan dan membuat peraturan bagi karyawan.
b. Merencanakan serta mengembangkan sumber-sumber pendapatan
kekayaan perusahaan.
c. Memutuskan dan menentukan kebijakan dan peraturan yang ada
diperusahaan.
d. Berwenang menandatngani bilyet giro atau cek.
2. Direktur Keuangan
a. Mengkoordinasi dan mengontrol perencanaan pembayaran.
b. Merencanakan, mengontrol dan mengkoordinasikan arus kas
perusahaan (cash flow), terutama pengeloaan piutang dan hutang
untuk memastikan ketersediaan dana untuk operasional.
c. Merencanakan dan mengkonsolidasikan perpajakan seluruh
perusahaan untuk memastikan efisiensi biaya dan keptuhan terhadap
peraturan perpajakan.
3. General Manager
a. Mengelola perusahaan sesuai dengan visi dan misi perusahaan demi
mencapai tujuan yang telah ditentukan.
30
b. Merencanakan dan mengontrol kebijakan perusahaan agar dapat
berjalan maksimal.
4. Sekretaris
a. Menyiapkan agenda rapat pimpinan.
b. Menerima telepon untuk pimpinan.
c. Menerima surat dan email untuk pimpinan.
5. Administrasi & Finance
a. Membuat perencanaan keuangan mulai dari perencanaan pinjaman,
penerimaan, pengeluaran sampai pembayaran.
b. Menyusun laporan keuangan tahunan.
c. Mengurus surat-surat berharga.
d. Menangani pembayaran atas kewajiban dan membuat catatan
transaksi kas.
e. Membuat invoice dan menangani penerimaan kas dari customer.
6. Gudang
a. Membuat perencanaan pengadaan barang.
b. Melakukan penerimaan barang datang dari supplier.
c. Bertanggung jawab atas keluar dan masuk barang yang tersedia.
d. Membuat laporan atas stock barang.
31
7. Supervisor
a. Memimpin breafing mekanik.
b. Membuat jadwal pekerjaan harian untuk mekanik.
c. Mampu menerangkan job description dengan baik kepada mekanik.
d. Menegakkan aturan yang telah dibuat oleh perusahaan agar tercipta
kedisiplinan kerja.
e. Mengontrol dan memberikan evaluasi terhadap kinerja mekanik.
f. Memberikan info pada manajemen mengenai kinerja mekanik.
8. Asisten Supervisor
a. Mengontrol kehadiran mekanik.
b. Membantu mereview hasil kinerja mekanik.
c. Membantu menampung keluhan customer untuk disampaikan
kepada supervisor dan manager
9. Foreman Elektrik dan Diesel
a. Bertanggung jawab mengarahkan mekanik dalam mempersiapkan
pekerjaan yang akan dilaksanakan.
b. Bertanggung jawab dalam mencapai atas kualitas yang telah
dikerjakan.
32
c. Bertanggung jawab membina tim kerja agar tetap menjaga
keselamatan kerja.
10. Mekanik
a. Menganalisa dan mengatasi kerusakan alat berat.
b. Melaksanakan pemeliharaan mesin dengan cara mengidentifikasi
atau pengecekan pada seluruh bagian alat berat.
c. Menyiapkan tools, spare part sebelum melakukan perbaikan alat
berat.
d. Membuat laporan pekerjaan untuk dilaporkan ke customer dan
manajemen perusahaan.
3.2. Tinjauan Kasus
3.2.1. Proses Bisnis Sistem Berjalan
Pembelian spare part di CV. Karunia Mas Service diawali dengan bagian
gudang membuat permohonan pembelian spare part yang telah disetujui oleh
supervisor. Kemudian formulir tersebut diserahkan ke bagian admin untuk proses
pembuatan purchase order (PO). Purchase order (PO) tersebut diserahkan ke
direktur untuk disetujui. Lalu purchase order (PO) tersebut dikirim kepada
supplier melalui email agar bisa segera disiapkan spare part yang sudah dipesan.
Setelah spare part sudah lengkap dan sesuai dengan purchase order (PO), maka
supplier mengirimkan spare part ke CV. Karunia Mas Service. Setelah spare part
sampai, bagian gudang menerima spare part dan menandatangani surat jalan dari
supplier. Surat jalan berfungsi untuk dokumen tambahan penagihan. Kemudian
33
supplier mengirimkan invoice, faktur pajak, dan lampiran lain-lainnya sebagai
bukti penagihan atas barang yang dipesan.
Bagian admin akan menyimpan invoice yang akan dibayarkan 30 (tiga)
puluh hari setelah tanggal terima invoice atau tanggal jatuh tempo. Proses
pembayaran di CV. Karunia Mas Service ada dua cara yaitu menggunakan giro
dan transfer. Apabila pembayaran menggunakan giro, maka admin akan
menyiapkan dokumen dan giro yang harus disetujui oleh direktur. Setelah
disetujui maka admin akan memberikan info ke supplier bahwa giro sudah bisa
diambil dan kliring ke bank tujuan. Sedangkan pembayaran dengan transfer akan
dilakukan oleh admin, lalu bukti transfer diserahkan atau diemail ke supplier
sebagai bukti pembayaran. Lalu melaakukan pencatatan hutang dan arsip
dokumen.
34
3.2.2. Activity Diagram
Gambar III. 2
Activity Diagram Proses Bisnis Sistem Berjalan
35
3.2.3. Dokumen Masukkan
1. Nama Dokumen : Formulir Permintaan Barang
Fungsi : Untuk Mencatat Daftar Barang yang Akan Dibeli
Sumber : Bagian Gudang
Tujuan : Admin
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pembelian
Format : Lampiran A.1
2. Nama Dokumen : Purchase Order (PO)
Fungsi : Untuk Menunjukkan Barang yang Ingin Dibeli
di Supplier
Sumber : Admin
Tujuan : Supplier
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pembelian
Format : Lampiran A.2
36
3. Nama Dokumen : Data Barang
Fungsi : Untuk Mengetahui Data Barang
Sumber : Admin
Tujuan : Admin
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pembelian
Format : Lampiran A.3
3.2.4. Dokumen Keluaran
1. Nama Dokumen : Surat Jalan
Fungsi : Sebagai Bukti Pengiriman Barang dari Supplier
Sumber : Supplier
Tujuan : Bagian Gudang
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pengiriman Barang dari Supplier
Format : Lampiran B.1
2. Nama Dokumen : Invoice
Fungsi : Sebagai Bukti Penagihan yang Harus Dibayar
Sumber : Supplier
37
Tujuan : Admin
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Penagihan Pembelian Barang
Format : Lampiran B.2
3. Nama Dokumen : Faktur Pajak
Fungsi : Sebagai Bukti Pungutan Pajak Yang Dibuat Oleh
Supplier
Sumber : Supplier
Tujuan : Admin
Media : Kertas
Jumlah : Dua Lembar
Frekuensi : Setiap Terjadinya Penagihan Pembelian Barang
Format : Lampiran B.3
4. Nama Dokumen : List Hutang
Fungsi : Sebagai Media Pencatatan Hutang
Sumber : Admin
Tujuan : Admin
Media : Kertas
38
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pembelian Spare Part
Format : Lampiran B.4
5. Nama Dokumen : Giro
Fungsi : Sebagai Media Pembayaran Hutang Kepada
Supplier
Sumber : Admin
Tujuan : Supplier
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pembayaran
Format : Lampiran B.5
6. Nama Dokumen : Slip Pengiriman Uang
Fungsi : Sebagai Media Pembayaran Hutang Kepada
Supplier
Sumber : Admin
Tujuan : Supplier
Media : Kertas
Jumlah : Tiga Lembar
39
Frekuensi : Setiap Terjadinya Pembayaran
Format : Lampiran B.6
7. Nama Dokumen : Voucher Pengeluaran Kas
Fungsi : Sebagai Lapiran Dalam Pembayaran Hutang
Sumber : Admin
Tujuan : Admin
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pembayaran
Format : Lampiran B.7
8. Nama Dokumen : Laporan Pembayaran
Fungsi : Untuk Mengetahui Rincian Pembayaran
Sumber : Admin
Tujuan : Direktur
Media : Kertas
Jumlah : Satu Lembar
Frekuensi : Setiap Terjadinya Pembayaran
Format : Lampiran B.8
40
3.2.5. Permasalahan Pokok
Berdasarkan penelitian yang dilakukan, permasalahan yang timbul dalam
sistem pembelian spare part pada CV. Karunia Mas Service Bekasi adalah
sebagai berikut:
1. Proses pencarian dan pengolahan data pembelian berjalan lambat dan
masih manual sehingga menyebabkan sering hilangnya dokumen dan
menyebabkan kinerja menjadi kurang efektif dan efisien.
2. Hasil laporan data pembelian belum berjalan dengan cepat dan akurat.
3.2.6. Pemecahan Masalah
Setelah mengamati dan meneliti permasalahan yang terjadi di CV. Karunia
Mas Service Bekasi, maka salah satu solusi untuk memecahkan masalah dalam
proses pembelian yang terjadi di CV. Karunia Mas Service yaitu membuat
program terkomputerisasi sehingga membuat kinerja menjadi efektif dan efisien
serta mengurangi terjadinya kesalahan dan kehilangan dokumen.
3.3. Analisa Kebutuhan Software
3.3.1. Analisis Kebutuhan
Setelah menjalani analisa dan penelitian yang sedang berjalan di CV.
Karunia Mas Sevice Bekasi, maka selanjutnya akan dibahas mengenai rancangan
sistem usulan yang diinginkan. Berdasarkan usulan yang diinginkan sesuai dengan
kebutuhan, maka langkah-langkah berikutnya yaitu perancangan atau design
sistem usulan untuk memperbaiki sistem yang lama dengan memberi gambaran
atau pandangan yang jelas sesuai proses design sistem dari awal hingga akhir
penelitian. Berikut adalah analisa kebutuhan dari sistem yang akan dibuat :
41
Halaman Admin
A.1 Admin Mengakses Login
A.2 Admin Mengelola Data User
A.3 Admin Mengelola Data Barang
A.4 Admin Mengelola Data Supplier
A.5 Admin Mengelola Data Perkiraan
A.6 Admin Mengelola Transaksi Pemesanan Barang
A.7 Admin Mengelola Transaksi Pembelian
A.8 Admin Mengelola Transaksi Jurnal
A.9 Admin Mengelola Transaksi Stok
A.10 Admin Mencetak Laporan Pemesanan Barang
A.11 Admin Mencetak Laporan Pembayaran
A.12 Admin Mencetak Laporan Jurnal
A.13 Admin Mencetak Laporan Stok
A.14 Admin Mengakses Logout
Halaman Direktur
B.1 Bagian Direktur Mengakses Login
B.2 Bagian Direktur Mencetak Laporan Pemesanan Barang
B.3 Bagian Direktur Mencetak Laporan Pembayaran
42
B.4 Bagian Direktur Mencetak Laporan Jurnal
B.5 Bagian Direktur Mencetak Laporan Stok
B.6 Bagian Direktur Mengakses Logout
3.3.2. Use Case Diagram
Use case diagram adalah suatu model yang dangat fungsional dalam
sebuah sistem yang menggunakan actor dan use case. Sedangkan pengertian dari
use case sendiri adalah layanan atau fungsi-fungsi yang tersedia pada sistem
untuk penggunannya. Use case diagram menggambarkan efek fungsionalitas yang
telah diharapkan oleh sistem. Use case diagram dapat sangat membantu bila kita
sedang menyusun requitment sebuah sistem, mengkomunikasikan sebuah
rancangan aplikasi dengan konsumen, serta merancang test case untuk semua
feature yang ada pada sistem. Aturannya, sebuah use case dapat di masukan lebih
dari use case lain, sehingga duplikasi fungsionalitas dapat dihindari dengan cara
menarik keluar fungsional yang common.
43
Gambar III.3
Use Case Diagram Halaman Admin
44
Tabel III.1
Deskripsi Use Case Halaman Admin
Use Case Narative Admin
Tujuan Admin dapat melihat dan mengakses seluruh
halaman yang ada di dalam program pembelian
Deskripsi
Sistem ini mengharuskan admin untuk login agar bisa
masuk ke dalam program dan melihat serta
mengakses halaman yang ada di program pembelian
antara lain halaman data user, data barang, data
supplier, data akun perkiraan, pemesanan barang,
penerimaan barang, pembayaran supplier, jurnal,
laporan pemesanan laporan pembayaran supplier,
laporan stok dan laporan jurnal
Skenario Utama
Aktor Admin
Kondisi Awal Aktor Melakukan Login
Aksi Aktor Reaksi Sistem
1. Aktor Memilih Data
User
Sistem ini akan menampilkan form pengisian data
user
2. Aktor Memilih Data
Barang
Sistem ini akan menampilkan form pengisian barang
dan data barang
3. Aktor Memilih Data
Supplier
Sistem ini akan menampilkan form pengisian
supplier dan data supplier
4. Aktor Memilih Data Akun
Perkiraan
Sistem ini akan menampilkan form pengisian akun
perkiraan dan data akun perkiraan
5. Aktor Memilih Transaksi
Pemesanan Barang
Sistem ini akan menampilkan form pengisian
pemesanan barang yang akan dilakukan oleh admin
6. Aktor Memilih Transaksi
Penerimaan Barang
Sistem ini akan menampilkan form untuk memcatat
penerimaan barang
7. Aktor Memilih Transaksi
Pembayaran
Sistem ini akan menampilkan form pengisian
pembayaran hutang kepada supplier
8. Aktor Memilih Transaksi
Jurnal
Sistem ini akan menampilkan form pengisian jurnal
umum atas transaksi pembelian dan pembayaran
yang terjadi
9. Aktor Memilih Laporan
Pemesanan Barang
Sistem ini akan menampilkan informasi pemesanan
barang
10. Aktor Memilih Laporan
Stok Barang Sistem ini akan menampilkan informasi stok barang
11. Aktor Memilih Laporan
Pembayaran
Sistem ini akan menampilkan informasi pembayaran
hutang kepada supplier
12. Aktor Memilih Laporan
Jurnal
Sistem ini akan menampilkan informasi jurnal umum
atas transaksi pembelian dan pembayaran yang telah
terjadi
13. Logout Sistem ini akan mengeluarkan user dari program
45
Gambar III. 4
Use Case Diagram Halaman Direktur
46
Tabel III.2
Deskripsi Use Case Halaman Direktur
Use Case Narative Direktur
Tujuan Direktur hanya dapat melihat halaman laporan yang
ada di dalam program pembelian
Deskripsi
Sistem ini mengharuskan direktur untuk login agar
bisa masuk ke dalam program dan melihat halaman
laporan yang ada di dalam program pembelian seperti
laporan pemesanan barang, laporan pembayaran
supplier, laporan stok dan laporan jurnal
Skenario Utama
Aktor Direktur
Kondisi Awal Aktor Melakukan Login
Aksi Aktor Reaksi Sistem
1. Aktor Memilih Laporan
Pemesanan Barang
Sistem ini akan menampilkan informasi pemesanan
barang
2. Aktor Memilih Laporan
Stok Barang Sistem ini akan menampilkan informasi stok barang
3. Aktor Memilih Laporan
Pembayaran
Sistem ini akan menampilkan informasi pembayaran
hutang kepada supplier
4. Aktor Memilih Laporan
Jurnal
Sistem ini akan menampilkan informasi jurnal umum
atas transaksi pembelian dan pembayaran yang telah
terjadi
5. Logout Sistem ini akan mengeluarkan user dari program
47
3.3.3. Activity Diagram
Gambar III. 5
Activity Diagram Data Barang
48
Gambar III. 6
Activity Diagram Data Perkiraan
49
Gambar III. 7
Activity Diagram Data Supplier
50
Gambar III. 8
Activity Diagram Data User
51
Gambar III. 9
Activity Diagram Transaksi Pemesanan Barang
52
Gambar III. 10
Activity Diagram Transaksi Penerimaan Barang
53
Gambar III. 11
Activity Diagram Pembayaran Supplier
54
Gambar III. 12
Activity Diagram Transaksi Jurnal
55
Gambar III. 13
Activity Diagram Laporan Pemesanan Barang
56
Gambar III. 14
Activity Diagram Laporan Stok
57
Gambar III. 15
Activity Diagram Laporan Pembayaran Supplier
58
Gambar III. 16
Activity Diagram Laporan Jurnal
59
3.4. Desain
3.4.1. Entity Relationship Diagram (ERD)
Gambar III. 17
Entity Relationship Diagram (ERD)
60
3.4.2. Logical Record Structure (LRS)
Gambar III. 18
Logical Record Structure (LRS)
3.4.3. Spesifikasi File
1. Spesifikasi File Data Barang
Nama Database : dbdata
Nama File : tblbarang
Tipe File : Master
Akses File : Random
Panjang Record : 135 karakter
Field Key : id_brg
61
Tabel III.3
Spesifikasi File Data Barang
No Elemen Data Akronim Tipe Panjan
g Keterangan
1 Identitas barang Id_brg Varchar 5 Primary Key
2 Tanggal barang Tgl_brg Date 10
3 Kode barang Kd_brg Varchar 10
4 Nama barang Nm_brg Varchar 30
5 Satuan barang Satuan_brg Varchar 7
6 Harga beli barang Hrg_beli_brg Integer 40
7 Kode supplier barang Kd_supplier_brg Varchar 8
8 Stock Stock Integer 25
2. Spesifikasi File Data Perkiraan
Nama Database : dbdata
Nama File : tblperkiraan
Tipe File : Master
Akses File : Random
Panjang Record : 55 karakter
Field Key : id_kir
Tabel III.4
Spesifikasi File Data Perkiraan
No Elemen Data Akronim Tipe Panjang Keterangan
1 Identitas perkiraan Id_kir Varchar 5 Primary Key
2 Tanggal perkiraan Tgl_kir Date 10
3 Kode perkiraan Kd_kir Varchar 10
4 Nama perkiraan Nm_kir Varchar 30
62
3. Spesifikasi File Data Supplier
Nama Database : dbdata
Nama File : tblsupplier
Tipe File : Master
Akses File : Random
Panjang Record : 195 karakter
Field Key : id_sup
Tabel III.5
Spesifikasi File Data Supplier
No Elemen Data Akronim Tipe Panjang Keterangan
1 Identitas supplier Id_sup Varchar 5 Primary Key
2 Tanggal supplier Tgl_sup Date 10
3 Kode supplier Kd_sup Varchar 10
4 Nama Supplier Nm_sup Varchar 30
5 Alamat supplier Alamat_sup Varchar 75
6 Nomor telepon
supplier No_tlp_sup Varchar 15
7 Email supplier Email_sup Varchar 50
4. Spesifikasi File Data User
Nama Database : dbdata
Nama File : tbluser
Tipe File : Master
Akses File : Random
63
Panjang Record : 45 karakter
Field Key : user
Tabel III.6
Spesifikasi File Data User
No Elemen Data Akronim Tipe Panjang Keterangan
1 User User Number 10 Primary Key
2 Password Password Number 10
3 Nama user Nm_user Varchar 10
4 Hak akses Hak_akses Varchar 15
5. Spesifikasi File Transaksi Pemesanan Barang
Nama Database : dbdata
Nama File : tblbeli
Tipe File : Transaksi
Akses File : Random
Panjang Record : 335 karakter
Field Key : id_beli
64
Tabel III.7
Spesifikasi File Transaksi Pemesanan Barang
No Elemen Data Akronim Tipe Panjang Keterangan
1 Identitas beli Id_beli Varchar 5 Primary Key
2 Tanggal beli Tgl_beli Date 10
3 Nomor PO No_po Varchar 20
4 Kode supplier Kd_sup Varchar 10
5 Alamat Alamat Varchar 75
6 Kode barang Kd_brg Varchar 15
7 Nama barang Nm_brg Varchar 30
8 Harga beli barang Hrg_beli_brg Integer 40
9 Jumlah beli Jml_beli Integer 20
10 Total Total Currency 80
11 Nama supplier Nm_sup Varchar 30
6. Spesifikasi File Pembayaran Supplier
Nama Database : dbdata
Nama File : tblpembayaran
Tipe File : Transaksi
Akses File : Random
Panjang Record : 295 karakter
Field Key : id_pembayaran
65
Tabel III.8
Spesifikasi File Pembayaran Supplier
No Elemen Data Akronim Tipe Panjang Keterangan
1 Identitas pembayaran Id_pembayaran Varchar 5 Primary Key
2 Nomor pembayaran No_pembayaran Number 30
3 Nomor PO No_po Varchar 20
4 Nama supplier Nm_supplier Varchar 10
5 Tanggal bayar Tgl_byr Date 20
6 Jenis pembayaran Jenis_pembayaran Varchar 10
7 Jumlah bayar Jml_bayar Interger 80
8 Nomor rekening No_rek Number 20
9 Nama nasabah Nm_nasabah Varchar 75
10 Catatan Catatan Varchar 25
7. Spesifikasi File Menu Jurnal
Nama Database : dbdata
Nama File : tbljurnal
Tipe File : Transaksi
Akses File : Random
Panjang Record : 315 karakter
Field Key : id_jurnal
66
Tabel III.9
Spesifikasi File Jurnal
No Elemen Data Akronim Tipe Panjang Keterangan
1 Identitas jurnal Id_jurnal Varchar 5 Primary Key
2 Tanggal transaksi Tgl_transaksi Date 15
3 Nomor jurnal No_jurnal Varchar 20
4 Nomor pembayaran No_pembayaran Number 25
5 Debet Debet Number 100
6 Kredit Kredit Number 100
7 Nama pembayaran Nm_pmbayaran Varchar 50
67
3.4.4. Sequence Diagram
Gambar III. 19
Sequence Diagram Pemesanan Barang
68
Gambar III. 20
Sequence Diagram Pembayaran Supplier
69
Gambar III. 21
Sequence Diagram Menu Jurnal
70
3.4.5. Deployment Diagram
Gambar III. 22
Deployment Diagram
71
3.4.6. User Interface
Pembuatan tampilan sangat diperlukan agar user dapat berinteraksi dengan
sistem, sehingga dibutuhkan perancangan secara detail mengenai tampilan
aplikasi berdasarkan informasi yang ditampilkan. Dalam sub bab ini akan
dijelaskan mengenai tampilan program (user interface) dari form-form yang ada
serta penjelasan singkat mengenai user interface. Adapun berikut user interface di
program pembelian CV. Karunia Mas Service:
1. Menu Login
Saat akan melakukan login, user harus memasukkan ID dan password terlebih
dahulu. Untuk admin isi ID : 1111 dan password : 030493. Sedangkan untuk
direktur isi ID : 1112 dan password : 5555. Kemudian klik masuk.
Gambar III. 23
Menu Login
2. Menu Utama
Setelah masuk akan tampil menu utama seperti dibawah ini. Menu utama
berisikan master data, transaksi dan laporan.
72
Gambar III. 24
Menu Utama
3. Menu Data Barang
Pada menu master data ada menu data barang. Data barang diisi sesuai barang
atau spare part yang dibeli oleh perusahaan. Berikut tampilan data barang.
Gambar III. 25
Menu Data Barang
4. Menu Data Perkiraan
Didalam menu master data ada juga data perkiraan. Data perkiraan ini diisi
dengan kode akun.
73
Gambar III. 26
Menu Data Perikiraan
5. Menu Data Supplier
Pada menu master data juga ada data supplier. Data supplier diisi oleh user
sesuai dengan Data supplier saat memesan barang atau spare part.
Gambar III. 27
Menu Data Supplier
6. Menu Data User
Pada menu master data juga ada data user. Data user diisi oleh admin sesuai
dengan data user yang akan menggunakan.
74
Gambar III. 28
Menu Data User
7. Menu Transaksi Pemesanan Barang
Selanjutnya ada menu transaksi. Didalam menu transaksi ada menu Pemesanan
barang. Pada menu transaksi pemesanan barang terdapat 2 form yang harus
diisi oleh user. Pada form pertama user mengisi tanggal, nomor PO, kode
supplier dan alamat pengiriman. Sedangkan pada form kedua user mengisi
kode barang, nama barang, harga dan quantity. Setelah itu muncul otomatis
subtotal, ppn dan total bayar barang yang dipesan oleh perusahaan.
Gambar III. 29
Menu Transaksi Pemesanan Barang 1
75
Gambar III. 30
Menu Transaksi Pemesanan Barang 2
8. Menu Transaksi Penerimaan Barang
Setelah user memesan barang, dan supplier mengirimkan barang maka user
akan mengisikan data penerimaan barang sesuai barang yang dipesan.
Gambar III. 31
Menu Transaksi Penerimaan Barang
76
9. Menu Transaksi Pembayaran Supplier
Saat user akan melakukan transaksi pembayaran, maka user harus mengisi
form seperti gambar dibawah ini.
Gambar III. 32
Menu Transaksi Pembayaran Supplier
10. Menu Jurnal
User mengisi menu jurnal sesuai dengan tanggal transaksi. Pada menu jurnal
terdapat 2 form yang harus diisi oleh user. Pada form pertama berisi tanggal
transaksi dan nomer jurnal umum. Selanjutnya pada form kedua berisi kode
akun, nama akun, debet dan kredit yang harus diisi oleh user.
Gambar III. 33
Menu Jurnal 1
77
Gambar III. 34
Menu Jurnal 2
11. Menu Laporan Pemesanan Barang
Menu laporan pembayaran ini berfungsi untuk melihat dan mencetak spare
part apa saja yang sudah dipesan ke supplier. Untuk melihat laporan
pembayaran dapat disesuaikan dengan tanggal yang diinginkan.
Gambar III. 35
Menu Laporan Pemesanan Barang
78
Gambar III. 36
Laporan Pemesanan Barang
12. Menu Laporan Persediaan
Pada menu laporan stock user bisa melihat stock yang tersedia digudang. Dan
apabila ingin mencetak convert to excel terlebih dahulu.
Gambar III. 37
Menu Laporan Persediaan
79
13. Menu Laporan Pembayaran
Menu laporan pembayaran ini berfungsi untuk melihat dan mencetak
pembayaran hutang kepada supplier. Untuk melihat laporan pembayaran dapat
disesuaikan dengan tanggal yang diinginkan.
Gambar III. 38
Menu Laporan Pembayaran
14. Menu Laporan Jurnal
Menu laporan jurnal ini berfungsi untuk melihat dan mencetak jurnal yang
berisikan akun-akun yang kita catat. Untuk melihat laporan jurnal dapat
disesuaikan dengan tanggal yang diinginkan.
80
Gambar III. 39
Menu Laporan Jurnal
Gambar III. 40
Laporan Jurnal
81
3.5 Implementasi
3.5.1. Code Generation
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Aplikasi_Toko
{
public partial class pembelian : Form
{
public pembelian()
{
InitializeComponent();
}
int TotalCheckBoxes = 0;
int TotalCheckedCheckBoxes = 0;
CheckBox HeaderCheckBox = null;
bool IsHeaderCheckBoxClicked = false;
public DateTime a;
public DateTime b;
connect con = new connect();
AutoCompleteStringCollection srcname = new
AutoCompleteStringCollection();
public bool validtxtbox = true;
public bool cek = true;
private void pembelian_Load(object sender, EventArgs e)
{
AddHeaderCheckBox();
comboBox1.SelectedIndex = 0;
textBox1.Text = DateTime.Now.ToString("dd/MM/yyyy");
HeaderCheckBox.KeyUp += new
KeyEventHandler(HeaderCheckBox_KeyUp);
HeaderCheckBox.MouseClick += new
MouseEventHandler(HeaderCheckBox_MouseClick);
dataGridView1.CellValueChanged += new
DataGridViewCellEventHandler(dgvSelectAll_CellValueChanged);
dataGridView1.CurrentCellDirtyStateChanged += new
EventHandler(dgvSelectAll_CurrentCellDirtyStateChanged);
82
dataGridView1.CellPainting += new
DataGridViewCellPaintingEventHandler(dgvSelectAll_CellPainting);
loaddata();
autocompleteteks();
foreach (DataGridViewColumn dc in dataGridView1.Columns)
{
if (dc.Index.Equals(0))
{
dc.ReadOnly = false;
}
else
{
dc.ReadOnly = true;
}
}
}
public void loaddata()
{
string ld_data = "select to_char(tgl_beli, 'DD/MM/YYYY') as \"Tanggal\",
no_po as \"No_PO\", kd_sup as \"KD_Supplier\"," +
" nm_sup as \"Nama Supplier\", alamat as \"Alamat\", sum(total)
as \"Total Pembelian(Rp)\", sum(ppn) as \"PPN\", sum(total_bayar) as \"Total
Pembayaran\" from tblbeli GROUP BY tgl_beli, no_po, kd_sup, nm_sup,
alamat;";
DataTable dtbeli = con.openTable(ld_data);
dataGridView1.DataSource = dtbeli;
}
private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
get
{
CreateParams myCp = base.CreateParams;
myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
return myCp;
}
}
private void AddHeaderCheckBox()
{
HeaderCheckBox = new CheckBox();
HeaderCheckBox.Size = new Size(15, 15);
//Add the CheckBox into the DataGridView
this.dataGridView1.Controls.Add(HeaderCheckBox);
83
}
private void HeaderCheckBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
HeaderCheckBoxClick((CheckBox)sender);
}
private void HeaderCheckBoxClick(CheckBox HCheckBox)
{
IsHeaderCheckBoxClicked = true;
foreach (DataGridViewRow Row in dataGridView1.Rows)
((DataGridViewCheckBoxCell)Row.Cells["Pilih"]).Value =
HCheckBox.Checked;
dataGridView1.RefreshEdit();
TotalCheckedCheckBoxes = HCheckBox.Checked ? TotalCheckBoxes :
0;
IsHeaderCheckBoxClicked = false;
}
private void HeaderCheckBox_MouseClick(object sender, MouseEventArgs
e)
{
HeaderCheckBoxClick((CheckBox)sender);
}
private void dgvSelectAll_CellValueChanged(object sender,
DataGridViewCellEventArgs e)
{
if (!IsHeaderCheckBoxClicked)
RowCheckBoxClick((DataGridViewCheckBoxCell)dataGridView1[e.ColumnInd
ex, e.RowIndex]);
}
private void RowCheckBoxClick(DataGridViewCheckBoxCell RCheckBox)
{
if (RCheckBox != null)
{
//Modifiy Counter;
if ((bool)RCheckBox.Value && TotalCheckedCheckBoxes <
TotalCheckBoxes)
TotalCheckedCheckBoxes++;
else if (TotalCheckedCheckBoxes > 0)
84
TotalCheckedCheckBoxes--;
//Change state of the header CheckBox.
if (TotalCheckedCheckBoxes < TotalCheckBoxes)
HeaderCheckBox.Checked = false;
else if (TotalCheckedCheckBoxes == TotalCheckBoxes)
HeaderCheckBox.Checked = true;
}
}
private void dgvSelectAll_CurrentCellDirtyStateChanged(object sender,
EventArgs e)
{
if (dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dgvSelectAll_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == 0)
ResetHeaderCheckBoxLocation(e.ColumnIndex, e.RowIndex);
}
private void ResetHeaderCheckBoxLocation(int ColumnIndex, int
RowIndex)
{
//Get the column header cell bounds
Rectangle oRectangle =
this.dataGridView1.GetCellDisplayRectangle(ColumnIndex, RowIndex, true);
Point oPoint = new Point();
oPoint.X = oRectangle.Location.X + (oRectangle.Width -
HeaderCheckBox.Width) / 2 + 1;
oPoint.Y = oRectangle.Location.Y + (oRectangle.Height -
HeaderCheckBox.Height) / 2 + 1;
//Change the location of the CheckBox to make it stay on the header
HeaderCheckBox.Location = oPoint;
}
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
public void aktif()
{
85
dateTimePicker1.Enabled = true;
textBox3.Enabled = true;
textBox4.Enabled = true;
textBox5.Enabled = true;
}
public void tdk_aktif()
{
dateTimePicker1.Enabled = false;
textBox3.Enabled = false;
textBox4.Enabled = false;
textBox5.Enabled = false;
}
public void hapus()
{
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
textBox5.Clear();
}
private void button1_Click(object sender, EventArgs e)
{
cek = true;
hapus();
aktif();
textBox2.Focus();
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = true;
button5.Enabled = true;
}
private void dateTimePicker1_CloseUp(object sender, EventArgs e)
{
a = this.dateTimePicker1.Value;
textBox1.Text = a.ToString("dd/MM/yyyy");
textBox2.Focus();
}
void validateModuleDetails()
{
//untuk mengecek semua textbox apakah sudah terisi
validtxtbox = true;
foreach (Control control in this.Controls)
{
86
if (control is TextBox)
{
TextBox textbox = control as TextBox;
if (textbox.Name != "textBox7")
{
validtxtbox &= !string.IsNullOrWhiteSpace(textbox.Text);
}
}
}
}
public void autocompleteteks()
{
string grab_kd_supply = "select kd_sup from tblsupplier";
DataTable kd_sup = con.openTable(grab_kd_supply);
//Untuk Merubah dari Datatable colom ke List
List<string> list = kd_sup.AsEnumerable()
.Select(r => r.Field<string>("kd_sup"))
.ToList();
//Untuk Membuat Auto Complete Di TeksBox
foreach (string item in list)
{
srcname.Add(item);
}
textBox4.AutoCompleteCustomSource = srcname;
textBox4.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox4.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
private void button2_Click(object sender, EventArgs e)
{
if (textBox2.Text != string.Empty)
{
aktif();
textBox2.Enabled = false;
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = true;
button5.Enabled = true;
cek = false;
dataGridView1.Enabled = false;
}
else
{
87
MessageBox.Show("Pilih Salah Satu Data Terlebih Dahulu");
}
}
private void button3_Click(object sender, EventArgs e)
{
int totalceklist = 0; ;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) == true)
{
totalceklist = +1;
}
}
if (totalceklist != 0)
{
if (MessageBox.Show("Apakah Kamu Yakin Ingin Menghapus Data Ini
?", "Hapus", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
DialogResult.Yes)
{
string no_beli;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
no_beli = dataGridView1.Rows[i].Cells[2].Value.ToString();
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) ==
true)
{
string delete = string.Format("delete from tblbeli where no_po =
'{0}';", no_beli);
con.executeQuery(delete);
}
}
MessageBox.Show("Data Berhasil Di Hapus", "Sukses",
MessageBoxButtons.OK, MessageBoxIcon.Information);
loaddata();
hapus();
}
}
else
{
MessageBox.Show("Ceklist Salah Satu Data Untuk Menghapusnya",
"Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void button4_Click(object sender, EventArgs e)
{
if (cek == true)
88
{
try
{
validateModuleDetails();
if (validtxtbox == true)
{
sendvalue.tgl_beli = textBox1.Text;
sendvalue.nm_sup = textBox2.Text;
sendvalue.no_po = textBox3.Text;
sendvalue.kd_sup = textBox4.Text;
sendvalue.alamat = textBox5.Text;
chl_pembelian beli = new chl_pembelian(this);
beli.ShowDialog();
loaddata();
}
else
{
MessageBox.Show("Lengkapi Semua Field Yang Kosong",
"Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception)
{
MessageBox.Show("Error Saat Input Ke Database", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
try
{
validateModuleDetails();
if (validtxtbox == true)
{
string updt_db = string.Format("update tblbeli set tgl_beli =
to_date('{0}', 'DD-MM-YYYY'), no_po = '{1}', kd_sup = '{2}', nm_sup = '{3}',
alamat = '{4}' where no_po = '{1}'",
textBox1.Text, textBox3.Text, textBox4.Text,
textBox2.Text, textBox5.Text);
con.executeQuery(updt_db);
loaddata();
MessageBox.Show("Data Berhasil Di Perbaharui", "Berhasil",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tdk_aktif();
hapus();
89
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = false;
button5.Enabled = false;
dataGridView1.Enabled = true;
}
else
{
MessageBox.Show("Lengkapi Semua Field Yang Kosong",
"Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception)
{
MessageBox.Show("Error Saat Input Ke Database", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void button5_Click(object sender, EventArgs e)
{
tdk_aktif();
hapus();
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = false;
button5.Enabled = false;
dataGridView1.Enabled = true;
}
private void dataGridView1_CellClick(object sender,
DataGridViewCellEventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox3.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textBox4.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[4].Value.ToString();
textBox5.Text = dataGridView1.CurrentRow.Cells[5].Value.ToString();
}
public static class sendvalue
{
90
public static string tgl_beli { get; set; }
public static string nm_sup { get; set; }
public static string no_po { get; set; }
public static string kd_sup { get; set; }
public static string alamat { get; set; }
public static string tgl_tempo { get; set; }
}
private void dataGridView1_CellDoubleClick(object sender,
DataGridViewCellEventArgs e)
{
sendvalue.tgl_beli = textBox1.Text;
sendvalue.nm_sup = textBox2.Text;
sendvalue.no_po = textBox3.Text;
sendvalue.kd_sup = textBox4.Text;
sendvalue.alamat = textBox5.Text;
chl_pembelian beli = new chl_pembelian(this);
beli.ShowDialog();
}
private void textBox7_TextChanged(object sender, EventArgs e)
{
if (textBox7.Text != string.Empty)
{
try
{
string pilihan = comboBox1.Text;
if (pilihan == "No PO")
{
string kd_sup_cri = string.Format("select to_char(tgl_beli,
'DD/MM/YYYY') as \"Tanggal\", no_po as \"No_PO\", kd_sup as
\"KD_Supplier\"," +
" nm_sup as \"Nama Supplier\", alamat as \"Alamat\", sum(total)
as \"Total Pembelian(Rp)\", sum(ppn) as \"PPN\", sum(total_bayar) as \"Total
Pembayaran\" from tblbeli where no_po ilike '{0}%' GROUP BY tgl_beli, no_po,
kd_sup, nm_sup, alamat;", textBox7.Text);
DataTable kd_sup_c = con.openTable(kd_sup_cri);
dataGridView1.DataSource = kd_sup_c;
}
else
{
string nm_sup_cri = string.Format("select to_char(tgl_beli,
'DD/MM/YYYY') as \"Tanggal\", no_po as \"No_PO\", kd_sup as
\"KD_Supplier\"," +
" nm_sup as \"Nama Supplier\", alamat as \"Alamat\", sum(total)
as \"Total Pembelian(Rp)\", sum(ppn) as \"PPN\", sum(total_bayar) as \"Total
91
Pembayaran\" from tblbeli where kd_sup ilike '{0}%' GROUP BY tgl_beli,
no_po, kd_sup, nm_sup, alamat;", textBox7.Text);
DataTable nm_sup_c = con.openTable(nm_sup_cri);
dataGridView1.DataSource = nm_sup_c;
}
}
catch (Exception es)
{
MessageBox.Show("Error\n" + es.Message);
}
}
else
{
loaddata();
}
}
private void button6_Click(object sender, EventArgs e)
{
menuutama menu = new menuutama();
menu.Show();
Close();
}
private void textBox3_Leave(object sender, EventArgs e)
{
if (textBox3.Text != string.Empty)
{
string query = "select no_po from tblbeli where no_po = '" +
textBox3.Text.ToString() + "'";
DataTable ck_kd = con.openTable(query);
if (ck_kd.Rows.Count != 0)
{
MessageBox.Show("NO PO Sudah Ada");
textBox3.Clear();
textBox3.Focus();
}
}
}
private void textBox4_Leave(object sender, EventArgs e)
{
if (textBox4.Text != string.Empty)
{
string query = "select nm_sup from tblsupplier where kd_sup = '" +
textBox4.Text.ToString() + "'";
DataTable ck_kd = con.openTable(query);
if (ck_kd.Rows.Count != 0)
92
{
textBox2.Text = ck_kd.Rows[0][0].ToString();
}
}
}
}
}
Form Pembayaran Supplier
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Aplikasi_Toko
{
public partial class pembayaran : Form
{
int TotalCheckBoxes = 0;
int TotalCheckedCheckBoxes = 0;
CheckBox HeaderCheckBox = null;
bool IsHeaderCheckBoxClicked = false;
public DateTime a;
connect con = new connect();
AutoCompleteStringCollection srcname = new
AutoCompleteStringCollection();
public bool validtxtbox = true;
public bool cek = true;
public pembayaran()
{
InitializeComponent();
}
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
private void pembayaran_Load(object sender, EventArgs e)
{
AddHeaderCheckBox();
93
textBox4.Text = DateTime.Now.ToString("dd/MM/yyyy");
comboBox1.SelectedIndex = 0;
HeaderCheckBox.KeyUp += new
KeyEventHandler(HeaderCheckBox_KeyUp);
HeaderCheckBox.MouseClick += new
MouseEventHandler(HeaderCheckBox_MouseClick);
dataGridView1.CellValueChanged += new
DataGridViewCellEventHandler(dgvSelectAll_CellValueChanged);
dataGridView1.CurrentCellDirtyStateChanged += new
EventHandler(dgvSelectAll_CurrentCellDirtyStateChanged);
dataGridView1.CellPainting += new
DataGridViewCellPaintingEventHandler(dgvSelectAll_CellPainting);
loaddata();
autocompleteteks();
foreach (DataGridViewColumn dc in dataGridView1.Columns)
{
if (dc.Index.Equals(0))
{
dc.ReadOnly = false;
}
else
{
dc.ReadOnly = true;
}
}
}
public void loaddata()
{
string load = "select no_pembayaran as \"No Invoice\", no_po as \"No
PO\", nm_supplier as \"Nama Supplier\", to_char(tgl_bayar, 'DD-MM-YYYY') as
\"Tanggal Bayar\", jenis_pembayaran as \"Jenis Pembyaran\", "+
"jml_bayar as \"Jumlah Bayar\", no_rek as \"No Rek\",
nm_nasabah as \"Rekening Atas Nama\", catatan as \"Catatan\" from
tblpembayaran";
DataTable loaddata = con.openTable(load);
dataGridView1.DataSource = loaddata;
}
private void comboBox2_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
void validateModuleDetails()
{
//untuk mengecek semua textbox apakah sudah terisi
94
validtxtbox = true;
foreach (Control control in this.Controls)
{
if (control is TextBox)
{
TextBox textbox = control as TextBox;
if (textbox.Name != "textBox10")
{
validtxtbox &= !string.IsNullOrWhiteSpace(textbox.Text);
}
}
}
foreach (Control control in this.Controls)
{
if (control is ComboBox)
{
ComboBox cmb = control as ComboBox;
if (cmb.Name != "comboBox2")
{
validtxtbox &= !string.IsNullOrWhiteSpace(cmb.Text);
}
}
}
}
private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
get
{
CreateParams myCp = base.CreateParams;
myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
return myCp;
}
}
private void AddHeaderCheckBox()
{
HeaderCheckBox = new CheckBox();
HeaderCheckBox.Size = new Size(15, 15);
//Add the CheckBox into the DataGridView
this.dataGridView1.Controls.Add(HeaderCheckBox);
}
95
private void HeaderCheckBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space)
HeaderCheckBoxClick((CheckBox)sender);
}
private void HeaderCheckBoxClick(CheckBox HCheckBox)
{
IsHeaderCheckBoxClicked = true;
foreach (DataGridViewRow Row in dataGridView1.Rows)
((DataGridViewCheckBoxCell)Row.Cells["Pilih"]).Value =
HCheckBox.Checked;
dataGridView1.RefreshEdit();
TotalCheckedCheckBoxes = HCheckBox.Checked ? TotalCheckBoxes :
0;
IsHeaderCheckBoxClicked = false;
}
private void HeaderCheckBox_MouseClick(object sender, MouseEventArgs
e)
{
HeaderCheckBoxClick((CheckBox)sender);
}
private void dgvSelectAll_CellValueChanged(object sender,
DataGridViewCellEventArgs e)
{
if (!IsHeaderCheckBoxClicked)
RowCheckBoxClick((DataGridViewCheckBoxCell)dataGridView1[e.ColumnInd
ex, e.RowIndex]);
}
private void RowCheckBoxClick(DataGridViewCheckBoxCell RCheckBox)
{
if (RCheckBox != null)
{
//Modifiy Counter;
if ((bool)RCheckBox.Value && TotalCheckedCheckBoxes <
TotalCheckBoxes)
TotalCheckedCheckBoxes++;
else if (TotalCheckedCheckBoxes > 0)
TotalCheckedCheckBoxes--;
96
//Change state of the header CheckBox.
if (TotalCheckedCheckBoxes < TotalCheckBoxes)
HeaderCheckBox.Checked = false;
else if (TotalCheckedCheckBoxes == TotalCheckBoxes)
HeaderCheckBox.Checked = true;
}
}
private void dgvSelectAll_CurrentCellDirtyStateChanged(object sender,
EventArgs e)
{
if (dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dgvSelectAll_CellPainting(object sender,
DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == 0)
ResetHeaderCheckBoxLocation(e.ColumnIndex, e.RowIndex);
}
private void ResetHeaderCheckBoxLocation(int ColumnIndex, int
RowIndex)
{
//Get the column header cell bounds
Rectangle oRectangle =
this.dataGridView1.GetCellDisplayRectangle(ColumnIndex, RowIndex, true);
Point oPoint = new Point();
oPoint.X = oRectangle.Location.X + (oRectangle.Width -
HeaderCheckBox.Width) / 2 + 1;
oPoint.Y = oRectangle.Location.Y + (oRectangle.Height -
HeaderCheckBox.Height) / 2 + 1;
//Change the location of the CheckBox to make it stay on the header
HeaderCheckBox.Location = oPoint;
}
private void textBox6_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
97
private void textBox7_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
public void aktif()
{
dateTimePicker1.Enabled = true;
textBox1.Enabled = true;
textBox2.Enabled = true;
textBox5.Enabled = true;
textBox7.Enabled = true;
textBox9.Enabled = true;
comboBox2.Enabled = true;
}
public void tdk_aktif()
{
dateTimePicker1.Enabled = false;
textBox1.Enabled = false;
textBox2.Enabled = false;
textBox5.Enabled = false;
textBox7.Enabled = false;
textBox9.Enabled = false;
comboBox2.Enabled = false;
}
public void hapus()
{
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
textBox5.Clear();
textBox7.Clear();
textBox8.Clear();
textBox9.Clear();
comboBox2.Text = string.Empty;
}
private void button1_Click(object sender, EventArgs e)
{
98
cek = true;
hapus();
textBox4.Text = DateTime.Now.ToString("dd/MM/yyyy");
aktif();
textBox1.Focus();
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = true;
button5.Enabled = true;
}
public void autocompleteteks()
{
string grab_kd_supply = "select no_po from tblbeli";
DataTable kd_sup = con.openTable(grab_kd_supply);
//Untuk Merubah dari Datatable colom ke List
List<string> list = kd_sup.AsEnumerable()
.Select(r => r.Field<string>("no_po"))
.ToList();
//Untuk Membuat Auto Complete Di TeksBox
foreach (string item in list)
{
srcname.Add(item);
}
textBox2.AutoCompleteCustomSource = srcname;
textBox2.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox2.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
private void button2_Click(object sender, EventArgs e)
{
if (textBox2.Text != string.Empty)
{
aktif();
textBox2.Enabled = true;
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = true;
button5.Enabled = true;
cek = false;
dataGridView1.Enabled = false;
}
else
{
99
MessageBox.Show("Pilih Salah Satu Data Terlebih Dahulu");
}
}
private void button5_Click(object sender, EventArgs e)
{
tdk_aktif();
hapus();
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = false;
button5.Enabled = false;
dataGridView1.Enabled = true;
}
private void button3_Click(object sender, EventArgs e)
{
int totalceklist = 0; ;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) == true)
{
totalceklist = +1;
}
}
if (totalceklist != 0)
{
if (MessageBox.Show("Apakah Kamu Yakin Ingin Menghapus Data Ini
?", "Hapus", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
DialogResult.Yes)
{
string no_pembayaran;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
no_pembayaran =
dataGridView1.Rows[i].Cells[1].Value.ToString();
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[0].Value) ==
true)
{
string delete = string.Format("delete from tblpembayaran where
no_pembayaran = '{0}';", no_pembayaran);
con.executeQuery(delete);
}
}
MessageBox.Show("Data Berhasil Di Hapus", "Sukses",
MessageBoxButtons.OK, MessageBoxIcon.Information);
loaddata();
100
hapus();
}
}
else
{
MessageBox.Show("Ceklist Salah Satu Data Untuk Menghapusnya",
"Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void button4_Click(object sender, EventArgs e)
{
if (cek == true)
{
try
{
validateModuleDetails();
if (validtxtbox == true)
{
string inpt_db = string.Format("insert into tblpembayaran
(no_pembayaran, no_po, nm_supplier, tgl_bayar, jenis_pembayaran, jml_bayar,
no_rek, nm_nasabah, catatan) "+
"values ('{0}','{1}', '{2}',to_date('{3}', 'DD-
MM-YYYY'),'{4}',{5},'{6}','{7}','{8}');",
textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text,
comboBox2.Text, textBox8.Text, textBox7.Text, textBox9.Text, textBox5.Text);
con.executeQuery(inpt_db);
loaddata();
hapus();
textBox2.Focus();
MessageBox.Show("Data Berhasil Di Tambahkan", "Berhasil",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Lengkapi Semua Field Yang Kosong",
"Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception)
{
MessageBox.Show("Error Saat Input Ke Database", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
101
else
{
try
{
validateModuleDetails();
if (validtxtbox == true)
{
string updt_db = string.Format("update tblpembayaran set
no_pembayaran = '{0}', no_po = '{1}', nm_supplier = '{2}', tgl_bayar =
to_date('{3}', 'DD-MM-YYYY'), jenis_pembayaran = '{4}', jml_bayar = {5},
no_rek = '{6}', nm_nasabah = '{7}', catatan = '{8}' where no_pembayaran =
'{0}'",
textBox1.Text, textBox2.Text, textBox3.Text,
textBox4.Text, comboBox2.Text, textBox8.Text, textBox7.Text, textBox9.Text,
textBox5.Text);
con.executeQuery(updt_db);
loaddata();
MessageBox.Show("Data Berhasil Di Perbaharui", "Berhasil",
MessageBoxButtons.OK, MessageBoxIcon.Information);
tdk_aktif();
hapus();
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = false;
button5.Enabled = false;
dataGridView1.Enabled = true;
}
else
{
MessageBox.Show("Lengkapi Semua Field Yang Kosong",
"Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception)
{
MessageBox.Show("Error Saat Input Ke Database", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void textBox10_TextChanged(object sender, EventArgs e)
{
if (textBox10.Text != string.Empty)
102
{
try
{
string pilihan = comboBox1.Text;
if (pilihan == "No Invoice")
{
string kd_sup_cri = string.Format("select no_pembayaran as \"No
Invoice\", no_po as \"No PO\", nm_supplier as \"Nama Supplier\", tgl_bayar as
\"Tanggal Bayar\", jenis_pembayaran as \"Jenis Pembyaran\", " +
"jml_bayar as \"Jumlah Bayar\", no_rek as \"No Rek\",
nm_nasabah as \"Rekening Atas Nama\", catatan as \"Catatan\" from
tblpembayaran where no_pembayaran ILIKE '{0}%';", textBox10.Text);
DataTable kd_sup_c = con.openTable(kd_sup_cri);
dataGridView1.DataSource = kd_sup_c;
}
else
{
string nm_sup_cri = string.Format("select no_pembayaran as \"No
Invoice\", no_po as \"No PO\", nm_supplier as \"Nama Supplier\", tgl_bayar as
\"Tanggal Bayar\", jenis_pembayaran as \"Jenis Pembyaran\", "+
"jml_bayar as \"Jumlah Bayar\", no_rek as \"No Rek\",
nm_nasabah as \"Rekening Atas Nama\", catatan as \"Catatan\" from
tblpembayaran where no_po ILIKE '{0}%';", textBox10.Text);
DataTable nm_sup_c = con.openTable(nm_sup_cri);
dataGridView1.DataSource = nm_sup_c;
}
}
catch (Exception es)
{
MessageBox.Show("Error\n" + es.Message);
}
}
else
{
loaddata();
}
}
private void textBox2_Leave(object sender, EventArgs e)
{
string cek = "select * from tblpembayaran where no_po =
'"+textBox2.Text+"'";
DataTable ck = con.openTable(cek);
if (ck.Rows.Count == 0)
{
string aaa = textBox2.Text;
103
string get_value = "select nm_sup, sum(total) from tblbeli where no_po
= '" + aaa + "' group by nm_sup";
DataTable value_brg = con.openTable(get_value);
if (value_brg.Rows.Count != 0)
{
textBox3.Text = value_brg.Rows[0][0].ToString();
textBox8.Text = value_brg.Rows[0][1].ToString();
}
}
else
{
MessageBox.Show("No PO sudah pernah dibayarkan");
textBox2.Focus();
textBox2.Clear();
}
}
private void dateTimePicker1_CloseUp(object sender, EventArgs e)
{
a = this.dateTimePicker1.Value;
textBox4.Text = a.ToString("dd/MM/yyyy");
}
private void dataGridView1_CellClick(object sender,
DataGridViewCellEventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textBox3.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
textBox4.Text = dataGridView1.CurrentRow.Cells[4].Value.ToString();
comboBox2.Text =
dataGridView1.CurrentRow.Cells[5].Value.ToString();
textBox8.Text = dataGridView1.CurrentRow.Cells[6].Value.ToString();
textBox7.Text = dataGridView1.CurrentRow.Cells[7].Value.ToString();
textBox9.Text = dataGridView1.CurrentRow.Cells[8].Value.ToString();
textBox5.Text = dataGridView1.CurrentRow.Cells[9].Value.ToString();
}
private void textBox1_Leave(object sender, EventArgs e)
{
string cek = "select no_pembayaran from tblpembayaran where
no_pembayaran = '"+textBox1.Text+"'";
DataTable ck = con.openTable(cek);
if (ck.Rows.Count!=0)
{
MessageBox.Show("No Invoice Sudah Ada");
104
textBox1.Focus();
textBox1.Clear();
}
}
private void button6_Click(object sender, EventArgs e)
{
menuutama menu = new menuutama();
menu.Show();
Close();
}
}
}
105
3.5.2. Blackbox Testing
Tabel III.10
Hasil Pengujian Black Box Testing Form Login
No. Skenario
Pengujian Test Case
Hasil Yang
Diharapkan
Hasil
Pengujuan Kesimpulan
1
ID dan
Password
tidak diisi
kemudian klik
tombol masuk
ID: (kosong)
Password:
(kosong)
Sistem akan
menolak
akses dan
menampilkan
pesan
“Lengkapi
Semua Field
Yang Kosong”
Sesuai
harapan
Valid
2
ID di isi dan
Password
kosong
kemudian klik
tombol masuk
ID : 070195
Password :
(kosong)
Sistem akan
menolak
akses dan
menampilkan
pesan
“Lengkapi
Semua Field
Yang Kosong”
Sesuai
harapan
Valid
3
ID kosong
dan Password
diisi
kemudian klik
tombol masuk
ID : (kosong)
Password :
1234
Sistem akan
menolak
akses dan
menampilkan
pesan
“Lengkapi
Semua Field
Yang Kosong”
Sesuai
harapan
Valid
4
Mengetikkan
salah satu
kondisi salah
pada ID atau
Password
kemudian klik
tombol masuk
ID : 070195
(benar)
Password:
44444
(salah)
Sistem akan
menolak
akses dan
menampilkan
pesan “User
atau
Password
Salah
Silahkan
Coba
Kembali”
Sesuai
harapan
Valid
5
Mengetikkan
ID dan
Password
dengan data
yang benar
kemudian klik
tombol masuk
ID : 070195
(benar)
Password:
1234
(benar)
Sistem akan
menerima
akses masuk
dan akan
menampilkan
halaman
utama
Sesuai
harapan
Valid
106
3.5.3. Spesifikasi Hardware dan Software
Sistem yang baik akan berhasil jika diimpletasikan dengan baik dan
juga didukung dengan sarana baik pula. Sarana yang baik adalah sarana
yang di usulkan mempunyai kemampuan yang cukup dan kecepatan proses
yang memadai. Karena dengan sarana yang memadai secara otomatis akan
mendapatkan hasil yang baik. Oleh karena itu dalam penyelesaian program
ini kami menggunakan hardware dan software dengan spesifikasi sebagai
berikut:
Tabel III.11
Spesfikasi Hardware dan Software
Kebutuhan Keterangan
Sistem Widows 8 64-bit
Processore Intel
RAM 4 GB
Harddisk 130 GB
Monitor 14”LED
Keyboard 108 Key
Mouse Standart
Software
Kebutuhan menjalankan aplikasi secara local :
Bahasa scrip programing : C Sharp (C#)
Aplikasi : Visual Studio 2013
DBSM : Postgresql
107
3.5.4. Pembagian Tugas Outline 1 (Kelompok)
Jenis outline yang dipilih penulis adalah outline 1 rancang bangun sistem
informasi akuntansi secara berkelompok. Kelompok kami terdiri dari 2 mahasiswa
yaitu, Eva Wahyu Ashari dan Murdika Januarti. Dalam proses pengerjaan tugas
akhir ini kami membagi tugas, sehingga pengerjaan dapat berjalan secara efektif
dan efisien. Berikut pembagian tugas dalam proses pengerjaan tugas akhir ini :
Tabel III.12
Pembagian Tugas Outline 1
No. Jenis Kegiatan Eva Wahyu Ashari Murdika Januarti
1 Analisa Sistem Berjalan V V
2 Analisa Kebutuhan Sistem V V
3 UML V
4 Rancangan User Interface V
5 Program Modul Master
V
6 Program Modul Transaksi V
7 Program Modul Laporan V
8 Testing V
9 Penggabungan Program V V