Database Trigger

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

Used in Table PAY_EMPLOYEE_SALES =>

================================

CREATE OR REPLACE TRIGGER HR.TRG_PAY_EMP_SALE_AMT


AFTER
INSERT ON PAY_EMPLOYEE_SALES
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
V_PER VARCHAR2(10);
V_AS_ON_DATE DATE := SYSDATE;
BEGIN
SELECT (:NEW.AMOUNT/(PKG_HR_UTILITY.P_GET_PER_ALW_DED_TAMIMI
(:NEW.COMPANY_NUMBER,:NEW.EMPLOYEE_NUMBER,1,V_AS_ON_DATE)*2))*100
INTO V_PER
FROM DUAL;

IF V_PER>=25 THEN

PKG_EMAIL_STANDARD.SEND_SALE_25_NOTIF(:NEW.COMPANY_NUMBER,:NEW.EMPLOYEE_NUMBER,:NEW
.SALE_REF_NO,V_PER);

END IF;

END;

===================================================================================
=======================================================
CREATE OR REPLACE TRIGGER "TRIG_SUB_BTRIP_TRANS"
BEFORE UPDATE OF TRIP_STATUS ON HR_BUSINESS_TRIP_REQ_M
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
V_DTL_SRL NUMBER;
BEGIN
SELECT TO_CHAR(SYSDATE,'RRRR')||LPAD(NVL(MAX(SUBSTR(SERIAL_NO,5)),0)+1,6,0)
INTO V_DTL_SRL
FROM PAY_OFFICIAL_LEAVES
WHERE TO_CHAR(LEAVE_DATE,'RRRR') = TO_CHAR(SYSDATE,'RRRR')
AND COMPANY_NUMBER = :NEW.COMPANY_NUMBER;

IF :OLD.TRIP_STATUS <> 'FIN' and :NEW.TRIP_STATUS = 'FIN' THEN


INSERT INTO PAY_OFFICIAL_LEAVES ( COMPANY_NUMBER, EMPLOYEE_NUMBER,
LEAVE_DATE, APPROVED_NO_OF_DAYS,
EXPECTED_RETURN_DATE, USER_ID, TRANS_DATE,
STATUS, VISA_REQUIRED, TRAVEL_CLASS,
PREF_SEAT, CAR_NEEDED, HOTEL_NEEDED,
COMMENTS, SERIAL_NO, REJECT_REASON, REF_SOURCE, REF_SRL_NO )
VALUES ( :NEW.COMPANY_NUMBER, :NEW.EMPLOYEE_NUMBER, :NEW.DEPARTURE_DATE,
:NEW.RETURN_DATE-:NEW.DEPARTURE_DATE,
:NEW.RETURN_DATE,:NEW.MODIFY_USER, SYSDATE, 'A',
:NEW.VISA_REQ_CHK, :NEW.TRAVEL_CLASS, :NEW.PREF_SEAT,
:NEW.RENT_A_CAR, :NEW.HOTEL_NEEDED, :NEW.REMARKS, V_DTL_SRL,
:NEW.REJ_REASON, 'REQ', :NEW.TRIP_SRL_NO );
END IF;

END;
===================================================================================
===========================================================

CREATE OR REPLACE TRIGGER "INSERT_OFFICIAL_LEAVES"


BEFORE UPDATE
ON HR_BUSINESS_TRIP_REQ_M
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
V_SERIAL_NO NUMBER;
BEGIN

SELECT Nvl(Max(SERIAL_NO), TO_CHAR(SYSDATE,'RRRR')||'000000')+1


INTO V_DTL_SRL
FROM PAY_OFFICIAL_LEAVES
WHERE SUBSTR(SERIAL_NO,1,4) = TO_CHAR(SYSDATE,'RRRR')

IF :OLD.TRIP_STATUS <> 'FIN' and :NEW.TRIP_STATUS = 'FIN' THEN


INSERT INTO PAY_OFFICIAL_LEAVES (COMPANY_NUMBER, EMPLOYEE_NUMBER, LEAVE_DATE,
APPROVED_NO_OF_DAYS,
EXPECTED_RETURN_DATE, USER_ID,TRANS_DATE,
STATUS, VISA_REQUIRED, TRAVEL_CLASS,
PREF_SEAT, CAR_NEEDED, HOTEL_NEEDED, COMMENTS,
SERIAL_NO, REJECT_REASON, REF_SOURCE, REF_SRL_NO)
VALUES (:NEW.COMPANY_NUMBER, :NEW.EMPLOYEE_NUMBER,
:NEW.DEPARTURE_DATE, :NEW.RETURN_DATE-:NEW.DEPARTURE_DATE,
:NEW.RETURN_DATE,:NEW.ENTRY_USER,SYSDATE, 'A',
:NEW.VISA_REQ_CHK,:NEW.TRAVEL_CLASS, :NEW.PREF_SEAT,
:NEW.RENT_A_CAR, :NEW.HOTEL_NEEDED,
:NEW.REMARKS,V_SERIAL_NO, :NEW.REJ_REASON, 'REQ', :NEW.TRIP_SRL_NO);
END IF;

END;

===================================================================================
==============================================================

CREATE OR REPLACE TRIGGER "ITS".TRG_CRT_TRANS_LOGS


AFTER UPDATE ON ITS_REQUEST_TRANS_M
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
V_DTL_SRL NUMBER;
V_REMARKS VARCHAR2(400);
BEGIN

SELECT Nvl(Max(DTL_SRL),0)+1
INTO V_DTL_SRL
FROM ITS_REQUEST_TRANS_LOGS
WHERE TT_NO = :NEW.TT_NO;

IF :OLD.TT_STATUS = 'ISS' THEN


IF :NEW.TT_STATUS = 'CAN' THEN
V_REMARKS := 'Request has been cancelled';
ELSIF :NEW.TT_STATUS = 'REJ' THEN
V_REMARKS := 'Request has been Rejected';
ELSIF :NEW.TT_STATUS = 'ACC' THEN
V_REMARKS := 'Request is accepted';
END IF;
ELSIF :OLD.TT_STATUS = 'ACC' THEN
IF :NEW.TT_STATUS = 'REJ' THEN
V_REMARKS := 'Request has been Rejected';
ELSIF :NEW.TT_STATUS = 'OPN' THEN
V_REMARKS := 'Request has been sent to Pool for Available Agent to Receive';
END IF;
ELSIF :OLD.TT_STATUS = 'OPN' THEN
IF :NEW.TT_STATUS = 'REJ' THEN
V_REMARKS := 'Request has been Rejected';
ELSIF :NEW.TT_STATUS = 'REC' THEN
V_REMARKS := 'Request has been Received';
END IF;
ELSIF :OLD.TT_STATUS IN ('REC','UPR','HLD','FIN') THEN
IF :NEW.TT_STATUS = 'REJ' THEN
V_REMARKS := 'Request has been Rejected';
ELSIF :NEW.TT_STATUS = 'UPR' THEN
V_REMARKS := 'Request is under-process';
ELSIF :NEW.TT_STATUS = 'HLD' THEN
V_REMARKS := 'Request has been put to hold';
ELSIF :NEW.TT_STATUS = 'FIN' THEN
V_REMARKS := 'Request finalized';
END IF;
END IF;

INSERT INTO ITS_REQUEST_TRANS_LOGS ( TT_NO, DTL_SRL,


OLD_STATUS, OLD_ENTRY_EMPLOYEE,
OLD_ENTRY_DATE,
NEW_STATUS, ENTRY_EMPLOYEE, ENTRY_DATE,
REMARKS )
VALUES ( :NEW.TT_NO, V_DTL_SRL,
:OLD.TT_STATUS, :OLD.LT_STATUS_EMP, :OLD.LT_STATUS_DATE,
:NEW.TT_STATUS, :NEW.LT_STATUS_EMP, :NEW.LT_STATUS_DATE,
V_REMARKS );

END;

===================================================================================
=================================================
Used in (PAY_PENDING_LEAVE_TRANS) table =>
=======================================

CREATE OR REPLACE TRIGGER trig_add_new_pnd_bal


AFTER INSERT ON pay_pending_leave_trans
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
V_CNT NUMBER;
V_BAL_YEAR NUMBER;
V_CURR_CNT NUMBER;
BEGIN
IF :NEW.TRANS_STATUS = 'A' THEN

SELECT COUNT(LEV_START_DATE), MAX(LEAVE_YEAR), Max( Decode( LEAVE_YEAR,


To_Char(:NEW.DATE_FROM,'RRRR'),1,0))
INTO V_CNT, V_BAL_YEAR, V_CURR_CNT
FROM PAY_LEAVE_BALANCE_TAMIMI
WHERE COMPANY_NUMBER = :NEW.COMPANY_NUMBER
AND EMPLOYEE_NUMBER = :NEW.EMPLOYEE_NUMBER
AND LEAVE_TYPE = :NEW.LEAVE_TYPE;

IF V_CNT = 0 THEN -- IF BALANCE DOESN'T EXIST


V_BAL_YEAR := TO_CHAR(SYSDATE, 'RRRR');

IF To_Char(:NEW.DATE_FROM,'RRRR') = (V_BAL_YEAR-1) THEN -- IF PREVIOUS


YEAR BALANCE ENTERED, MODIFY PREVIOUS, ADD OPENING IN NEW.
INSERT INTO PAY_LEAVE_BALANCE_TAMIMI ( COMPANY_NUMBER, EMPLOYEE_NUMBER,
LEAVE_TYPE, LEAVE_YEAR,
LEV_START_DATE, OP_BALANCE,
DUE_YEAR_BALANCE,
DAYS_ADDED, DAYS_DEDUCTED,
HOLIDAY_DAYS, ENCASH_LEAVE_DAYS,
RESERVE_DAYS, UNPAID_DAYS,
TAKEN_LEAVE_DAYS, NET_BALANCE,
ENTITLED_LEAVE_BALANCE,
TRANS_DATE, TRANS_USER )
VALUES ( :NEW.COMPANY_NUMBER, :NEW.EMPLOYEE_NUMBER, :NEW.LEAVE_TYPE,
To_Char(:NEW.DATE_FROM,'RRRR'),
Trunc(:NEW.DATE_FROM,'YEAR'), 0,0,
Nvl(:NEW.NO_OF_DAYS,1), 0,
0,0,0,0,
0,Nvl(:NEW.NO_OF_DAYS,1),0,
SYSDATE, :NEW.ENTRY_USER );
ELSE
INSERT INTO PAY_LEAVE_BALANCE_TAMIMI ( COMPANY_NUMBER, EMPLOYEE_NUMBER,
LEAVE_TYPE, LEAVE_YEAR,
LEV_START_DATE, OP_BALANCE,
DUE_YEAR_BALANCE,
DAYS_ADDED, DAYS_DEDUCTED,
HOLIDAY_DAYS, ENCASH_LEAVE_DAYS,
RESERVE_DAYS, UNPAID_DAYS,
TAKEN_LEAVE_DAYS, NET_BALANCE,
ENTITLED_LEAVE_BALANCE,
TRANS_DATE, TRANS_USER )
VALUES ( :NEW.COMPANY_NUMBER, :NEW.EMPLOYEE_NUMBER, :NEW.LEAVE_TYPE,
V_BAL_YEAR,
To_Date('01-01-'||V_BAL_YEAR,'DD-MM-RRRR'), 0,0,
Nvl(:NEW.NO_OF_DAYS,1), 0,
0,0,0,0,
0,Nvl(:NEW.NO_OF_DAYS,1),0,
SYSDATE, :NEW.ENTRY_USER );
END IF;

ELSE -- IF EXIST
IF To_Char(:NEW.DATE_FROM,'RRRR') = V_BAL_YEAR THEN -- IF SAME YEAR
UPDATE PAY_LEAVE_BALANCE_TAMIMI
SET DAYS_ADDED = DAYS_ADDED + Nvl(:NEW.NO_OF_DAYS,1),
NET_BALANCE = NET_BALANCE + Nvl(:NEW.NO_OF_DAYS,1)
WHERE COMPANY_NUMBER = :NEW.COMPANY_NUMBER
AND EMPLOYEE_NUMBER = :NEW.EMPLOYEE_NUMBER
AND LEAVE_TYPE = :NEW.LEAVE_TYPE
AND LEAVE_YEAR = V_BAL_YEAR;
ELSIF To_Char(:NEW.DATE_FROM,'RRRR') = (V_BAL_YEAR-1) THEN -- IF PREVIOUS
YEAR BALANCE ENTERED, MODIFY PREVIOUS, ADD OPENING IN NEW.
IF V_CURR_CNT = 1 THEN
UPDATE PAY_LEAVE_BALANCE_TAMIMI
SET DAYS_ADDED = DAYS_ADDED + Nvl(:NEW.NO_OF_DAYS,1),
NET_BALANCE = NET_BALANCE + Nvl(:NEW.NO_OF_DAYS,1)
WHERE COMPANY_NUMBER = :NEW.COMPANY_NUMBER
AND EMPLOYEE_NUMBER = :NEW.EMPLOYEE_NUMBER
AND LEAVE_TYPE = :NEW.LEAVE_TYPE
AND LEAVE_YEAR = To_Char(:NEW.DATE_FROM,'RRRR');
ELSE
INSERT INTO PAY_LEAVE_BALANCE_TAMIMI ( COMPANY_NUMBER,
EMPLOYEE_NUMBER, LEAVE_TYPE, LEAVE_YEAR,
LEV_START_DATE, OP_BALANCE,
DUE_YEAR_BALANCE,
DAYS_ADDED, DAYS_DEDUCTED,
HOLIDAY_DAYS,
ENCASH_LEAVE_DAYS, RESERVE_DAYS, UNPAID_DAYS,
TAKEN_LEAVE_DAYS, NET_BALANCE,
ENTITLED_LEAVE_BALANCE,
TRANS_DATE, TRANS_USER )
VALUES ( :NEW.COMPANY_NUMBER, :NEW.EMPLOYEE_NUMBER, :NEW.LEAVE_TYPE,
To_Char(:NEW.DATE_FROM,'RRRR'),
Trunc(:NEW.DATE_FROM,'YEAR'), 0,0,
Nvl(:NEW.NO_OF_DAYS,1), 0,
0,0,0,0,
0,Nvl(:NEW.NO_OF_DAYS,1),0,
SYSDATE, :NEW.ENTRY_USER );
END IF;

UPDATE PAY_LEAVE_BALANCE_TAMIMI
SET OP_BALANCE = OP_BALANCE + Nvl(:NEW.NO_OF_DAYS,1),
NET_BALANCE = NET_BALANCE + Nvl(:NEW.NO_OF_DAYS,1)
WHERE COMPANY_NUMBER = :NEW.COMPANY_NUMBER
AND EMPLOYEE_NUMBER = :NEW.EMPLOYEE_NUMBER
AND LEAVE_TYPE = :NEW.LEAVE_TYPE
AND LEAVE_YEAR = V_BAL_YEAR;

ELSIF To_Char(:NEW.DATE_FROM,'RRRR') = (V_BAL_YEAR+1) THEN


INSERT INTO PAY_LEAVE_BALANCE_TAMIMI ( COMPANY_NUMBER, EMPLOYEE_NUMBER,
LEAVE_TYPE, LEAVE_YEAR,
LEV_START_DATE, OP_BALANCE,
DUE_YEAR_BALANCE,
DAYS_ADDED, DAYS_DEDUCTED,
HOLIDAY_DAYS, ENCASH_LEAVE_DAYS,
RESERVE_DAYS, UNPAID_DAYS,
TAKEN_LEAVE_DAYS, NET_BALANCE,
ENTITLED_LEAVE_BALANCE,
TRANS_DATE, TRANS_USER )
SELECT COMPANY_NUMBER, EMPLOYEE_NUMBER, LEAVE_TYPE,
To_Char(:NEW.DATE_FROM,'RRRR'), Trunc(:NEW.DATE_FROM,'YEAR'),NVL(T.NET_BALANCE,0),
0, Nvl(:NEW.NO_OF_DAYS,1),0,0,0,0,0,0, NVL(T.NET_BALANCE,0)+Nvl(:NEW.NO_OF_DAYS,1),
0, SYSDATE, :NEW.ENTRY_USER
FROM PAY_LEAVE_BALANCE_TAMIMI T
WHERE COMPANY_NUMBER = :NEW.COMPANY_NUMBER
AND EMPLOYEE_NUMBER = :NEW.EMPLOYEE_NUMBER
AND LEAVE_TYPE = :NEW.LEAVE_TYPE
AND LEAVE_YEAR = V_BAL_YEAR;
ELSE
UPDATE PAY_LEAVE_BALANCE_TAMIMI
SET DAYS_ADDED = DAYS_ADDED + Nvl(:NEW.NO_OF_DAYS,1),
NET_BALANCE = NET_BALANCE + Nvl(:NEW.NO_OF_DAYS,1)
WHERE COMPANY_NUMBER = :NEW.COMPANY_NUMBER
AND EMPLOYEE_NUMBER = :NEW.EMPLOYEE_NUMBER
AND LEAVE_TYPE = :NEW.LEAVE_TYPE
AND LEAVE_YEAR = V_BAL_YEAR;
END IF;
END IF;
END IF;

END;
===================================================================================
=================================================

USE IN PAY_LEAVE_TRANS TABLE =>


============================

CREATE OR REPLACE TRIGGER HR.TRIG_LV_CHECK_DOC_EXPIRY


AFTER INSERT ON HR.PAY_LEAVE_TRANS REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
V_LV_TYPE_DESC VARCHAR2(200);
BEGIN
IF :NEW.EXPECT_RETURN_DATE >= trunc(sysdate) then

PKG_HRMS_STANDARD.P_GET_LEAVE_TYPE(:NEW.COMPANY_NUMBER,'EN',:NEW.LEAVE_TYPE,V_LV_TY
PE_DESC);
PKG_EMAIL_STANDARD.SEND_LV_DOC_EXPIRY_EML ( :NEW.COMPANY_NUMBER,
:NEW.EMPLOYEE_NUMBER, :NEW.ACTUAL_START_DATE, :NEW.EXPECT_RETURN_DATE,
V_LV_TYPE_DESC);
END IF;
END;
/

CREATE OR REPLACE TRIGGER "INVSPROD".REQ_NOTIF_TRG


AFTER
INSERT OR UPDATE
ON REQUESTS
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
IF INSERTING THEN
IF :new.APPROVAL_FLAG=1 AND :NEW.REQ_STATUS = 'A' THEN

NOTIFICATIONS_SYSTEM_PKG.Insert_Notification(:NEW.CREATED_BY,:NEW.DEP_CODE,'RQ',:NE
W.REQ_NO);
END IF;
ELSIF UPDATING THEN
IF :new.APPROVAL_FLAG=1 AND :OLD.REQ_STATUS = 'A' AND
NVL(:OLD.APPROVAL_FLAG,0)=0 THEN

NOTIFICATIONS_SYSTEM_PKG.Insert_Notification(:NEW.CREATED_BY,:NEW.DEP_CODE,'RQ',:NE
W.REQ_NO);
END IF;
END IF;
END;

You might also like