SISTEM INFORMASI PENGGAJIAN DOSEN ( Studi Kasus pada Universitas Sanata Dharma Yogyakarta ) SKRIPSI Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Sains (S.Si) Program Studi Ilmu Komputer Oleh : Devika Handayani NIM : 023124038 PROGRAM STUDI ILMU KOMPUTER JURUSAN MATEMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA YOGYAKARTA 2008
208
Embed
SISTEM INFORMASI PENGGAJIAN DOSENrepository.usd.ac.id/26173/2/023124038_Full.pdf · 2018. 5. 16. · Kamu adalah hal terindah dalam hidupku. Aku sangat menyayangi mu. ♥ Papa dan
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
SISTEM INFORMASI PENGGAJIAN DOSEN
( Studi Kasus pada Universitas Sanata Dharma Yogyakarta )
SKRIPSI
Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Sains (S.Si)
Program Studi Ilmu Komputer
Oleh :
Devika Handayani
NIM : 023124038
PROGRAM STUDI ILMU KOMPUTER
JURUSAN MATEMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2008
PAYROLL INFORMATION SYSTEM
OF SANATA DHARMA UNIVERSITY’S LECTURERS
A THESIS
Presented as Partial Fullfilment of the Requirements To Obtain Sarjana Sains (S.Si) Degree Computer Science Study Programme
By : Devika Handayani
Student ID : 023124038
COMPUTER SCIENCE STUDY PROGRAMME
MATHEMATICS DEPARTMENT
SCIENCE AND TECHNOLOGY FACULTY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2008
iii
iv
v
HALAMAN PERSEMBAHAN
Skripsi ini Kupersembahkan kepada:
♥ Tuhanku di surga yang selalu menyayangi aku dengan kasih yang tiada
duanya. Seperti apapun aku, aku yakin Engkau akan selalu mengasihiku. ♥ Suamiku, M. Yulianto Setiawan. Belum pernah aku merasakan cinta seperti
yang kamu berikan. Maaf kalau aku sering terlalu manja. Aku tidak akan bisa jauh dari mu. Aku sangat mencintaimu.
♥ Anakku, Nada. Kamu adalah malaikat kecil yang dikirimkan Tuhan buat ku. Kamu adalah hal terindah dalam hidupku. Aku sangat menyayangi mu.
♥ Papa dan Mama. Kalian adalah orang tua terbaik buat ku. Terima kasih atas segalanya.
♥ Kakaku, Satria di surga. Kak, setiap menit setiap detik aku selalu merindukanmu.
♥ Pakdhe dan Budhe Purwoko yang selalu membantu keluargaku dalam segala hal. Kalian adalah keluarga terbaikku.
♥ Kakak – kakak sepupuku, Mas Budi dan Mba Weni, Mas Awang, dan Mas Indra. Kalian semua adalah inspirasi hidupku. Aku sangat menyayangi kalian.
♥ Dosen pembimbingku, Bu Rita. Ibu baek banget. ♥ Pimpinanku, Romo Hari Suparwito, SJ, MAIT. Romo adalah pimpinan yang
sangat berwibawa dan sungguh baik. Aku tidak akan pernah melupakan Romo.
♥ Pimpinanku, Romo Frans Susilo , SJ. Romo sangat berjasa dalam hidupku. Hanya ucapan Terima Kasih yang bisa kuberikan atas kepercayaan Romo padaku.
♥ Kepala Bagianku, Bapak Diar Puji Oktavian, S.Si. Pak Diar, terima kasih telah menjadi inspirasiku. Terima kasih atas bimbingan dan semangat yang telah diberikan.
♥ Kakakku, V. Riawan Prasetyatmoko. Kamu adalah seorang kakak yang dikirimkan Tuhan untuk aku. Aku besryukur telah dipertemukan denganmu. Aku sayang kakak.
♥ Sahabatku, Teguh. Kamu adalah seorang sahabat yang baek banget. Gak ada duanya deh.
♥ Sahabatku, Pritty dan Mba Retno. Kalian adalah sahabat yang membuat aku semangat bekerja. Indahnya kebersamaan kita.
♥ Pak Agus dan Mas Sigit. Kalian adalah teman kerja yang lucu banget, membuat aku tertawa terus selama bekerja. Gak seru kalo gak ada kalian berdua
vi
♥ Bu Lusi. Ibu adalah teman kerja sekaligus inspirasi buatku. ♥ Mas Ristan dan Mas Widodo. Kalian adalah teman kerja yang seru deh. ♥ Para Dosen IKOM : Pak Iwan ( you are a special teacher for me ), Bu Rosa,
Mas Eric ( dosen keren deh ), dan semua dosen ku tersayang. ♥ Teman – teman IKOM : Josephine ( ma kasih atas bantuanmu), Wulan ( kamu
baek dan asik banget ), Widya ( terima kasih printing nya), Hastin ( sahabat lama ku ), Hendi ( temen yang keren ), dan semuanya aja. Aku sayang banget sama kalian semua.
vii
ABSTRAK
Sistem Informasi Penggajian pada Universitas Sanata Dharma Yogyakarta
merupakan sebuah sistem yang dapat membantu pengelolaan data penggajian serta memudahkan pembuatan laporan penggajian per bulan. Saat ini beberapa pengelolaan data penggajian masih dilakukan secara tidak efisien.
Sistem Informasi Penggajian ini dibangun menggunakan metode prototyping.
Dalam tahap implementasi, digunakan bahasa pemrogaman Delphi 6.0 dan MySQL Server 5.0 sebagai server basisdatanya. Sistem ini mengolah data penggajian dosen, baik yang bersifat menambah dan yang bersifat mengurangi gaji dosen. Sistem ini akan membantu petugas penggajian dalam mengisikan, mengubah, dan membuat laporan data penggajian.
Berdasarkan hasil penyebaran kuesioner yang telah dilakukan terhadap 30 responden, diperoleh kesimpulan bahwa Sistem Informasi Penggajian pada Universitas Sanata Dharma dapat membantu petugas daftar gaji, sehingga pengelolaan dan pengaksesan data penggajian dapat dilakukan dengan lebih mudah.
viii
ABSTRACT Payroll Information System of Sanata Dharma University’s Lecturers is a
system to manage payroll data and to provide access of payroll information for academic payroll officers in Sanata Dharma University Yogyakarta. Nowadays, many process is still done with inefficient.
This Payroll Information System was developed using prototyping method. In
the implementation phase, Delphi 6.0 was used as the programming language and MySQL Server 5.0 as a database server. This system maintance lecturer’s payroll data, including substract components and improved components. This system help the payroll officers to entry, update, and reports the payroll data.
Based on the questionnaire result distributed to 30 respondents, it can be concluded Payroll Information System of Sanata Dharma University Lecturer’s is able to assist the users, and therefore management and information access of payroll data could be done easier.
ix
x
KATA PENGANTAR
Puji syukur kepada Tuhan yang maha baik sehingga penulis dapat
menyelesaikan skripsi ini dengan lancar, atas segala kekuatan dan kesehatan yang
diberikan-Nya, selama penulis menjalani kuliah hingga mengerjakan skripsi ini.
Skripsi ini disusun sebagai salah satu syarat untuk memperoleh gelar Sarjana
Sains (S.Si) Program Studi Ilmu Komputer di Fakultas Sains dan Teknologi
Universitas Sanata Dharma Yogyakarta.
Penulis menyadari banyak pihak yang telah memberikan sumbangan baik
pikiran, waktu, tenaga, bimbingan dan dorongan pada penulis sehingga akhirnya
skripsi ini dapat selesai. Oleh karena itu pada kesempatan ini, tidak lupa penulis
menyampaikan ucapan terima kasih yang sebesar-besarnya kepada :
Ibu Anastasia Rita Widiarti, S.Si., M.Kom. selaku dosen pembimbing penulisan
tugas akhir ini. Terimakasih atas bimbingan, semangat, dan inspirasi yang
diberikan kepada penulis dalam penulisan skripsi ini. Terimakasih atas
kepercayaan ibu sehingga penulis dapat mengikuti berbagai pengalaman yang
membangun, menikmati kebersamaan yang menyenangkan dan tak terlupakan.
Romo Frans Susilo, SJ selaku pimpinan kerja penulis yang telah memberikan
banyak dukungan dan semangat kepada penulis dalam penulisan skripsi ini.
Terima kasih atas kepercayaan Romo sehingga penulis dapat mengabdikan diri
kepada Universitas Sanata Dharma.
Romo Hari Suparwito, SJ, MAIT selaku pimpinan BAPSI yang telah memberikan
semangat dan inspirasi kepada penulis dalam penulisan skripsi ini. Terima kasih
atas kepercayaan Romo sehingga penulis dapat mengabdikan diri kepada
Universitas Sanata Dharma.
xi
Ibu P.H. Prima Rosa, M.Sc., M.Kom sebagai seorang ibu yang telah memberikan
segala waktu dan bimbingan selama penulis kuliah di USD. Terimakasih atas
segala kepercayaannya, banyak pelajaran buat penulis sehingga penulis bisa
menjadi seperti sekarang.
Bapak M.Giyarta selaku karyawan biro keuangan. Terima kasih yang sebesar –
besarnya atas bantuan yang telah diberikan sehingga penulis dapat mengerjakan
skripsi ini.
Bapak Diar Puji Oktavian, S.Si selaku Kepala Bagian Sistem Informasi BAPSI.
Terima kasih sudah mengenalkan penulis dengan Delphi dan semua dukungan
yang diberikan selama penulis membuat skripsi ini maupun pada saat penulis
bekerja.
Bapak Iwan Binanto, S.Si selaku bapak dan dosen pembimbing akademik yang
selalu memberikan semangat dan inspirasi setiap KRS klasikal.
Seluruh dosen-dosen di Fakultas Sains dan Teknologi. Terima kasih atas semua
bimbingan, kesabaran, pengetahuan dan kesempatan yang penulis terima sejak
menjadi mahasiswi di Fakultas Sains dan Teknologi.
Pejabat Struktural di Fakultas MIPA. Terima kasih atas segala kemudahan dan
fasilitas yang diberikan kepada penulis selama belajar di Fakultas MIPA.
Seluruh Karyawan Fakultas MIPA. Terima kasih atas kemudahan-kemudahan
yang selama ini saya terima.
Inspirasi dan penyemangat hidup tiada henti bagiku : Suamiku, M. Yulianto
Setiawan. Terima kasih atas besarnya cintamu padaku. ( Aku gak akan bisa jauh
dari kamu ).
Anakku, Nada. Terima kasih telah menjadi inspirasi hidup dan cinta yang tak
terhingga.
Papa dan Mama, terima kasih atas semua dukungan selama pengerjaan skripsi.
Kakakku di surga, terima kasih atas doa – doa yang kau kirimkan. Aku selalu
merindukan kakak ( Aku sayang kakak... ).
xii
xiii
Pakdhe dan Budhe Purwoko. Terima kasih atas dukungan dan kasih yang telah
diberikan.
Kakak – kakak sepupuku : Mas Budi dan Mba Weni, Mas Awang, dan Mas Indra.
Terima kasih atas dukungan dan semangat yang diberikan.
Sahabat – sahabatku tercinta di BAPSI : Teguh ( Terima kasih banyak atas semua
bantuanmu ), Pritty ( Terima kasih banyak atas bimbinganmu ), Mba Retno (
Terima kasih banyak atas kebersamaan yang indah ), Pak Agus ( Terima kasih
banyak sudah membuat aku banyak tertawa ), Bu Lusi ( Terima kasih banyak atas
dukungannya ), Mas Ristan dan Mas Widodo ( Terima kasih banyak atas
semangat yang diberikan kepadaku), Mas Sigit ( Terima kasih sudah banyak
membuat aku tertawa dengan berbagai kelucuan ), dan terakhir untuk Mas
Riawan, kakakku yang selalu memberikan aku kasih yang tak terhingga
membuatku semangat menghadapi semua permasalahan ( Terima kasih kak.., aku
sayang kakak ).
Sahabat-sahabatku : Josephine,Wulan, Widya, dan Rinma. Terima kasih atas
semua dukungan dan bantuannya.
Teman-teman Ilmu Komputer angkatan 2002 dan 2003 dan semua teman-teman
kampus. Terima kasih atas kebersamaannya selama ini, kalian membuat hidupku
lebih indah.
Semua pihak yang tidak dapat disebutkan satu persatu yang telah membantu
dalam penyelesaian skripsi ini.
Penulis menyadari bahwa skripsi ini masih jauh dari kesempurnaan.
Walaupun demikian penulis berharap semoga skripsi ini dapat bermanfaat bagi
masyarakat dan perkembangan ilmu pengetahuan alam.
Penulis
DAFTAR ISI
HALAMAN JUDUL................................................................................................ i
HALAMAN PERSETUJUAN............................................................................... iii
HALAMAN PENGESAHAN................................................................................ iv
`NPP`,`tj`.`KodeTunjangan` AS `KodeTunjangan`,((`tj`.`besar` /
100) * `d`.`gaji`) AS `Jumlah`,`tg`.`groupBayar` AS
100
`groupBayar`,`tg`.`sifat` AS `sifat` from ((`terima_tunjangan` `TJ`
join `dua` `D`) join `tunjangan_gaji` `TG`) where ((`d`.`NPP` =
`tj`.`NPP`) and (`tg`.`KodeTunjangan` = `tj`.`KodeTunjangan`) and
(`tg`.`jenis_tunjangan` = _latin1'Persentase')) order by
`tj`.`KodeTunjangan`$$
DELIMITER ;$$
d. View – view digunakan didalam program untuk menampilkan data
tunjangan untuk masing – masing dosen. Berikut adalah cuplikan dari
pemrograman dalam menu tunjangan per dosen :
with query1 do begin txtNpp.Text := FieldByName('NPP').Value; txtNama.Text := FieldByName('nama_peg').Value; txtNamaTunjangan.Text := FieldByName('NamaTunjangan').Value; txtKodeTunjangan.Text := FieldByName('KodeTunjangan').Value; isAnak := txtKodeTunjangan.Text; txtBesar.Text := FieldByName('Besar').Value; jenis := FieldByName('jenis_tunjangan').Value; bsr := StrToFloat(txtBesar.Text); if FieldByName('jenis_tunjangan').Value = 'Persentase' then begin radPersen.Checked := True ; //kon1.Connect; query2.SQL.Clear; query2.SQL.Add('select Jumlah from jml_tunjangan where NPP = "'+txtNpp.Text+'" AND KodeTunjangan = "'+txtKodeTunjangan.Text+'"'); query2.Open; with query2 do begin pokok := FieldByName('Jumlah').Value; end; if (isAnak = '1') OR (isAnak = '2') OR (isAnak = '3') then begin query2.SQL.Clear; query2.SQL.Add('select banyak from banyak_anak where NPP = "'+txtNpp.Text+'" AND Hubungan = "1"'); query2.Open; if query2.RecordCount <> 0 then begin with query2 do begin bykAnak := FieldByName('banyak').Value; end; if bykAnak > 3 then
101
banyak := 3 else banyak := bykAnak; jumlah := pokok * banyak; txtJumlah.Text := FloatToStr(jumlah); end else begin jumlah := 0; txtJumlah.Text := '0'; end; end else begin txtJumlah.Text := FloatToStr(pokok) ; end; end else begin radNominal.Checked := true; txtJumlah.Text := FieldByName('Besar').Value; end; query2.SQL.Clear; query2.SQL.Add('select total_tunjangan from total_seluruh where NPP = "'+txtNpp.Text+'"'); query2.Open; with query2 do begin txtTotal.Text := FieldByName('total_tunjangan').AsString; end; //ShowMessage(''+FloatToStr(total)+''); end;
procedure TfrmTunjanganDosen.dataAwal(); begin query1.SQL.Clear; query1.SQL.Add('select TJ.NPP,P.nama_peg,TG.NamaTunjangan,TJ.KodeTunjangan,TJ.Besar,TG.jenis_tunjangan from tunjangan_gaji as TG,terima_tunjangan as TJ,pegawai as P where TJ.NPP = P.NPP AND TJ.KodeTunjangan = TG.KodeTunjangan'); query1.Open; end;
102
ii. Set tunjangan untuk banyak dosen
Proses yang ada pada modul ini adalah :
Sistem akan menampilkan kepada user data tunjangan dosen beserta besarnya.
Fasilitas ini akan memungkinkan user merubah besar tunjangan untuk banyak dosen
sekaligus. Sistem menampilkan jenis – jenis status kepegawaian dosen kemudian user
dapat memilih salah satu atau memilih semua status sekaligus. Sistem juga
menampilkan jenis – jenis tunjangan yang ada. User dapat memilih salah satu
diantaranya. Setelah mengisikan besar tunjangan, maka user dapat menyimpannya.
Penyimpanan dilakukan dengan looping. Sistem melakukan query ke database untuk
mengambil semua NPP dosen berdasar pilihan user. Kemudian sistem melakukan
query insert data untuk menyimpan data hingga NPP yang terambil habis. Pada
waktu proses penyimpanan, sistem melakukan pengecekan apakah tunjangan yang
dipilih user sudah ada untuk dosen yang bersangkutan atau belum. Jika sudah ada
maka yang dilakukan adalah proses update data. Jika belum ada maka yang
dilakukan adalah proses insert data. Cuplikan pemrogramannya adalah sebagai
berikut :
if xKode <> 'xxx' then begin xStr := 'select NPP from personalia.pegawai where AdmEdu = "2" AND stat_peg = "'+xKode+'"'; end; if xKode = 'xxx' then begin xStr := 'select NPP from personalia.pegawai where AdmEdu = "2"'; end; que2.SQL.Clear; que2.SQL.Add(xStr); que2.Open; if que2.RecordCount <> 0 then
103
begin while not que2.Eof do begin tmp := que2.Fields[0].AsString; cek := cekIsAda(tmp); if cek = True then begin xString := 'insert into personalia.terima_tunjangan values ("'+tmp+'","'+edBesar.Text+'","'+cbTunjangan.KeyValue+'")'; end; if cek = False then begin xString := 'update personalia.terima_tunjangan set besar = "'+edBesar.Text+'" where NPP = "'+tmp+'" AND KodeTunjangan = "'+cbTunjangan.KeyValue+'"'; end; // ShowMessage(xString); queUpdate.SQL.Clear; queUpdate.SQL.Add(xString); queUpdate.ExecSQL; que2.Next; end; end; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); ambilData; iii. Set tunjangan gaji
Fasilitas ini digunakan untuk mengolah jenis – jenis tunjangan gaji. User
dapat menyimpan, mengubah, atau mencetak data jenis tunjangan gaji. Sebelum
menyimpan, sistem akan membuat kode untuk tunjangan gaji yang baru. Berikut
adalah cuplikan program :
isi := cekValidasi; if isi = True then begin if radPersen.Checked = True then tmp := 'Persentase' else tmp := 'Nominal'; if recordBaru then begin // berarti operasi penambahan data koneksiTunjangan.Connect; queryTunjangan.SQL.Clear;
104
queryTunjangan.SQL.Add('Insert into tunjangan_gaji (KodeTunjangan,NamaTunjangan,jenis_tunjangan,groupBayar,sifat) values ("'+txtKodeTunjangan.Text+'","'+txtNamaTunjangan.Text+'","'+tmp+'","'+cbGroup.Text+'","'+cbSifat.Text+'")'); queryTunjangan.ExecSQL; end else begin // berarti operasi perbahan data koneksiTunjangan.Connect; queryTunjangan.SQL.Clear; queryTunjangan.SQL.Add('update tunjangan_gaji set NamaTunjangan = "'+txtNamaTunjangan.Text+'",jenis_tunjangan = "'+tmp+'",groupBayar = "'+cbGroup.Text+'",sifat = "'+cbSifat.Text+'" where KodeTunjangan = "'+txtKodeTunjangan.Text+'"'); queryTunjangan.ExecSQL; end; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); queryTunjangan.SQL.Clear; queryTunjangan.SQL.Add('select * from tunjangan_gaji'); queryTunjangan.Open; PerolehData(); Atur(True); aturField(False); end; procedure TfrmTunjanganGaji.radPersenClick(Sender: TObject); var kode : String; begin if recordBaru = True then begin kode := getKode(); txtKodeTunjangan.Text := kode; end; end; procedure TfrmTunjanganGaji.radNominalClick(Sender: TObject); var kode : String; begin if recordBaru = True then begin kode := getKode(); txtKodeTunjangan.Text := kode; end; end;
105
iv. Tunjangan Yayasan
Fasilitas ini berguna untuk mengolah besar tunjangan yayasan untuk masing –
masing golongan kepegawaian. Sistem akan menampilkan semua jenis golongan
kepegawaian, kemudian user diminta untuk memilih salah satu golongan dan
mengisikan besar tunjangan yayasan. Setelah data lengkap maka user dapat
menyimpan data. Sistem akan mengecek apakah tarif tunjangan yayasan yang dipilih
user sudah ada atau belum. Jika belum ada, maka dilakukan proses insert data. Jika
sudah ada, maka dilakukan proses update data. Berikut adalah cuplikan program :
val := cekValidasi; if val = True then begin if newRec = True then begin isAda := cekAda; if isAda = True then begin xStr := 'insert into tunjanganyayasan values ("'+cbGol.KeyValue+'","'+txtBesar.Text+'")'; queUpdate.SQL.Clear; queUpdate.SQL.Add(xStr); queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); awal; DBGrid1.DataSource.DataSet.Locate('Kode_gol',cbGol.KeyValue,[loCaseInsensitive,loPartialKey]); getData; fieldAwal(False); end else begin cbGol.SetFocus; cbGol.KeyValue := ''; txtBesar.Text := ''; end; end; if newRec = False then begin xStr := 'update tunjanganyayasan set besarTunjangan = "'+txtBesar.Text+'" where Kode_gol = "'+cbGol.KeyValue+'"'; queUpdate.SQL.Clear; queUpdate.SQL.Add(xStr);
106
queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); awal; end;
v. Iuran per dosen
Dalam sistem informasi penggajian, terdapat dua macam iuran, yaitu iuran
yang bersifat persentase dan iuran yang bersifat nominal.
Sebagian besar iuran adalah persentase dari gaji kotor. Untuk dapat menghitung gaji
kotor, maka dibuat view sebagai berikut :
View untuk mendapatkan daftar NPP dosen, tunjangan anak, tunjangan pasangan
beserta besarnya :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`total1`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `total1` AS select `j`.`NPP` AS `NPP`,`j`.`KodeTunjangan` AS `KodeTunjangan`,(`b`.`jml` * `j`.`Jumlah`) AS `Total` from (`jml_tunjangan` `J` join `banyak_tunj` `B`) where ((`j`.`NPP` = `b`.`NPP`) and (`j`.`KodeTunjangan` = `b`.`Hubungan`)) group by `j`.`NPP`,`b`.`Hubungan`$$ DELIMITER ;$$ Kemudian dijumlahkan besar tunjangan pasangan dan anak berdasar NPP dosen
dengan view sebagai berikut :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`tot_kotor`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `tot_kotor` AS select `total1`.`NPP` AS `NPP`,sum(`total1`.`Total`) AS `Tot` from `total1` where ((`total1`.`KodeTunjangan` = _latin1'1') or (`total1`.`KodeTunjangan` = _latin1'4') or (`total1`.`KodeTunjangan` = _latin1'5')) group by `total1`.`NPP`$$ DELIMITER ;$$
107
Kemudian jumlah tunjangan anak dan pasangan tadi ditambahkan dengan besar gaji
pokok dosen dengan view sebagai berikut :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`gaji_kotor`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `gaji_kotor` AS select `tk`.`NPP` AS `NPP`,(`tk`.`Tot` + `d`.`gaji`) AS `gaji_kotor` from (`tot_kotor` `TK` join `dua` `D`) where (`d`.`NPP` = `tk`.`NPP`)$$ DELIMITER ;$$ Setelah didapatkan besar gaji kotor, selanjutnya sistem akan membuat daftar NPP
dosen, jenis iuran dan besar iuran dimana jenis iuran tersebut bersifat persentase.
Berikut view yang digunakan untuk keperluan tersebut :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`jml_iuran`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `jml_iuran` AS select `bi`.`NPP` AS `NPP`,`bi`.`KodeIuran` AS `KodeIuran`,((`bi`.`besar` / 100) * `gk`.`gaji_kotor`) AS `jml_iuran`,`ig`.`groupBayar` AS `groupBayar` from ((`bayar_iuran` `BI` join `gaji_kotor` `GK`) join `iuran_gaji` `IG`) where ((`ig`.`KodeIuran` <> _latin1'P.4') and (`bi`.`NPP` = `gk`.`NPP`) and (`bi`.`KodeIuran` = `ig`.`KodeIuran`) and (`ig`.`jenis_gaji` = _latin1'Persentase'))$$ DELIMITER ;$$ Setelah mendapatkan daftar iuran, sistem akan menjumlahkan besar iuran yang
bersifat persentase. Berikut adalah view yang digunakan :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`totiuran1`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `totiuran1` AS select `jml_iuran`.`NPP` AS `NPP`,sum(`jml_iuran`.`jml_iuran`) AS `total` from `jml_iuran` group by `jml_iuran`.`NPP`$$ DELIMITER ;$$
108
Kemudian sistem akan membuat daftar jumlah iuran yang bsersifat nominal untuk
masing – masing dosen. Berikut adalah view yang digunakan :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`totiuran2`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `totiuran2` AS select `bi`.`NPP` AS `NPP`,sum(`bi`.`besar`) AS `total` from (`bayar_iuran` `BI` join `iuran_gaji` `IG`) where ((`bi`.`KodeIuran` = `ig`.`KodeIuran`) and (`ig`.`jenis_gaji` = _latin1'Nominal')) group by `bi`.`NPP`$$ DELIMITER ;$$ Setelah itu, sistem akan menggabungkan daftar jumlah iuran yang bersifat persentase
dan nominal. Berikut adalah view yang digunakan :
DROP VIEW IF EXISTS `personalia`.`gabung_total`; CREATE VIEW `personalia`.`gabung_total` AS (select * from personalia.totiuran1) union (select * from personalia.totiuran2); View – view tersebut kemudian dipanggil dalam program untuk menampilkan data
iuran gaji per dosen. Berikut adalah cuplikan program :
koneksiPotongan.Connect; queryPotongan1.SQL.Clear; queryPotongan1.SQL.Add('select BI.NPP,BI.KodeIuran,P.Nama_peg,BI.KodeIuran,I.Keterangan,BI.Besar,I.jenis_gaji from pegawai as P,iuran_gaji as I,bayar_iuran as BI where P.NPP = BI.NPP AND BI.KodeIuran = I.KodeIuran order by P.nama_peg'); queryPotongan1.Open; PerolehData(); AturField(False); end; with queryPotongan1 do begin txtNPP.Text := FieldByName('NPP').Value; txtNama.Text := FieldByName('Nama_peg').value; txtNamaPotongan.Text := FieldByName('Keterangan').Value; txtBesarPotongan.Text := FieldByName('Besar').Value; txtKode.Text := FieldByName('KodeIuran').Value; cbDosen.KeyValue := FieldByName('NPP').AsString; cb1.KeyValue := FieldByName('KodeIuran').AsString;
109
//cmbBulan.Text := FieldByName('bulan').Value; //cmbTahun.Text := FieldByName('tahun').Value; if FieldByName('jenis_gaji').Value = 'Persentase' then begin radPersen.Checked := True; //koneksiPotongan.Connect; query3.SQL.Clear; query3.SQL.Add('select * from jml_iuran where NPP = "'+txtNpp.Text+'" AND KodeIuran = "'+txtKode.Text+'"'); query3.Open; with query3 do txtJumlah.Text := FieldByName('jml_iuran').AsString; end else begin radNominal.Checked := True; txtJumlah.Text := FieldByName('Besar').Value; end; end; query3.SQL.Clear; query3.SQL.Add('select sum(total) from gabung_total where NPP = "'+txtNpp.Text+'" group by NPP'); query3.Open; with query3 do begin txtTotal.Text := Fields[0].AsString; end; vi. Set jenis iuran gaji
Fasilitas ini disediakan agar user dapat mengolah data jenis iuran gaji
dosen.User dapat menyimpan atau mengubah data jenis iuran gaji. Berikut adalah
cuplikan program yang ada pada modul ini :
if radPersen.Checked = True then tmp := 'Persentase' else tmp := 'Nominal'; if recordBaru then begin // berarti operasi penambahan data koneksiIuran.Connect; queryIuran.SQL.Clear; queryIuran.SQL.Add('Insert into iuran_gaji (KodeIuran,Keterangan,jenis_gaji,groupBayar) values ("'+txtKodeIuran.Text+'","'+txtNamaIuran.Text+'","'+tmp+'","'+cbGroup.Text+'")');
110
queryIuran.ExecSQL; end else begin // berarti operasi perbahan data koneksiIuran.Connect; queryIuran.SQL.Clear; queryIuran.SQL.Add('update iuran_gaji set Keterangan = "'+txtNamaIuran.Text+'",jenis_gaji = "'+tmp+'",groupBayar = "'+cbGroup.Text+'" where KodeIuran = "'+txtKodeIuran.Text+'"'); queryIuran.ExecSQL; end; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); queryIuran.SQL.Clear; queryIuran.SQL.Add('select * from iuran_gaji'); queryIuran.Open; //daftarIuran.DataSource.DataSet.Locate('KodeIuran',txtKodeIuran.Text,[loCaseInSensitive,loPartialKey]); PerolehData(); Awal(True); setField(False);
vii. Update besar iuran
Fasilitas ini berguna untuk menambah atau mengubah besar iuran gaji banyak
dosen sekaligus. Sistem akan menampilkan kepada user status kepegawaian yang ada
di Universitas Sanata Dharma. User dapat memilih salah satu atau semua status.
Sistem akan mencari daftar NPP yang berstatus sesuai dengan yang dipilih user.
Dengan looping, sistem akan mengambil NPP satu per satu kemudian menyimpan
data. Berikut cuplikan program :
if xKode = 'xxx' then xStr := 'select NPP from personalia.pegawai where AdmEdu = "2"'; if xKode <> 'xxx' then xStr := 'select NPP from personalia.pegawai where AdmEdu = "2" AND stat_peg = "'+xKode+'"'; query3.SQL.Clear; //ShowMessage(xStr); // query3.SQL.Add('select P.NPP,I.KodeIuran from pegawai as P,iuran_gaji as I where I.Keterangan = "'+cbNamaIuran.Text+'"'); query3.SQL.Add(xStr); query3.Open;
111
ShowMessage(IntToStr(query3.RecordCount)); if query3.RecordCount <> 0 then begin pb.Visible := True; pb.Max := query3.RecordCount; index := 1; while not query3.Eof do begin tmp1 := query3.Fields[0].AsString; pb.Position := index; if tmp1 <> '' then begin cek := cekIsAda(tmp1); //ShowMessage(cek); if cek = True then begin xString := 'insert into personalia.bayar_iuran values ("'+tmp1+'","'+cbNamaIuran.KeyValue+'","'+txtBesar.Text+'")'; end; if cek = False then begin xString := 'update personalia.bayar_iuran set besar = "'+txtBesar.Text+'" where NPP = "'+tmp1+'" AND '+ 'KodeIuran = "'+cbNamaIuran.KeyValue+'"'; end; //ShowMessage(xString); queUpdate.SQL.Clear; queUpdate.SQL.Add(xString); queUpdate.ExecSQL; end; index := index + 1; query3.Next; end; end; pb.Visible := False; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0);
viii. Set besar pajak
Fasilitas ini berguna agar user dapat mengolah data besar pajak beserta range
nya. User dapat menambah atau mengubah besar pajak beserta range nya. Berikut
adalah cuplikan program pada modul ini :
if newRec = True then begin xStr := 'insert into pajak values ("'+edKode.Text+'","'+edAwal.Text+'","'+edAkhir.Text+'","'+edPajak.Text+'")'; end else
112
xStr := 'update pajak set nilai_awal = "'+edAwal.Text+'",nilai_akhir = "'+edAkhir.Text+'",'+ 'besar_pajak = "'+edPajak.Text+'" where kode_pajak = "'+edKode.Text+'"'; if xStr <> '' then begin queUpdate.SQL.Clear; queUpdate.SQL.Add(xStr); queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); awal; getData; setAwal(False); end;
ix. Pinjaman per dosen
Menu ini berguna untuk mengolah data pinjaman dosen terhadap unit lain
yang cicilan pinjamannya diambilkan langsung dari gaji per bulan. Sistem akan
menampilkan data pinjaman dosen. User dapat menambah atau mengubah data – data
pinjaman tersebut. Pada waktu proses update, sistem akan mengecek apakah cicilan
sudah habis atau belum. Jika sudah habis, maka data yang bersangkutan akan
dihapus. Berikut adalah cuplikan program pada modul ini :
xStr := 'select PD.NPP,P.nama_peg,PD.kode_pinjaman,JP.Keterangan,JP.Bunga,PD.pokok_pinjaman,'+ 'PD.Frekuensi,PD.angsuranKe,(JP.Bunga / 100 * PD.pokok_pinjaman) * PD.Frekuensi nominal_bunga,'+ '(pokok_pinjaman + (JP.Bunga / 100 * PD.pokok_pinjaman * PD.Frekuensi)) total,'+ '(pokok_pinjaman + (JP.Bunga / 100 * PD.pokok_pinjaman * PD.Frekuensi))/PD.Frekuensi angsuran,'+ '(pokok_pinjaman + (JP.Bunga / 100 * PD.pokok_pinjaman * PD.Frekuensi)) -(((pokok_pinjaman + '+ '(JP.Bunga / 100 * PD.pokok_pinjaman * PD.Frekuensi))/PD.Frekuensi) * PD.angsuranKe) Sisa,PD.besarCicilan,PD.sisaPinjaman '+ 'from pinjaman_dosen as PD,pegawai as P,jenis_potongan as JP where PD.NPP = P.NPP AND '+ 'PD.kode_pinjaman = JP.Kode_jenis order by P.nama_peg'; koneksiPinjaman.Connect; query1.SQL.Clear; //query1.SQL.Add('select PD.NPP,P.nama_peg,PD.kode_pinjaman,JP.Keterangan,JP.Bunga,PD.pokok_pinjaman,PD.Frekuensi,PD.angsuranKe from pinjaman_dosen as PD,pegawai as P,jenis_potongan as JP where PD.NPP = P.NPP AND PD.kode_pinjaman = JP.Kode_jenis'); query1.SQL.Add(xStr); query1.Open;
113
getData(); keadaan(False); procedure TfrmPinjamanDosen.btnSimpanClick(Sender: TObject); if txtFrekuensi.Text = txtAngsuran.Text then begin koneksiPinjaman.Connect; query3.SQL.Clear; query3.SQL.Add('Delete from pinjaman_dosen where Kode_pinjaman = "'+txtKodePinjaman.Text+'" AND NPP = "'+txtNpp.Text+'"'); query3.ExecSQL; end; if newRec then begin // berarti operasi penambahan data koneksiPinjaman.Connect; query1.SQL.Clear; query1.SQL.Add('Insert into pinjaman_dosen (NPP,kode_pinjaman,pokok_pinjaman,frekuensi,angsuranKe,besarCicilan,sisaPinjaman,status) values ("'+txtNpp.Text+'","'+txtKodePinjaman.Text+'","'+txtPokok.Text+'","'+txtFrekuensi.Text+'","'+txtAngsuran.Text+'","'+txtBesar.Text+'","'+txtSisa.Text+'","False")'); query1.ExecSQL; end else begin // berarti operasi perubahan data koneksiPinjaman.Connect; query1.SQL.Clear; query1.SQL.Add('update pinjaman_dosen set angsuranKe = "'+txtAngsuran.Text+'",besarCicilan = "'+txtBesar.Text+'",sisaPinjaman = "'+txtSisa.Text+'",status = "'+status+'" where NPP = "'+txtNpp.Text+'" AND Kode_pinjaman = "'+txtKodePinjaman.Text+'"'); query1.ExecSQL; end; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); keadaan(False); xStr := 'select PD.NPP,P.nama_peg,PD.kode_pinjaman,JP.Keterangan,JP.Bunga,PD.pokok_pinjaman,PD.Frekuensi,PD.angsuranKe,PD.besarCicilan,PD.sisaPinjaman'+ ' from pinjaman_dosen as PD,pegawai as P,jenis_potongan as JP where '+ 'PD.NPP = P.NPP AND PD.kode_pinjaman = JP.Kode_jenis'; query1.SQL.Clear; // query1.SQL.Add('select PD.NPP,P.nama_peg,PD.kode_pinjaman,JP.Keterangan,JP.Bunga,PD.pokok_pinjaman,PD.Frekuensi,PD.angsuranKe,PD.besarCicilan,PD.sisaPinjaman from pinjaman_dosen as PD,pegawai as P,jenis_potongan as JP where PD.NPP = P.NPP AND PD.kode_pinjaman = JP.Kode_jenis'); query1.SQL.Add(xStr); query1.Open;
114
getData(); end;
x. Set jenis pinjaman dosen
Menu ini berguna untuk mengolah data jenis pinjaman dosen. User dapat
menambah atau mengubah data jenis pinjaman dosen. Berikut adalah cuplikan
program dari modul ini :
if recBaru then begin // berarti operasi penambahan data konJenis.Connect; query1.SQL.Clear; query1.SQL.Add('Insert into jenis_potongan (Kode_jenis,Keterangan,Bunga) values ("'+txtKode.Text+'","'+txtNamaPinjaman.Text+'","'+txtBunga.Text+'")'); query1.ExecSQL; end else begin // berarti operasi perbahan data konJenis.Connect; query1.SQL.Clear; query1.SQL.Add('update jenis_potongan set Keterangan = "'+txtNamaPinjaman.Text+'", Bunga = "'+txtBunga.Text+'" where Kode_jenis = "'+txtKode.Text+'"'); query1.ExecSQL; end; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); query1.SQL.Clear; query1.SQL.Add('select * from jenis_potongan'); query1.Open; getData(); setField(False); end;
xi. Set jenis honor semester antara
Menu ini berguna untuk mengolah data jenis honor semester antara. User
dapat menambah atau mengubah data jenis honor semester antara. Setelah user klik
pada tombol simpan, sistem akan melakukan pengcekan apakah akan dilakukan
115
proses update atau insert. Setelah itu, sistem akan melakukan query ke database untuk
menyimpan penambahan atau perubahan data. Berikut adalah cuplikan program pada
modul ini :
//kode := cekKode(); if newRec = True then begin kon1.Connect; queUpdate.SQL.Clear; queUpdate.SQL.Add('insert into vakasi values ("'+txtKode.Text+'","'+txtJenis.Text+'","'+txtSatuan.Text+'")'); queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); fieldAwal(False); tampilAwal(); DBGrid1.DataSource.DataSet.Locate('KodeVakasi',txtKode.Text,[loCaseInsensitive,loPartialKey]); getData; end; //MessageDlg('Sudah ada data dengan kode : '+txtKode.Text+'',mtWarning,[mbOK],0); if newRec = False then begin kon1.Connect; queUpdate.SQL.Clear; queUpdate.SQL.Add('update vakasi set Jenis_Vakasi = "'+txtJenis.Text+'",Satuan = "'+txtSatuan.Text+'" where KodeVakasi = "'+txtKode.Text+'"'); queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); fieldAwal(False); tampilAwal(); DBGrid1.DataSource.DataSet.Locate('KodeVakasi',txtKode.Text,[loCaseInsensitive,loPartialKey]); getData;
xii. Set tarif honor semester antara
Menu ini berguna untuk mengolah besar honor mengajar semester antara.
Sistem akan menampilkan daftar golongan kepegawaian dan jenjang pendidikan.
Setelah user klik pada tombol simpan, maka sistem akan melakukan proses
116
penyimpanan. Dalam proses penyimpanan, sistem akan mengecek terlebih dahulu
apakah tarif untuk golongan dan jenjang yang dipilih sudah ada atau belum. Jika
belum ada, maka sistem akan meneruskan dengan proses insert data. Jika sudah ada,
maka sistem akan meneruskan dengan proses update data. Berikut adalah cuplikan
program :
if newRec = True then begin cek := isAdaTarif(); if cek = True then begin queUpdate.SQL.Clear; queUpdate.SQL.Add('insert into honor_sa values ("'+cbGol.KeyValue+'","'+cbJenjang.KeyValue+'","'+edTarif.Text+'")'); queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); showAwal; getData; fieldAwal(False); tampilAwal(True); end; end; if newRec = False then begin queUpdate.SQL.Clear; queUpdate.SQL.Add('update honor_sa set tarif_sa = "'+edTarif.Text+'" where kd_gol = "'+cbGol.KeyValue+'" AND kd_pend = "'+cbJenjang.KeyValue+'"'); queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); showAwal; getData; fieldAwal(False); tampilAwal(True); end; function TfrmHonorAjarSA.isAdaTarif() : Boolean; var xString : String; jml : Integer; begin xString := 'select * from honor_sa where kd_gol = "'+cbGol.KeyValue+'" AND kd_pend = "'+cbJenjang.KeyValue+'"'; queUpdate.SQL.Clear; queUpdate.SQL.Add(xString); queUpdate.Open; jml := queUpdate.RecordCount; if jml <> 0 then
117
begin MessageDlg('Tarif Semester antara untuk golongan ini sudah ada',mtWarning,[mbOk],0); kosong; cbGol.SetFocus; result := false; end else result := true; end;
xiii. Penerimaan honor mengajar semester antara
Menu ini berguna untuk mengolah data pengajaran semester antara. User
dapat menambah, mengubah, mencetak, atau menghapus data. Sistem akan
menampilkan data pengajaran semester antara melalui query. Pada waktu user akan
menambah data, user diminta memilih dosen. Sistem akan menampilkan honor
semeter antara dosen yang dipilih secara otomatis. Berikut adalah cuplikan program
pada modul ini :
if key = #13 then begin if newRec = True then begin xString := 'select H.tarif_sa from '+ 'pegawai PG left join personalia.unit_peg U on PG.NPP = U.NPP '+ 'left join personalia.jenjang_prodi K on substring(U.kd_unit,4,4) = K.Kd_prg '+ 'left join personalia.honor_sa H1 on K.Kd_prg = H1.kd_pend left join dua D on PG.NPP = D.NPP '+ 'left join honor_sa H on D.kd_gol = H.kd_gol where PG.NPP = "'+cbPenerima.KeyValue+'" AND U.tgl_mulai_unit = (select max(tgl_mulai_unit) '+ 'from personalia.unit_peg where NPP = "'+cbPenerima.KeyValue+'")'; queUpdate.SQL.Clear; queUpdate.SQL.Add(xString); queUpdate.Open; if queUpdate.RecordCount <> 0 then txtHonor.Text := queUpdate.FieldByName('tarif_sa').AsString else txtHonor.Text := '0'; end; xStr := 'select P.*,PG.nama_peg Dosen,H.tarif_sa from penerimaanAjarSA P left join '+
118
'pegawai PG on P.NPP = PG.NPP left join personalia.unit_peg U on PG.NPP = U.NPP '+ 'left join personalia.jenjang_prodi K on substring(U.kd_unit,4,4) = K.Kd_prg '+ 'left join personalia.honor_sa H1 on K.Kd_prg = H1.kd_pend left join dua D on P.NPP = D.NPP '+ 'left join honor_sa H on D.kd_gol = H.kd_gol where U.tgl_mulai_unit = (select max(tgl_mulai_unit) '+ 'from personalia.unit_peg where NPP = P.NPP)'; query1.SQL.Clear; query1.SQL.Add(xStr); query1.Open; end;
xiv. Penerimaan honor lain semester antara
Menu ini berguna untuk mengolah penerimaan honor selain honor mengajar
pada semester antara.Honor – honor yang dimaksud disini pada dasarnya adalah
vakasi yang terjadi pada saat semester antara berlangsung. Sistem akan meminta user
untuk memasukkan bulan dan tahun honor semester antara. Kemudian sistem akan
melakukan query ke tabel vakasi yang kodenya mengandung SA. Berikut adalah
cuplikan programnya :
xStr := 'select P.NPP,PG.nama_peg Dosen,K.Nama_prg,P.KodeVakasi,V.Jenis_vakasi,V.Satuan,P.thnTarif, '+ 'P.Akumulasi_satuan,P.Status_bayar,P.kdProdi from pegawai PG,vakasi V,vakasi_dosen'+cbMskThn.Text+''+blnMasuk+' P,kamus.prg_std K where '+ 'P.NPP = PG.NPP AND V.KodeVakasi = P.KodeVakasi AND V.KodeVakasi like "%SA%" AND P.kdProdi = K.Kd_prg order by PG.nama_peg'; query1.SQL.Clear; query1.SQL.Add(xStr); query1.Open; if query1.RecordCount <> 0 then begin getData;
Untuk proses penyimpanan, cuplikan programnya sebagai berikut :
if newRec = True then begin xStr := 'insert into vakasi_dosen'+cbTahun.Text+''+blnMasuk+' value '+
119
'("'+cbDosen.KeyValue+'","'+cbHonor.KeyValue+'","'+cbProdi.KeyValue+'","'+cbThnTarif.Text+'","'+txtAkumulasi.Text+'","'+cbStatus.Text+'")'; queUpdate.SQL.Clear; queUpdate.SQL.Add(xStr); queUpdate.ExecSQL; end; if newRec = False then begin xStr := 'update vakasi_dosen'+cbTahun.Text+''+blnMasuk+' set Akumulasi_satuan = "'+txtAkumulasi.Text+'",thnTarif = "'+cbThnTarif.Text+'",Status_bayar = "'+cbStatus.Text+'" '+ 'where KodeVakasi = "'+cbHonor.KeyValue+'" AND NPP = "'+cbDosen.KeyValue+'" AND '+ 'kdProdi = "'+cbProdi.KeyValue+'"'; queUpdate.SQL.Clear; queUpdate.SQL.Add(xStr); queUpdate.ExecSQL;
xv. Rekap Semester Antara
Modul ini berguna untuk merekap jumlah semua honor pada waktu semester
antara untuk bulan dan tahun tertentu untuk masing – masing dosen. Sistem akan
meminta user untuk memilih bulan dan tahun yang diinginkan. Kemudian sistem juga
akan meminta user untuk memilih kriteria rekap. Berdasarkan kriteria yang diberikan
user, sistem akan melakukan query ke database. Setelah didapatkan data hasil query,
sistem akan menampilkan data – data tersebut kepada user melalui sebuah daftar.
Berikut adalah cuplikan programnya :
if cbKriteria.Text = 'Satu Dosen' then begin cbDosen.Visible := True; labKrit.Caption := 'Nama Dosen'; labKrit.Visible := True; cbProdi.Visible := False; end; if cbKriteria.Text = 'Semua Dosen' then begin {xStr := 'select P.*,PG.nama_peg,H.tarif_sa'+ ' from penerimaanAjarSA P left join pegawai PG on P.NPP = PG.NPP'+ ' left join dua D on P.NPP = D.NPP left join honor_sa H on D.kd_gol = H.kd_gol order by PG.nama_peg';
120
setSADosen(xStr); } xStr := 'select P.*,K.Nama_prg,PG.nama_peg,H.tarif_sa from penerimaanAjarSA P '+ 'left join pegawai PG on P.NPP = PG.NPP '+ 'left join dua D on P.NPP = D.NPP '+ 'left join honor_sa H on D.kd_gol = H.kd_gol '+ 'left join personalia.unit_peg U on P.NPP = U.NPP '+ 'left join kamus.prg_std K on substring(U.kd_unit,4,4) = K.Kd_prg '+ 'order by PG.nama_peg'; setSADosen(xStr); end; if cbKriteria.Text = 'Satu Prodi' then begin labKrit.Visible := True; labKrit.Caption := 'Prodi'; cbProdi.Visible := True; cbDosen.Visible := False; end; if cbKriteria.Text = 'Semua Prodi' then begin labKrit.Visible := False; cbProdi.Visible := False; cbDosen.Visible := False; xStr := 'select P.*,K.Nama_prg,PG.nama_peg,H.tarif_sa from penerimaanAjarSA P '+ 'left join pegawai PG on P.NPP = PG.NPP '+ 'left join dua D on P.NPP = D.NPP '+ 'left join honor_sa H on D.kd_gol = H.kd_gol '+ 'left join personalia.unit_peg U on P.NPP = U.NPP '+ 'left join kamus.prg_std K on substring(U.kd_unit,4,4) = K.Kd_prg '+ 'order by K.Nama_prg,PG.nama_peg'; setSADosen(xStr); end; if key = #13 then begin xStr := 'select P.*,K.Nama_prg,PG.nama_peg,H.tarif_sa from penerimaanAjarSA P '+ 'left join pegawai PG on P.NPP = PG.NPP '+ 'left join dua D on P.NPP = D.NPP '+ 'left join honor_sa H on D.kd_gol = H.kd_gol '+ 'left join personalia.unit_peg U on P.NPP = U.NPP '+ 'left join kamus.prg_std K on substring(U.kd_unit,4,4) = K.Kd_prg '+ 'where P.NPP = "'+cbDosen.KeyValue+'"'; setSADosen(xStr); end; if que1.RecordCount <> 0 then begin while not que1.Eof do begin if que1.FieldByName('NPP').AsString <> tmp then begin if row > 1 then
Modul ini berguna untuk mengolah data jenis honor PMB. User dapat
menambah atau mengubah jenid honor PMB. Jika user menambah data, maka sistem
akan memberikan kode secara otomatis baru kemudian menyimpan data tersebut.
Berikut adalah cuplikan programnya :
if newRec = True then begin kon1.Connect; queUpdate.SQL.Clear; queUpdate.SQL.Add('insert into honor_lain values ("'+txtKode.Text+'","'+txtNamaHonor.Text+'","Tunjangan")'); queUpdate.ExecSQL; end else begin queUpdate.SQL.Clear; queUpdate.SQL.Add('update honor_lain set jenisHonor = "'+txtNamaHonor.Text+'" where kdJenisHonor = "'+txtKode.Text+'"'); queUpdate.ExecSQL; end; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); awalForm();
123
awalField(False);
xvii. Set penerima honor PMB
Modul ini berguna untuk mengolah data dosen penerima honor PMB. User
dapat menambah, mengubah, menghapus atau mencetak data penerimaan honor
PMB. Sistem akan menampilkan data penerimaan honor PMB pada bulan dan tahun
yang telah dipilih oleh user. Berikut adalah cuplikan programnya :
xStr := 'select L.*,P.nama_peg,H.jenisHonor,H.sifat from personalia.lain_lain'+cbTahun.Text+''+bulan+' L '+ 'left join personalia.honor_lain H on H.kdJenisHonor = L.KodeTunjangan left join personalia.pegawai P '+ 'on L.NPP = P.NPP where L.KodeTunjangan like "%PMB%"'; que1.SQL.Clear; //que1.SQL.Add('select TJ.NPP,P.nama_peg,TG.NamaTunjangan,TJ.KodeTunjangan,TJ.Besar from tunjangan_gaji as TG,terima_tunjangan as TJ,pegawai as P where TJ.NPP = P.NPP AND TJ.KodeTunjangan = TG.KodeTunjangan AND TG.KodeTunjangan like "PMB%"'); que1.SQL.Add(xStr); que1.Open; end;
Untuk proses penyimpanan cuplikan programnya sebagai berikut : cek := cekIsi(); if cek = True then begin if newRec = True then begin queUpdate.SQL.Clear; queUpdate.SQL.Add('insert into lain_lain'+cbTahun.Text+''+bulan+' values ("'+cbNamaPeg.KeyValue+'","'+cbHonorPmb.KeyValue+'","'+txtBesar.Text+'","'+cbGroup.Text+'","'+txtKeterangan.Text+'")'); queUpdate.ExecSQL; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); dataAwal(); getData(); // tampilAwal(False); awal(False); end else begin queUpdate.SQL.Clear; queUpdate.SQL.Add('update lain_lain'+cbTahun.Text+''+bulan+' set BesarTunjangan = "'+txtBesar.Text+'",groupBayar = "'+cbGroup.Text+'",Keterangan = "'+txtKeterangan.Text+'"
124
where KodeTunjangan = "'+cbHonorPmb.KeyValue+'" AND NPP = "'+cbNamaPeg.KeyValue+'"'); queUpdate.ExecSQL; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); dataAwal(); getData(); // tampilAwal(False); awal(False);
xviii. Jenis vakasi
Modul ini berguna untuk mengolah data jenis – jenis vakasi. User dapat
menambah atau mengubah jenis vakasi. Berikut adalah cuplikan program yang ada
pada modul tersebut :
isi1 := cekIsi(edJenis); isi2 := cekIsi(edSatuan); //isi3 := cekIsi(edTarif); if (isi1 = True ) AND (isi2 = True) then begin if newRec = True then begin queUpdate.SQL.Clear; queUpdate.SQL.Add('insert into vakasi values ("'+edKode.Text+'","'+edJenis.Text+'","'+edSatuan.Text+'")'); queUpdate.ExecSQL; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); end else begin queUpdate.SQL.Clear; queUpdate.SQL.Add('update vakasi set Jenis_vakasi = "'+edJenis.Text+'",Satuan = "'+edSatuan.Text+'" where KodeVakasi = "'+edKode.Text+'"'); queUpdate.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); end; end;
xix. Penerimaan vakasi
Modul ini berguna untuk mengolah data vakasi dosen. User dapat menambah,
mengubah atau menghapus data vakasi dosen. Pada saat menambah data, user
memasukkan program studi pengaju, nama dosen, dan akumulasi vakasi. Sistem akan
125
menampilkan besar honor yang diterima oleh dosen dari jenis vakasi yang
bersangkutan. Kemudian data akan disimpan. Berikut adalah cuplikan program nya :
if key = #13 then begin satuan := StrToFloat(edTarif.Text); kali := StrToFloat(edAkumulasi.Text); hasil := satuan * kali; edJml.Text := FloatToStr(hasil); gridVakasi.Cells[0,inRow] := IntToStr(inRow); gridVakasi.Cells[1,inRow] := cbJenis.Text; gridVakasi.Cells[2,inRow] := edAkumulasi.Text; gridVakasi.Cells[3,inRow] := cbJenis.KeyValue; inRow := inRow + 1; gridVakasi.AddRow; cbJenis.KeyValue := ''; edAkumulasi.Text := ''; cbJenis.SetFocus; end; row := 1; jumRec := gridVakasi.RowCount; // if cek = True then // begin while row <= jumRec - 2 do begin cek := cekIsAdaRec(cbDosen.KeyValue,gridVakasi.Cells[3,row]); if cek = True then begin xStr := 'insert into personalia.vakasi_dosen'+cbMskThn.Text+''+cbMskBln.Text+' values '+ '("'+cbDosen.KeyValue+'","'+gridVakasi.Cells[3,row]+'","'+cbProdi.KeyValue+'","'+cbThnTarif.Text+'",'+ '"'+gridVakasi.Cells[2,row]+'","'+cbStatus.Text+'")'; end; if cek = False then begin xStr := 'update personalia.vakasi_dosen'+cbMskThn.Text+''+cbMskBln.Text+' set '+ 'thnTarif = "'+cbThnTarif.Text+'",Akumulasi_satuan = "'+gridVakasi.Cells[2,row]+'",'+ 'Status_bayar = "'+cbStatus.Text+'" where NPP = "'+cbDosen.KeyValue+'" AND '+ 'KodeVakasi = "'+gridVakasi.Cells[3,row]+'" AND kdProdi = "'+cbProdi.KeyValue+'"'; end; //ShowMessage(xStr); queUpdate.SQL.Clear; queUpdate.SQL.Add(xStr); queUpdate.ExecSQL;
126
row := row + 1;
xx. Rekap Vakasi
Modul ini berguna untuk merekap data vakasi dosen untuk bulan dan tahun
yang dipilih oleh user. User akan memasukkan kriteria rekap vakasi, kemudian sistem
akan menampilkan data – data vakasi sesuai dengan kriteria yang dipilih. Selain
menampilkan data yang ada pasa database, sistem juga menghitung honor vakasi
yang diperoleh. Berikut adalah cuplikan program nya :
if cbKriteria.Text = 'Satu Dosen' then begin xStr := 'select T.NPP,P.nama_peg,T.KodeVakasi,V.Jenis_vakasi,V.Satuan,T.kdProdi,K.Nama_prg,T.thnTarif,T.Akumulasi_satuan,T.status_bayar '+ 'from personalia.vakasi_dosen'+cbTahun.Text+''+bulan+' T left join personalia.vakasi V on T.KodeVakasi = V.KodeVakasi '+ 'left join kamus.prg_std K on T.kdProdi = K.Kd_prg left join personalia.pegawai P on T.NPP = P.NPP where T.NPP = "'+cbNamaDosen.KeyValue+'" '+ 'AND T.KodeVakasi not like "%SA%"'; end; if cbKriteria.Text = 'Semua Dosen' then begin xStr := 'select T.NPP,P.nama_peg,T.KodeVakasi,V.Jenis_vakasi,V.Satuan,T.kdProdi,K.Nama_prg,T.thnTarif,T.Akumulasi_satuan,T.status_bayar '+ 'from personalia.vakasi_dosen'+cbTahun.Text+''+bulan+' T left join personalia.vakasi V on T.KodeVakasi = V.KodeVakasi '+ 'left join kamus.prg_std K on T.kdProdi = K.Kd_prg left join personalia.pegawai P on T.NPP = P.NPP where '+ 'T.KodeVakasi not like "%SA%" order by P.nama_peg'; end; if cbKriteria.Text = 'Per Prodi' then begin xStr := 'select T.NPP,P.nama_peg,T.KodeVakasi,V.Jenis_vakasi,V.Satuan,K.Nama_prg,T.kdProdi,T.thnTarif,T.Akumulasi_satuan,T.status_bayar '+ 'from personalia.vakasi_dosen'+cbTahun.Text+''+bulan+' T left join personalia.vakasi V on T.KodeVakasi = V.KodeVakasi '+ 'left join kamus.prg_std K on T.kdProdi = K.Kd_prg left join personalia.pegawai P on T.NPP = P.NPP where T.kdProdi = "'+cbProdi.KeyValue+'" AND '+ 'T.KodeVakasi not like "%SA%" order by P.nama_peg'; end; if cbKriteria.Text = 'Semua Prodi' then begin
127
xStr := 'select K.Nama_prg,T.NPP,P.nama_peg,T.KodeVakasi,V.Jenis_vakasi,V.Satuan,T.kdProdi,T.thnTarif,T.Akumulasi_satuan,T.status_bayar '+ 'from personalia.vakasi_dosen'+cbTahun.Text+''+bulan+' T left join personalia.vakasi V on T.KodeVakasi = V.KodeVakasi '+ 'left join kamus.prg_std K on T.kdProdi = K.Kd_prg left join personalia.pegawai P on T.NPP = P.NPP where '+ 'T.KodeVakasi not like "%SA%" order by K.Nama_prg,P.nama_peg'; end; query1.SQL.Clear; query1.SQL.Add(xStr); query1.Open; if query1.RecordCount <> 0 then getData() else MessageDlg('Data tidak ditemukan',mtWarning,[mbOk],0); index := 1; gridIsi.RowCount := 2; while not query1.Eof do begin gridIsi.Cells[2,index] := query1.FieldByName('Jenis_Vakasi').AsString; gridIsi.Cells[3,index] := query1.FieldByName('Akumulasi_satuan').AsString; akum := query1.FieldByName('Akumulasi_satuan').AsFloat; thn := query1.FieldByName('thnTarif').AsString; kode := query1.FieldByName('KodeVakasi').AsString; prodi := query1.FieldByName('kdProdi').AsString; gridIsi.Cells[6,index] := query1.FieldByName('Nama_prg').AsString; npp := query1.FieldByName('NPP').AsString; gridIsi.Cells[0,index] := npp; gridIsi.Cells[1,index] := query1.FieldByName('nama_peg').AsString; tarif := getTarif(thn,kode,prodi); edTarif.Text := FloatToStr(tarif); jml := tarif * akum; gridIsi.Cells[4,index] := FloatToStr(tarif); //edJumlah.Text := FieldByName('Jumlah').AsString; tot := cariHarga(npp,prodi); gridIsi.Cells[5,index] := FloatToStr(jml); persen := getPersenPajak; pajak := persen/100 * jml; gridIsi.Cells[7,index] := FloatToStr(pajak); index := index + 1; gridIsi.AddRow; query1.Next; end; end;
128
xxi. Set Tarif Vakasi
Modul ini berguna untuk mengolah data tarif vakasi. Tarif vakasi berbeda –
beda untuk setiap program studi. Sistem akan memberi pilihan kepada user, apakah
tarif yang dimasukkan untuk semua program studi atau hanya program studi tertentu
saja. Jika untuk program studi tertentu maka sistem akan meminta user untuk
memilih salah satu program studi. Jika untuk semua program studi, maka sistem akan
mengambil data – data program studi kemudian satu per satu akan disimpan datanya
menggunakan looping. Berikut adalah cuplikan program nya :
if cbKrit.Text = 'Semua Prodi' then begin xString := 'select Kd_prg from kamus.prg_std'; que2.SQL.Clear; que2.SQL.Add(xString); que2.Open; if que2.RecordCount <> 0 then begin pb.Visible := True; pb.Max := que2.RecordCount; while not que2.Eof do begin pb.Position := row; kode := que2.Fields[0].AsString; cek := cekIsAda(kode,tanggal); //cek := 'True'; //ShowMessage(cek); if cek = 'True' then begin code := getKode; xStr := 'insert into personalia.tarif_vakasi'+cbTahun.Text+' values ("'+code+'",'+ '"'+cbJenisVakasi.KeyValue+'","'+kode+'","'+edBesar.Text+'","'+tanggal+'")'; end; if cek <> 'True' then begin xStr := 'update personalia.tarif_vakasi'+cbTahun.Text+' set besarTarif = "'+edBesar.Text+'"'+ 'where kdTarif = "'+cek+'"'; end; que3.SQL.Clear; que3.SQL.Add(xStr); que3.ExecSQL;
129
row := row + 1; que2.Next; end; end; ambilData; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); pb.Visible := false; end; if cbKrit.Text = 'Satu Prodi' then begin cek := cekIsAda(cbProdi.KeyValue,tanggal); if cek = 'True' then begin code := getKode; tmp := code; xStr := 'insert into personalia.tarif_vakasi'+cbTahun.Text+' values ("'+code+'",'+ '"'+cbJenisVakasi.KeyValue+'","'+cbProdi.KeyValue+'","'+edBesar.Text+'","'+tanggal+'")'; end; if cek <> 'True' then begin xStr := 'update personalia.tarif_vakasi'+cbTahun.Text+' set besarTarif = "'+edBesar.Text+'"'+ 'where kdTarif = "'+cek+'"'; tmp := cek; end; que3.SQL.Clear; que3.SQL.Add(xStr); que3.ExecSQL; ambilData; dbTarifVakasi.DataSource.DataSet.Locate('kdTarif',tmp,[loCaseInSensitive,loPartialKey]);
xxii. Set Tarif Overload
Modul ini berguna untuk mengolah data tarif overload dosen. Tarif overload
berdasarkan jenjang pendidikan dan golongan pegawai. Sistem akan menampilkan
golongan pegawai dan jenjang pendidikan yang ada. User diminta memilih salah satu
golongan dan jenjang pendidikan. Kemudian data akan disimpan ke database. Berikut
adalah cuplikan program nya :
if newRec = True then begin cek := cekKunci; if cek = True then
130
begin queUpdate.SQL.Clear; queUpdate.SQL.Add('insert into tarifoverload values ("'+cbGol.KeyValue+'","'+cbPendidikan.KeyValue+'","'+txtTarif.Text+'","'+ubahtgl(tglBerlaku.Text)+'")'); queUpdate.ExecSQL; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); btnSimpan.Visible := False; btnBatal.Visible := False; btnTambah.Visible := True; btnUbah.Visible := True; fieldAwal(False); showAwal; DBGrid1.DataSource.DataSet.Locate('Kd_golongan',cbGol.KeyValue,[loCaseInsensitive,loPartialKey]); getData; end else begin kosong; cbGol.SetFocus; end; end; if newRec = False then begin queUpdate.SQL.Clear; queUpdate.SQL.Add('update tarifoverload set Tarif = "'+txtTarif.Text+'" where Kd_golongan = "'+cbGol.KeyValue+'" AND Kd_pendidikan = "'+cbPendidikan.KeyValue+'" AND tglBerlaku = "'+ubahtgl(tglBerlaku.Text)+'"'); queUpdate.ExecSQL; MessageDlg('Data sudah disimpan',mtInformation,[mbOk],0); btnSimpan.Visible := False; btnBatal.Visible := False; btnTambah.Visible := True; btnUbah.Visible := True; fieldAwal(False); showAwal; end;
xxiii. Pengisian data overload
Modul ini berguna untuk mengolah data overload dosen. User diminta
memasukkan bulan dan tahun pembayaran honor overload, NPP dosen, dan jumlah
JP ( jam pertemuan ). Sesudah user memasukkan NPP dan jumlah JP, sistem akan
131
menampilkan besar honor overload yang akan diperoleh. Berikut adalah cuplikan
program nya :
if key = #13 then begin trf := StrToFloat(edHonor.Text); kali := StrToFloat(edAkumulasi.Text); tot := kali*trf; edTotal.Text := FloatToStr(tot); cek := isAdaRec; if cek = True then begin queUpdate.SQL.Clear; queUpdate.SQL.Add('insert into dosen_overload values ("'+cbDosen.KeyValue+'","'+bln+'","'+cbTahun.Text+'","'+edAkumulasi.Text+'","'+cbStatus.Text+'")'); queUpdate.ExecSQL; cbDosen.SetFocus; end else begin MessageDlg('Data ini sudah ada',mtWarning,[mbOk],0); edAkumulasi.SetFocus; end; if cbDosen.KeyValue <> '' then begin xStr := 'select Tarif from honor_overload where NPP = "'+cbDosen.KeyValue+'"'; queUpdate.SQL.Clear; queUpdate.SQL.Add(xStr); queUpdate.Open; if queUpdate.RecordCount <> 0 then tarif := queUpdate.FieldByName('Tarif').AsString; if queUpdate.RecordCount = 0 then tarif := '0';
xxiv. Honorarium dosen tidak tetap
Modul ini berguna untuk mengolah data honorarium dosen. Pada saat
pengisian data, user diminta memasukkan bulan,tahun, dan program studi pengaju.
Sistem akan menampilkan data honorarium dosen yang sudah ada di database sesuai
dengan program studi yang dipilih. Untuk menambah data, user diminta memasukkan
NPP, jumlah JP, dan jumlah hadir. Sesudah user memasukkan NPP, sistem akan
132
memasukkan besar honor mengajar per JP untuk dosen tersebut. Setelah user
memasukkan jumlah JP dan jumlah hadir, sistem akan menampilkan jumlah total
honor yang diterima oleh dosen yang bersangkutan. Setelah pengisian selesai, sistem
akan menyimpan data ke database. Berikut adalah cuplikan program nya :
if cbDosen.KeyValue <> '' then begin honor := 0; xStr := 'select Kd_gol from personalia.golongan_peg where NPP = "'+cbDosen.KeyValue+'" AND '+ 'Tmt_gol = (select max(Tmt_gol) from personalia.golongan_peg where NPP = "'+cbDosen.KeyValue+'" '+ 'AND Tmt_gol <= "'+tanggal+'")'; que3.SQL.Clear; que3.SQL.Add(xStr); que3.Open; if que3.RecordCount <> 0 then begin gol := que3.Fields[0].AsString; end else gol := '9'; xStr := 'select jenjang from personalia.pendidikan where NPP = "'+cbDosen.KeyValue+'" AND '+ 'Tgl_ijasah = (select max(Tgl_ijasah) from personalia.pendidikan where NPP = "'+cbDosen.KeyValue+'" '+ 'AND Tgl_ijasah <= "'+tanggal+'")'; que3.SQL.Clear; que3.SQL.Add(xStr); que3.Open; if que3.RecordCount <> 0 then begin jen := que3.Fields[0].AsString; end; xStr := 'select Tarif from personalia.tarifoverload where Kd_golongan = "'+gol+'" AND '+ 'Kd_pendidikan = "'+jen+'" AND tglBerlaku = (select max(tglBerlaku) from '+ 'personalia.tarifoverload where Kd_golongan = "'+gol+'" AND Kd_pendidikan = "'+jen+'" '+ 'AND tglBerlaku <= "'+tanggal+'")'; que3.SQL.Clear; que3.SQL.Add(xStr); que3.Open; if que3.RecordCount <> 0 then begin honor := que3.Fields[0].AsFloat; end; edHonor.Text := FloatToStr(honor); end;
133
procedure TfrmHonorarium.edJmJpExit(Sender: TObject); if edJmJp.Text <> '' then begin jml := StrToFloat(edJmJp.Text); honor := StrToFloat(edHonor.Text); tot := jml * honor; edHonorAjar.Text := FloatToStr(tot); end; end; procedure TfrmHonorarium.edJmHadirKeyPress(Sender: TObject; var Key: Char); if key = #13 then begin tgl := '28/'+bulan+'/'+cbTahun.Text+''; tarif := getTunjanganTransport(tgl); jml := StrTofloat(edJmHadir.Text); tot := jml * tarif; edHonorTrans.Text := FloatToStr(tot); tot1 := StrTofloat(edHonorAjar.Text); totSemua := tot + tot1; edTotal.Text := FloatToStr(totSemua); persen := getPersenPajak; pajak := persen/100 * totSemua; edPajak.Text := FloatToStr(pajak); terima := totSemua - pajak; edTerima.Text := FloatToStr(terima); cek := cekIsAdaRec(cbDosen.KeyValue); if cek = 'True' then begin status := False; row := 1; jumRec := gridMasukan.RowCount; while row <= jumRec - 1 do begin if gridMasukan.Cells[1,row] = cbDosen.KeyValue then begin gridMasukan.Cells[1,row] := cbDosen.KeyValue; gridMasukan.Cells[2,row] := edJmJp.Text; gridMasukan.Cells[3,row] := edJmHadir.Text; gridMasukan.Cells[4,row] := edTotal.Text; gridMasukan.Cells[5,row] := edPajak.text; gridMasukan.Cells[6,row] := edTerima.Text; gridMasukan.Cells[7,row] := kode; status := true; end; row := row + 1; end; if status = False then begin gridMasukan.Cells[0,inRow] := IntToStr(inRow);
134
gridMasukan.Cells[1,inRow] := cbDosen.KeyValue; gridMasukan.Cells[2,inRow] := edJmJp.Text; gridMasukan.Cells[3,inRow] := edJmHadir.Text; gridMasukan.Cells[4,inRow] := edTotal.Text; gridMasukan.Cells[5,inRow] := edPajak.text; gridMasukan.Cells[6,inRow] := edTerima.Text; gridMasukan.Cells[7,inRow] := ''; inRow := inRow + 1; gridMasukan.AddRow; end; end; if cek <> 'True' then begin row := 1; jumRec := gridMasukan.RowCount; while row <= jumRec - 1 do begin //if (gridMasukan.Cells[7,row] = kode) AND (gridMasukan.Cells[7,row] <> '') then if gridMasukan.Cells[1,row] = cbDosen.KeyValue then begin gridMasukan.Cells[1,row] := cbDosen.KeyValue; gridMasukan.Cells[2,row] := edJmJp.Text; gridMasukan.Cells[3,row] := edJmHadir.Text; gridMasukan.Cells[4,row] := edTotal.Text; gridMasukan.Cells[5,row] := edPajak.text; gridMasukan.Cells[6,row] := edTerima.Text; gridMasukan.Cells[7,row] := kode; status := False; end; row := row + 1; end; end; // cbDosen.SetFocus; end; //gridMasukan.RemoveRows(row,1); end; procedure TfrmHonorarium.btnSimpanClick(Sender: TObject); xString := 'select current_date'; que2.SQL.Clear; que2.SQL.Add(xString); que2.Open; if que2.RecordCount <> 0 then begin tgl := que2.Fields[0].AsString; end; if newRec = True then begin row := 1; jumRec := gridMasukan.RowCount; { cek := cekIsAdaRec; if cek = 'True' then
135
begin kode := getKode; xString := 'insert into personalia.honorarium'+cbTahun.Text+''+bulan+' values '+ '("'+kode+'","'+cbDosen.KeyValue+'","'+cbProdi.KeyValue+'",'+ '"'+edJmJp.Text+'","'+edJmHadir.Text+'","'+edTotal.Text+'",'+ '"'+edPajak.Text+'","'+edTerima.Text+'","'+ubahtgl(tgl)+'")'; que2.SQL.Clear; que2.SQL.Add(xString); que2.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); setTampilanAwal; setField(False); } while row <= jumRec -1 do begin if gridMasukan.Cells[2,row] <> '' then begin if gridMasukan.Cells[7,row] <> '' then begin xString := 'update personalia.honorarium'+cbTahun.Text+''+bulan+' set jmJp = "'+gridMasukan.Cells[2,row]+'",'+ 'jmHadir = "'+gridMasukan.Cells[3,row]+'",Total = "'+gridMasukan.Cells[4,row]+'",Pajak = "'+gridMasukan.Cells[5,row]+'",'+ 'Terima = "'+gridMasukan.Cells[6,row]+'" where NPP = "'+gridMasukan.Cells[1,row]+'" AND kdProdi = "'+cbProdi.KeyValue+'"'; end else begin kode := getKode; cek2 := cekIsAdaRec(gridMasukan.Cells[1,row]); if cek2 = 'True' then begin xString := 'insert into personalia.honorarium'+cbTahun.Text+''+bulan+' values '+ '("'+kode+'","'+gridMasukan.Cells[1,row]+'","'+cbProdi.KeyValue+'",'+ '"'+gridMasukan.Cells[2,row]+'","'+gridMasukan.Cells[3,row]+'","'+gridMasukan.Cells[4,row]+'",'+ '"'+gridMasukan.Cells[5,row]+'","'+gridMasukan.Cells[6,row]+'","'+ubahtgl(tgl)+'")'; end; if cek2 <> 'True' then begin xString := 'update personalia.honorarium'+cbTahun.Text+''+bulan+' set jmJp = "'+gridMasukan.Cells[2,row]+'",'+ 'jmHadir = "'+gridMasukan.Cells[3,row]+'",Total = "'+gridMasukan.Cells[4,row]+'",Pajak = "'+gridMasukan.Cells[5,row]+'",'+ 'Terima = "'+gridMasukan.Cells[6,row]+'" where NPP = "'+gridMasukan.Cells[1,row]+'" AND kdProdi = "'+cbProdi.KeyValue+'"'; end; end; // ShowMessage(cek2); // ShowMessage(xString); que2.SQL.Clear; que2.SQL.Add(xString);
136
que2.ExecSQL; end; row := row + 1; end; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); //setTampilanAwal; //setField(False); statSimpan := True; // end else // MessageDlg('Data sudah ada',mtWarning,[mbOk],0); end; if newRec = False then begin xString := 'update personalia.honorarium'+cbTahun.Text+''+bulan+' set jmJp = "'+edJmJp.Text+'",'+ 'jmHadir = "'+edJmHadir.Text+'",Total = "'+edTotal.Text+'",Pajak = "'+edPajak.Text+'",'+ 'Terima = "'+edTerima.Text+'" where NPP = "'+cbDosen.KeyValue+'" AND kdProdi = "'+cbProdi.KeyValue+'"'; que2.SQL.Clear; que2.SQL.Add(xString); que2.ExecSQL; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); setTampilanAwal; setField(False);
xxv. Lihat Gaji Tanggal 1
Modul ini berguna untuk membuat atau melihat kembali slip gaji untuk
tanggal 1. User akan memasukkan bulan dan tahun slip gaji. Sistem akan mengecek
apakah gaji untuk bulan dan tahun yang dipilih sudah ada atau belum ada. Jika sudah
ada, sistem akan mengambil dari data yang sudah ada di database kemudian sistem
akan menampilkannya pada user. Jika belum ada, maka sistem akan melakukan
perhitungan gaji. Sistem akan mengambil semua komponen dari daftar penerimaan
tunjangan dan daftar pembayaran iuran yang memiliki group bayar tanggal 1 untuk
pegawai yang bersangkutan. Sistem kemudian mengambil data overload dosen,
komponen gaji lain – lain dan cicilan pinjaman.
137
Berikut adalah cuplikan program nya:
if cbJenis.Text = 'Semua Dosen' then begin cbDosen.Enabled := False; labDosen.Enabled := False; cek := cekTabel; if cek = True then setGaji else lihatGajiLalu; end; if cbJenis.Text = 'Satu Dosen' then begin cbDosen.Enabled := True; labDosen.Enabled := True; end; end; xString := 'select distinct NPP from daftar_tunjangan where groupBayar = "01"'; que2.SQL.Clear; que2.SQL.Add(xString); que2.Open; if que2.RecordCount <> 0 then begin max := que2.RecordCount; end; //if cbJenis.Text = 'Semua Dosen' then // begin xStr := 'select D.*,P.nama_peg,T.NamaTunjangan from personalia.daftar_tunjangan D left join '+ 'personalia.pegawai P on D.NPP = P.NPP left join personalia.tunjangan_gaji T on '+ 'D.KodeTunjangan = T.KodeTunjangan where D.groupBayar = "01" order by D.NPP'; // end else { begin xStr := 'select D.*,P.nama_peg,T.NamaTunjangan from personalia.daftar_tunjangan D left join '+ 'personalia.pegawai P on D.NPP = P.NPP left join personalia.tunjangan_gaji T on '+ 'D.KodeTunjangan = T.KodeTunjangan where D.groupBayar = "01" AND D.NPP = "'+cbDosen.KeyValue+'" order by D.NPP'; end; } que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; if que1.RecordCount <> 0 then begin pb1.Max := max; while not que1.Eof do begin // pb1.Position := index; if (que1.Fields[0].AsString <> npp) OR (que1.Eof) then
138
begin if (index > 1) OR (que1.Eof) then begin terima := 0; tetap := 0; tunjYayasan := 0; cicilan := 0; row := getTunjanganYayasan(index,npp); index := row; pph := getPajak(npp); gridGaji.Cells[4,index] := 'Tunjangan Pph'; gridGaji.Cells[5,index] := IntToStr(pph); gridGaji.AddRow; index := index + 1; row := cariHonorLain(index,npp); index := row; row := getOverload(index,npp); index := row; row := cariPotongan(index,npp); index := row; row := cariPotonganLain(index,npp); index := row; row := getCicilanDosen(index,npp); index := row; tetap := hitungTotalTetap(npp); updateCicilanDosen(npp); //ShowMessage(FloatToStr(gaji)); // ShowMessage(FloatToStr(honor_lain)); terima := (gaji + tetap + tunjYayasan + honor_lain + over + tunjAnak + tunjPasangan) - (potongan_lain + Iuranyadapen + pajakOver + cicilan); gridGaji.Cells[1,index] := 'Total Diterima'; gridGaji.CellProperties[1,index].FontStyle := [fsBold]; gridGaji.Cells[5,index] := FloatToStr(terima); index := index + 1; gridGaji.AddRow; tunjAnak := 0; tunjPasangan := 0; end; gridGaji.Cells[0,index] := IntToStr(no); gaji := getGajiPokok(que1.Fields[0].AsString); gridGaji.Cells[1,index] := que1.Fields[0].AsString; gridGaji.Cells[2,index] := que1.FieldByName('nama_peg').AsString; gridGaji.Cells[3,index] := 'Tunjangan'; gridGaji.CellProperties[3,index].FontStyle := [fsBold]; gridGaji.Cells[4,index] := 'Gaji Pokok'; gridGaji.Cells[5,index] := FloatToStr(gaji); gridGaji.AddRow; index := index + 1; gridGaji.Cells[4,index] := que1.FieldByName('NamaTunjangan').AsString; if que1.FieldByName('NamaTunjangan').AsString = 'Anak' then begin
139
besar := que1.Fields[2].AsFloat; tunjAnak := getTunjanganAnak(que1.Fields[0].AsString,'1',besar); gridGaji.Cells[5,index] := FloatToStr(tunjAnak); end else if que1.FieldByName('NamaTunjangan').AsString = 'Istri' then begin besar := que1.Fields[2].AsFloat; tunjPasangan := getTunjanganAnak(que1.Fields[0].AsString,'5',besar); gridGaji.Cells[5,index] := FloatToStr(tunjPasangan); end else if que1.FieldByName('NamaTunjangan').AsString = 'Suami' then begin besar := que1.Fields[2].AsFloat; tunjPasangan := getTunjanganAnak(que1.Fields[0].AsString,'4',besar); gridGaji.Cells[5,index] := FloatToStr(tunjPasangan); end else gridGaji.Cells[5,index] := que1.Fields[2].AsString; no := no + 1; pb1.Position := no; end else begin gridGaji.Cells[4,index] := que1.FieldByName('NamaTunjangan').AsString; if que1.FieldByName('NamaTunjangan').AsString = 'Anak' then begin besar := que1.Fields[2].AsFloat; tunjAnak := getTunjanganAnak(que1.Fields[0].AsString,'1',besar); gridGaji.Cells[5,index] := FloatToStr(tunjAnak); end else if que1.FieldByName('NamaTunjangan').AsString = 'Istri' then begin besar := que1.Fields[2].AsFloat; tunjPasangan := getTunjanganAnak(que1.Fields[0].AsString,'5',besar); gridGaji.Cells[5,index] := FloatToStr(tunjPasangan); end else if que1.FieldByName('NamaTunjangan').AsString = 'Suami' then begin besar := que1.Fields[2].AsFloat; tunjPasangan := getTunjanganAnak(que1.Fields[0].AsString,'4',besar); gridGaji.Cells[5,index] := FloatToStr(tunjPasangan); end else gridGaji.Cells[5,index] := que1.Fields[2].AsString; end; index := index + 1; npp := que1.Fields[0].AsString; que1.Next; gridGaji.AddRow; end; terima := 0; tetap := 0; tunjYayasan := 0; row := getTunjanganYayasan(index,npp);
140
index := row; pph := getPajak(npp); gridGaji.Cells[4,index] := 'Tunjangan Pph'; gridGaji.Cells[5,index] := IntToStr(pph); gridGaji.AddRow; index := index + 1; row := cariHonorLain(index,npp); index := row; row := getOverload(index,npp); index := row; row := cariPotongan(index,npp); index := row; row := cariPotonganLain(index,npp); index := row; tetap := hitungTotalTetap(npp); //ShowMessage(FloatToStr(gaji)); // ShowMessage(FloatToStr(honor_lain)); terima := (gaji + tetap + tunjYayasan + honor_lain + over + tunjAnak + tunjPasangan) - (potongan_lain + Iuranyadapen + pajakOver); gridGaji.Cells[1,index] := 'Total Diterima'; gridGaji.CellProperties[1,index].FontStyle := [fsBold]; gridGaji.Cells[5,index] := FloatToStr(terima); index := index + 1; gridGaji.AddRow; tunjAnak := 0; tunjPasangan := 0; procedure TfrmRekap1.lihatGajiLalu(); if cbJenis.Text = 'Semua Dosen' then xStr := 'select * from personalia.daftar_gaji'+cbTahun.Text+''+bulan+'' else xStr := 'select * from personalia.daftar_gaji'+cbTahun.Text+''+bulan+' where '+ 'NPP = "'+cbDosen.KeyValue+'"'; que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; if que1.RecordCount <> 0 then begin while not que1.Eof do begin if npp <> que1.Fields[2].AsString then begin gridGaji.Cells[0,row] := que1.Fields[0].AsString; gridGaji.Cells[1,row] := que1.Fields[1].AsString; gridGaji.Cells[2,row] := que1.Fields[2].AsString; gridGaji.Cells[3,row] := que1.Fields[3].AsString; gridGaji.Cells[4,row] := que1.Fields[4].AsString; gridGaji.Cells[5,row] := que1.Fields[5].AsString; end else if npp = que1.Fields[2].AsString then begin
Pada modul ini sistem juga melakukan perhitungan pajak bulanan pegawai.
Sistem akan melakukan perhitungan pajak sesuai dengan prosedur pajak :
a) Sistem mengumpulkan daftar komponen penggajian yang termasuk dalam
penghasilan kotor menggunakan view :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`penghasilan_kotor`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `penghasilan_kotor` AS select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'4') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'5') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'1') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'2') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'3') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'6') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'7') union select
142
`daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'8') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'9') union select `daftar_tunjangan`.`NPP` AS `NPP`,`daftar_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`daftar_tunjangan`.`Jumlah` AS `Jumlah` from `daftar_tunjangan` where (`daftar_tunjangan`.`KodeTunjangan` = _latin1'10') order by `NPP`$$
b) Sistem akan menghitung penghasilan kotor menggunakan view : DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`jml_penghasilan_kotor`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `jml_penghasilan_kotor` AS select `p`.`NPP` AS `NPP`,(sum(`p`.`Jumlah`) + `d`.`gaji`) AS `Total` from (`penghasilan_kotor` `P` left join `dua` `D` on((`p`.`NPP` = `d`.`NPP`))) group by `p`.`NPP`$$ DELIMITER ;$$
c) Sistem akan menghitung jumlah penghasilan bersih menggunakan view :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`penghasilan_netto`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `penghasilan_netto` AS select `j`.`NPP` AS `NPP`,((`j`.`Total` - (0.05 * `j`.`Total`)) - `di`.`jml_iuran`) AS `jml` from (`jml_penghasilan_kotor` `J` join `daftar_iuran` `DI`) where ((`j`.`NPP` = `di`.`NPP`) and (`di`.`KodeIuran` = _latin1'P.4'))$$ DELIMITER ;$$
d) Sistem kemudian menghitung jumlah PTKP ( pendapatan tidak kena pajak )
dengan menggunakan view :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`ptkp_tanggungan`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `ptkp_tanggungan` AS select `b`.`NPP` AS `NPP`,sum((`pt`.`besar_PTKP` * `b`.`banyak`)) AS `ptkp_Tanggungan` from (`banyak_anak` `B` join `ptkp` `PT`) where (`b`.`Hubungan` = `pt`.`Hubungan`) group by `b`.`NPP`$$
143
DELIMITER ;$$ DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`besar_ptkp`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `besar_ptkp` AS select `pt`.`NPP` AS `NPP`,(`pt`.`ptkp_Tanggungan` + `pk`.`besar_PTKP`) AS `jml` from (`ptkp_tanggungan` `PT` join `ptkp` `PK`) where (`pk`.`Hubungan` like _latin1'%Diri sendiri%')$$ DELIMITER ;$$
e) Sistem menghitung besar pph per bulan dengan view : DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`jml_pph`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `jml_pph` AS select sql_no_cache `n`.`NPP` AS `NPP`,(((`n`.`jml` * 12) - `p`.`jml`) / 12) AS `pph` from (`penghasilan_netto` `N` left join `besar_ptkp` `P` on((`n`.`NPP` = `p`.`NPP`)))$$ DELIMITER ;$$
xxvi. Lihat Gaji Tanggal 15
Modul ini berguna untuk membuat atau melihat kembali slip gaji tanggal 15.
User akan memasukkan bulan dan tahun slip gaji. Sistem akan mengecek apakah gaji
untuk bulan dan tahun yang dipilih sudah ada atau belum ada. Jika sudah ada, sistem
akan mengambil dari data yang sudah ada di database kemudian sistem akan
menampilkannya pada user. Jika belum ada, maka sistem akan melakukan
perhitungan gaji. Sistem akan mengambil semua komponen dari daftar penerimaan
tunjangan dan daftar pembayaran iuran yang memiliki group bayar tanggal 15 untuk
pegawai yang bersangkutan. Kemudian sistem akan mengambil data honorarium, data
vakasi, dan komponen lain – lain. Berikut adalah cuplikan program nya :
if cbPilih.Text = 'Satu Dosen' then
144
begin // cbDosen.Visible := True; // cbPilih.Visible := false; cbDosen.Enabled := True; Label4.Enabled := True; //setGajiPribadi; end else begin cbDosen.Enabled := False; Label4.Enabled := False; if cek = True then setGaji else lihatGajiDulu; end; end; xStr := 'select D.*,P.nama_peg,T.NamaTunjangan from personalia.daftar_tunjangan D left join '+ 'personalia.pegawai P on D.NPP = P.NPP left join personalia.tunjangan_gaji T on '+ 'D.KodeTunjangan = T.KodeTunjangan where D.groupBayar = "15"'; que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; if que1.RecordCount <> 0 then begin pb1.Max := que1.RecordCount; while not que1.Eof do begin //if index > 1 then // npp := gridPeg.Cells[1,index - 1]; //npp := que1.Fields[0].AsString; pb1.Position := no; if (que1.Fields[0].AsString <> npp) OR (que1.Eof) then begin if index > 1 then begin jmlVakasi := 0; honor_lain := 0; potongan_lain := 0; pajakVakasi := 0; tetap := 0; terima := 0; //ShowMessage(IntToStr(row)); row := cariVakasi(index,npp); index := row; row := getHonorarium(npp,index); index := row; row := cariHonorLain(index,npp); index := row; row := cariPotongan(index,npp);
145
index := row; row := cariPotonganLain(index,npp); index := row; row := getPajakVakasi(index,npp); index := row; row := getPajakHonorarium(npp,index); index := row; tetap := hitungTotalTetap(npp); terima := (tetap + jmlVakasi + honor_lain + honor) - ((-potongan_lain) + pajakVakasi + pajak_honor); gridPeg.AddRow; gridPeg.Cells[1,index] := 'Total Diterima'; gridPeg.Cells[5,index] := FloatToStr(terima); index := index + 1; end; gridPeg.AddRow; gridPeg.Cells[0,index] := IntToStr(no); gridPeg.Cells[1,index] := que1.Fields[0].AsString; gridPeg.Cells[2,index] := que1.Fields[5].AsString; gridPeg.Cells[3,index] := 'Tunjangan'; gridPeg.CellProperties[3,index].FontStyle := [fsBold]; gridPeg.Cells[4,index] := que1.Fields[6].AsString; gridPeg.Cells[5,index] := que1.Fields[2].AsString; no := no + 1; end else begin gridPeg.AddRow; gridPeg.Cells[4,index] := que1.Fields[5].AsString; gridPeg.Cells[5,index] := que1.Fields[2].AsString; end; npp := que1.Fields[0].AsString; que1.Next; index := index + 1; end; // ShowMessage(IntToStr(index)); jmlVakasi := 0; honor_lain := 0; potongan_lain := 0; pajakVakasi := 0; tetap := 0; terima := 0; row := cariVakasi(index,npp); index := row; //ShowMessage(IntToStr(index)); row := getHonorarium(npp,index); index := row; // ShowMessage(IntToStr(index)); row := cariHonorLain(index,npp); index := row; row := cariPotongan(index,npp); index := row;
146
row := cariPotonganLain(index,npp); index := row; row := getPajakVakasi(index,npp); index := row; // ShowMessage(IntToStr(index)); row := getPajakHonorarium(npp,index); index := row; tetap := hitungTotalTetap(npp); terima := (tetap + jmlVakasi + honor_lain + honor) - ((-potongan_lain) + pajakVakasi + pajak_honor); // ShowMessage(npp); // ShowMessage(FloatToStr(terima)); // ShowMessage(IntToStr(index)); gridPeg.AddRow; gridPeg.Cells[1,index] := 'Total Diterima'; gridPeg.Cells[5,index] := FloatToStr(terima); index := index + 1; end; //cekRow; end; procedure TfrmGaji15.lihatGajiDulu(); xStr := 'select * from personalia.daftar_gaji15'+cbTahun.Text+''+bulan+''; que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; if que1.RecordCount <> 0 then begin while not que1.Eof do begin if nama <> que1.Fields[2].AsString then begin gridPeg.Cells[0,row] := que1.Fields[0].AsString; gridPeg.Cells[1,row] := que1.Fields[1].AsString; gridPeg.Cells[2,row] := que1.Fields[2].AsString; gridPeg.Cells[3,row] := que1.Fields[3].AsString; gridPeg.Cells[4,row] := que1.Fields[4].AsString; gridPeg.Cells[5,row] := que1.Fields[5].AsString; end else if nama = que1.Fields[2].AsString then begin gridPeg.Cells[0,row] := que1.Fields[0].AsString; gridPeg.Cells[1,row] := que1.Fields[1].AsString; gridPeg.Cells[2,row] := ''; gridPeg.Cells[3,row] := que1.Fields[3].AsString; gridPeg.Cells[4,row] := que1.Fields[4].AsString; gridPeg.Cells[5,row] := que1.Fields[5].AsString; end; nama := que1.Fields[2].AsString; row := row + 1; gridPeg.AddRow;
147
que1.Next; end; Dalam menghitung gaji tanggal 1 dan tanggal 15, sistem menggunakan view untuk
mengumpulkan dan menghitung komponen – komponen gaji. Berikut adalah
algoritma view yang digunakan :
DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`daftar_tunjangan`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `daftar_tunjangan` AS select `jml_tunjangan`.`NPP` AS `NPP`,`jml_tunjangan`.`KodeTunjangan` AS `KodeTunjangan`,`jml_tunjangan`.`Jumlah` AS `Jumlah`,`jml_tunjangan`.`groupBayar` AS `groupBayar`,`jml_tunjangan`.`sifat` AS `sifat`,`jml_tunjangan`.`stat_gaji_13` AS `stat_gaji_13` from `jml_tunjangan` union select `jml_tunj_nominal`.`NPP` AS `NPP`,`jml_tunj_nominal`.`KodeTunjangan` AS `KodeTunjangan`,`jml_tunj_nominal`.`Jumlah` AS `Jumlah`,`jml_tunj_nominal`.`groupBayar` AS `groupBayar`,`jml_tunj_nominal`.`sifat` AS `sifat`,`jml_tunj_nominal`.`stat_gaji_13` AS `stat_gaji_13` from `jml_tunj_nominal`$$ DELIMITER ;$$ DELIMITER $$; DROP VIEW IF EXISTS `personalia`.`daftar_iuran`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `daftar_iuran` AS select `jml_iuran`.`NPP` AS `NPP`,`jml_iuran`.`KodeIuran` AS `KodeIuran`,`jml_iuran`.`jml_iuran` AS `jml_iuran`,`jml_iuran`.`groupBayar` AS `groupBayar`,`jml_iuran`.`stat_gaji_13` AS `stat_gaji_13` from `jml_iuran` union select `b`.`NPP` AS `NPP`,`b`.`KodeIuran` AS `KodeIuran`,`b`.`besar` AS `besar`,`i`.`groupBayar` AS `groupBayar`,`i`.`stat_gaji_13` AS `stat_gaji_13` from (`bayar_iuran` `B` left join `iuran_gaji` `I` on((`b`.`KodeIuran` = `i`.`KodeIuran`))) where (`i`.`jenis_gaji` = _latin1'Nominal')$$ DELIMITER ;$$
148
xxvii. Set Gaji 13
Sistem mengambil semua komponen gaji, baik tunjangan maupun iuran yang
termasuk dalam perhitungan gaji ke – 13. Sistem akan menghitung total gaji ke – 13
untuk masing – masing dosen. Sistem kemudian akan menyimpan data gaji ke – 13
pada tabel komponen lain – lain. Berikut adalah cuplikan program nya :
procedure TForm1.btnSetClick(Sender: TObject); if code <> 'Fail' then begin xStr := 'select distinct NPP from personalia.terima_tunjangan'; que2.SQL.Clear; que2.SQL.Add(xStr); que2.Open; if que2.RecordCount <> 0 then begin pb.Max := que2.RecordCount; while not que2.Eof do begin pb.Position := no; totTunjangan := 0; totIuran := 0; selisih := 0; npp := que2.FieldByName('NPP').AsString; totTunjangan := hitungTunjangan(npp); totIuran := hitungPotongan(npp); selisih := totTunjangan - totIuran; cek := cekIsAdaRec(npp,code); if selisih <> 0 then begin if cek = True then begin xString := 'insert into personalia.lain_lain'+cbTahun.Text+''+bulan+' values '+ '("'+npp+'","'+code+'","'+FloatToStr(selisih)+'","'+cbGroup.Text+'","Gaji 13")'; end; if cek = False then begin xString := 'update personalia.lain_lain'+cbTahun.Text+''+bulan+' set '+ 'BesarTunjangan = "'+FloatToStr(selisih)+'",groupBayar = "'+cbGroup.Text+'" '+ 'where NPP = "'+npp+'" AND KodeTunjangan = "'+code+'"'; end; que3.SQL.Clear; que3.SQL.Add(xString); que3.ExecSQL; end;
149
no := no + 1; que2.Next; end; MessageDlg('Data sudah tersimpan',mtInformation,[mbOK],0); end; end else MessageDlg('Silakan isi jenis honor lain-lain untuk Gaji 13',mtConfirmation,[mbOk],0); end; function TForm1.hitungTunjangan(npp : String) : Double; var xStr,xString,kode : String; jml,nilai,total : Double; byk : Integer; begin total := 0; xStr := 'select * from personalia.daftar_tunjangan where NPP = "'+npp+'" AND '+ 'stat_gaji_13 = "1"'; que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; if que1.RecordCount <> 0 then begin while not que1.Eof do begin jml := 0; kode := que1.FieldByName('KodeTunjangan').AsString; jml := que1.FieldByName('Jumlah').AsFloat; if (kode = '1') OR (kode = '2') OR (kode = '3') OR (kode = '4') OR (kode = '5') then begin byk := getBanyak(npp,kode); jml := jml * byk; end; total := total + jml; que1.Next; end; end; result := total; end; function TForm1.hitungPotongan(npp : String) : Double; xStr := 'select * from personalia.daftar_iuran where NPP = "'+npp+'" AND '+ 'stat_gaji_13 = "1"'; que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; if que1.RecordCount <> 0 then begin while not que1.Eof do begin jml := 0; jml := que1.FieldByname('jml_iuran').AsFloat;
150
total := total + jml; que1.Next; end; end; result := total; end;
xxviii. Modul Set THR ( Tunjangan Hari Raya )
Pertama kali, sistem akan mengumpulkan data dosen ( NPP ) beserta besar
THR nya menggunakan view :
DROP VIEW IF EXISTS `personalia`.`thr`$$ CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `thr` AS select `g`.`NPP` AS `NPP`,`g`.`gaji` AS `gaji` from (`golongan_peg` `G` left join `pegawai` `P` on((`g`.`NPP` = `p`.`NPP`))) where ((`p`.`AdmEdu` = _latin1'2') and (`g`.`Tmt_gol` = (select max(`golongan_peg`.`Tmt_gol`) AS `max(Tmt_gol)` from `golongan_peg` where (`golongan_peg`.`NPP` = `g`.`NPP`) group by `golongan_peg`.`NPP`)))$$ DELIMITER ;$$ Kemudian sistem mengambil data dari view tersebut. Data disimpan pada komponen
gaji lain – lain. Berikut adalah cuplikan program nya :
procedure TfrmSetThr.btnSetClick(Sender: TObject); kode := getKode; index := 1; if kode <> 'Fail' then begin xStr := 'select * from personalia.thr'; que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; if que1.RecordCount <> 0 then begin pb.Max := que1.RecordCount; while not que1.Eof do begin pb.Position := index; npp := que1.Fields[0].AsString; jml := que1.Fields[1].AsString; if jml = '' then jml := '0'; cek := cekIsAdaRec(npp,kode); if cek = True then
151
begin xString := 'insert into personalia.lain_lain'+cbTahun.Text+''+bulan+' values '+ '("'+npp+'","'+kode+'","'+jml+'","'+cbGroup.Text+'","")'; // ShowMessage(xString); end; if cek = False then begin xString := 'update personalia.lain_lain'+cbTahun.Text+''+bulan+' set '+ 'BesarTunjangan = "'+jml+'",groupBayar = "'+cbGroup.Text+'" where '+ 'NPP = "'+npp+'" AND KodeTunjangan = "'+kode+'"'; end; que2.SQL.Clear; que2.SQL.Add(xString); que2.ExecSQL; index := index + 1; que1.Next; end; MessageDlg('Data sudah tersimpan',mtInformation,[mbOk],0); end; end else MessageDlg('Silakan isi jenis honor lain - lain untuk THR',mtConfirmation,[mbOk],0); End;
xxxiii. Rekap Data
Sistem akan mengambil data – data pada tabel daftar_gajiyyyymm untuk
membuat laporan penghasilan dan laporan memorial. Kemudian sistem akan
menampilkan data – data tersebut dalam bentuk daftar penghasilan atau daftar
memorial. Berikut adalah cuplikan program pada menu rekap data :
stat := cekDaftarGaji; stat1 := cekDaftarGaji15; if (stat = False) AND (stat1 = False) then begin xStr := 'create view personalia.gabung_gaji as select * from personalia.daftar_gaji'+cbTahun.Text+''+bulan+' '+ 'union select * from personalia.daftar_gaji15'+cbTahun.Text+''+bulan+''; ShowMessage(xStr); que1.SQL.Clear; que1.SQL.Add(xStr); que1.ExecSQL; result := False; end; if (stat = False) AND (stat1 = True) then begin
152
xStr := 'create view personalia.gabung_gaji as select * from personalia.daftar_gaji'+cbTahun.Text+''+bulan+''; que1.SQL.Clear; que1.SQL.Add(xStr); que1.ExecSQL; result := False; end; if (stat = True) AND (stat1 = False) then begin xStr := 'create view personalia.gabung_gaji as select * from personalia.daftar_gaji15'+cbTahun.Text+''+bulan+''; que1.SQL.Clear; que1.SQL.Add(xStr); que1.ExecSQL; result := False; end; if (stat = True) AND (stat1 = True) then begin MessageDlg('Daftar gaji belum ada',mtWarning,[mbOk],0); result := True; end;
procedure TfrmRekapitulasiData.setJumlah(); begin kol := 2; row := 1; jumRec := gridRekap.RowCount; jumKol := gridRekap.ColCount; while row <= jumRec - 1 do begin kol := 2; nama := gridRekap.Cells[1,row]; while kol <= jumKol - 1 do begin komp := gridRekap.Cells[kol,0]; xStr := 'select besar from personalia.gabung_gaji where '+ 'komponen = "'+komp+'" AND nama = "'+nama+'"'; // ShowMessage(xStr); que1.SQL.Clear; que1.SQL.Add(xStr); que1.Open; jml := 0; if que1.RecordCount <> 0 then begin jml := que1.Fields[0].AsFloat; gridRekap.Cells[kol,row] := FloatToStr(jml); end else begin gridRekap.Cells[kol,row] := '0'; end;
153
4.4 Implementasi Output
i. Print out jenis tunjangan
Gambar 4.34 Print out jenis tunjangan
ii. Print out daftar besar tunjangan yayasan
Gambar 4.35 Print out daftar besar tunjangan yayasan
154
iii. Print out daftar tunjangan per dosen
Gambar 4.36 Print out daftar tunjangan per dosen
iv. Print out daftar iuran per dosen
Gambar 4.37 Print out daftar iuran per dosen
155
v. Print out daftar vakasi dosen
Gambar 4.38 Print out daftar vakasi dosen
vi. Print out daftar overload dosen
Gambar 4.39 Print out daftar overload dosen
156
vii. Print out daftar honorarium dosen
Gambar 4.40 Print out daftar honorarium dosen
viii. Print out daftar honor lain – lain dosen
Gambar 4.41 Print out daftar honor lain – lain dosen
157
ix. Print out daftar jenis pinjaman dosen
Gambar 4.42 Print out daftar jenis pinjaman dosen
x. Print out daftar pinjaman dosen
Gambar 4.43 Print out daftar pinjaman dosen
158
xi. Print out daftar honor PMB ( Penerimaan Mahasiswa Baru )
Gambar 4.44 Print out daftar honor PMB dosen
xii. Print out daftar tarif mengajar semester antara dosen
Gambar 4.45 Print out daftar tarif mengajar semester antara dosen
159
xiii. Print out daftar honor mengajar semester antara dosen
Gambar 4.46 Print out daftar honor mengajar semester antara dosen
xiv. Print out daftar honor semester antara dosen
Gambar 4.47 Print out daftar honor semester antara
160
xv. Print out daftar gaji tanggal 15
Gambar 4.48 Print out daftar gai tanggal 15
xvi. Print out daftar gaji tanggal 1
Gambar 4.49 Print out daftar gaji tanggal 1
161
xvii. Print out rekap data
Gambar 4.50 Print out rekap data
162
BAB V
HASIL DAN PEMBAHASAN SISTEM
5.1 Teknik Pengumpulan Data
Ada beberapa teknik yang dilakukan dalam mengumpulkan data, diantaranya
adalah :
a). Pembuatan kuisioner.
Pembuatan kuisioner dilakukan selama 1 hari.
b). Penyebaran kuisioner.
Penyebaran kuisioner dilakukan dalam waktu 1 minggu pada bulan Maret
dimana waktu pelaksanaan penyebaran disesuaikan dengan waktu luang dari
para responden. Penyebaran dilakukan di 1 tempat yaitu Universitas Sanata
Dharma Yogyakarta.
c). Penarikan kuisioner.
Penarikan kuisioner dilakukan saat itu juga, setelah responden selesai
menggunakan dan mencoba-coba program Sistem Informasi Penggajian
Dosen Universitas Sanata Dharma Yogyakarta dan mengisi kuisioner.
5.2 Sasaran Penyebaran Kuisioner
Ada beberapa sasaran penyebaran kuisioner, diantaranya adalah :
a). Petugas Biro Keuangan khususnya bagian penggajian
163
Petugas penggajian merupakan sasaran utama dalam penyebaran kuisioner
ini. Jumlah responden untuk petugas penggajian adalah 2 orang.
b). Mahasiswa Ilmu Komputer dan Pekerja bidang teknologi informasi
Mahasiswa ilmu komputer menjadi sasaran kedua penyebaran kuisioner
karena para mahasiswa tersebut dapat menilai sistem dari sisi teknis. Jumlah
mahasiswa ilmu komputer yang menjadi responden adalah 28 orang.
5.3 Form Kuisioner
KUISIONER
PENGGUNAAN SISTEM INFORMASI PENGGAJIAN
Keterangan :
• SS : Sangat setuju
• S : Setuju
• TS : Tidak setuju
• STS : Sangat tidak setuju
1. Sistem informasi penggajian ini secara keseluruhan mudah digunakan.
a. SS
b. S
c. TS
d. STS
2. Tampilan yang ada pada sistem informasi penggajian nyaman dilihat dan
sesuai dengan tema.
a. SS
164
b. S
c. TS
d. STS
3. Sistem informasi penggajian adalah sistem yang interaktif dengan user.
a. SS
b. S
c. TS
d. STS
4. Sistem informasi penggajian menghasilkan output sesuai yang dibutuhkan
oleh user.
a. SS
b. S
c. TS
d. STS
5. Format atau bentuk dari laporan yang dihasilkan oleh sistem informasi
penggajian sudah lengkap.
a. SS
b. S
c. TS
d. STS
6. Fasilitas – fasilitas yang ada pada sistem informasi penggajian dosen ini sudah
lengkap.
a. SS
b. S
c. TS
d. STS
165
5.4 Hasil dan Pembahasan Kuisioner
Dari 30 orang responden yang dijadikan sampel dalam pengujian sistem di
lapangan, hasilnya dapat dijelaskan sebagai berikut :
1. Sistem informasi penggajian dosen USD ini secara keseluruhan mudah
digunakan.
Tabel 5.1 Tabel hasil perhitungan pernyataan No. 1
Frekuensi Total (%)
Sangat Setuju 14 47
Setuju 15 50
Tidak Setuju 1 3
Sangat Tidak Setuju 0 0
GRAFIK PERNYATAAN NO 1
47%
50%
3% 0%Sangat Setuju
Setuju
Tidak Setuju
Sangat TidakSetuju
Gambar 5.1 Grafik Untuk Pernyataan No.1
166
Dari hasil perhitungan di atas, dapat disimpulkan bahwa pengguna sistem
infromasi penggajian tidak kesulitan menjalankan/memulai program. Para
pengguna menilai bahwa sistem sederhana dan tidak berbelit-belit, sehingga
setelah diberi sedikit penjelasan para pengguna sudah paham dan dapat
menggunakannya.
2. Tampilan yang ada pada sistem informasi penggajian dosen USD nyaman dilihat
dan sesuai dengan tema.
Tabel 5.2 Tabel hasil perhitungan pernyataan No. 2
Frekuensi Total (%)
Sangat Setuju 9 30
Setuju 18 60
Tidak Setuju 3 10
Sangat Tidak Setuju 0 0
167
GRAFIK UNTUK PERNYATAAN NO 2
30%
60%
10% 0%
Sangat Setuju
Setuju
Tidak Setuju
Sangat TidakSetuju
Gambar 5.2 Grafik Untuk PernyataanNo.2
Dari hasil perhitungan di atas, dapat disimpulkan bahwa tampilan (User
Interface) sistem informasi penggajian menarik diantaranya : perpaduan warna
cukup baik, tampilan form-form dengan warna yang cerah dan jelas, tampilan
tulisan sudah cukup jelas, serta ukuran form yang pas pada layar komputer.
3. Sistem informasi penggajian dosen USD adalah sistem yang interaktif dengan
user.
Tabel 5.3 Tabel hasil perhitungan pernyataan No. 3
Frekuensi Total (%)
Sangat Setuju 7 23
Setuju 20 67
Tidak Setuju 3 10
Sangat Tidak Setuju 0 0
168
GRAFIK UNTUK PERNYATAAN NO 3
23%
67%
10% 0%
Sangat Setuju
Setuju
Tidak Setuju
Sangat TidakSetuju
Gambar 5.3 Grafik Untuk Pernyataan No.3
Dari hasil perhitungan di atas, dapat disimpulkan bahwa pengguna sistem
informasi penggajian dosen USD menilai sistem ini interaktif dengan user. Hal
ini terlihat dengan adanya pesan – pesan dan berbagai konfirmasi yang
disampaikan kepada user.
4. Sistem informasi penggajian dosen USD menghasilkan output sesuai yang
dibutuhkan oleh user.
Tabel 5.4 Tabel hasil perhitungan pernyataan No. 4
Frekuensi Total (%)
Sangat Setuju 15 50
Setuju 13 43
Tidak Setuju 2 7
Sangat Tidak Setuju 0 0
169
GRAFIK PERNYATAAN NO 4
50%43%
7% 0%
Sangat Setuju
Setuju
Tidak Setuju
Sangat TidakSetuju
Gambar 5.4 Grafik Untuk Pernyataan No.4
Dari hasil perhitungan di atas, dapat disimpulkan bahwa pengguna sistem
informasi penggajian merasa terbantu dengan pilihan menu yang sesuai dengan
kebutuhan. Hal yang paling membantu adalah menu untuk membuat slip gaji
per bulan.
5. Format atau bentuk dari laporan yang dihasilkan oleh sistem informasi penggajian
dosen USD sudah lengkap.
Tabel 5.5 Tabel hasil perhitungan pernyataan No. 5
Frekuensi Total (%)
Sangat Setuju 6 20
Setuju 19 63
Tidak Setuju 5 17
Sangat Tidak Setuju 0 0
170
GRAFIK UNTUK PERNYATAAN NO 5
20%
63%
17%0%
Sangat Setuju
Setuju
Tidak Setuju
Sangat TidakSetuju
Gambar 5.5 Grafik Untuk Pernyataan No.5
Dari hasil perhitungan di atas, dapat disimpulkan bahwa pengguna sistem
informasi penggajian menilai bahwa sistem ini telah menghasilkan laporan
sesuai dengan kebutuhan.
6. Fasilitas – fasilitas yang ada pada sistem informasi penggajian dosen USD ini
sudah lengkap.
Tabel 5.6 Tabel hasil perhitungan pernyataan No. 6
Frekuensi Total (%)
Sangat Setuju 10 20
Setuju 17 63
Tidak Setuju 3 17
Sangat Tidak Setuju 0 0
171
GRAFIK UNTUK PERNYATAAN NO 6
33%
57%
10% 0%
Sangat Setuju
Setuju
Tidak Setuju
Sangat TidakSetuju
Gambar 5.6 Grafik Untuk Pernyataan No.6
Dari hasil perhitungan di atas, dapat disimpulkan bahwa fasilitas – fasilitas yang
ada pada sistem informasi penggajian dosen USD sudah lengkap dan sudah
sesuai dengan kebutuhan.
172
BAB VI
PENUTUP
6.1 Kesimpulan
Berdasarkan hasil penyebaran kuisioner maka didapat beberapa kesimpulan dari
penulisan tugas akhir Sistem Informasi Penggajian Dosen USD ini yaitu :
1. Informasi penggajian dosen yang ada dalam sistem ini sudah memenuhi
kebutuhan para penggunanya.
2. Secara fungsional, pengguna Sistem Informasi Penggajian Dosen USD
dimungkinkan dapat terbantu baik dalam pengelolaan maupun pelaporan
data-data penggajian dosen.
Berdasarkan hasil pengujian sistem maka didapat beberapa kesimpulan dari
penulisan tugas akhir Sistem Informasi Penggajian Dosen USD ini yaitu :
1. Sistem Informasi Penggajian Dosen sudah dapat menghitung gaji dosen
dengan benar
2. Sistem ini mempunyai kelemahan, yaitu penggunaan waktu yang cukup
lama dalam pembuatan daftar gaji untuk semua dosen. Sistem ini
membutuhkan waktu sekitar 35 detik untuk melakukan proses pembuatan
daftar gaji untuk satu orang dosen.
173
6.2 Saran Dan Kritik
Untuk lebih menyempurnakan Sistem Informasi Penggajian Dosen USD
Yogyakarta ini, dapat dikembangkan hal-hal seperti berikut :
1. Sistem Informasi Penggajian Dosen ini dapat diintegrasikan dengan
Sistem Informasi Akademik USD.
2. Sistem Informasi Penggajian Dosen USD ini dapat diperluas menjadi
sistem informasi penggajian karyawan USD baik dosen ( karyawan
edukatif ) maupun karyawan administratif.
174
DAFTAR PUSTAKA
Jogiyanto. (2001). Analisis dan Disain Sistem Informasi. Yogyakarta: Andi Offset. Kadir, Abdul. (2003). Dasar Aplikasi Database MySQL Delphi. Yogyakarta : Andi
Offset. Kroenke,David M. (1995). Database Processing. 5th ed. New Jersey : Prentice-Hall, Inc. Narbuka,Cholid;Achmadi Abu. (2003). Metodologi Penelitian. Jakarta : Bumi