Advertisement
ronaldkwandy

Untitled

Mar 2nd, 2020
541
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION spProsesHitungThr (VARCHAR)
  2. RETURNS BOOLEAN
  3. AS
  4. $BODY$
  5.  
  6. DECLARE
  7.  
  8.     pProcessStatusId            ALIAS FOR $1;
  9.  
  10.     vUsername                   VARCHAR;
  11.     vTahunBulan                 VARCHAR(6);
  12.     vTanggalHariRaya            DATE;
  13.     vBayarBersamaGaji           BOOLEAN;
  14.     vTanggalBayar               DATE;
  15.     vPotongPajak                BOOLEAN;
  16.  
  17.     vTanggalAwalPeriodeGaji     DATE;
  18.     vTanggalAkhirPeriodeGaji    DATE;
  19.  
  20.     vCount                      INTEGER;
  21.     vIsError                    BOOLEAN;
  22.  
  23. BEGIN
  24.  
  25.  
  26.     /************************************************************************************************************************
  27.     * 01. Ambil nilai untuk variabel yang dibutuhkan:
  28.     *     a. Username.
  29.     *     b. NIK.
  30.     *     c. Kelompok payroll.
  31.     *     d. Tahun bulan.
  32.     *     e. Tanggal hari raya.
  33.     *     f. Flag bayar bersama gaji.
  34.     *     g. Tanggal bayar.
  35.     *     h. Flag potong pajak.
  36.     *     i. Tanggal awal periode gaji.
  37.     *     j. Tanggal akhir periode gaji.
  38.     ************************************************************************************************************************/
  39.     vUsername := public.get_value_process(pProcessStatusId, 'username');
  40.  
  41.  
  42.     INSERT INTO hpy_prs_hitung_thr_002 (id, hm_msy016_status_proses_id, hm_oem001_karyawan_id)
  43.     SELECT public.sys_guid(), hm_msy016_id, param_value
  44.     FROM hm_msy018
  45.     WHERE hm_msy016_id = pProcessStatusId
  46.           AND param_key LIKE 'karyawanId[%]';
  47.  
  48.  
  49.     INSERT INTO hpy_prs_hitung_thr_001 (id, hm_msy016_status_proses_id, hm_mpy001_kelompok_payroll_id)
  50.     SELECT public.sys_guid(), hm_msy016_id, param_value
  51.     FROM hm_msy018
  52.     WHERE hm_msy016_id = pProcessStatusId
  53.           AND param_key LIKE 'kelompokPayrollId[%]';
  54.  
  55.  
  56.     vTahunBulan := public.get_value_process(pProcessStatusId, 'tahunBulan');
  57.     SELECT TO_DATE(public.get_value_process(pProcessStatusId, 'tanggalHariRaya'), 'YYYYMMDD') INTO vTanggalHariRaya;
  58.     SELECT CAST(public.get_value_process(pProcessStatusId, 'bayarBersamaGaji') AS BOOLEAN) INTO vBayarBersamaGaji;
  59.     SELECT TO_DATE(public.get_value_process(pProcessStatusId, 'tanggalBayar'), 'YYYYMMDD') INTO vTanggalBayar;
  60.     SELECT CAST(public.get_value_process(pProcessStatusId, 'potongPajak') AS BOOLEAN) INTO vPotongPajak;
  61.  
  62.  
  63.     SELECT begin_date, end_date INTO vTanggalAwalPeriodeGaji, vTanggalAkhirPeriodeGaji
  64.     FROM hm_apy003
  65.     WHERE year_month = vTahunBulan;
  66.  
  67.  
  68.     /************************************************************************************************************************
  69.     * 02.a Validasi harus ada NIK yang terdaftar untuk kelompok payroll, pada tahun bulan yang dipilih.
  70.     ************************************************************************************************************************/
  71.     EXECUTE public.spProsesHitungThr_020 (pProcessStatusId, vUsername, vTahunBulan,
  72.                                           'prosesHitungThr.payroll.group.not.contain.employee');
  73.    
  74.                                          
  75.     /************************************************************************************************************************
  76.     * 02.b Validasi kelompok payroll pada tahun bulan yang dipilih harus belum proses gaji
  77.     ************************************************************************************************************************/
  78.     EXECUTE public.spProsesHitungThr_021 (pProcessStatusId, vUsername, vTahunBulan,
  79.                                           'prosesHitungThr.payroll.salary.processed');
  80.  
  81.                                          
  82.     /************************************************************************************************************************
  83.     * 02.c Validasi karyawan pada tahun bulan yang dipilih harus belum proses gaji
  84.     ************************************************************************************************************************/
  85.     EXECUTE public.spProsesHitungThr_022 (pProcessStatusId, vUsername, vTahunBulan,
  86.                                           'prosesHitungThr.employee.salary.processed');                                          
  87.  
  88.                                          
  89.     /************************************************************************************************************************
  90.     * 03. Buat daftar NIK yang diproses.
  91.     ************************************************************************************************************************/
  92.     EXECUTE public.spProsesHitungThr_030 (pProcessStatusId, vTahunBulan);
  93.  
  94.  
  95.     /************************************************************************************************************************
  96.     * 04. Validasi ada nilai gaji untuk setiap NIK.
  97.     ************************************************************************************************************************/
  98.     EXECUTE public.spProsesHitungThr_040 (pProcessStatusId, vUsername, vTanggalAkhirPeriodeGaji);
  99.  
  100.  
  101.  
  102.  
  103.  
  104.     SELECT COUNT(*) INTO vCount
  105.     FROM ht_set_message_i001
  106.     WHERE hm_msy016_id = pProcessStatusId;
  107.  
  108.  
  109.     IF vCount > 0 THEN
  110.         vIsError := TRUE;
  111.     ELSE
  112.         vIsError := FALSE;
  113.     END IF;
  114.  
  115.  
  116.  
  117.  
  118.  
  119.     /************************************************************************************************************************
  120.     * 05. Lengkapi data perhitungan THR dengan data:
  121.     *     a. Nilai gaji.
  122.     *     b. Tunjangan tetap.
  123.     *     c. Lama masa kerja.
  124.     *     d. Setting perhitungan THR.
  125.     ************************************************************************************************************************/
  126.     IF vIsError = FALSE THEN
  127.         EXECUTE public.spProsesHitungThr_050 (pProcessStatusId, vTahunBulan, vTanggalHariRaya, vTanggalAkhirPeriodeGaji);
  128.     END IF;
  129.  
  130.  
  131.     /************************************************************************************************************************
  132.     * 06. Hitung nilai THR.
  133.     ************************************************************************************************************************/
  134.     IF vIsError = FALSE THEN
  135.         EXECUTE public.spProsesHitungThr_060 (pProcessStatusId);
  136.     END IF;
  137.  
  138.  
  139.     /************************************************************************************************************************
  140.     * 07. Hitung nilai pajak.
  141.     ************************************************************************************************************************/
  142.     IF vIsError = FALSE THEN
  143.         vIsError := public.spProsesHitungThr_070 (pProcessStatusId, vUsername,
  144.                                                   vTahunBulan, vBayarBersamaGaji, vTanggalBayar, vPotongPajak);
  145.     END IF;
  146.  
  147.  
  148.     /************************************************************************************************************************
  149.     * 08. Tulis data ke table permanen.
  150.     ************************************************************************************************************************/
  151.     IF vIsError = FALSE THEN
  152.         EXECUTE public.spProsesHitungThr_080 (pProcessStatusId, vUsername,
  153.                                               vTahunBulan, vTanggalHariRaya, vBayarBersamaGaji, vTanggalBayar, vPotongPajak,
  154.                                               vTanggalAwalPeriodeGaji, vTanggalAkhirPeriodeGaji);
  155.     END IF;
  156.  
  157.  
  158.     /************************************************************************************************************************
  159.     * 09. Hapus data dari table temporer.
  160.     ************************************************************************************************************************/
  161.     EXECUTE public.spProsesHitungThr_090 (pProcessStatusId);
  162.  
  163.  
  164.     /************************************************************************************************************************
  165.     * 10. Tulis summary proses.
  166.     ************************************************************************************************************************/
  167.     IF vIsError = FALSE THEN
  168.  
  169.  
  170.         INSERT INTO ht_set_message_i001 (id, hm_msy016_id, nomor_item,
  171.                                          process_status_type, msg_key, msg_param,
  172.                                          version, user_create, creation_time, user_modify, modification_time)
  173.         SELECT public.sys_guid(), pProcessStatusId, 1,
  174.                'Summary', 'prosesHitungThr.finished.successfully', '',
  175.                0, vUsername, NOW(), vUsername, NOW();
  176.  
  177.  
  178.     END IF;
  179.  
  180.  
  181.     /************************************************************************************************************************
  182.     * 11. Pindahkan pesan hasil proses ke table tools proses.
  183.     ************************************************************************************************************************/
  184.     EXECUTE public.set_process_messages(pProcessStatusId);
  185.  
  186.  
  187.     /************************************************************************************************************************
  188.     * 12. Kembalikan status proses.
  189.     ************************************************************************************************************************/
  190.     RETURN NOT vIsError;
  191.  
  192.  
  193. END;
  194.  
  195. $BODY$
  196. LANGUAGE 'plpgsql';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement