Public
Snippet $33 authored by gilang

Trigger insert dan update pembayaran yang ada discount_pokok

Edited
ALTER TABLE PEMBAYARAN_SPPT ADD DISCOUNT FLOAT;
ALTER TABLE PEMBAYARAN_SPPT ADD DISCOUNT_POKOK FLOAT;
ALTER TABLE PEMBAYARAN_SPPT ADD DISCOUNT_DENDA FLOAT;

--------------------------------------------------------------------------------------------------------------------------
-- Trigger saat insert

CREATE OR REPLACE TRIGGER "PBB".INS_PSPPT_DISCOUNT_POKOK 
AFTER INSERT ON "PBB".PEMBAYARAN_SPPT FOR EACH ROW
DECLARE 
    N_SIKLUS_SPPT SPPT.SIKLUS_SPPT%TYPE;
    N_FAKTOR_PENGURANG_SPPT SPPT.FAKTOR_PENGURANG_SPPT%TYPE;
    N_PBB_YG_HARUS_DIBAYAR_SPPT SPPT.PBB_YG_HARUS_DIBAYAR_SPPT%TYPE;
BEGIN
    BEGIN
        SELECT SIKLUS_SPPT, FAKTOR_PENGURANG_SPPT, PBB_YG_HARUS_DIBAYAR_SPPT
        INTO N_SIKLUS_SPPT, N_FAKTOR_PENGURANG_SPPT, N_PBB_YG_HARUS_DIBAYAR_SPPT
        FROM SPPT
        WHERE KD_PROPINSI    = :NEW.KD_PROPINSI
          AND KD_DATI2       = :NEW.KD_DATI2
          AND KD_KECAMATAN   = :NEW.KD_KECAMATAN
          AND KD_KELURAHAN   = :NEW.KD_KELURAHAN
          AND KD_BLOK        = :NEW.KD_BLOK
          AND NO_URUT        = :NEW.NO_URUT
          AND KD_JNS_OP      = :NEW.KD_JNS_OP
          AND THN_PAJAK_SPPT = :NEW.THN_PAJAK_SPPT;
    END;
    
    IF :NEW.DISCOUNT_POKOK > 0 THEN   
        BEGIN
            N_FAKTOR_PENGURANG_SPPT := N_FAKTOR_PENGURANG_SPPT + :NEW.DISCOUNT_POKOK;
            UPDATE SPPT 
            SET SIKLUS_SPPT = N_SIKLUS_SPPT + 1,
                FAKTOR_PENGURANG_SPPT = N_FAKTOR_PENGURANG_SPPT,
                PBB_YG_HARUS_DIBAYAR_SPPT = PBB_TERHUTANG_SPPT - N_FAKTOR_PENGURANG_SPPT,
                TGL_TERBIT_SPPT = SYSDATE
            WHERE KD_PROPINSI    = :NEW.KD_PROPINSI
              AND KD_DATI2       = :NEW.KD_DATI2
              AND KD_KECAMATAN   = :NEW.KD_KECAMATAN
              AND KD_KELURAHAN   = :NEW.KD_KELURAHAN
              AND KD_BLOK        = :NEW.KD_BLOK
              AND NO_URUT        = :NEW.NO_URUT
              AND KD_JNS_OP      = :NEW.KD_JNS_OP
              AND THN_PAJAK_SPPT = :NEW.THN_PAJAK_SPPT;
        END;
    END IF;
END;

----------------------------------------------------------------------------------------------------------------------------------------
-- Trigger update saat terjadi reversal dan perubahan jumlah bayar <> 0

CREATE OR REPLACE
TRIGGER "PBB".UPD_PSPPT_DISCOUNT_POKOK 
AFTER UPDATE ON "PBB".PEMBAYARAN_SPPT 
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE 
    N_SIKLUS_SPPT SPPT.SIKLUS_SPPT%TYPE;
    N_FAKTOR_PENGURANG_SPPT SPPT.FAKTOR_PENGURANG_SPPT%TYPE;
    N_PBB_YG_HARUS_DIBAYAR_SPPT SPPT.PBB_YG_HARUS_DIBAYAR_SPPT%TYPE;
    N_DISCOUNTPOKOK PEMBAYARAN_SPPT.DISCOUNT_POKOK%TYPE;
BEGIN
  IF (UPDATING('DISCOUNT_POKOK') AND :OLD.DISCOUNT_POKOK != :NEW.DISCOUNT_POKOK) THEN
    BEGIN
        SELECT SIKLUS_SPPT, FAKTOR_PENGURANG_SPPT, PBB_YG_HARUS_DIBAYAR_SPPT
        INTO N_SIKLUS_SPPT, N_FAKTOR_PENGURANG_SPPT, N_PBB_YG_HARUS_DIBAYAR_SPPT
        FROM SPPT
        WHERE KD_PROPINSI    = :NEW.KD_PROPINSI
          AND KD_DATI2       = :NEW.KD_DATI2
          AND KD_KECAMATAN   = :NEW.KD_KECAMATAN
          AND KD_KELURAHAN   = :NEW.KD_KELURAHAN
          AND KD_BLOK        = :NEW.KD_BLOK
          AND NO_URUT        = :NEW.NO_URUT
          AND KD_JNS_OP      = :NEW.KD_JNS_OP
          AND THN_PAJAK_SPPT = :NEW.THN_PAJAK_SPPT;
    END;
    
    IF (:OLD.DISCOUNT_POKOK != :NEW.DISCOUNT_POKOK) AND :NEW.JML_SPPT_YG_DIBAYAR <> 0 THEN   
        BEGIN
            N_DISCOUNTPOKOK := :NEW.DISCOUNT_POKOK - :OLD.DISCOUNT_POKOK;
            N_FAKTOR_PENGURANG_SPPT := N_FAKTOR_PENGURANG_SPPT + N_DISCOUNTPOKOK;
            
            UPDATE SPPT 
            SET SIKLUS_SPPT = N_SIKLUS_SPPT + 1,
                FAKTOR_PENGURANG_SPPT = N_FAKTOR_PENGURANG_SPPT,
                PBB_YG_HARUS_DIBAYAR_SPPT = PBB_TERHUTANG_SPPT - N_FAKTOR_PENGURANG_SPPT,
                TGL_TERBIT_SPPT = SYSDATE
            WHERE KD_PROPINSI    = :NEW.KD_PROPINSI
              AND KD_DATI2       = :NEW.KD_DATI2
              AND KD_KECAMATAN   = :NEW.KD_KECAMATAN
              AND KD_KELURAHAN   = :NEW.KD_KELURAHAN
              AND KD_BLOK        = :NEW.KD_BLOK
              AND NO_URUT        = :NEW.NO_URUT
              AND KD_JNS_OP      = :NEW.KD_JNS_OP
              AND THN_PAJAK_SPPT = :NEW.THN_PAJAK_SPPT;
        END;
    ELSIF (:OLD.DISCOUNT_POKOK != :NEW.DISCOUNT_POKOK) AND :NEW.JML_SPPT_YG_DIBAYAR = 0 THEN   
        BEGIN
            N_DISCOUNTPOKOK := :NEW.DISCOUNT_POKOK - :OLD.DISCOUNT_POKOK;
            N_FAKTOR_PENGURANG_SPPT := N_FAKTOR_PENGURANG_SPPT + N_DISCOUNTPOKOK;
            
            UPDATE SPPT 
            SET SIKLUS_SPPT = N_SIKLUS_SPPT + 1,
                FAKTOR_PENGURANG_SPPT = N_FAKTOR_PENGURANG_SPPT,
                PBB_YG_HARUS_DIBAYAR_SPPT = PBB_TERHUTANG_SPPT - N_FAKTOR_PENGURANG_SPPT,
                TGL_TERBIT_SPPT = SYSDATE,
                STATUS_PEMBAYARAN_SPPT = '0'
            WHERE KD_PROPINSI    = :NEW.KD_PROPINSI
              AND KD_DATI2       = :NEW.KD_DATI2
              AND KD_KECAMATAN   = :NEW.KD_KECAMATAN
              AND KD_KELURAHAN   = :NEW.KD_KELURAHAN
              AND KD_BLOK        = :NEW.KD_BLOK
              AND NO_URUT        = :NEW.NO_URUT
              AND KD_JNS_OP      = :NEW.KD_JNS_OP
              AND THN_PAJAK_SPPT = :NEW.THN_PAJAK_SPPT;
        END;
    END IF;
  END IF;
END;