XTR_AU_DEALS_T
AFTER UPDATE on XTR_DEALS
FOR EACH ROW
Type
AFTER EACH ROW
Event
UPDATE
Column
When
Referencing
REFERENCING NEW AS NEW OLD AS OLD
Body
declare
cursor GET_COM(P_CURRENCY_BUY varchar2,P_CURRENCY_SELL varchar2) is
select CURRENCY_FIRST||'/'||CURRENCY_SECOND
from XTR_BUY_SELL_COMBINATIONS
where (CURRENCY_BUY = P_CURRENCY_BUY and CURRENCY_SELL = P_CURRENCY_SELL)
or (CURRENCY_BUY = P_CURRENCY_SELL and CURRENCY_SELL = P_CURRENCY_BUY);
cursor GET_BOND_TYPE(P_BOND_ISSUE VARCHAR2) is
select year_calc_type, calc_type
from XTR_BOND_ISSUES B
where bond_issue_code = p_bond_issue;
--
l_combin VARCHAR2(31);
l_action VARCHAR2(10);
l_start_date DATE;
l_maturity_date DATE;
date_created DATE;
l_action_type VARCHAR2(50);
l_amount NUMBER;
l_currency VARCHAR2(15);
l_contra_ccy VARCHAR2(15);
l_org_flag VARCHAR2(1);
l_base_rate NUMBER;
l_year_calc_type VARCHAR2(15);
l_calc_type VARCHAR2(15);
l_transaction_rate NUMBER;
--
begin
/*================================================*/
/* Update XTR_DEAL_DATE_AMOUNTS table */
/*================================================*/
IF (
:old.deal_subtype <> :new.deal_subtype or
:old.product_type <> :new.product_type or
:old.deal_type <> :new.deal_type or
:old.portfolio_code <> :new.portfolio_code or
:old.status_code <> :new.status_code or
:old.dealer_code <> :new.dealer_code or
:old.client_code <> :new.client_code or
:old.cparty_code <> :new.cparty_code or
:old.limit_code <> :new.limit_code or
:old.company_code <> :new.company_code or
:old.riskparty_code <> :new.riskparty_code or
:old.riskparty_limit_code <> :new.riskparty_limit_code or
:old.deal_no <> :new.deal_no or
:old.premium_amount <> :new.premium_amount or
:old.buy_amount <> :new.buy_amount or
:old.sell_amount <> :new.sell_amount or
:old.face_value_amount <> :new.face_value_amount or
:old.settle_amount <> :new.settle_amount or
:old.maturity_balance_amount <> :new.maturity_balance_amount or
:old.maturity_amount <> :new.maturity_amount or
:old.interest_amount <> :new.interest_amount or
:old.start_amount <> :new.start_amount or
:old.contract_commission <> :new.contract_commission or
:old.contract_fees <> :new.contract_fees or
:old.exercise_price <> :new.exercise_price or
:old.face_value_hce_amount <> :new.face_value_hce_amount or
:old.buy_hce_amount <> :new.buy_hce_amount or
:old.sell_hce_amount <> :new.sell_hce_amount or
:old.premium_hce_amount <> :new.premium_hce_amount or
:old.settle_hce_amount <> :new.settle_hce_amount or
:old.start_hce_amount <> :new.start_hce_amount or
:old.maturity_hce_amount <> :new.maturity_hce_amount or
:old.interest_hce_amount <> :new.interest_hce_amount or
:old.maturity_balance_hce_amount <> :new.maturity_balance_hce_amount or
:old.start_date <> :new.start_date or
:old.maturity_date <> :new.maturity_date or
:old.deal_date <> :new.deal_date or
:old.rate_fixing_date <> :new.rate_fixing_date or
:old.expiry_date <> :new.expiry_date or
:old.premium_date <> :new.premium_date or
:old.value_date <> :new.value_date or
:old.settle_date <> :new.settle_date or
:old.interest_rate <> :new.interest_rate or
:old.settle_rate <> :new.settle_rate or
:old.transaction_rate <> :new.transaction_rate or
:old.contract_rate <> :new.contract_rate or
:old.base_rate <> :new.base_rate or
:old.currency <> :new.currency or
:old.currency_buy <> :new.currency_buy or
:old.currency_sell <> :new.currency_sell or
:old.premium_currency <> :new.premium_currency or
:old.settle_action <> :new.settle_action or
:old.premium_action <> :new.premium_action or
:old.cparty_account_no <> :new.cparty_account_no or
:old.settle_account_no <> :new.settle_account_no or
:old.buy_account_no <> :new.buy_account_no or
:old.sell_account_no <> :new.sell_account_no or
:old.premium_account_no <> :new.premium_account_no or
:old.maturity_account_no <> :new.maturity_account_no or
:old.bond_issue <> :new.bond_issue or
:old.insert_for_cashflow <> :new.insert_for_cashflow or
:old.knock_type <> :new.knock_type or
:old.knock_insert_type <> :new.knock_insert_type or
:old.ni_profit_loss <> :new.ni_profit_loss or
:old.profit_loss <> :new.profit_loss or
:old.fx_ro_pd_rate <> :new.fx_ro_pd_rate or
:old.fx_m1_deal_no <> :new.fx_m1_deal_no) then
XTR_MAINTAIN_DDA_P.MAINTAIN_DDA_PROC(
'UPDATE',
:NEW.DEAL_TYPE,
:NEW.DEAL_NO,
:NEW.DEAL_NO,
:NEW.STATUS_CODE,
:NEW.DEAL_SUBTYPE,
:NEW.COMPANY_CODE,
:NEW.CPARTY_CODE,
:NEW.CLIENT_CODE,
:NEW.LIMIT_CODE,
:NEW.PRODUCT_TYPE,
:NEW.PORTFOLIO_CODE,
:NEW.CURRENCY,
:NEW.CURRENCY_BUY,
:NEW.CURRENCY_SELL,
:NEW.SWAP_DEPO_FLAG,
:NEW.DEALER_CODE,
:NEW.DEAL_DATE,
:NEW.START_DATE,
:NEW.MATURITY_DATE,
:NEW.INTEREST_RATE,
:NEW.FACE_VALUE_AMOUNT,
:NEW.FACE_VALUE_HCE_AMOUNT,
:NEW.CPARTY_ACCOUNT_NO,
:OLD.CPARTY_ACCOUNT_NO,
:NEW.SETTLE_ACCOUNT_NO,
:OLD.SETTLE_ACCOUNT_NO,
:NEW.SETTLE_ACTION,
:NEW.SETTLE_AMOUNT,
:NEW.SETTLE_HCE_AMOUNT,
:NEW.SETTLE_RATE,
:NEW.EXERCISE_PRICE,
:NEW.SETTLE_DATE,
:NEW.PREMIUM_ACTION,
:NEW.PREMIUM_DATE,
:NEW.PREMIUM_AMOUNT,
:NEW.PREMIUM_HCE_AMOUNT,
:NEW.PREMIUM_ACCOUNT_NO,
:OLD.PREMIUM_ACCOUNT_NO,
:NEW.TRANSACTION_RATE,
:NEW.INSERT_FOR_CASHFLOW,
:NEW.KNOCK_TYPE,
:NEW.KNOCK_INSERT_TYPE,
:NEW.SELL_AMOUNT,
:NEW.BUY_AMOUNT,
:NEW.SELL_HCE_AMOUNT,
:NEW.BUY_HCE_AMOUNT,
:NEW.SELL_ACCOUNT_NO,
:OLD.SELL_ACCOUNT_NO,
:NEW.BUY_ACCOUNT_NO,
:OLD.BUY_ACCOUNT_NO,
:NEW.VALUE_DATE,
:NEW.EXPIRY_DATE,
:NEW.OPTION_COMMENCEMENT,
:NEW.COMMENTS,
:OLD.STATUS_CODE,
:NEW.QUICK_INPUT,
:NEW.START_AMOUNT,
:NEW.START_HCE_AMOUNT,
:NEW.MATURITY_AMOUNT,
:NEW.MATURITY_HCE_AMOUNT,
:NEW.MATURITY_ACCOUNT_NO,
:OLD.MATURITY_ACCOUNT_NO,
:NEW.MATURITY_BALANCE_AMOUNT,
:NEW.MATURITY_BALANCE_HCE_AMOUNT,
:NEW.INTEREST_AMOUNT,
:NEW.INTEREST_HCE_AMOUNT,
:NEW.RISKPARTY_LIMIT_CODE,
:NEW.RISKPARTY_CODE,
:NEW.BOND_ISSUE,
:NEW.COUPON_ACTION,
:NEW.ACCRUED_INTEREST_PRICE,
:NEW.CUM_COUPON_DATE,
:NEW.NEXT_COUPON_DATE,
:NEW.COUPON_RATE,
:NEW.FREQUENCY,
:NEW.ACCEPTOR_CODE,
:NEW.CAPITAL_PRICE,
:NEW.PREMIUM_CURRENCY,
:NEW.CONTRACT_RATE,
:NEW.CONTRACT_COMMISSION,
:NEW.CONTRACT_FEES,
:NEW.BASE_RATE,
:NEW.NI_PROFIT_LOSS,
:NEW.RATE_FIXING_DATE,
:NEW.PROFIT_LOSS, /* EKL - Added for Bug 2252292. */
:OLD.PROFIT_LOSS, /* EKL - Added for Bug 2252292. */
:NEW.FX_RO_PD_RATE, /* EKL - Added for Bug 2252292. */
:OLD.FX_RO_PD_RATE, /* EKL - Added for Bug 2252292. */
:NEW.FX_M1_DEAL_NO, /* EKL - Added for Bug 2252292. */
:OLD.FX_M1_DEAL_NO); /* EKL - Added for Bug 2252292. */
End if;
date_created :=sysdate;
l_org_flag :='Y';
if nvl(:NEW.deal_type,'^') ='FXO' then
if nvl(:OLD.EXERCISE,'N')='N' and nvl(:NEW.EXERCISE,'N')='Y'
and :NEW.FXO_DEAL_NO is not null then
l_action_type :='EXERCISE_OF_FX_OPTION_CONTRACT';
l_amount :=:NEW.BUY_AMOUNT;
l_currency :=:NEW.CURRENCY_BUY;
end if;
elsif nvl(:NEW.deal_type,'^') ='FRA' then
if :OLD.SETTLE_DATE is null and :NEW.SETTLE_DATE is not null then
l_action_type :='SETTLEMENT_OF_FRA_CONTRACT';
l_amount :=:NEW.SETTLE_AMOUNT;
l_currency :=:NEW.CURRENCY;
end if;
elsif nvl(:NEW.deal_type,'^') ='IRO' then
if :OLD.SETTLE_DATE is null and :NEW.SETTLE_DATE is not null then
l_action_type :='EXERCISE_OF_IRO_CONTRACT';
l_amount :=:NEW.SETTLE_AMOUNT;
l_currency :=:NEW.CURRENCY;
end if;
elsif nvl(:NEW.deal_type,'^') ='BDO' then
if (:OLD.SETTLE_DATE is null and :NEW.SETTLE_DATE is not null )
or (nvl(:OLD.ENTER_INTO_SWAP,'N')='N' and
nvl(:NEW.ENTER_INTO_SWAP,'N')='Y' ) then
l_action_type :='EXERCISE_OF_BOND_OPTION_CONTRACT';
l_amount :=:NEW.SETTLE_AMOUNT; -----SETTLE_AMOUNT
l_currency :=:NEW.CURRENCY;
end if;
elsif nvl(:NEW.deal_type,'^') ='SWPTN' then
if :OLD.SETTLE_DATE is null and nvl(:OLD.ENTER_INTO_SWAP,'N') <> 'Y' and
(:NEW.SETTLE_DATE is not null or :NEW.ENTER_INTO_SWAP = 'Y') then
l_action_type :='EXERCISE_OF_SWAPTION_CONTRACT';
l_amount :=:NEW.SETTLE_AMOUNT;
l_currency :=:NEW.CURRENCY;
end if;
end if;
if l_action_type is not null then
-- Execute Stored procedure DEAL_ACTIONS
XTR_MISC_P.DEAL_ACTIONS
(:NEW.deal_type,:NEW.deal_no,null,l_action_type,
:NEW.cparty_code,:NEW.client_code,date_created,
:NEW.company_code,:NEW.status_code,null,
:NEW.deal_subtype,l_currency,:NEW.cparty_advice,
:NEW.client_advice,l_amount,l_org_flag);
end if;
/*================================================*/
/* Update XTR_POSITION_HISTORY table */
/*================================================*/
----for backdated COF
if (:OLD.COMPANY_CODE <> :NEW.COMPANY_CODE or
:OLD.CPARTY_CODE <> :NEW.CPARTY_CODE or
:OLD.DEAL_SUBTYPE <> :NEW.DEAL_SUBTYPE or
:OLD.PRODUCT_TYPE <> :NEW.PRODUCT_TYPE or
:OLD.PORTFOLIO_CODE <> :NEW.PORTFOLIO_CODE or
nvl(:OLD.CURRENCY,'@#@') <> nvl(:NEW.CURRENCY,'@#@') or
nvl(:OLD.CURRENCY_SELL,'@#@') <> nvl(:NEW.CURRENCY_SELL,'@#@') or
nvl(:OLD.CURRENCY_BUY,'@#@') <> nvl(:NEW.CURRENCY_BUY,'@#@') or
nvl(:OLD.YEAR_CALC_TYPE,'@#@') <> nvl(:NEW.YEAR_CALC_TYPE,'@#@') or
nvl(:OLD.BUY_AMOUNT,0) <> nvl(:NEW.BUY_AMOUNT,0) or
nvl(:OLD.SELL_AMOUNT,0) <> nvl(:NEW.SELL_AMOUNT,0) or
nvl(:OLD.FACE_VALUE_AMOUNT,0) <> nvl(:NEW.FACE_VALUE_AMOUNT,0) or
(:OLD.START_DATE is null and :NEW.START_DATE is not null) or
nvl(:OLD.INTEREST_RATE,0) <> nvl(:NEW.INTEREST_RATE,0) or
:OLD.STATUS_CODE <> :NEW.STATUS_CODE ) then
L_ACTION :=NULL;
if :NEW.DEAL_TYPE = 'FX' then
L_YEAR_CALC_TYPE :=nvl(:NEW.YEAR_CALC_TYPE,'ACTUAL/ACTUAL');
L_BASE_RATE :=:NEW.BASE_RATE;
L_TRANSACTION_RATE :=:NEW.TRANSACTION_RATE;
if :NEW.STATUS_CODE = 'CURRENT' then
L_ACTION :='UPDATE';
else
L_ACTION :='DELETE';
end if;
open GET_COM(:NEW.CURRENCY_BUY,:NEW.CURRENCY_SELL);
fetch GET_COM into L_COMBIN;
close GET_COM;
if :NEW.CURRENCY_BUY =substr(L_COMBIN,1,3) then
L_AMOUNT :=:NEW.BUY_AMOUNT;
L_CURRENCY :=:NEW.CURRENCY_BUY;
L_CONTRA_CCY :=:NEW.CURRENCY_SELL;
else
L_AMOUNT :=0-:NEW.SELL_AMOUNT;
L_CURRENCY :=:NEW.CURRENCY_SELL;
L_CONTRA_CCY :=:NEW.CURRENCY_BUY;
end if;
if :NEW.DEAL_TYPE='FX' then
L_START_DATE :=:NEW.DEAL_DATE;
L_MATURITY_DATE :=nvl(:NEW.START_DATE,:NEW.VALUE_DATE);
else
L_MATURITY_DATE :=:NEW.EXPIRY_DATE;
if :NEW.STATUS_CODE ='EXERCISED' then
L_MATURITY_DATE :=nvl(:NEW.SETTLE_DATE,trunc(sysdate));
else
L_START_DATE :=nvl(:NEW.OPTION_COMMENCEMENT,:NEW.DEAL_DATE);
end if;
end if;
elsif :NEW.DEAL_TYPE ='BOND' and (:NEW.STATUS_CODE = 'CANCELLED' and
:OLD.STATUS_CODE <> 'CANCELLED') then
OPEN GET_BOND_TYPE(:NEW.BOND_ISSUE);
FETCH get_bond_type into l_year_calc_type, l_calc_type;
CLOSE get_bond_type;
L_ACTION :='DELETE'; -- Invoke average rate only if BOND is cancelled
L_START_DATE :=:NEW.START_DATE;
L_MATURITY_DATE :=nvl(:NEW.BOND_SALE_DATE,:NEW.MATURITY_DATE);
L_TRANSACTION_RATE :=:NEW.INTEREST_RATE;
L_AMOUNT :=:NEW.START_AMOUNT;
elsif :NEW.STATUS_CODE ='CANCELLED' and :OLD.STATUS_CODE <> 'CANCELLED' then
L_ACTION :='DELETE';
end if;
if L_ACTION is not null and :NEW.STATUS_CODE <>'EXPIRED' and
(:NEW.DEAL_TYPE = 'FX' or (:NEW.DEAL_TYPE = 'BOND' and L_ACTION = 'DELETE')) then
XTR_COF_P.MAINTAIN_POSITION_HISTORY(
P_START_DATE => L_START_DATE,
P_MATURITY_DATE => L_MATURITY_DATE,
P_OTHER_DATE => NULL,
P_DEAL_NUMBER => :NEW.DEAL_NO,
P_TRANSACTION_NUMBER => 1,
P_COMPANY_CODE => :NEW.COMPANY_CODE,
P_CURRENCY => L_CURRENCY,
P_DEAL_TYPE => :NEW.DEAl_TYPE,
P_DEAL_SUBTYPE => :NEW.DEAL_SUBTYPE,
P_PRODUCT_TYPE => :NEW.PRODUCT_TYPE,
P_PORTFOLIO_CODE => :NEW.PORTFOLIO_CODE,
P_CPARTY_CODE => :NEW.CPARTY_CODE,
P_CONTRA_CCY => L_CONTRA_CCY,
P_CURRENCY_COMBINATION => L_COMBIN,
P_ACCOUNT_NO => NULL,
P_TRANSACTION_RATE => L_TRANSACTION_RATE,
P_YEAR_CALC_TYPE => L_YEAR_CALC_TYPE,
P_BASE_REF_AMOUNT => L_AMOUNT,
P_BASE_RATE => L_BASE_RATE,
P_STATUS_CODE => :NEW.STATUS_CODE,
P_INTEREST => NULL,
P_MATURITY_AMOUNT => :NEW.MATURITY_AMOUNT,
P_START_AMOUNT => :NEW.START_AMOUNT,
P_CALC_BASIS => NULL,
P_CALC_TYPE => L_CALC_TYPE,
P_ACTION => L_ACTION);
end if;
end if;
end;