Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION spProsesHitungThr (VARCHAR)
- RETURNS BOOLEAN
- AS
- $BODY$
- DECLARE
- pProcessStatusId ALIAS FOR $1;
- vUsername VARCHAR;
- vTahunBulan VARCHAR(6);
- vTanggalHariRaya DATE;
- vBayarBersamaGaji BOOLEAN;
- vTanggalBayar DATE;
- vPotongPajak BOOLEAN;
- vTanggalAwalPeriodeGaji DATE;
- vTanggalAkhirPeriodeGaji DATE;
- vCount INTEGER;
- vIsError BOOLEAN;
- BEGIN
- /************************************************************************************************************************
- * 01. Ambil nilai untuk variabel yang dibutuhkan:
- * a. Username.
- * b. NIK.
- * c. Kelompok payroll.
- * d. Tahun bulan.
- * e. Tanggal hari raya.
- * f. Flag bayar bersama gaji.
- * g. Tanggal bayar.
- * h. Flag potong pajak.
- * i. Tanggal awal periode gaji.
- * j. Tanggal akhir periode gaji.
- ************************************************************************************************************************/
- vUsername := public.get_value_process(pProcessStatusId, 'username');
- INSERT INTO hpy_prs_hitung_thr_002 (id, hm_msy016_status_proses_id, hm_oem001_karyawan_id)
- SELECT public.sys_guid(), hm_msy016_id, param_value
- FROM hm_msy018
- WHERE hm_msy016_id = pProcessStatusId
- AND param_key LIKE 'karyawanId[%]';
- INSERT INTO hpy_prs_hitung_thr_001 (id, hm_msy016_status_proses_id, hm_mpy001_kelompok_payroll_id)
- SELECT public.sys_guid(), hm_msy016_id, param_value
- FROM hm_msy018
- WHERE hm_msy016_id = pProcessStatusId
- AND param_key LIKE 'kelompokPayrollId[%]';
- vTahunBulan := public.get_value_process(pProcessStatusId, 'tahunBulan');
- SELECT TO_DATE(public.get_value_process(pProcessStatusId, 'tanggalHariRaya'), 'YYYYMMDD') INTO vTanggalHariRaya;
- SELECT CAST(public.get_value_process(pProcessStatusId, 'bayarBersamaGaji') AS BOOLEAN) INTO vBayarBersamaGaji;
- SELECT TO_DATE(public.get_value_process(pProcessStatusId, 'tanggalBayar'), 'YYYYMMDD') INTO vTanggalBayar;
- SELECT CAST(public.get_value_process(pProcessStatusId, 'potongPajak') AS BOOLEAN) INTO vPotongPajak;
- SELECT begin_date, end_date INTO vTanggalAwalPeriodeGaji, vTanggalAkhirPeriodeGaji
- FROM hm_apy003
- WHERE year_month = vTahunBulan;
- /************************************************************************************************************************
- * 02.a Validasi harus ada NIK yang terdaftar untuk kelompok payroll, pada tahun bulan yang dipilih.
- ************************************************************************************************************************/
- EXECUTE public.spProsesHitungThr_020 (pProcessStatusId, vUsername, vTahunBulan,
- 'prosesHitungThr.payroll.group.not.contain.employee');
- /************************************************************************************************************************
- * 02.b Validasi kelompok payroll pada tahun bulan yang dipilih harus belum proses gaji
- ************************************************************************************************************************/
- EXECUTE public.spProsesHitungThr_021 (pProcessStatusId, vUsername, vTahunBulan,
- 'prosesHitungThr.payroll.salary.processed');
- /************************************************************************************************************************
- * 02.c Validasi karyawan pada tahun bulan yang dipilih harus belum proses gaji
- ************************************************************************************************************************/
- EXECUTE public.spProsesHitungThr_022 (pProcessStatusId, vUsername, vTahunBulan,
- 'prosesHitungThr.employee.salary.processed');
- /************************************************************************************************************************
- * 03. Buat daftar NIK yang diproses.
- ************************************************************************************************************************/
- EXECUTE public.spProsesHitungThr_030 (pProcessStatusId, vTahunBulan);
- /************************************************************************************************************************
- * 04. Validasi ada nilai gaji untuk setiap NIK.
- ************************************************************************************************************************/
- EXECUTE public.spProsesHitungThr_040 (pProcessStatusId, vUsername, vTanggalAkhirPeriodeGaji);
- SELECT COUNT(*) INTO vCount
- FROM ht_set_message_i001
- WHERE hm_msy016_id = pProcessStatusId;
- IF vCount > 0 THEN
- vIsError := TRUE;
- ELSE
- vIsError := FALSE;
- END IF;
- /************************************************************************************************************************
- * 05. Lengkapi data perhitungan THR dengan data:
- * a. Nilai gaji.
- * b. Tunjangan tetap.
- * c. Lama masa kerja.
- * d. Setting perhitungan THR.
- ************************************************************************************************************************/
- IF vIsError = FALSE THEN
- EXECUTE public.spProsesHitungThr_050 (pProcessStatusId, vTahunBulan, vTanggalHariRaya, vTanggalAkhirPeriodeGaji);
- END IF;
- /************************************************************************************************************************
- * 06. Hitung nilai THR.
- ************************************************************************************************************************/
- IF vIsError = FALSE THEN
- EXECUTE public.spProsesHitungThr_060 (pProcessStatusId);
- END IF;
- /************************************************************************************************************************
- * 07. Hitung nilai pajak.
- ************************************************************************************************************************/
- IF vIsError = FALSE THEN
- vIsError := public.spProsesHitungThr_070 (pProcessStatusId, vUsername,
- vTahunBulan, vBayarBersamaGaji, vTanggalBayar, vPotongPajak);
- END IF;
- /************************************************************************************************************************
- * 08. Tulis data ke table permanen.
- ************************************************************************************************************************/
- IF vIsError = FALSE THEN
- EXECUTE public.spProsesHitungThr_080 (pProcessStatusId, vUsername,
- vTahunBulan, vTanggalHariRaya, vBayarBersamaGaji, vTanggalBayar, vPotongPajak,
- vTanggalAwalPeriodeGaji, vTanggalAkhirPeriodeGaji);
- END IF;
- /************************************************************************************************************************
- * 09. Hapus data dari table temporer.
- ************************************************************************************************************************/
- EXECUTE public.spProsesHitungThr_090 (pProcessStatusId);
- /************************************************************************************************************************
- * 10. Tulis summary proses.
- ************************************************************************************************************************/
- IF vIsError = FALSE THEN
- INSERT INTO ht_set_message_i001 (id, hm_msy016_id, nomor_item,
- process_status_type, msg_key, msg_param,
- version, user_create, creation_time, user_modify, modification_time)
- SELECT public.sys_guid(), pProcessStatusId, 1,
- 'Summary', 'prosesHitungThr.finished.successfully', '',
- 0, vUsername, NOW(), vUsername, NOW();
- END IF;
- /************************************************************************************************************************
- * 11. Pindahkan pesan hasil proses ke table tools proses.
- ************************************************************************************************************************/
- EXECUTE public.set_process_messages(pProcessStatusId);
- /************************************************************************************************************************
- * 12. Kembalikan status proses.
- ************************************************************************************************************************/
- RETURN NOT vIsError;
- END;
- $BODY$
- LANGUAGE 'plpgsql';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement