DBA Data[Home] [Help]

TRIGGER: APPS.JAI_PA_PDIA_AFTER_T1

Source

Description
jai_pa_pdia_after_t1
AFTER INSERT OR UPDATE OR DELETE ON pa_draft_invoices_all
FOR EACH ROW
Type
AFTER EACH ROW
Event
INSERT OR UPDATE OR DELETE
Column
When
Referencing
REFERENCING NEW AS NEW OLD AS OLD
Body
DECLARE
/* $Header: jai_pa_pdia_t.sql 120.1.12000000.1 2007/10/24 18:20:32 rallamse noship $ */

/*----------------------------------------------------------------------------------------
Change History
S.No.   DATE         Description
------------------------------------------------------------------------------------------

1      24/04/1005    cbabu for bug#6012570 (5876390) Version: 120.0
                      Projects Billing Enh.
                      forward ported from R11i to R12

---------------------------------------------------------------------------------------- */

  lv_process_flag     VARCHAR2(30);
  lv_process_message  VARCHAR2(2000);
  lv_object           VARCHAR2(100);
  lv_action           VARCHAR2(30);

  r_new               pa_draft_invoices_all%rowtype;
  r_old               pa_draft_invoices_all%rowtype;

  ln_conc_request_id  number := to_number(fnd_profile.value ('CONC_REQUEST_ID'));

  ln_reg_id           number;

  /*-----------------------------------------DEBUG WRAPPER PROCEDURE -----------------------------*/

  procedure debug (pn_reg_id  number, pv_msg varchar2)
  is
    -- Internal debug switch setting this variable to FALSE will forcefully disable the debugging
    debugOn boolean := true;
  begin

    if not debugOn then
      return;
    end if;

    jai_cmn_debug_contexts_pkg.print (pn_reg_id, pv_msg);

  end debug;

  /*------------------------------------------------------------------------------------------------------------*/

  procedure initialize_new as
  begin
    r_new.PROJECT_ID                      := :new.PROJECT_ID                     ;
    r_new.DRAFT_INVOICE_NUM               := :new.DRAFT_INVOICE_NUM              ;
    r_new.LAST_UPDATE_DATE                := :new.LAST_UPDATE_DATE               ;
    r_new.LAST_UPDATED_BY                 := :new.LAST_UPDATED_BY                ;
    r_new.CREATION_DATE                   := :new.CREATION_DATE                  ;
    r_new.CREATED_BY                      := :new.CREATED_BY                     ;
    r_new.TRANSFER_STATUS_CODE            := :new.TRANSFER_STATUS_CODE           ;
    r_new.GENERATION_ERROR_FLAG           := :new.GENERATION_ERROR_FLAG          ;
    r_new.AGREEMENT_ID                    := :new.AGREEMENT_ID                   ;
    r_new.PA_DATE                         := :new.PA_DATE                        ;
    r_new.REQUEST_ID                      := :new.REQUEST_ID                     ;
    r_new.PROGRAM_APPLICATION_ID          := :new.PROGRAM_APPLICATION_ID         ;
    r_new.PROGRAM_ID                      := :new.PROGRAM_ID                     ;
    r_new.PROGRAM_UPDATE_DATE             := :new.PROGRAM_UPDATE_DATE            ;
    r_new.CUSTOMER_BILL_SPLIT             := :new.CUSTOMER_BILL_SPLIT            ;
    r_new.BILL_THROUGH_DATE               := :new.BILL_THROUGH_DATE              ;
    r_new.INVOICE_COMMENT                 := :new.INVOICE_COMMENT                ;
    r_new.APPROVED_DATE                   := :new.APPROVED_DATE                  ;
    r_new.APPROVED_BY_PERSON_ID           := :new.APPROVED_BY_PERSON_ID          ;
    r_new.RELEASED_DATE                   := :new.RELEASED_DATE                  ;
    r_new.RELEASED_BY_PERSON_ID           := :new.RELEASED_BY_PERSON_ID          ;
    r_new.INVOICE_DATE                    := :new.INVOICE_DATE                   ;
    r_new.RA_INVOICE_NUMBER               := :new.RA_INVOICE_NUMBER              ;
    r_new.TRANSFERRED_DATE                := :new.TRANSFERRED_DATE               ;
    r_new.TRANSFER_REJECTION_REASON       := :new.TRANSFER_REJECTION_REASON      ;
    r_new.UNEARNED_REVENUE_CR             := :new.UNEARNED_REVENUE_CR            ;
    r_new.UNBILLED_RECEIVABLE_DR          := :new.UNBILLED_RECEIVABLE_DR         ;
    r_new.GL_DATE                         := :new.GL_DATE                        ;
    r_new.SYSTEM_REFERENCE                := :new.SYSTEM_REFERENCE               ;
    r_new.DRAFT_INVOICE_NUM_CREDITED      := :new.DRAFT_INVOICE_NUM_CREDITED     ;
    r_new.CANCELED_FLAG                   := :new.CANCELED_FLAG                  ;
    r_new.CANCEL_CREDIT_MEMO_FLAG         := :new.CANCEL_CREDIT_MEMO_FLAG        ;
    r_new.WRITE_OFF_FLAG                  := :new.WRITE_OFF_FLAG                 ;
    r_new.CONVERTED_FLAG                  := :new.CONVERTED_FLAG                 ;
    r_new.EXTRACTED_DATE                  := :new.EXTRACTED_DATE                 ;
    r_new.LAST_UPDATE_LOGIN               := :new.LAST_UPDATE_LOGIN              ;
    r_new.ATTRIBUTE_CATEGORY              := :new.ATTRIBUTE_CATEGORY             ;
    r_new.ATTRIBUTE1                      := :new.ATTRIBUTE1                     ;
    r_new.ATTRIBUTE2                      := :new.ATTRIBUTE2                     ;
    r_new.ATTRIBUTE3                      := :new.ATTRIBUTE3                     ;
    r_new.ATTRIBUTE4                      := :new.ATTRIBUTE4                     ;
    r_new.ATTRIBUTE5                      := :new.ATTRIBUTE5                     ;
    r_new.ATTRIBUTE6                      := :new.ATTRIBUTE6                     ;
    r_new.ATTRIBUTE7                      := :new.ATTRIBUTE7                     ;
    r_new.ATTRIBUTE8                      := :new.ATTRIBUTE8                     ;
    r_new.ATTRIBUTE9                      := :new.ATTRIBUTE9                     ;
    r_new.ATTRIBUTE10                     := :new.ATTRIBUTE10                    ;
    r_new.RETENTION_PERCENTAGE            := :new.RETENTION_PERCENTAGE           ;
    r_new.INVOICE_SET_ID                  := :new.INVOICE_SET_ID                 ;
    r_new.ORG_ID                          := :new.ORG_ID                         ;
    r_new.INV_CURRENCY_CODE               := :new.INV_CURRENCY_CODE              ;
    r_new.INV_RATE_TYPE                   := :new.INV_RATE_TYPE                  ;
    r_new.INV_RATE_DATE                   := :new.INV_RATE_DATE                  ;
    r_new.INV_EXCHANGE_RATE               := :new.INV_EXCHANGE_RATE              ;
    r_new.BILL_TO_ADDRESS_ID              := :new.BILL_TO_ADDRESS_ID             ;
    r_new.SHIP_TO_ADDRESS_ID              := :new.SHIP_TO_ADDRESS_ID             ;
    r_new.PRC_GENERATED_FLAG              := :new.PRC_GENERATED_FLAG             ;
    r_new.RECEIVABLE_CODE_COMBINATION_ID  := :new.RECEIVABLE_CODE_COMBINATION_ID ;
    r_new.ROUNDING_CODE_COMBINATION_ID    := :new.ROUNDING_CODE_COMBINATION_ID   ;
    r_new.UNBILLED_CODE_COMBINATION_ID    := :new.UNBILLED_CODE_COMBINATION_ID   ;
    r_new.UNEARNED_CODE_COMBINATION_ID    := :new.UNEARNED_CODE_COMBINATION_ID   ;
    r_new.WOFF_CODE_COMBINATION_ID        := :new.WOFF_CODE_COMBINATION_ID       ;
    r_new.ACCTD_CURR_CODE                 := :new.ACCTD_CURR_CODE                ;
    r_new.ACCTD_RATE_TYPE                 := :new.ACCTD_RATE_TYPE                ;
    r_new.ACCTD_RATE_DATE                 := :new.ACCTD_RATE_DATE                ;
    r_new.ACCTD_EXCHG_RATE                := :new.ACCTD_EXCHG_RATE               ;
    r_new.LANGUAGE                        := :new.LANGUAGE                       ;
    r_new.CC_INVOICE_GROUP_CODE           := :new.CC_INVOICE_GROUP_CODE          ;
    r_new.CC_PROJECT_ID                   := :new.CC_PROJECT_ID                  ;
    r_new.IB_AP_TRANSFER_STATUS_CODE      := :new.IB_AP_TRANSFER_STATUS_CODE     ;
    r_new.IB_AP_TRANSFER_ERROR_CODE       := :new.IB_AP_TRANSFER_ERROR_CODE      ;
    r_new.INVPROC_CURRENCY_CODE           := :new.INVPROC_CURRENCY_CODE          ;
    r_new.PROJFUNC_INVTRANS_RATE_TYPE     := :new.PROJFUNC_INVTRANS_RATE_TYPE    ;
    r_new.PROJFUNC_INVTRANS_RATE_DATE     := :new.PROJFUNC_INVTRANS_RATE_DATE    ;
    r_new.PROJFUNC_INVTRANS_EX_RATE       := :new.PROJFUNC_INVTRANS_EX_RATE      ;
    r_new.PA_PERIOD_NAME                  := :new.PA_PERIOD_NAME                 ;
    r_new.GL_PERIOD_NAME                  := :new.GL_PERIOD_NAME                 ;
    r_new.UBR_SUMMARY_ID                  := :new.UBR_SUMMARY_ID                 ;
    r_new.UER_SUMMARY_ID                  := :new.UER_SUMMARY_ID                 ;
    r_new.UBR_UER_PROCESS_FLAG            := :new.UBR_UER_PROCESS_FLAG           ;
    r_new.PJI_SUMMARIZED_FLAG             := :new.PJI_SUMMARIZED_FLAG            ;
    r_new.RETENTION_INVOICE_FLAG          := :new.RETENTION_INVOICE_FLAG         ;
    r_new.RETN_CODE_COMBINATION_ID        := :new.RETN_CODE_COMBINATION_ID       ;
    r_new.PURGE_FLAG                      := :new.PURGE_FLAG                     ;
    r_new.CUSTOMER_ID                     := :new.CUSTOMER_ID                    ;
    r_new.BILL_TO_CUSTOMER_ID             := :new.BILL_TO_CUSTOMER_ID            ;
    r_new.SHIP_TO_CUSTOMER_ID             := :new.SHIP_TO_CUSTOMER_ID            ;
    r_new.BILL_TO_CONTACT_ID              := :new.BILL_TO_CONTACT_ID             ;
    r_new.SHIP_TO_CONTACT_ID              := :new.SHIP_TO_CONTACT_ID             ;
    r_new.CREDIT_MEMO_REASON_CODE         := :new.CREDIT_MEMO_REASON_CODE        ;

  end initialize_new;
 procedure initialize_old as
  begin
    r_old.PROJECT_ID                      := :old.PROJECT_ID                     ;
    r_old.DRAFT_INVOICE_NUM               := :old.DRAFT_INVOICE_NUM              ;
    r_old.LAST_UPDATE_DATE                := :old.LAST_UPDATE_DATE               ;
    r_old.LAST_UPDATED_BY                 := :old.LAST_UPDATED_BY                ;
    r_old.CREATION_DATE                   := :old.CREATION_DATE                  ;
    r_old.CREATED_BY                      := :old.CREATED_BY                     ;
    r_old.TRANSFER_STATUS_CODE            := :old.TRANSFER_STATUS_CODE           ;
    r_old.GENERATION_ERROR_FLAG           := :old.GENERATION_ERROR_FLAG          ;
    r_old.AGREEMENT_ID                    := :old.AGREEMENT_ID                   ;
    r_old.PA_DATE                         := :old.PA_DATE                        ;
    r_old.REQUEST_ID                      := :old.REQUEST_ID                     ;
    r_old.PROGRAM_APPLICATION_ID          := :old.PROGRAM_APPLICATION_ID         ;
    r_old.PROGRAM_ID                      := :old.PROGRAM_ID                     ;
    r_old.PROGRAM_UPDATE_DATE             := :old.PROGRAM_UPDATE_DATE            ;
    r_old.CUSTOMER_BILL_SPLIT             := :old.CUSTOMER_BILL_SPLIT            ;
    r_old.BILL_THROUGH_DATE               := :old.BILL_THROUGH_DATE              ;
    r_old.INVOICE_COMMENT                 := :old.INVOICE_COMMENT                ;
    r_old.APPROVED_DATE                   := :old.APPROVED_DATE                  ;
    r_old.APPROVED_BY_PERSON_ID           := :old.APPROVED_BY_PERSON_ID          ;
    r_old.RELEASED_DATE                   := :old.RELEASED_DATE                  ;
    r_old.RELEASED_BY_PERSON_ID           := :old.RELEASED_BY_PERSON_ID          ;
    r_old.INVOICE_DATE                    := :old.INVOICE_DATE                   ;
    r_old.RA_INVOICE_NUMBER               := :old.RA_INVOICE_NUMBER              ;
    r_old.TRANSFERRED_DATE                := :old.TRANSFERRED_DATE               ;
    r_old.TRANSFER_REJECTION_REASON       := :old.TRANSFER_REJECTION_REASON      ;
    r_old.UNEARNED_REVENUE_CR             := :old.UNEARNED_REVENUE_CR            ;
    r_old.UNBILLED_RECEIVABLE_DR          := :old.UNBILLED_RECEIVABLE_DR         ;
    r_old.GL_DATE                         := :old.GL_DATE                        ;
    r_old.SYSTEM_REFERENCE                := :old.SYSTEM_REFERENCE               ;
    r_old.DRAFT_INVOICE_NUM_CREDITED      := :old.DRAFT_INVOICE_NUM_CREDITED     ;
    r_old.CANCELED_FLAG                   := :old.CANCELED_FLAG                  ;
    r_old.CANCEL_CREDIT_MEMO_FLAG         := :old.CANCEL_CREDIT_MEMO_FLAG        ;
    r_old.WRITE_OFF_FLAG                  := :old.WRITE_OFF_FLAG                 ;
    r_old.CONVERTED_FLAG                  := :old.CONVERTED_FLAG                 ;
    r_old.EXTRACTED_DATE                  := :old.EXTRACTED_DATE                 ;
    r_old.LAST_UPDATE_LOGIN               := :old.LAST_UPDATE_LOGIN              ;
    r_old.ATTRIBUTE_CATEGORY              := :old.ATTRIBUTE_CATEGORY             ;
    r_old.ATTRIBUTE1                      := :old.ATTRIBUTE1                     ;
    r_old.ATTRIBUTE2                      := :old.ATTRIBUTE2                     ;
    r_old.ATTRIBUTE3                      := :old.ATTRIBUTE3                     ;
    r_old.ATTRIBUTE4                      := :old.ATTRIBUTE4                     ;
    r_old.ATTRIBUTE5                      := :old.ATTRIBUTE5                     ;
    r_old.ATTRIBUTE6                      := :old.ATTRIBUTE6                     ;
    r_old.ATTRIBUTE7                      := :old.ATTRIBUTE7                     ;
    r_old.ATTRIBUTE8                      := :old.ATTRIBUTE8                     ;
    r_old.ATTRIBUTE9                      := :old.ATTRIBUTE9                     ;
    r_old.ATTRIBUTE10                     := :old.ATTRIBUTE10                    ;
    r_old.RETENTION_PERCENTAGE            := :old.RETENTION_PERCENTAGE           ;
    r_old.INVOICE_SET_ID                  := :old.INVOICE_SET_ID                 ;
    r_old.ORG_ID                          := :old.ORG_ID                         ;
    r_old.INV_CURRENCY_CODE               := :old.INV_CURRENCY_CODE              ;
    r_old.INV_RATE_TYPE                   := :old.INV_RATE_TYPE                  ;
    r_old.INV_RATE_DATE                   := :old.INV_RATE_DATE                  ;
    r_old.INV_EXCHANGE_RATE               := :old.INV_EXCHANGE_RATE              ;
    r_old.BILL_TO_ADDRESS_ID              := :old.BILL_TO_ADDRESS_ID             ;
    r_old.SHIP_TO_ADDRESS_ID              := :old.SHIP_TO_ADDRESS_ID             ;
    r_old.PRC_GENERATED_FLAG              := :old.PRC_GENERATED_FLAG             ;
    r_old.RECEIVABLE_CODE_COMBINATION_ID  := :old.RECEIVABLE_CODE_COMBINATION_ID ;
    r_old.ROUNDING_CODE_COMBINATION_ID    := :old.ROUNDING_CODE_COMBINATION_ID   ;
    r_old.UNBILLED_CODE_COMBINATION_ID    := :old.UNBILLED_CODE_COMBINATION_ID   ;
    r_old.UNEARNED_CODE_COMBINATION_ID    := :old.UNEARNED_CODE_COMBINATION_ID   ;
    r_old.WOFF_CODE_COMBINATION_ID        := :old.WOFF_CODE_COMBINATION_ID       ;
    r_old.ACCTD_CURR_CODE                 := :old.ACCTD_CURR_CODE                ;
    r_old.ACCTD_RATE_TYPE                 := :old.ACCTD_RATE_TYPE                ;
    r_old.ACCTD_RATE_DATE                 := :old.ACCTD_RATE_DATE                ;
    r_old.ACCTD_EXCHG_RATE                := :old.ACCTD_EXCHG_RATE               ;
    r_old.LANGUAGE                        := :old.LANGUAGE                       ;
    r_old.CC_INVOICE_GROUP_CODE           := :old.CC_INVOICE_GROUP_CODE          ;
    r_old.CC_PROJECT_ID                   := :old.CC_PROJECT_ID                  ;
    r_old.IB_AP_TRANSFER_STATUS_CODE      := :old.IB_AP_TRANSFER_STATUS_CODE     ;
    r_old.IB_AP_TRANSFER_ERROR_CODE       := :old.IB_AP_TRANSFER_ERROR_CODE      ;
    r_old.INVPROC_CURRENCY_CODE           := :old.INVPROC_CURRENCY_CODE          ;
    r_old.PROJFUNC_INVTRANS_RATE_TYPE     := :old.PROJFUNC_INVTRANS_RATE_TYPE    ;
    r_old.PROJFUNC_INVTRANS_RATE_DATE     := :old.PROJFUNC_INVTRANS_RATE_DATE    ;
    r_old.PROJFUNC_INVTRANS_EX_RATE       := :old.PROJFUNC_INVTRANS_EX_RATE      ;
    r_old.PA_PERIOD_NAME                  := :old.PA_PERIOD_NAME                 ;
    r_old.GL_PERIOD_NAME                  := :old.GL_PERIOD_NAME                 ;
    r_old.UBR_SUMMARY_ID                  := :old.UBR_SUMMARY_ID                 ;
    r_old.UER_SUMMARY_ID                  := :old.UER_SUMMARY_ID                 ;
    r_old.UBR_UER_PROCESS_FLAG            := :old.UBR_UER_PROCESS_FLAG           ;
    r_old.PJI_SUMMARIZED_FLAG             := :old.PJI_SUMMARIZED_FLAG            ;
    r_old.RETENTION_INVOICE_FLAG          := :old.RETENTION_INVOICE_FLAG         ;
    r_old.RETN_CODE_COMBINATION_ID        := :old.RETN_CODE_COMBINATION_ID       ;
    r_old.PURGE_FLAG                      := :old.PURGE_FLAG                     ;
    r_old.CUSTOMER_ID                     := :old.CUSTOMER_ID                    ;
    r_old.BILL_TO_CUSTOMER_ID             := :old.BILL_TO_CUSTOMER_ID            ;
    r_old.SHIP_TO_CUSTOMER_ID             := :old.SHIP_TO_CUSTOMER_ID            ;
    r_old.BILL_TO_CONTACT_ID              := :old.BILL_TO_CONTACT_ID             ;
    r_old.SHIP_TO_CONTACT_ID              := :old.SHIP_TO_CONTACT_ID             ;
    r_old.CREDIT_MEMO_REASON_CODE         := :old.CREDIT_MEMO_REASON_CODE        ;

  end initialize_old;

  /*------------------------------------------------------------------------------------------------------------*/

  function request_exists_for_event (pv_event varchar2 ) return boolean
  is
    ln_req_exists number;
    lv_ret_val boolean;

    cursor c_chk_default_req_exists
    is
      select 1
      from   jai_trx_repo_extract_gt gt
      where  gt.transaction_reference_id = ln_conc_request_id
      and    transaction_source = pv_event;

    cursor c_chk_recalc_req_exists
    is
      select 1
      from   jai_trx_gt gt
      where  gt.jai_info_n1   = r_new.draft_invoice_num
      and    gt.jai_info_n2   = r_new.project_id
      and    gt.jai_info_v1   = pv_event;


  begin
      debug (ln_reg_id, 'OPEN/FETCH curosr c_chk_req_exists');

      lv_ret_val := false;

      if pv_event = jai_constants.DEFAULT_TAXES then

        open  c_chk_default_req_exists;
        fetch c_chk_default_req_exists into ln_req_exists;
        lv_ret_val  := c_chk_default_req_exists%found ;
        close c_chk_default_req_exists;

      elsif pv_event = jai_constants.RECALCULATE_TAXES
      then

        open  c_chk_recalc_req_exists;
        fetch c_chk_recalc_req_exists into ln_req_exists;
        lv_ret_val  := c_chk_recalc_req_exists%found ;
        close c_chk_recalc_req_exists;

      end if;

      debug (ln_reg_id, 'CLOSED curosr c_chk_req_exists');

      if lv_ret_val then
        debug (ln_reg_id,'request found');
      else
        debug (ln_reg_id,'request not found');
      end if;

      return lv_ret_val;

  end request_exists_for_event;

  /*------------------------------------------------------------------------------------------------------------*/

  --
  --  This procedure will submit concurrent rquest JAINPATX for recalculating the taxes in case of
  --  currency or exchange reate change in the project draft invoice due to Recalculate functionality
  --  The procedure will check if a request already exists for this session if not it will submit otherwise
  --  it will simply return
  --
  procedure submit_request (pv_event  varchar2 )
  is
    ln_request_id         number;
    lv_result boolean;

    ln_parent_request_id  pa_draft_invoices_all.request_id%type;
    ln_project_id         pa_draft_invoices_all.request_id%type;
    ln_draft_invoice_num  pa_draft_invoices_all.request_id%type;
  begin
    debug (ln_reg_id, 'Checking if requiest already submitted for event='||pv_event);
    if (request_exists_for_event (pv_event)) = false then
      --
      -- Request does not exists
      --
      if pv_event = jai_constants.default_taxes then

        ln_parent_request_id := ln_conc_request_id;

      elsif pv_event = jai_constants.recalculate_taxes then

        ln_project_id         := r_new.project_id;
        ln_draft_invoice_num  := r_new.draft_invoice_num;

      end if;
      /*debug (ln_reg_id, 'Submmiting Request with parameters:'||chr(10)
                                     ||'ln_parent_request_id='||ln_parent_request_id  ||  chr(10)
                                     ||'ln_project_id='||ln_project_id                ||  chr(10)
                                     ||'ln_draft_invoice_num='||ln_draft_invoice_num  ||  chr(10)
                                     ||'pv_event='||pv_event
                        );*/
      lv_result     := fnd_request.set_mode(true);
      ln_request_id := fnd_request.submit_request
                            (
                              'JA'
                            , 'JAINPATX'
                            , ''
                            , ''
                            , FALSE
                            , ln_parent_request_id                  -- p_request_id
                            , ln_project_id                         -- p_project_id
                            , ln_draft_invoice_num                  -- p_draft_invoice_num
                            , pv_event                              -- p_event
                            , CHR(0)
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , ''
                            , '', '', '', '', '', '', '', '', '', '',
                              '', '', '', '', '', '', '', '', '', '',
                              '', '', '', '', '', '', '', '', '', '',
                              '', '', '', '', '', '', '', '', '', '',
                              '', '', '', '', '', '', '', '', '', '',
                              '', '', '', '', '', '', '', '', '', '',
                              '', '', '', '', '', '', '', '', '', '',
                              '', '', '', '', '', '', '', ''
                          );
      debug (ln_reg_id, 'ln_request_id='||ln_request_id);
      if ln_request_id > 0 then

        if pv_event = jai_constants.DEFAULT_TAXES then
          --
          -- Event is default taxes hence the trigger is invoked by a project's draft invoice generation concurrent
          -- By inserting a row in to global temporary table (which preserve row ever after COMMIT) to later check
          -- if the request is already submitted in the current session (concurrent session)
          --
          insert into jai_trx_repo_extract_gt
            ( transaction_source          -- event
            , transaction_reference_id    -- request_id
            , document_id                 -- ln_parent_request_id for event = DEFAULT_TAXES
            )
          values
            (
              pv_event
            , ln_request_id
            , ln_parent_request_id
            );
        elsif pv_event = jai_constants.RECALCULATE_TAXES then
          --
          -- Recalulate event is triggered from the front-end UI and here using a global temporary table
          -- (which *DO NOT* preseve rows on COMMIT) so after each commit a new request will be submited
          --
          insert into jai_trx_gt
            ( jai_info_v1             -- event
            , jai_info_n1             -- request_id
            , jai_info_n2             -- prjoect_id
            , jai_info_n3             -- draft_invoice_num
            )
          values
            ( pv_event
            , ln_project_id
            , ln_draft_invoice_num
            , ln_request_id
            );
        end if; --> pv_event
      else
        fnd_message.set_name ('JA','JAI_GENERIC_MSG');
        fnd_message.set_token('MSG_TEXT', 'Failed to submit the request JAINPADI for event='||pv_event
                                                      ||',project_id='||ln_project_id
                                                      ||',draft_invoice_num='||ln_draft_invoice_num
                                                      ||',parent_req_id='||ln_parent_request_id
                             );
        app_exception.raise_exception ;
      end if;
    end if;

    debug (ln_reg_id, 'Submit_Request completed');

  end submit_request;

/*----------------------------------------------------------------------------------------------------------------------------
CHANGE HISTORY for FILENAME: jai_pdia_ariud.sql
S.No  dd/mm/yyyy   Author and Details
------------------------------------------------------------------------------------------------------------------------------
1     12/02/2007   Vijay Shankar for Bug# 6012570 (5876390), Version:115.1
                    This trigger created for Projects Billing Implementation.
                    Initially the code is added
                      - to handle Defaultation of taxes during INSERTING
                      - VAT and Excise taxes processing during Release event of Draft Invoice
                      - Delete the data from IL tables to sync. with base draft invoice

------------------------------------------------------------------------------------------------------------------------------*/

BEGIN

  lv_object := 'jai_cmn_utils_pkg.check_jai_exists';
  lv_action := 'CHECK_JAI_EXISTS';

  jai_cmn_debug_contexts_pkg.register ('JAI_PA_PDIA_AFTER_T1',ln_reg_id);

  debug (ln_reg_id, 'Check if India - processing is required?');

  /* Check to see if the transaction in context is related to India or not. If not, then return */
  if  jai_cmn_utils_pkg.check_jai_exists (
          p_calling_object   => 'JAI_PDIA_ARIUD_T1',
          p_org_id           => nvl(:new.org_id, :old.org_id)
      ) = false
  then
    return;
  end if;

  debug (ln_reg_id, 'India - Processing is required');


  IF INSERTING THEN
    lv_action := 'INSERTING';
     initialize_new;
  ELSIF UPDATING THEN
     lv_action := 'UPDATING';
     initialize_new;
     initialize_old;
  ELSIF DELETING THEN
    lv_action := 'DELETING';
    initialize_old;
  END IF ;

  debug (ln_reg_id, 'Trigger action='||lv_action);

  --
  --  INSERTING SECTION
  --

  if inserting   then

     submit_request
        ( pv_event              =>  jai_constants.default_taxes
        );

  end if ;

  --
  -- UPDATING SECTION
  --

 if UPDATING then
    debug (ln_reg_id, 'ln_conc_request_id='||ln_conc_request_id);
    if (   r_new.inv_currency_code <> r_old.inv_currency_code
       or  r_new.inv_exchange_rate <> r_old.inv_exchange_rate
       )
    and nvl(ln_conc_request_id,-1) = -1 -- Update is not happening through a concurrent request
    then

      debug (ln_reg_id, 'Currency/Exchange change:r_new.inv_exchange_rate='||r_new.inv_exchange_rate
                                                             ||',r_old.inv_exchange_rate='||r_old.inv_exchange_rate
                                                             ||',r_new.inv_currency_code='||r_new.inv_currency_code
                                                             ||',r_old.inv_currency_code='||r_old.inv_currency_code
                        );
      submit_request
        ( pv_event              =>  jai_constants.recalculate_taxes
        );

    end if;

  end if;

  /* if the following condition is successful, it means the invoice is successfully released.
    So, we can go ahead and Process CENVAT/EXCISE and VAT taxes
  */
  if UPDATING
    and :old.released_date is null and :new.released_date is not null
  then

    if jai_pa_billing_pkg.gv_debug then
      jai_cmn_utils_pkg.print_log ( jai_pa_billing_pkg.file, '1 trigger before jai_pa_pdia_after_t1:');
    end if;

    jai_pa_billing_pkg.process_draft_invoice_release(
      pr_draft_invoice          => r_new,
      pv_called_from            => 'JAI_PA_PDIA_AFTER_T1',
      pv_process_flag           => lv_process_flag,
      pv_process_message        => lv_process_message
    );

    if jai_pa_billing_pkg.gv_debug then
      jai_cmn_utils_pkg.print_log ( jai_pa_billing_pkg.file, '2 trigger before jai_pa_pdia_after_t1:'
        ||', lv_process_flag:'||lv_process_flag
        ||', lv_process_message:'||lv_process_message
        );
    end if;

    if lv_process_flag in (jai_constants.unexpected_error, jai_constants.expected_error, 'E') then
      goto end_of_trigger;
    end if;

    /* TESTING purpose
    fnd_message.set_name( 'JA', 'JAI_GENERIC_MSG');
    fnd_message.set_token('MSG_TEXT', 'Ding Error');
    app_exception.raise_exception;
    */
  end if;

  --
  --  DELETING SECTION
  --

  if DELETING then

    JAI_PA_TAX_PKG.sync_deletion(
      pn_project_id           => :old.project_id,
      pn_draft_invoice_num    => :old.draft_invoice_num,
      pv_process_flag         => lv_process_flag,
      pv_process_message      => lv_process_message
    ) ;

    if lv_process_flag in (jai_constants.unexpected_error, jai_constants.expected_error, 'E') then
      goto end_of_trigger;
    end if;

  end if;

  --
  -- End of Trigger logic
  --
  <>
  jai_cmn_debug_contexts_pkg.deregister (ln_reg_id);
  if lv_process_flag in (jai_constants.unexpected_error, jai_constants.expected_error, 'E') then
    fnd_message.set_name( 'JA', 'JAI_GENERIC_MSG');
    fnd_message.set_token('MSG_TEXT', lv_process_message);
    app_exception.raise_exception;
  end if;

END jai_pa_pdia_after_t1;