Friday 26 August 2016

AP Invoice Insert ,Update and Delete API

CREATE OR REPLACE PACKAGE BODY APPS.XX_AP_INVOICE_PKG
AS

PROCEDURE XX_AP_INVOICE_INSERT AS

ERROR_FLAG                               VARCHAR2(1);
ERROR_MSG                                VARCHAR2(2000);
LV_ORG_ID                                HR_OPERATING_UNITS.ORGANIZATION_ID%TYPE;
LV_LINE_TYPE                             AP_INVOICE_LINES_ALL.LINE_TYPE_LOOKUP_CODE%TYPE;
XX_AP_SEQ                                AP_INVOICES_ALL.INVOICE_ID%TYPE;
LV_VENDOR_ID                             AP_INVOICES_ALL.VENDOR_ID%TYPE;
LV_VENDOR_SITE_ID                        AP_INVOICES_ALL.VENDOR_SITE_ID%TYPE;
LV_PAYMENT_METHOD_CODE                   AP_INVOICES_ALL.PAYMENT_METHOD_CODE%TYPE;
LV_TERM_ID                               AP_INVOICES_ALL.TERMS_ID%TYPE;
LV_INVENTORY_ITEM_ID                     AP_INVOICE_LINES_ALL.INVENTORY_ITEM_ID%TYPE;
LV_UOM_CODE                              AP_INVOICE_LINES_ALL.UNIT_MEAS_LOOKUP_CODE%TYPE;
LV_AP_INVOICE_DIS_ID                     AP_INVOICE_DISTRIBUTIONS_ALL.INVOICE_DISTRIBUTION_ID%TYPE;
LV_CODE_COMBINATION_ID                   GL_CODE_COMBINATIONS_KFV.CODE_COMBINATION_ID%TYPE;
LV_PERIOD_NAME                           GL_PERIODS.PERIOD_NAME%TYPE;
LV_SET_OF_BOOKS_ID                       GL_SETS_OF_BOOKS.SET_OF_BOOKS_ID%TYPE;
LV_SOURCE                                AP_LOOKUP_CODES.LOOKUP_CODE%TYPE;
LV_INVOICE_TYPE                          AP_LOOKUP_CODES.LOOKUP_CODE%TYPE;
L_USER_ID                                FND_USER.USER_ID%TYPE;
L_RESP_ID                                FND_RESPONSIBILITY_TL.RESPONSIBILITY_ID%TYPE;
L_RESP_APPL_ID                           FND_RESPONSIBILITY_TL.APPLICATION_ID%TYPE;
LV_PARTY_ID                              PO_VENDORS.PARTY_ID%TYPE;
LV_PARTY_SITE_ID                         PO_VENDOR_SITES_ALL.PARTY_SITE_ID%TYPE;
LV_LINE_NUMBER                           AP_INVOICE_LINES_ALL.LINE_NUMBER%TYPE;
LV_DIS_NUMBER                            PO_HEADERS_ALL.PO_HEADER_ID%TYPE;
LV_PO_HEADER_ID                          PO_HEADERS_ALL.PO_HEADER_ID%TYPE;
LV_PO_LINE_ID                            PO_LINES_ALL.PO_LINE_ID%TYPE;
LV_PO_DISTRIBUTION_ID                    PO_DISTRIBUTIONS_ALL.PO_DISTRIBUTION_ID%TYPE;
LV_DIS_LINE_NUMBER                       AP_INVOICE_DISTRIBUTIONS_ALL.DISTRIBUTION_LINE_NUMBER%TYPE;
LV_LINE_LOCATION_ID                      PO_LINE_LOCATIONS_ALL.LINE_LOCATION_ID%TYPE;


CURSOR HEADERS IS
 SELECT ROWID ROW_ID,XXAPIH.* FROM XX_AP_INVOICE_HEADERS  XXAPIH
  WHERE PROCESS_FLAG='N';


CURSOR LINES(L_INVOICE_ID NUMBER) IS
 SELECT ROWID ROW_ID,XXAPIL.* FROM XX_AP_INVOICE_LINES  XXAPIL
    WHERE PROCESS_FLAG='N' AND INVOICE_ID=L_INVOICE_ID;


   CURSOR DISTRIBUTIONS(D_INVOICE_ID NUMBER,L_LINE_NUMBER NUMBER) IS
 SELECT ROWID ROW_ID,XXAPID.* FROM XX_AP_INVOICE_DISTRIBUTIONS  XXAPID
    WHERE PROCESS_FLAG='N'
     AND INVOICE_ID=D_INVOICE_ID
      AND LINE_NUMBER=L_LINE_NUMBER;



BEGIN


   BEGIN
   MO_GLOBAL.SET_POLICY_CONTEXT ('S', 204);
   END;


       SELECT FND.USER_ID ,
                       FRESP.RESPONSIBILITY_ID,
                       FRESP.APPLICATION_ID
                       INTO L_USER_ID,L_RESP_ID,L_RESP_APPL_ID
           FROM    FND_USER FND,
                   FND_RESPONSIBILITY_TL FRESP
           WHERE  FND.USER_NAME = 'VENKAT'
             AND    FRESP.RESPONSIBILITY_NAME = 'Payables, Vision Operations (USA)';

  FND_GLOBAL.APPS_INITIALIZE(USER_ID=>L_USER_ID,
                           RESP_ID=>L_RESP_ID,
                           RESP_APPL_ID=>L_RESP_APPL_ID);

            DBMS_OUTPUT.PUT_LINE('USER ID: '||L_USER_ID);
            DBMS_OUTPUT.PUT_LINE('RESPONSIBILITY ID : '||L_RESP_ID);
            DBMS_OUTPUT.PUT_LINE('APPLICATION ID : '||L_RESP_APPL_ID);



 ERROR_MSG:=NULL;



    FOR H IN HEADERS
 LOOP

  ERROR_FLAG:='A';



 BEGIN



        --------------*****ORGANIZATION NAME VALIDATION*****----------

   SELECT ORGANIZATION_ID
          INTO LV_ORG_ID
          FROM ORG_ORGANIZATION_DEFINITIONS
         WHERE ORGANIZATION_NAME=H.OPERATING_UNIT;

  DBMS_OUTPUT.PUT_LINE('organization_name IS VALID'||LV_ORG_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='organization_name IS INVALID';
 DBMS_OUTPUT.PUT_LINE('organization_name IS INVALID'||LV_ORG_ID);
  END;


  --------------*****INVOICE TYPE VALIDATION******---------

  BEGIN
  SELECT LOOKUP_CODE
    INTO LV_INVOICE_TYPE
              FROM  AP_LOOKUP_CODES
             WHERE LOOKUP_TYPE='INVOICE TYPE'
             AND LOOKUP_CODE=H.INVOICE_TYPE;
  DBMS_OUTPUT.PUT_LINE('INVOICE_TYPE IS VALID'||LV_INVOICE_TYPE);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='INVOICE_TYPE  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('INVOICE_TYPE  IS INVALID'||LV_INVOICE_TYPE);
  END;

  --------------******SUPPLIER VALIDATION******--------------

  BEGIN

     SELECT VENDOR_ID,PARTY_ID
          INTO LV_VENDOR_ID,LV_PARTY_ID
           FROM PO_VENDORS
          WHERE VENDOR_NAME=H.SUPPLIER;

  DBMS_OUTPUT.PUT_LINE('VENDOR_ID IS VALID'||LV_VENDOR_ID||'  '||LV_PARTY_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='VENDOR_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('VENDOR_ID  IS INVALID'||LV_VENDOR_ID||'  '||LV_PARTY_ID);
  END;



  BEGIN

    SELECT VENDOR_SITE_ID,PARTY_SITE_ID
          INTO LV_VENDOR_SITE_ID,LV_PARTY_SITE_ID
          FROM PO_VENDOR_SITES_ALL
          WHERE VENDOR_SITE_CODE=H.SUPPLIER_SITE
            AND VENDOR_ID=LV_VENDOR_ID
            AND ORG_ID=LV_ORG_ID;
 DBMS_OUTPUT.PUT_LINE('SUPPLIER SITE  IS VALID'||LV_VENDOR_SITE_ID||'party site id '||LV_PARTY_SITE_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='SUPPLIER SITE  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('SUPPLIER SITE  IS INVALID'||LV_VENDOR_SITE_ID||'party site id '||LV_PARTY_SITE_ID);
  END;

              ----------------*******PAYMENT CURRENCY CODE VALIDATION*********-------


  BEGIN
     SELECT IEPPM.PAYMENT_METHOD_CODE
     INTO LV_PAYMENT_METHOD_CODE
FROM AP_SUPPLIER_SITES_ALL ASSA,
   AP_SUPPLIERS SUP,
   IBY_EXTERNAL_PAYEES_ALL IEPA,
   IBY_EXT_PARTY_PMT_MTHDS IEPPM
WHERE SUP.VENDOR_ID                     = ASSA.VENDOR_ID
AND ASSA.VENDOR_SITE_ID                 = IEPA.SUPPLIER_SITE_ID
AND IEPA.EXT_PAYEE_ID                   = IEPPM.EXT_PMT_PARTY_ID
AND NVL(IEPPM.INACTIVE_DATE, SYSDATE+1) > SYSDATE
AND ASSA.VENDOR_SITE_ID                 = LV_VENDOR_SITE_ID
AND IEPPM.PRIMARY_FLAG                  = 'Y'
AND ASSA.PAY_SITE_FLAG                  = 'Y';
 DBMS_OUTPUT.PUT_LINE('PAYMENT METHOD IS VALID'||LV_PAYMENT_METHOD_CODE);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='PAYMENT METHOD  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('PAYMENT METHOD  IS INVALID');
  END;


 ------------------------------****TERMS VALIDATION******------------

 BEGIN
 SELECT TERM_ID
 INTO LV_TERM_ID
 FROM AP_TERMS
 WHERE NAME=H.TERMS;
 DBMS_OUTPUT.PUT_LINE('TERM ID IS VALID'||LV_TERM_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='TERM ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('TERM ID  IS INVALID');
  END;


  ------------------------*****VALIDATION OF SET OF BOOKS******----------------


   BEGIN
  SELECT SET_OF_BOOKS_ID
  INTO LV_SET_OF_BOOKS_ID
  FROM GL_SETS_OF_BOOKS
   WHERE SHORT_NAME=H.OPERATING_UNIT;
  DBMS_OUTPUT.PUT_LINE('SET_OF_BOOKS_ID IS VALID'||LV_SET_OF_BOOKS_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='SET_OF_BOOKS_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('SET_OF_BOOKS_ID  IS INVALID'||LV_SET_OF_BOOKS_ID);
  END;

  --------------**********VALIDATION OF CHARGE ACCOUNT*****-----------

 BEGIN
   SELECT CODE_COMBINATION_ID
    INTO  LV_CODE_COMBINATION_ID
                FROM   GL_CODE_COMBINATIONS_KFV GCC
                      ,GL_SETS_OF_BOOKS    GSB
                WHERE  CONCATENATED_SEGMENTS    =H.CHARGE_ACCOUNT
                AND    GCC.CHART_OF_ACCOUNTS_ID = GSB.CHART_OF_ACCOUNTS_ID
                AND    SET_OF_BOOKS_ID          =LV_SET_OF_BOOKS_ID;
   DBMS_OUTPUT.PUT_LINE('CODE_COMBINATION_ID IS VALID'||LV_CODE_COMBINATION_ID);

  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='CODE_COMBINATION_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('CODE_COMBINATION_ID  IS INVALID'||LV_CODE_COMBINATION_ID);
  END;



  ------------------*********VALIDATION OF SOURCE********------------

  BEGIN
  SELECT LOOKUP_CODE
            INTO  LV_SOURCE
           FROM AP_LOOKUP_CODES
          WHERE LOOKUP_TYPE='SOURCE'
            AND DISPLAYED_FIELD='Manual Invoice Entry';
    DBMS_OUTPUT.PUT_LINE('source IS VALID'||LV_SOURCE);
    EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='source  IS INVALID';
    DBMS_OUTPUT.PUT_LINE('source IS VALID'||LV_SOURCE);
  END;


   BEGIN
    SELECT  PO_HEADER_ID
    INTO LV_PO_HEADER_ID
    FROM
    PO_HEADERS_ALL WHERE SEGMENT1=H.PO_NUMBER;
        DBMS_OUTPUT.PUT_LINE('po number IS VALID'||LV_PO_HEADER_ID);
    EXCEPTION
    WHEN OTHERS THEN
    ERROR_FLAG:='E';
    ERROR_MSG:='po_number  IS INVALID';
    DBMS_OUTPUT.PUT_LINE('po number IS INVALID'||LV_PO_HEADER_ID);
   END;


  IF ERROR_FLAG!='E' THEN


     DBMS_OUTPUT.PUT_LINE('error flag : '||ERROR_FLAG);

     DBMS_OUTPUT.PUT_LINE('row ID for headers insert IS  : '||H.ROW_ID);


    SELECT AP_INVOICES_S.NEXTVAL
    INTO XX_AP_SEQ
    FROM DUAL;

  BEGIN

 AP_AI_TABLE_HANDLER_PKG.INSERT_ROW
  (P_ROWID                       =>H.ROW_ID
,P_INVOICE_ID                    =>XX_AP_SEQ
,P_LAST_UPDATE_DATE              =>SYSDATE
,P_LAST_UPDATED_BY               =>L_USER_ID
,P_VENDOR_ID                     =>LV_VENDOR_ID
,P_INVOICE_NUM                   =>H.INVOICE_NUM
,P_INVOICE_AMOUNT                =>H.INVOICE_AMOUNT
,P_VENDOR_SITE_ID                =>LV_VENDOR_SITE_ID
,P_AMOUNT_PAID                   =>0.00
,P_DISCOUNT_AMOUNT_TAKEN         =>0
,P_INVOICE_DATE                  =>SYSDATE
,P_SOURCE                        =>LV_SOURCE
,P_INVOICE_TYPE_LOOKUP_CODE      =>LV_INVOICE_TYPE
,P_DESCRIPTION                   =>NULL
,P_BATCH_ID                      =>NULL
,P_AMT_APPLICABLE_TO_DISCOUNT    =>H.INVOICE_AMOUNT
,P_TERMS_ID                      =>LV_TERM_ID
,P_TERMS_DATE                    =>SYSDATE
,P_GOODS_RECEIVED_DATE           =>NULL
,P_INVOICE_RECEIVED_DATE         =>NULL
,P_VOUCHER_NUM                   =>NULL
,P_APPROVED_AMOUNT               =>H.INVOICE_AMOUNT
,P_APPROVAL_STATUS               =>NULL
,P_APPROVAL_DESCRIPTION          =>NULL
,P_PAY_GROUP_LOOKUP_CODE         =>'Standard'
,P_SET_OF_BOOKS_ID               =>LV_SET_OF_BOOKS_ID
,P_ACCTS_PAY_CCID                =>NULL--LV_CODE_COMBINATION_ID
,P_RECURRING_PAYMENT_ID          =>NULL
,P_INVOICE_CURRENCY_CODE         =>H.INVOICE_CURRENCY_CODE
,P_PAYMENT_CURRENCY_CODE         =>H.INVOICE_CURRENCY_CODE
,P_EXCHANGE_RATE                 =>NULL
,P_PAYMENT_AMOUNT_TOTAL          =>NULL
,P_PAYMENT_STATUS_FLAG           =>'N'
,P_POSTING_STATUS                =>NULL
,P_AUTHORIZED_BY                 =>NULL
,P_ATTRIBUTE_CATEGORY            =>NULL
,P_ATTRIBUTE1                    =>NULL
,P_ATTRIBUTE2                    =>NULL
,P_ATTRIBUTE3                    =>NULL
,P_ATTRIBUTE4                    =>NULL
,P_ATTRIBUTE5                    =>NULL
,P_CREATION_DATE                 =>SYSDATE
,P_CREATED_BY                    =>L_USER_ID
,P_VENDOR_PREPAY_AMOUNT          =>NULL
,P_BASE_AMOUNT                   =>NULL
,P_EXCHANGE_RATE_TYPE            =>NULL
,P_EXCHANGE_DATE                 =>NULL
,P_PAYMENT_CROSS_RATE            =>1
,P_PAYMENT_CROSS_RATE_TYPE       =>NULL
,P_PAYMENT_CROSS_RATE_DATE       =>SYSDATE
,P_PAY_CURR_INVOICE_AMOUNT       =>H.INVOICE_AMOUNT
,P_LAST_UPDATE_LOGIN             =>NULL
,P_ORIGINAL_PREPAYMENT_AMOUNT    =>NULL
,P_EARLIEST_SETTLEMENT_DATE      =>NULL
,P_ATTRIBUTE11                   =>NULL
,P_ATTRIBUTE12                   =>NULL
,P_ATTRIBUTE13                   =>NULL
,P_ATTRIBUTE14                   =>NULL
,P_ATTRIBUTE6                    =>NULL
,P_ATTRIBUTE7                    =>NULL
,P_ATTRIBUTE8                    =>NULL
,P_ATTRIBUTE9                    =>NULL
,P_ATTRIBUTE10                   =>NULL
,P_ATTRIBUTE15                   =>NULL
,P_CANCELLED_DATE                =>NULL
,P_CANCELLED_BY                  =>NULL
,P_CANCELLED_AMOUNT              =>NULL
,P_TEMP_CANCELLED_AMOUNT         =>NULL
,P_EXCLUSIVE_PAYMENT_FLAG        =>NULL
,P_PO_HEADER_ID                  =>NULL
,P_DOC_SEQUENCE_ID               =>NULL
,P_DOC_SEQUENCE_VALUE            =>NULL
,P_DOC_CATEGORY_CODE             =>NULL
,P_EXPENDITURE_ITEM_DATE         =>NULL
,P_EXPENDITURE_ORGANIZATION_ID   =>NULL
,P_EXPENDITURE_TYPE              =>NULL
,P_PA_DEFAULT_DIST_CCID          =>NULL
,P_PA_QUANTITY                   =>NULL
,P_PROJECT_ID                    =>NULL
,P_TASK_ID                       =>NULL
,P_AWT_FLAG                      =>NULL
,P_AWT_GROUP_ID                  =>NULL
,P_PAY_AWT_GROUP_ID              =>NULL
,P_REFERENCE_1                   =>NULL
,P_REFERENCE_2                   =>NULL
,P_ORG_ID                        =>LV_ORG_ID
,P_CALLING_SEQUENCE              =>'1'
,P_GL_DATE                       =>SYSDATE
,P_AWARD_ID                      =>NULL
,P_APPROVAL_ITERATION            =>NULL
,P_APPROVAL_READY_FLAG           =>'Y'
,P_WFAPPROVAL_STATUS             =>'NOT REQUIRED'
,P_PAYMENT_METHOD_CODE           =>LV_PAYMENT_METHOD_CODE
,P_PARTY_ID                      =>LV_PARTY_ID
,P_PARTY_SITE_ID                 =>LV_PARTY_SITE_ID
,P_TAXATION_COUNTRY              =>NULL
,P_LEGAL_ENTITY_ID               =>LV_ORG_ID
,P_QUICK_PO_HEADER_ID            =>LV_PO_HEADER_ID);

  DBMS_OUTPUT.PUT_LINE('headers end ');
     COMMIT;
      EXCEPTION
   WHEN TOO_MANY_ROWS THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
   WHEN NO_DATA_FOUND THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
   WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
    COMMIT;
  END;

    ELSE
        UPDATE XX_AP_INVOICE_HEADERS SET ERROR_MSG=ERROR_MSG,ERR_FLAG=ERROR_FLAG
        WHERE INVOICE_ID=H.INVOICE_ID;

    END IF;
 -------------------------------------------LINES--------------------------------



           LV_LINE_NUMBER:=0;
           LV_DIS_LINE_NUMBER:=0;


  FOR L IN LINES(H.INVOICE_ID) LOOP


         DBMS_OUTPUT.PUT_LINE('FOR CHECKING PURPOSE');

      LV_LINE_NUMBER := LV_LINE_NUMBER + 1;
     
      DBMS_OUTPUT.PUT_LINE('AT HEADERS INVOICE ID : '||H.INVOICE_ID||' LINE NUMBER '||LV_LINE_NUMBER);

    ------------------*****LINES VALIDATION*****------------

        --------------*****ORGANIZATION NAME VALIDATION*****----------


      BEGIN
   SELECT ORGANIZATION_ID
           INTO LV_ORG_ID
          FROM ORG_ORGANIZATION_DEFINITIONS
         WHERE ORGANIZATION_NAME=H.OPERATING_UNIT;
  DBMS_OUTPUT.PUT_LINE('organization_name IS VALID'||LV_ORG_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='organization_name IS INVALID';
 DBMS_OUTPUT.PUT_LINE('organization_name IS INVALID'||LV_ORG_ID);
  END;


     -------------******VALIDATION OF ITEM******----------

     BEGIN
     SELECT INVENTORY_ITEM_ID
     INTO LV_INVENTORY_ITEM_ID
     FROM MTL_SYSTEM_ITEMS_B
     WHERE SEGMENT1=L.ITEM
     AND ORGANIZATION_ID=LV_ORG_ID;
     DBMS_OUTPUT.PUT_LINE('INVENTORY_ITEM_ID IS VALID'||LV_INVENTORY_ITEM_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='INVENTORY_ITEM_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('INVENTORY_ITEM_ID  IS INVALID'||LV_INVENTORY_ITEM_ID);
  END;



    BEGIN
    SELECT PO_LINE_ID
    INTO LV_PO_LINE_ID
    FROM PO_LINES_ALL
    WHERE  PO_HEADER_ID=(SELECT  PO_HEADER_ID
    FROM
    PO_HEADERS_ALL WHERE SEGMENT1=H.PO_NUMBER)
    AND LINE_NUM=L.LINE_NUMBER;
     DBMS_OUTPUT.PUT_LINE('PO NUMBER DOES IS VALID'||H.PO_NUMBER);
    EXCEPTION
     WHEN OTHERS THEN
     ERROR_FLAG:='E';
     ERROR_MSG:='PO NUMBER DOES NOT EXITST';
    DBMS_OUTPUT.PUT_LINE('PO NUMBER DOES NOT EXITST'||H.PO_NUMBER);
     END;

     
          BEGIN
    SELECT LINE_LOCATION_ID
    INTO LV_LINE_LOCATION_ID
     FROM PO_LINE_LOCATIONS_ALL WHERE PO_LINE_ID=
    (SELECT PO_LINE_ID FROM PO_LINES_ALL
    WHERE PO_HEADER_ID=
    (SELECT PO_HEADER_ID
   FROM PO_HEADERS_ALL
    WHERE SEGMENT1=H.PO_NUMBER) AND LINE_NUM=L.LINE_NUMBER);
    DBMS_OUTPUT.PUT_LINE('LINE LOCATIONS IS VALID'||LV_LINE_LOCATION_ID);
    EXCEPTION
     WHEN OTHERS THEN
     ERROR_FLAG:='E';
     ERROR_MSG:='PO NUMBER DOES NOT EXITST';
    DBMS_OUTPUT.PUT_LINE('LINE LOCATIONS IS NOT VALID'||LV_LINE_LOCATION_ID);
     END;



     

    IF(ERROR_FLAG!='E') THEN
  BEGIN

         DBMS_OUTPUT.PUT_LINE('row ID for lines insert IS  : '||L.ROW_ID);

    DBMS_OUTPUT.PUT_LINE('invoice id at lines :   : '||XX_AP_SEQ);

  AP_AIL_TABLE_HANDLER_PKG.INSERT_ROW(
 P_ROWID                             =>L.ROW_ID
,P_INVOICE_ID                        =>XX_AP_SEQ
,P_LINE_NUMBER                       =>L.LINE_NUMBER
,P_LINE_TYPE_LOOKUP_CODE             =>L.LINE_TYPE
,P_LINE_GROUP_NUMBER                 =>NULL
,P_REQUESTER_ID                      =>NULL
,P_DESCRIPTION                       =>NULL
,P_LINE_SOURCE                       =>'Manual Invoice Line Entry'
,P_ORG_ID                            =>LV_ORG_ID
,P_INVENTORY_ITEM_ID                 =>LV_INVENTORY_ITEM_ID
,P_ITEM_DESCRIPTION                  =>L.DESCRIPTION
,P_SERIAL_NUMBER                     =>NULL
,P_MANUFACTURER                      =>NULL
,P_MODEL_NUMBER                      =>NULL
,P_WARRANTY_NUMBER                   =>NULL
,P_GENERATE_DISTS                    =>'D'
,P_MATCH_TYPE                        =>NULL
,P_DISTRIBUTION_SET_ID               =>NULL
,P_ACCOUNT_SEGMENT                   =>NULL
,P_BALANCING_SEGMENT                 =>NULL
,P_COST_CENTER_SEGMENT               =>NULL
,P_OVERLAY_DIST_CODE_CONCAT          =>NULL
,P_DEFAULT_DIST_CCID                 =>NULL
,P_PRORATE_ACROSS_ALL_ITEMS          =>NULL
,P_ACCOUNTING_DATE                   =>SYSDATE
,P_PERIOD_NAME                       =>NULL
,P_DEFERRED_ACCTG_FLAG               =>'N'
,P_DEF_ACCTG_START_DATE              =>NULL
,P_DEF_ACCTG_END_DATE                =>NULL
,P_DEF_ACCTG_NUMBER_OF_PERIODS       =>NULL
,P_DEF_ACCTG_PERIOD_TYPE             =>NULL
,P_SET_OF_BOOKS_ID                   =>LV_SET_OF_BOOKS_ID
,P_AMOUNT                            =>L.LINE_AMOUNT
,P_BASE_AMOUNT                       =>NULL
,P_ROUNDING_AMT                      =>NULL
,P_QUANTITY_INVOICED                 =>L.QUANTITY_INVOICED
,P_UNIT_MEAS_LOOKUP_CODE             =>L.UNIT_MEASURE
,P_UNIT_PRICE                        =>L.UNIT_PRICE
,P_WFAPPROVAL_STATUS                 =>'NOT REQUIRED'
,P_DISCARDED_FLAG                    =>NULL
,P_ORIGINAL_AMOUNT                   =>NULL
,P_ORIGINAL_BASE_AMOUNT              =>NULL
,P_ORIGINAL_ROUNDING_AMT             =>NULL
,P_CANCELLED_FLAG                    =>NULL
,P_INCOME_TAX_REGION                 =>NULL
,P_TYPE_1099                         =>NULL
,P_STAT_AMOUNT                       =>NULL
,P_PREPAY_INVOICE_ID                 =>NULL
,P_PREPAY_LINE_NUMBER                =>NULL
,P_INVOICE_INCLUDES_PREPAY_FLAG      =>NULL
,P_CORRECTED_INV_ID                  =>NULL
,P_CORRECTED_LINE_NUMBER             =>NULL
,P_PO_HEADER_ID                      =>LV_PO_HEADER_ID
,P_PO_RELEASE_ID                     =>NULL
,P_PO_LINE_LOCATION_ID               =>LV_LINE_LOCATION_ID
,P_PO_DISTRIBUTION_ID                =>NULL
 ,P_PO_LINE_ID                       =>LV_PO_LINE_ID
,P_RCV_TRANSACTION_ID                =>NULL
,P_FINAL_MATCH_FLAG                  =>NULL
,P_ASSETS_TRACKING_FLAG              =>'Y'
,P_ASSET_BOOK_TYPE_CODE              =>NULL
,P_ASSET_CATEGORY_ID                 =>NULL
,P_PROJECT_ID                        =>NULL
,P_TASK_ID                           =>NULL
,P_EXPENDITURE_TYPE                  =>NULL
,P_EXPENDITURE_ITEM_DATE             =>NULL
,P_EXPENDITURE_ORGANIZATION_ID       =>NULL
,P_PA_QUANTITY                       =>1
,P_PA_CC_AR_INVOICE_ID               =>NULL
,P_PA_CC_AR_INVOICE_LINE_NUM         =>NULL
,P_PA_CC_PROCESSED_CODE              =>NULL
,P_AWARD_ID                          =>NULL
,P_AWT_GROUP_ID                      =>NULL
,P_PAY_AWT_GROUP_ID                  =>NULL
,P_REFERENCE_1                       =>NULL
,P_REFERENCE_2                       =>NULL
,P_RECEIPT_VERIFIED_FLAG             =>NULL
,P_RECEIPT_REQUIRED_FLAG             =>NULL
,P_RECEIPT_MISSING_FLAG              =>NULL
,P_JUSTIFICATION                     =>NULL
,P_EXPENSE_GROUP                     =>NULL
,P_START_EXPENSE_DATE                =>NULL
,P_END_EXPENSE_DATE                  =>NULL
,P_RECEIPT_CURRENCY_CODE             =>NULL
,P_RECEIPT_CONVERSION_RATE           =>NULL
,P_RECEIPT_CURRENCY_AMOUNT           =>NULL
,P_DAILY_AMOUNT                      =>NULL
,P_WEB_PARAMETER_ID                  =>NULL
,P_ADJUSTMENT_REASON                 =>NULL
,P_MERCHANT_DOCUMENT_NUMBER          =>NULL
,P_MERCHANT_NAME                     =>NULL
,P_MERCHANT_REFERENCE                =>NULL
,P_MERCHANT_TAX_REG_NUMBER           =>NULL
,P_MERCHANT_TAXPAYER_ID              =>NULL
,P_COUNTRY_OF_SUPPLY                 =>NULL
,P_CREDIT_CARD_TRX_ID                =>NULL
,P_COMPANY_PREPAID_INVOICE_ID        =>NULL
,P_CC_REVERSAL_FLAG                  =>NULL
,P_CREATION_DATE                     =>SYSDATE
,P_CREATED_BY                        =>NULL
,P_LAST_UPDATED_BY                   =>L_USER_ID
,P_LAST_UPDATE_DATE                  =>SYSDATE
,P_LAST_UPDATE_LOGIN                 =>NULL
,P_PROGRAM_APPLICATION_ID            =>NULL
,P_PROGRAM_ID                        =>NULL
,P_PROGRAM_UPDATE_DATE               =>NULL
,P_REQUEST_ID                        =>NULL
,P_ATTRIBUTE_CATEGORY                =>NULL
,P_ATTRIBUTE1                        =>NULL
,P_ATTRIBUTE2                        =>NULL
,P_ATTRIBUTE3                        =>NULL
,P_ATTRIBUTE4                        =>NULL
,P_ATTRIBUTE5                        =>NULL
,P_CALLING_SEQUENCE                  =>'1'
,P_PRODUCT_TYPE                      =>L.PRODUCT_TYPE
,P_SHIP_TO_LOCATION_ID               =>NULL);


     DBMS_OUTPUT.PUT_LINE('AMOUNT :  '||L.LINE_AMOUNT);
     DBMS_OUTPUT.PUT_LINE('INVOICE ID  :  '||XX_AP_SEQ);
     DBMS_OUTPUT.PUT_LINE('H.LINE_NUMBER  :  '||L.LINE_NUMBER);


   DBMS_OUTPUT.PUT_LINE('lines end ');
    EXCEPTION
   WHEN TOO_MANY_ROWS THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
   WHEN NO_DATA_FOUND THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
   WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
 
   END;
   ELSE
      UPDATE XX_AP_INVOICE_LINES SET ERROR_MSG=ERROR_MSG,ERR_FLAG=ERROR_FLAG
      WHERE INVOICE_ID=H.INVOICE_ID AND LINE_NUMBER=L.LINE_NUMBER;
       COMMIT;

   END IF;

---------------------------------------DISTRIBUTIONS----------------------------

   DBMS_OUTPUT.PUT_LINE('distributions  start ');



  FOR D IN DISTRIBUTIONS(L.INVOICE_ID,L.LINE_NUMBER)
  LOOP
   

    LV_DIS_LINE_NUMBER:=LV_DIS_LINE_NUMBER+1;
   
   
    DBMS_OUTPUT.PUT_LINE('AT LINES INVOICE ID : '||L.INVOICE_ID||' LINE NUMBER '||L.LINE_NUMBER||'  DISTRIBUTION NUMBER : '||LV_DIS_LINE_NUMBER);


         BEGIN
   SELECT CODE_COMBINATION_ID
    INTO  LV_CODE_COMBINATION_ID
                FROM   GL_CODE_COMBINATIONS_KFV GCC
                      ,GL_SETS_OF_BOOKS    GSB
                WHERE  CONCATENATED_SEGMENTS    =D.ACCOUNT
                AND    GCC.CHART_OF_ACCOUNTS_ID = GSB.CHART_OF_ACCOUNTS_ID
                AND    SET_OF_BOOKS_ID          =LV_SET_OF_BOOKS_ID;
   DBMS_OUTPUT.PUT_LINE('CODE_COMBINATION_ID IS VALID'||LV_CODE_COMBINATION_ID);

  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='CODE_COMBINATION_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('CODE_COMBINATION_ID  IS INVALID'||LV_CODE_COMBINATION_ID);
  END;

     ------------------*********VALIDATION OF GL PERIODS *********------------------

  BEGIN
  SELECT PERIOD_NAME
  INTO LV_PERIOD_NAME
   FROM GL_PERIODS
   WHERE PERIOD_NAME=D.PERIOD_NAME;
  DBMS_OUTPUT.PUT_LINE('PERIOD_NAME IS VALID'||LV_PERIOD_NAME);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='PERIOD_NAME  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('PERIOD_NAME  IS INVALID'||LV_PERIOD_NAME);
  END;


   
          BEGIN
             SELECT PO_DISTRIBUTION_ID
             INTO LV_PO_DISTRIBUTION_ID
              FROM PO_DISTRIBUTIONS_ALL
           WHERE PO_LINE_ID=(SELECT PO_LINE_ID FROM
           PO_LINES_ALL WHERE PO_HEADER_ID=(SELECT PO_HEADER_ID
           FROM PO_HEADERS_ALL WHERE SEGMENT1=H.PO_NUMBER) AND LINE_NUM=L.LINE_NUMBER)
            AND DISTRIBUTION_NUM=D.DIS_LINE_NUM;
          DBMS_OUTPUT.PUT_LINE('PO DISTRIBUTION ID IS VALID '||LV_PO_DISTRIBUTION_ID);
              DBMS_OUTPUT.PUT_LINE('PO LINE ID IS  VALID  '||LV_PO_LINE_ID);

        EXCEPTION
        WHEN OTHERS THEN
     ERROR_FLAG:='E';
     ERROR_MSG:='PO NUMBER DOES NOT EXITST';
    DBMS_OUTPUT.PUT_LINE('PO DISTRIBUTION ID IS NOT VALID  '||LV_PO_DISTRIBUTION_ID);
    DBMS_OUTPUT.PUT_LINE('PO LINE ID IS NOT VALID  '||LV_PO_LINE_ID);

     END;



         DBMS_OUTPUT.PUT_LINE('row ID for distributions insert IS  : '||D.ROW_ID);

IF(ERROR_FLAG!='E') THEN
   BEGIN

    SELECT AP_INVOICE_DISTRIBUTIONS_S.NEXTVAL
   INTO LV_AP_INVOICE_DIS_ID
   FROM DUAL;


   DBMS_OUTPUT.PUT_LINE('invoice id distributions :   : '||XX_AP_SEQ);

AP_AID_TABLE_HANDLER_PKG.INSERT_ROW
( P_ROWID                             =>D.ROW_ID
,P_INVOICE_ID                         =>XX_AP_SEQ
,P_INVOICE_LINE_NUMBER                =>D.LINE_NUMBER
,P_DISTRIBUTION_CLASS                 =>'PERMANENT'
,P_INVOICE_DISTRIBUTION_ID            =>LV_AP_INVOICE_DIS_ID
,P_DIST_CODE_COMBINATION_ID           =>LV_CODE_COMBINATION_ID
,P_LAST_UPDATE_DATE                   =>SYSDATE
,P_LAST_UPDATED_BY                    =>L_USER_ID
,P_ACCOUNTING_DATE                    =>SYSDATE
,P_PERIOD_NAME                        =>LV_PERIOD_NAME
,P_SET_OF_BOOKS_ID                    =>LV_SET_OF_BOOKS_ID
,P_AMOUNT                             =>D.AMOUNT
,P_DESCRIPTION                        =>NULL
,P_TYPE_1099                          =>NULL
,P_POSTED_FLAG                        =>'N'
,P_BATCH_ID                           =>NULL
,P_QUANTITY_INVOICED                  =>NULL
,P_UNIT_PRICE                         =>NULL
,P_MATCH_STATUS_FLAG                  =>NULL
,P_ATTRIBUTE_CATEGORY                 =>NULL
,P_ATTRIBUTE1                         =>NULL
,P_ATTRIBUTE2                         =>NULL
,P_ATTRIBUTE3                         =>NULL
,P_ATTRIBUTE4                         =>NULL
,P_ATTRIBUTE5                         =>NULL
,P_PREPAY_AMOUNT_REMAINING            =>NULL
,P_ASSETS_ADDITION_FLAG               =>'N'
,P_ASSETS_TRACKING_FLAG               =>'Y'
,P_DISTRIBUTION_LINE_NUMBER           =>D.DIS_LINE_NUM
,P_LINE_TYPE_LOOKUP_CODE              =>D.DIS_TYPE
,P_PO_DISTRIBUTION_ID                 =>LV_PO_DISTRIBUTION_ID
,P_BASE_AMOUNT                        =>NULL
,P_PA_ADDITION_FLAG                   =>NULL
,P_POSTED_AMOUNT                      =>NULL
,P_POSTED_BASE_AMOUNT                 =>NULL
,P_ENCUMBERED_FLAG                    =>NULL
,P_ACCRUAL_POSTED_FLAG                =>NULL
,P_CASH_POSTED_FLAG                   =>NULL
,P_LAST_UPDATE_LOGIN                  =>NULL
,P_CREATION_DATE                      =>NULL
,P_CREATED_BY                         =>NULL
,P_STAT_AMOUNT                        =>NULL
,P_ATTRIBUTE11                        =>NULL
,P_ATTRIBUTE12                        =>NULL
,P_ATTRIBUTE13                        =>NULL
,P_ATTRIBUTE14                        =>NULL
,P_ATTRIBUTE6                         =>NULL
,P_ATTRIBUTE7                         =>NULL
,P_ATTRIBUTE8                         =>NULL
,P_ATTRIBUTE9                         =>NULL
,P_ATTRIBUTE10                        =>NULL
,P_ATTRIBUTE15                        =>NULL
,P_ACCTS_PAY_CODE_COMB_ID             =>NULL
,P_REVERSAL_FLAG                      =>NULL
,P_PARENT_INVOICE_ID                  =>NULL
,P_INCOME_TAX_REGION                  =>NULL
,P_FINAL_MATCH_FLAG                   =>NULL
,P_EXPENDITURE_ITEM_DATE              =>NULL
,P_EXPENDITURE_ORGANIZATION_ID        =>NULL
,P_EXPENDITURE_TYPE                   =>NULL
,P_PA_QUANTITY                        =>NULL
,P_PROJECT_ID                         =>NULL
,P_TASK_ID                            =>NULL
,P_QUANTITY_VARIANCE                  =>NULL
,P_BASE_QUANTITY_VARIANCE             =>NULL
,P_PACKET_ID                          =>NULL
,P_AWT_FLAG                           =>NULL
,P_AWT_GROUP_ID                       =>NULL
,P_PAY_AWT_GROUP_ID                   =>NULL
,P_AWT_TAX_RATE_ID                    =>NULL
,P_AWT_GROSS_AMOUNT                   =>NULL
,P_REFERENCE_1                        =>NULL
,P_REFERENCE_2                        =>NULL
,P_ORG_ID                             =>LV_ORG_ID
,P_OTHER_INVOICE_ID                   =>NULL
,P_AWT_INVOICE_ID                     =>NULL
,P_AWT_ORIGIN_GROUP_ID                =>NULL
,P_PROGRAM_APPLICATION_ID             =>NULL
,P_PROGRAM_ID                         =>NULL
,P_PROGRAM_UPDATE_DATE                =>NULL
,P_REQUEST_ID                         =>NULL
,P_TAX_RECOVERABLE_FLAG               =>NULL
,P_AWARD_ID                           =>NULL
,P_START_EXPENSE_DATE                 =>NULL
,P_MERCHANT_DOCUMENT_NUMBER           =>NULL
,P_MERCHANT_NAME                      =>NULL
,P_MERCHANT_TAX_REG_NUMBER            =>NULL
,P_MERCHANT_TAXPAYER_ID               =>NULL
,P_COUNTRY_OF_SUPPLY                  =>NULL
,P_MERCHANT_REFERENCE                 =>NULL
,P_PARENT_REVERSAL_ID                 =>NULL
,P_RCV_TRANSACTION_ID                 =>NULL
,P_MATCHED_UOM_LOOKUP_CODE            =>NULL
,P_CALLING_SEQUENCE                   =>'1'
,P_RCV_CHARGE_ADDITION_FLAG            =>NULL
);

     DBMS_OUTPUT.PUT_LINE('distributions  end ');

             DBMS_OUTPUT.PUT_LINE('values successfully inserted ');

      EXCEPTION
   WHEN TOO_MANY_ROWS THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
   WHEN NO_DATA_FOUND THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
   WHEN OTHERS THEN
   DBMS_OUTPUT.PUT_LINE(SQLERRM);
   DBMS_OUTPUT.PUT_LINE(SQLCODE);
   
     END;


       ELSE
 
       UPDATE XX_AP_INVOICE_DISTRIBUTIONS SET  ERR_FLAG=ERROR_FLAG,ERR_MSG=ERROR_MSG
       WHERE INVOICE_ID=H.INVOICE_ID
       AND LINE_NUMBER=L.LINE_NUMBER;
        COMMIT;
        END IF;

     END LOOP; --<END DISTRIBUTIONS>--
      END LOOP; --<END LINES>--
 END LOOP;      --<END HEADERS>--

--        UPDATE XX_AP_INVOICE_HEADERS SET PROCESS_FLAG='Y';
--        UPDATE XX_AP_INVOICE_LINES SET PROCESS_FLAG='Y';
--        UPDATE XX_AP_INVOICE_DISTRIBUTIONS SET PROCESS_FLAG='Y';

        COMMIT;
END XX_AP_INVOICE_INSERT;  --<END INSERT PROCEDURE>--

---------------------------------------UPDATE PROCEDURE-----------------



PROCEDURE XX_AP_INVOICE_UPDATE
IS

ERROR_FLAG                               VARCHAR2(1);
ERROR_MSG                                VARCHAR2(2000);
LV_ORG_ID                                HR_OPERATING_UNITS.ORGANIZATION_ID%TYPE;
LV_LINE_TYPE                             AP_INVOICE_LINES_ALL.LINE_TYPE_LOOKUP_CODE%TYPE;
XX_AP_SEQ                                AP_INVOICES_ALL.INVOICE_ID%TYPE;
LV_VENDOR_ID                             AP_INVOICES_ALL.VENDOR_ID%TYPE;
LV_VENDOR_SITE_ID                        AP_INVOICES_ALL.VENDOR_SITE_ID%TYPE;
LV_PAYMENT_METHOD_CODE                   AP_INVOICES_ALL.PAYMENT_METHOD_CODE%TYPE;
LV_TERM_ID                               AP_INVOICES_ALL.TERMS_ID%TYPE;
LV_INVENTORY_ITEM_ID                     AP_INVOICE_LINES_ALL.INVENTORY_ITEM_ID%TYPE;
LV_UOM_CODE                              AP_INVOICE_LINES_ALL.UNIT_MEAS_LOOKUP_CODE%TYPE;
LV_AP_INVOICE_DIS_ID                     AP_INVOICE_DISTRIBUTIONS_ALL.INVOICE_DISTRIBUTION_ID%TYPE;
LV_CODE_COMBINATION_ID                   GL_CODE_COMBINATIONS_KFV.CODE_COMBINATION_ID%TYPE;
LV_PERIOD_NAME                           GL_PERIODS.PERIOD_NAME%TYPE;
LV_SET_OF_BOOKS_ID                       GL_SETS_OF_BOOKS.SET_OF_BOOKS_ID%TYPE;
LV_SOURCE                                AP_LOOKUP_CODES.LOOKUP_CODE%TYPE;
LV_INVOICE_TYPE                          AP_LOOKUP_CODES.LOOKUP_CODE%TYPE;
L_USER_ID                                FND_USER.USER_ID%TYPE;
L_RESP_ID                                FND_RESPONSIBILITY_TL.RESPONSIBILITY_ID%TYPE;
L_RESP_APPL_ID                           FND_RESPONSIBILITY_TL.APPLICATION_ID%TYPE;
LV_PARTY_ID                              PO_VENDORS.PARTY_ID%TYPE;
LV_PARTY_SITE_ID                         PO_VENDOR_SITES_ALL.PARTY_SITE_ID%TYPE;
LV_LINE_NUMBER                           AP_INVOICE_LINES_ALL.LINE_NUMBER%TYPE;
LV_DIS_NUMBER                            AP_INVOICE_DISTRIBUTIONS_ALL.DISTRIBUTION_LINE_NUMBER%TYPE;
LV_ROW_ID                                VARCHAR2(100);
LV_INVOICE_ID                            AP_INVOICES_ALL.INVOICE_ID%TYPE;
LV_DIST_CODE_COMBINATION_ID              GL_CODE_COMBINATIONS_KFV.CODE_COMBINATION_ID%TYPE;
LV_PO_LINE_ID                            PO_LINES_ALL.PO_LINE_ID%TYPE;
LV_LINE_LOCATION_ID                      PO_LINE_LOCATIONS_ALL.LINE_LOCATION_ID%TYPE;
LV_PO_DISTRIBUTION_ID                    PO_DISTRIBUTIONS_ALL.PO_DISTRIBUTION_ID%TYPE;
LV_PO_HEADER_ID                          PO_HEADERS_ALL.PO_HEADER_ID%TYPE;

CURSOR HEADERS IS
 SELECT ROWID ROW_ID,XXAPIH.* FROM XX_AP_INVOICE_HEADERS  XXAPIH
  WHERE PROCESS_FLAG='Y';


CURSOR LINES(L_INVOICE_ID NUMBER) IS
 SELECT ROWID ROW_ID,XXAPIL.* FROM XX_AP_INVOICE_LINES  XXAPIL
    WHERE PROCESS_FLAG='Y' AND INVOICE_ID=L_INVOICE_ID;


   CURSOR DISTRIBUTIONS(D_INVOICE_ID NUMBER,D_LINE_NUMBER NUMBER) IS
 SELECT ROWID ROW_ID,XXAPID.* FROM XX_AP_INVOICE_DISTRIBUTIONS  XXAPID
    WHERE PROCESS_FLAG='Y' AND INVOICE_ID=D_INVOICE_ID AND LINE_NUMBER=D_LINE_NUMBER;



BEGIN


   BEGIN
   MO_GLOBAL.SET_POLICY_CONTEXT ('S', 204);
   END;


       SELECT FND.USER_ID ,
                       FRESP.RESPONSIBILITY_ID,
                       FRESP.APPLICATION_ID
                       INTO L_USER_ID,L_RESP_ID,L_RESP_APPL_ID
           FROM    FND_USER FND,
                   FND_RESPONSIBILITY_TL FRESP
           WHERE  FND.USER_NAME = 'VENKAT'
             AND    FRESP.RESPONSIBILITY_NAME = 'Payables, Vision Operations (USA)';

  FND_GLOBAL.APPS_INITIALIZE(USER_ID=>L_USER_ID,
                           RESP_ID=>L_RESP_ID,
                           RESP_APPL_ID=>L_RESP_APPL_ID);

            DBMS_OUTPUT.PUT_LINE('USER ID: '||L_USER_ID);
            DBMS_OUTPUT.PUT_LINE('RESPONSIBILITY ID : '||L_RESP_ID);
            DBMS_OUTPUT.PUT_LINE('APPLICATION ID : '||L_RESP_APPL_ID);



 ERROR_MSG:=NULL;



 SELECT AP_INVOICE_DISTRIBUTIONS_S.NEXTVAL
  INTO LV_AP_INVOICE_DIS_ID
  FROM DUAL;


    FOR H IN HEADERS
 LOOP

  ERROR_FLAG:='A';

 BEGIN

    SELECT AP_INVOICES_S.NEXTVAL INTO XX_AP_SEQ FROM DUAL;

        --------------*****ORGANIZATION NAME VALIDATION*****----------

   SELECT ORGANIZATION_ID
          INTO LV_ORG_ID
          FROM ORG_ORGANIZATION_DEFINITIONS
         WHERE ORGANIZATION_NAME=H.OPERATING_UNIT;

  DBMS_OUTPUT.PUT_LINE('organization_name IS VALID'||LV_ORG_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='organization_name IS INVALID';
 DBMS_OUTPUT.PUT_LINE('organization_name IS INVALID'||LV_ORG_ID);
  END;


  --------------*****INVOICE TYPE VALIDATION******---------

  BEGIN
  SELECT LOOKUP_CODE
    INTO LV_INVOICE_TYPE
              FROM  AP_LOOKUP_CODES
             WHERE LOOKUP_TYPE='INVOICE TYPE'
             AND LOOKUP_CODE=H.INVOICE_TYPE;
  DBMS_OUTPUT.PUT_LINE('INVOICE_TYPE IS VALID'||LV_INVOICE_TYPE);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='INVOICE_TYPE  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('INVOICE_TYPE  IS INVALID'||LV_INVOICE_TYPE);
  END;

  --------------******SUPPLIER VALIDATION******--------------

  BEGIN

     SELECT VENDOR_ID,PARTY_ID
          INTO LV_VENDOR_ID,LV_PARTY_ID
           FROM PO_VENDORS
          WHERE VENDOR_NAME=H.SUPPLIER;

  DBMS_OUTPUT.PUT_LINE('VENDOR_ID IS VALID'||LV_VENDOR_ID||'  '||LV_PARTY_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='VENDOR_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('VENDOR_ID  IS INVALID'||LV_VENDOR_ID||'  '||LV_PARTY_ID);
  END;



  BEGIN

    SELECT VENDOR_SITE_ID,PARTY_SITE_ID
          INTO LV_VENDOR_SITE_ID,LV_PARTY_SITE_ID
          FROM PO_VENDOR_SITES_ALL
          WHERE VENDOR_SITE_CODE=H.SUPPLIER_SITE
            AND VENDOR_ID=LV_VENDOR_ID
            AND ORG_ID=LV_ORG_ID;
 DBMS_OUTPUT.PUT_LINE('SUPPLIER SITE  IS VALID'||LV_VENDOR_SITE_ID||'party site id '||LV_PARTY_SITE_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='SUPPLIER SITE  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('SUPPLIER SITE  IS INVALID'||LV_VENDOR_SITE_ID||'party site id '||LV_PARTY_SITE_ID);
  END;

              ----------------*******PAYMENT CURRENCY CODE VALIDATION*********-------


  BEGIN
     SELECT IEPPM.PAYMENT_METHOD_CODE
     INTO LV_PAYMENT_METHOD_CODE
FROM AP_SUPPLIER_SITES_ALL ASSA,
   AP_SUPPLIERS SUP,
   IBY_EXTERNAL_PAYEES_ALL IEPA,
   IBY_EXT_PARTY_PMT_MTHDS IEPPM
WHERE SUP.VENDOR_ID                     = ASSA.VENDOR_ID
AND ASSA.VENDOR_SITE_ID                 = IEPA.SUPPLIER_SITE_ID
AND IEPA.EXT_PAYEE_ID                   = IEPPM.EXT_PMT_PARTY_ID
AND NVL(IEPPM.INACTIVE_DATE, SYSDATE+1) > SYSDATE
AND ASSA.VENDOR_SITE_ID                 = LV_VENDOR_SITE_ID
AND IEPPM.PRIMARY_FLAG                  = 'Y'
AND ASSA.PAY_SITE_FLAG                  = 'Y';
 DBMS_OUTPUT.PUT_LINE('PAYMENT METHOD IS VALID'||LV_PAYMENT_METHOD_CODE);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='PAYMENT METHOD  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('PAYMENT METHOD  IS INVALID');
  END;


 ------------------------------****TERMS VALIDATION******------------

 BEGIN
 SELECT TERM_ID
 INTO LV_TERM_ID
 FROM AP_TERMS
 WHERE NAME=H.TERMS;
 DBMS_OUTPUT.PUT_LINE('TERM ID IS VALID'||LV_TERM_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='TERM ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('TERM ID  IS INVALID');
  END;


 ------------------------------------LINES ------------------------


  ------------------------*****VALIDATION OF SET OF BOOKS******----------------


   BEGIN
  SELECT SET_OF_BOOKS_ID
  INTO LV_SET_OF_BOOKS_ID
  FROM GL_SETS_OF_BOOKS
   WHERE SHORT_NAME=H.OPERATING_UNIT;
  DBMS_OUTPUT.PUT_LINE('SET_OF_BOOKS_ID IS VALID'||LV_SET_OF_BOOKS_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='SET_OF_BOOKS_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('SET_OF_BOOKS_ID  IS INVALID'||LV_SET_OF_BOOKS_ID);
  END;

  --------------**********VALIDATION OF CHARGE ACCOUNT*****-----------

 BEGIN
   SELECT CODE_COMBINATION_ID
    INTO  LV_CODE_COMBINATION_ID
                FROM   GL_CODE_COMBINATIONS_KFV GCC
                      ,GL_SETS_OF_BOOKS    GSB
                WHERE  CONCATENATED_SEGMENTS    =H.CHARGE_ACCOUNT
                AND    GCC.CHART_OF_ACCOUNTS_ID = GSB.CHART_OF_ACCOUNTS_ID
                AND    SET_OF_BOOKS_ID          =LV_SET_OF_BOOKS_ID;
   DBMS_OUTPUT.PUT_LINE('CODE_COMBINATION_ID IS VALID'||LV_CODE_COMBINATION_ID);

  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='CODE_COMBINATION_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('CODE_COMBINATION_ID  IS INVALID'||LV_CODE_COMBINATION_ID);
  END;



  ------------------*********VALIDATION OF SOURCE********------------

  BEGIN
  SELECT LOOKUP_CODE
            INTO  LV_SOURCE
           FROM AP_LOOKUP_CODES
          WHERE LOOKUP_TYPE='SOURCE'
            AND DISPLAYED_FIELD='Manual Invoice Entry';
    DBMS_OUTPUT.PUT_LINE('source IS VALID'||LV_SOURCE);
    EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='source  IS INVALID';
    DBMS_OUTPUT.PUT_LINE('source IS VALID'||LV_SOURCE);
  END;


      BEGIN
    SELECT  PO_HEADER_ID
    INTO LV_PO_HEADER_ID
    FROM
    PO_HEADERS_ALL WHERE SEGMENT1=H.PO_NUMBER;
        DBMS_OUTPUT.PUT_LINE('po number IS VALID'||LV_PO_HEADER_ID);
    EXCEPTION
    WHEN OTHERS THEN
    ERROR_FLAG:='E';
    ERROR_MSG:='po_number  IS INVALID';
    DBMS_OUTPUT.PUT_LINE('po number IS INVALID'||LV_PO_HEADER_ID);
   END;



     SELECT ROWID ROW_ID,INVOICE_ID
     INTO LV_ROW_ID,LV_INVOICE_ID
     FROM AP_INVOICES_ALL WHERE INVOICE_NUM=H.INVOICE_NUM;


  ---------------------HEADERS UPDATE ------------

  IF ERROR_FLAG!='E' THEN
 
  ----------HEADERS UPDATE--------------


    DBMS_OUTPUT.PUT_LINE('UPDATE HEADERS ..');


     DBMS_OUTPUT.PUT_LINE('invoice id AT HEADERS : '||LV_INVOICE_ID);

    BEGIN
  AP_AI_TABLE_HANDLER_PKG.UPDATE_ROW(
           P_ROWID                                  =>LV_ROW_ID
          ,P_INVOICE_ID                             =>LV_INVOICE_ID
          ,P_LAST_UPDATE_DATE                       =>SYSDATE
          ,P_LAST_UPDATED_BY                        =>L_USER_ID
          ,P_VENDOR_ID                              =>LV_VENDOR_ID
          ,P_INVOICE_NUM                            =>H.INVOICE_NUM
          ,P_INVOICE_AMOUNT                         =>H.INVOICE_AMOUNT
          ,P_VENDOR_SITE_ID                         =>LV_VENDOR_SITE_ID
          ,P_AMOUNT_PAID                            =>NULL
          ,P_DISCOUNT_AMOUNT_TAKEN                  =>NULL
          ,P_INVOICE_DATE                           =>SYSDATE
          ,P_SOURCE                                 =>H.SOURCE
          ,P_INVOICE_TYPE_LOOKUP_CODE               =>H.INVOICE_TYPE
          ,P_DESCRIPTION                            =>NULL
          ,P_BATCH_ID                               =>NULL
          ,P_AMT_APPLICABLE_TO_DISCOUNT             =>NULL
          ,P_TERMS_ID                               =>LV_TERM_ID
          ,P_TERMS_DATE                             =>SYSDATE
          ,P_GOODS_RECEIVED_DATE                    =>SYSDATE
          ,P_INVOICE_RECEIVED_DATE                  =>SYSDATE
          ,P_VOUCHER_NUM                            =>NULL
          ,P_APPROVED_AMOUNT                        =>NULL
          ,P_APPROVAL_STATUS                        =>NULL
          ,P_APPROVAL_DESCRIPTION                   =>NULL
          ,P_PAY_GROUP_LOOKUP_CODE                  =>NULL
          ,P_SET_OF_BOOKS_ID                        =>LV_SET_OF_BOOKS_ID
          ,P_ACCTS_PAY_CCID                         =>LV_CODE_COMBINATION_ID
          ,P_RECURRING_PAYMENT_ID                   =>NULL
          ,P_INVOICE_CURRENCY_CODE                  =>H.INVOICE_CURRENCY_CODE
          ,P_PAYMENT_CURRENCY_CODE                  =>H.INVOICE_CURRENCY_CODE
          ,P_EXCHANGE_RATE                          =>NULL
          ,P_PAYMENT_AMOUNT_TOTAL                   =>NULL
          ,P_PAYMENT_STATUS_FLAG                    =>'N'
          ,P_POSTING_STATUS                         =>NULL
          ,P_AUTHORIZED_BY                          =>NULL
          ,P_ATTRIBUTE_CATEGORY                     =>NULL
          ,P_ATTRIBUTE1                             =>NULL
          ,P_ATTRIBUTE2                             =>NULL
          ,P_ATTRIBUTE3                             =>NULL
          ,P_ATTRIBUTE4                             =>NULL
          ,P_ATTRIBUTE5                             =>NULL
          ,P_VENDOR_PREPAY_AMOUNT                   =>NULL
          ,P_BASE_AMOUNT                            =>NULL
          ,P_EXCHANGE_RATE_TYPE                     =>NULL
          ,P_EXCHANGE_DATE                          =>NULL
          ,P_PAYMENT_CROSS_RATE                     =>1
          ,P_PAYMENT_CROSS_RATE_TYPE                =>NULL
          ,P_PAYMENT_CROSS_RATE_DATE                =>NULL
          ,P_PAY_CURR_INVOICE_AMOUNT                =>NULL
          ,P_LAST_UPDATE_LOGIN                      =>NULL
          ,P_ORIGINAL_PREPAYMENT_AMOUNT             =>NULL
          ,P_EARLIEST_SETTLEMENT_DATE               =>NULL
          ,P_ATTRIBUTE11                            =>NULL
          ,P_ATTRIBUTE12                            =>NULL
          ,P_ATTRIBUTE13                            =>NULL
          ,P_ATTRIBUTE14                            =>NULL
          ,P_ATTRIBUTE6                             =>NULL
          ,P_ATTRIBUTE7                             =>NULL
          ,P_ATTRIBUTE8                             =>NULL
          ,P_ATTRIBUTE9                             =>NULL
          ,P_ATTRIBUTE10                            =>NULL
          ,P_ATTRIBUTE15                            =>NULL
          ,P_CANCELLED_DATE                         =>NULL
          ,P_CANCELLED_BY                           =>NULL
          ,P_CANCELLED_AMOUNT                       =>NULL
          ,P_TEMP_CANCELLED_AMOUNT                  =>NULL
          ,P_EXCLUSIVE_PAYMENT_FLAG                 =>NULL
          ,P_PO_HEADER_ID                           =>NULL
          ,P_DOC_SEQUENCE_ID                        =>NULL
          ,P_DOC_SEQUENCE_VALUE                     =>NULL
          ,P_DOC_CATEGORY_CODE                      =>NULL
          ,P_EXPENDITURE_ITEM_DATE                  =>NULL
          ,P_EXPENDITURE_ORGANIZATION_ID            =>NULL
          ,P_EXPENDITURE_TYPE                       =>NULL
          ,P_PA_DEFAULT_DIST_CCID                   =>NULL
          ,P_PA_QUANTITY                            =>NULL
          ,P_PROJECT_ID                             =>NULL
          ,P_TASK_ID                                =>NULL
          ,P_AWT_FLAG                               =>NULL
          ,P_AWT_GROUP_ID                           =>NULL
          ,P_PAY_AWT_GROUP_ID                       =>NULL
          ,P_REFERENCE_1                            =>NULL
          ,P_REFERENCE_2                            =>NULL
          ,P_ORG_ID                                 =>LV_ORG_ID
          ,P_CALLING_SEQUENCE                       =>'1'
          ,P_GL_DATE                                =>SYSDATE
          ,P_AWARD_ID                               =>NULL
          ,P_APPROVAL_ITERATION                     =>NULL
          ,P_APPROVAL_READY_FLAG                    =>'Y'
          ,P_WFAPPROVAL_STATUS                      =>'NOT REQUIRED'
          ,P_PAYMENT_METHOD_CODE                    =>LV_PAYMENT_METHOD_CODE
          ,P_PARTY_ID                               =>LV_PARTY_ID
          ,P_PARTY_SITE_ID                          =>LV_PARTY_SITE_ID
          ,P_QUICK_PO_HEADER_ID                     =>LV_PO_HEADER_ID);


            DBMS_OUTPUT.PUT_LINE(' HEADERS UPDATED..END');

          EXCEPTION
          WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('sql error is :'||SQLERRM);
            DBMS_OUTPUT.PUT_LINE('sql code error is :'||SQLCODE);
      END;
     
     
      ELSE
      UPDATE XX_AP_INVOICE_HEADERS SET ERR_FLAG=ERROR_FLAG,ERROR_MSG=ERROR_MSG;
      END IF;
          ---------------LINES UPDATE-------------

      LV_LINE_NUMBER:=0;
      LV_DIS_NUMBER:=0;


  FOR L IN LINES(H.INVOICE_ID) LOOP

      LV_LINE_NUMBER := LV_LINE_NUMBER + 1;

    ------------------*****LINES VALIDATION*****------------

        --------------*****ORGANIZATION NAME VALIDATION*****----------

   BEGIN
   SELECT ORGANIZATION_ID
           INTO LV_ORG_ID
          FROM ORG_ORGANIZATION_DEFINITIONS
         WHERE ORGANIZATION_NAME=H.OPERATING_UNIT;
  DBMS_OUTPUT.PUT_LINE('organization_name IS VALID'||LV_ORG_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='organization_name IS INVALID';
 DBMS_OUTPUT.PUT_LINE('organization_name IS INVALID'||LV_ORG_ID);
  END;


     -------------******VALIDATION OF ITEM******----------

     BEGIN
     SELECT INVENTORY_ITEM_ID
     INTO LV_INVENTORY_ITEM_ID
     FROM MTL_SYSTEM_ITEMS_B
     WHERE SEGMENT1=L.ITEM
     AND ORGANIZATION_ID=LV_ORG_ID;
     DBMS_OUTPUT.PUT_LINE('INVENTORY_ITEM_ID IS VALID'||LV_INVENTORY_ITEM_ID);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='INVENTORY_ITEM_ID  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('INVENTORY_ITEM_ID  IS INVALID'||LV_INVENTORY_ITEM_ID);
  END;




        SELECT ROWID ROW_ID
         INTO LV_ROW_ID
         FROM AP_INVOICE_LINES_ALL
         WHERE INVOICE_ID=(SELECT INVOICE_ID
     FROM AP_INVOICES_ALL WHERE INVOICE_NUM=H.INVOICE_NUM)
     AND LINE_NUMBER=LV_LINE_NUMBER;


     --------------------------------------------------


    BEGIN
    SELECT PO_LINE_ID
    INTO LV_PO_LINE_ID
    FROM PO_LINES_ALL
    WHERE  PO_HEADER_ID=(SELECT  PO_HEADER_ID
    FROM
    PO_HEADERS_ALL WHERE SEGMENT1=H.PO_NUMBER)
    AND LINE_NUM=LV_LINE_NUMBER;
     DBMS_OUTPUT.PUT_LINE('PO NUMBER DOES IS VALID'||H.PO_NUMBER);
    EXCEPTION
     WHEN OTHERS THEN
     ERROR_FLAG:='E';
     ERROR_MSG:='PO NUMBER DOES NOT EXITST';
    DBMS_OUTPUT.PUT_LINE('PO NUMBER DOES NOT EXITST'||H.PO_NUMBER);
     END;



    BEGIN
    SELECT LINE_LOCATION_ID
    INTO LV_LINE_LOCATION_ID
     FROM PO_LINE_LOCATIONS_ALL WHERE PO_LINE_ID=
    (SELECT PO_LINE_ID FROM PO_LINES_ALL
    WHERE PO_HEADER_ID=
    (SELECT PO_HEADER_ID
   FROM PO_HEADERS_ALL
    WHERE SEGMENT1=H.PO_NUMBER) AND LINE_NUM=LV_LINE_NUMBER);
    DBMS_OUTPUT.PUT_LINE('PO NUMBER IS VALID'||H.PO_NUMBER);
    EXCEPTION
     WHEN OTHERS THEN
     ERROR_FLAG:='E';
     ERROR_MSG:='PO NUMBER DOES NOT EXITST';
    DBMS_OUTPUT.PUT_LINE('PO NUMBER DOES NOT EXITST'||H.PO_NUMBER);
     END;



         BEGIN
             SELECT PO_DISTRIBUTION_ID
             INTO LV_PO_DISTRIBUTION_ID
              FROM PO_DISTRIBUTIONS_ALL
           WHERE PO_LINE_ID=(SELECT PO_LINE_ID
         FROM PO_LINES_ALL
         WHERE PO_HEADER_ID=(SELECT PO_HEADER_ID
        FROM PO_HEADERS_ALL WHERE SEGMENT1=H.PO_NUMBER)
         AND LINE_NUM=LV_LINE_NUMBER);
          DBMS_OUTPUT.PUT_LINE('PO NUMBER IS VALID'||H.PO_NUMBER);
        EXCEPTION
        WHEN OTHERS THEN
     ERROR_FLAG:='E';
     ERROR_MSG:='PO NUMBER DOES NOT EXITST';
    DBMS_OUTPUT.PUT_LINE('PO NUMBER DOES NOT EXITST'||H.PO_NUMBER);
     END;

            DBMS_OUTPUT.PUT_LINE('INVOICE ID AT LINES : '||LV_INVOICE_ID);
           
    IF ERROR_FLAG!='E' THEN
      BEGIN
         AP_AIL_TABLE_HANDLER_PKG.UPDATE_ROW
 (P_ROWID                            =>LV_ROW_ID
,P_INVOICE_ID                        =>LV_INVOICE_ID
,P_LINE_NUMBER                       =>L.LINE_NUMBER
,P_LINE_TYPE_LOOKUP_CODE             =>L.LINE_TYPE
,P_LINE_GROUP_NUMBER                 =>NULL
,P_REQUESTER_ID                      =>NULL
,P_DESCRIPTION                       =>L.DESCRIPTION
,P_LINE_SOURCE                       =>'IMPORTED'
,P_ORG_ID                            =>LV_ORG_ID
,P_INVENTORY_ITEM_ID                 =>LV_INVENTORY_ITEM_ID
,P_ITEM_DESCRIPTION                  =>L.DESCRIPTION
,P_SERIAL_NUMBER                     =>NULL
,P_MANUFACTURER                      =>NULL
,P_MODEL_NUMBER                      =>NULL
,P_WARRANTY_NUMBER                   =>NULL
,P_GENERATE_DISTS                    =>'D'
,P_MATCH_TYPE                        =>'ITEM_TO_PO'
,P_DISTRIBUTION_SET_ID               =>NULL
,P_ACCOUNT_SEGMENT                   =>NULL
,P_BALANCING_SEGMENT                 =>NULL
,P_COST_CENTER_SEGMENT               =>NULL
,P_OVERLAY_DIST_CODE_CONCAT          =>NULL
,P_DEFAULT_DIST_CCID                 =>NULL
,P_PRORATE_ACROSS_ALL_ITEMS          =>NULL
,P_ACCOUNTING_DATE                   =>SYSDATE
,P_PERIOD_NAME                       =>LV_PERIOD_NAME
,P_DEFERRED_ACCTG_FLAG               =>'N'
,P_DEF_ACCTG_START_DATE              =>NULL
,P_DEF_ACCTG_END_DATE                =>NULL
,P_DEF_ACCTG_NUMBER_OF_PERIODS       =>NULL
,P_DEF_ACCTG_PERIOD_TYPE             =>NULL
,P_SET_OF_BOOKS_ID                   =>LV_SET_OF_BOOKS_ID
,P_AMOUNT                            =>L.LINE_AMOUNT
,P_BASE_AMOUNT                       =>NULL
,P_ROUNDING_AMT                      =>NULL
,P_QUANTITY_INVOICED                 =>L.QUANTITY_INVOICED
,P_UNIT_MEAS_LOOKUP_CODE             =>L.UNIT_MEASURE
,P_UNIT_PRICE                        =>L.UNIT_PRICE
,P_WFAPPROVAL_STATUS                 =>'NOT REQUIRED'
,P_DISCARDED_FLAG                    =>NULL
,P_ORIGINAL_AMOUNT                   =>NULL
,P_ORIGINAL_BASE_AMOUNT              =>NULL
,P_ORIGINAL_ROUNDING_AMT             =>NULL
,P_CANCELLED_FLAG                    =>NULL
,P_INCOME_TAX_REGION                 =>NULL
,P_TYPE_1099                         =>NULL
,P_STAT_AMOUNT                       =>NULL
,P_PREPAY_INVOICE_ID                 =>NULL
,P_PREPAY_LINE_NUMBER                =>NULL
,P_INVOICE_INCLUDES_PREPAY_FLAG      =>NULL
,P_CORRECTED_INV_ID                  =>NULL
,P_CORRECTED_LINE_NUMBER             =>NULL
,P_PO_HEADER_ID                      =>LV_PO_HEADER_ID
,P_PO_RELEASE_ID                     =>NULL
,P_PO_LINE_LOCATION_ID               =>LV_LINE_LOCATION_ID
,P_PO_DISTRIBUTION_ID                =>LV_PO_DISTRIBUTION_ID
 ,P_PO_LINE_ID                       =>LV_PO_LINE_ID
,P_RCV_TRANSACTION_ID                =>NULL
,P_FINAL_MATCH_FLAG                  =>NULL
,P_ASSETS_TRACKING_FLAG              =>'Y'
,P_ASSET_BOOK_TYPE_CODE              =>NULL
,P_ASSET_CATEGORY_ID                 =>NULL
,P_PROJECT_ID                        =>NULL
,P_TASK_ID                           =>NULL
,P_EXPENDITURE_TYPE                  =>NULL
,P_EXPENDITURE_ITEM_DATE             =>NULL
,P_EXPENDITURE_ORGANIZATION_ID       =>NULL
,P_PA_QUANTITY                       =>1
,P_PA_CC_AR_INVOICE_ID               =>NULL
,P_PA_CC_AR_INVOICE_LINE_NUM         =>NULL
,P_PA_CC_PROCESSED_CODE              =>NULL
,P_AWARD_ID                          =>NULL
,P_AWT_GROUP_ID                      =>NULL
,P_PAY_AWT_GROUP_ID                  =>NULL
,P_REFERENCE_1                       =>NULL
,P_REFERENCE_2                       =>NULL
,P_RECEIPT_VERIFIED_FLAG             =>NULL
,P_RECEIPT_REQUIRED_FLAG             =>NULL
,P_RECEIPT_MISSING_FLAG              =>NULL
,P_JUSTIFICATION                     =>NULL
,P_EXPENSE_GROUP                     =>NULL
,P_START_EXPENSE_DATE                =>NULL
,P_END_EXPENSE_DATE                  =>NULL
,P_RECEIPT_CURRENCY_CODE             =>NULL
,P_RECEIPT_CONVERSION_RATE           =>NULL
,P_RECEIPT_CURRENCY_AMOUNT           =>NULL
,P_DAILY_AMOUNT                      =>NULL
,P_WEB_PARAMETER_ID                  =>NULL
,P_ADJUSTMENT_REASON                 =>NULL
,P_MERCHANT_DOCUMENT_NUMBER          =>NULL
,P_MERCHANT_NAME                     =>NULL
,P_MERCHANT_REFERENCE                =>NULL
,P_MERCHANT_TAX_REG_NUMBER           =>NULL
,P_MERCHANT_TAXPAYER_ID              =>NULL
,P_COUNTRY_OF_SUPPLY                 =>NULL
,P_CREDIT_CARD_TRX_ID                =>NULL
,P_COMPANY_PREPAID_INVOICE_ID        =>NULL
,P_CC_REVERSAL_FLAG                  =>NULL
,P_CREATION_DATE                     =>NULL
,P_CREATED_BY                        =>L_USER_ID
,P_LAST_UPDATED_BY                   =>L_USER_ID
,P_LAST_UPDATE_DATE                  =>SYSDATE
,P_LAST_UPDATE_LOGIN                 =>NULL
,P_PROGRAM_APPLICATION_ID            =>NULL
,P_PROGRAM_ID                        =>NULL
,P_PROGRAM_UPDATE_DATE               =>NULL
,P_REQUEST_ID                        =>NULL
,P_ATTRIBUTE_CATEGORY                =>NULL
,P_ATTRIBUTE1                        =>NULL
,P_ATTRIBUTE2                        =>NULL
,P_ATTRIBUTE3                        =>NULL
,P_ATTRIBUTE4                        =>NULL
,P_ATTRIBUTE5                        =>NULL
,P_CALLING_SEQUENCE                  =>'1');


        DBMS_OUTPUT.PUT_LINE(' LINES  updated..: ');
        COMMIT;
         EXCEPTION
          WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('sql error is :'||SQLERRM);
            DBMS_OUTPUT.PUT_LINE('sql code error is :'||SQLCODE);
      END;
     
      ELSE
      UPDATE XX_AP_INVOICE_LINES SET ERR_FLAG=ERROR_FLAG,ERROR_MSG=ERROR_MSG;
      END IF;
      ----------------------------DISTRIBUTIONS UPDATE----------



  FOR D IN DISTRIBUTIONS(L.INVOICE_ID,L.LINE_NUMBER)
  LOOP

          LV_DIS_NUMBER:=LV_DIS_NUMBER+1;

     ------------------*********VALIDATION OF GL PERIODS *********------------------

  BEGIN
  SELECT PERIOD_NAME
  INTO LV_PERIOD_NAME
   FROM GL_PERIODS
   WHERE PERIOD_NAME=D.PERIOD_NAME;
  DBMS_OUTPUT.PUT_LINE('PERIOD_NAME IS VALID'||LV_PERIOD_NAME);
  EXCEPTION
  WHEN OTHERS THEN
  ERROR_FLAG:='E';
  ERROR_MSG:='PERIOD_NAME  IS INVALID';
 DBMS_OUTPUT.PUT_LINE('PERIOD_NAME  IS INVALID'||LV_PERIOD_NAME);
  END;


         ----------------ACCOUNT VALIDATION---------------

         BEGIN
         SELECT CODE_COMBINATION_ID
         INTO LV_DIST_CODE_COMBINATION_ID
         FROM GL_CODE_COMBINATIONS_KFV
      WHERE CONCATENATED_SEGMENTS=D.ACCOUNT
          AND CHART_OF_ACCOUNTS_ID=101;
          DBMS_OUTPUT.PUT_LINE('ACCOUNT IS VALID'||LV_DIST_CODE_COMBINATION_ID);
          EXCEPTION
      WHEN OTHERS THEN
      ERROR_FLAG:='E';
      ERROR_MSG:='ACCOUNT  IS INVALID';
     DBMS_OUTPUT.PUT_LINE('ACCOUNT  IS INVALID'||LV_DIST_CODE_COMBINATION_ID);
          END;


         DBMS_OUTPUT.PUT_LINE('row ID for distributions insert IS  : '||D.ROW_ID);




   DBMS_OUTPUT.PUT_LINE('invoice id distributions :   : '||XX_AP_SEQ);

    SELECT ROWID ROW_ID
          INTO LV_ROW_ID
         FROM AP_INVOICE_DISTRIBUTIONS_ALL
         WHERE INVOICE_ID=(SELECT INVOICE_ID
     FROM AP_INVOICE_LINES_ALL WHERE INVOICE_ID=
     (SELECT INVOICE_ID FROM AP_INVOICES_ALL
     WHERE INVOICE_NUM=H.INVOICE_NUM) AND LINE_NUMBER=LV_LINE_NUMBER) AND DISTRIBUTION_LINE_NUMBER=LV_DIS_NUMBER;

       DBMS_OUTPUT.PUT_LINE('INVOICE ID AT DIS : '||LV_INVOICE_ID);



        DBMS_OUTPUT.PUT_LINE('UPDATE DISTRIBUTIONS ..: ');


     IF ERROR_FLAG!='E' THEN
        BEGIN
          AP_AID_TABLE_HANDLER_PKG.UPDATE_ROW(
           P_ROWID                               =>LV_ROW_ID
          ,P_INVOICE_ID                          =>LV_INVOICE_ID
          ,P_INVOICE_LINE_NUMBER                 =>D.LINE_NUMBER
          ,P_DISTRIBUTION_CLASS                  =>'PERMANENT'
          ,P_DIST_CODE_COMBINATION_ID            =>LV_DIST_CODE_COMBINATION_ID
          ,P_LAST_UPDATE_DATE                    =>SYSDATE
          ,P_LAST_UPDATED_BY                     =>L_USER_ID
          ,P_ACCOUNTING_DATE                     =>SYSDATE
          ,P_PERIOD_NAME                         =>LV_PERIOD_NAME
          ,P_SET_OF_BOOKS_ID                     =>LV_SET_OF_BOOKS_ID
          ,P_AMOUNT                              =>D.AMOUNT
          ,P_DESCRIPTION                         =>NULL
          ,P_TYPE_1099                           =>1
          ,P_POSTED_FLAG                         =>'Y'
          ,P_BATCH_ID                            =>NULL
          ,P_QUANTITY_INVOICED                   =>NULL
          ,P_UNIT_PRICE                          =>NULL
          ,P_MATCH_STATUS_FLAG                   =>'Y'
          ,P_ATTRIBUTE_CATEGORY                  =>NULL
          ,P_ATTRIBUTE1                          =>NULL
          ,P_ATTRIBUTE2                          =>NULL
          ,P_ATTRIBUTE3                          =>NULL
          ,P_ATTRIBUTE4                          =>NULL
          ,P_ATTRIBUTE5                          =>NULL
          ,P_PREPAY_AMOUNT_REMAINING             =>NULL
          ,P_ASSETS_ADDITION_FLAG                =>'N'
          ,P_ASSETS_TRACKING_FLAG                =>'Y'
          ,P_DISTRIBUTION_LINE_NUMBER            =>D.DIS_LINE_NUM
          ,P_LINE_TYPE_LOOKUP_CODE               =>D.DIS_TYPE
          ,P_PO_DISTRIBUTION_ID                  =>LV_PO_DISTRIBUTION_ID
          ,P_BASE_AMOUNT                         =>NULL
          ,P_PA_ADDITION_FLAG                    =>NULL
          ,P_POSTED_AMOUNT                       =>NULL
          ,P_POSTED_BASE_AMOUNT                  =>NULL
          ,P_ENCUMBERED_FLAG                     =>NULL
          ,P_ACCRUAL_POSTED_FLAG                 =>NULL
          ,P_CASH_POSTED_FLAG                    =>NULL
          ,P_LAST_UPDATE_LOGIN                   =>NULL
          ,P_STAT_AMOUNT                         =>NULL
          ,P_ATTRIBUTE11                         =>NULL
          ,P_ATTRIBUTE12                         =>NULL
          ,P_ATTRIBUTE13                         =>NULL
          ,P_ATTRIBUTE14                         =>NULL
          ,P_ATTRIBUTE6                          =>NULL
          ,P_ATTRIBUTE7                          =>NULL
          ,P_ATTRIBUTE8                          =>NULL
          ,P_ATTRIBUTE9                          =>NULL
          ,P_ATTRIBUTE10                         =>NULL
          ,P_ATTRIBUTE15                         =>NULL
          ,P_ACCTS_PAY_CODE_COMB_ID              =>NULL
          ,P_REVERSAL_FLAG                       =>'N'
          ,P_PARENT_INVOICE_ID                   =>NULL
          ,P_INCOME_TAX_REGION                   =>NULL
          ,P_FINAL_MATCH_FLAG                    =>NULL
          ,P_EXPENDITURE_ITEM_DATE               =>NULL
          ,P_EXPENDITURE_ORGANIZATION_ID         =>NULL
          ,P_EXPENDITURE_TYPE                    =>NULL
          ,P_PA_QUANTITY                         =>NULL
          ,P_PROJECT_ID                          =>NULL
          ,P_TASK_ID                             =>NULL
          ,P_QUANTITY_VARIANCE                   =>NULL
          ,P_BASE_QUANTITY_VARIANCE              =>NULL
          ,P_PACKET_ID                           =>NULL
          ,P_AWT_FLAG                            =>NULL
          ,P_AWT_GROUP_ID                        =>NULL
          ,P_PAY_AWT_GROUP_ID                    =>NULL
          ,P_AWT_TAX_RATE_ID                     =>NULL
          ,P_AWT_GROSS_AMOUNT                    =>NULL
          ,P_REFERENCE_1                         =>NULL
          ,P_REFERENCE_2                         =>NULL
          ,P_ORG_ID                              =>LV_ORG_ID
          ,P_OTHER_INVOICE_ID                    =>NULL
          ,P_AWT_INVOICE_ID                      =>NULL
          ,P_AWT_ORIGIN_GROUP_ID                 =>NULL
          ,P_PROGRAM_APPLICATION_ID              =>NULL
          ,P_PROGRAM_ID                          =>NULL
          ,P_PROGRAM_UPDATE_DATE                 =>NULL
          ,P_REQUEST_ID                          =>NULL
          ,P_TAX_RECOVERABLE_FLAG                =>NULL
          ,P_AWARD_ID                            =>NULL
          ,P_START_EXPENSE_DATE                  =>NULL
          ,P_MERCHANT_DOCUMENT_NUMBER            =>NULL
          ,P_MERCHANT_NAME                       =>NULL
          ,P_MERCHANT_TAX_REG_NUMBER             =>NULL
          ,P_MERCHANT_TAXPAYER_ID                =>NULL
          ,P_COUNTRY_OF_SUPPLY                   =>NULL
          ,P_MERCHANT_REFERENCE                  =>NULL
          ,P_CALLING_SEQUENCE                    =>'1');
        DBMS_OUTPUT.PUT_LINE('DISTRIBUTIONS .updated. ');
        COMMIT;
          EXCEPTION
         WHEN OTHERS THEN
           DBMS_OUTPUT.PUT_LINE('ERROR MESSEGE IS : '||SQLERRM);
           DBMS_OUTPUT.PUT_LINE('ERROR CODE IS : '||SQLCODE);
           ROLLBACK;
          END;

       ELSE
       UPDATE XX_AP_INVOICE_DISTRIBUTIONS SET ERR_FLAG=ERROR_FLAG,ERR_MSG=ERROR_MSG;
       END IF;


   END LOOP;  --<END DISTRIBUTIONS>--
   END LOOP;  --<END LINES>--

                  DBMS_OUTPUT.PUT_LINE('values updated successfully ');
  END LOOP;   --<END HEADERS>--
   END XX_AP_INVOICE_UPDATE;   --<END UPDATE PROCEDURE>--




PROCEDURE XX_AP_INVOICE_DELETE
IS
ERROR_FLAG                               VARCHAR2(1);
ERROR_MSG                                VARCHAR2(2000);
LV_INVOICE_ID                            NUMBER;
LV_ROW_ID                                VARCHAR2(100);
L_USER_ID                                NUMBER;
L_RESP_ID                                NUMBER;
L_RESP_APPL_ID                           NUMBER;
L_INVOICE_NUM                            VARCHAR2(100);
CURSOR HEADERS IS
 SELECT INVOICE_NUM FROM XX_AP_INVOICE_HEADERS  XXAPIH
  WHERE PROCESS_FLAG='Y';





BEGIN



     BEGIN
      MO_GLOBAL.SET_POLICY_CONTEXT ('S', 204);
     END;


  FND_GLOBAL.APPS_INITIALIZE(USER_ID=>L_USER_ID,
                           RESP_ID=>L_RESP_ID,
                           RESP_APPL_ID=>L_RESP_APPL_ID );

                           SELECT FND.USER_ID ,
                       FRESP.RESPONSIBILITY_ID,
                       FRESP.APPLICATION_ID
                       INTO L_USER_ID,L_RESP_ID,L_RESP_APPL_ID
           FROM    FND_USER FND,
                   FND_RESPONSIBILITY_TL FRESP
           WHERE  FND.USER_NAME = 'VENKAT'
             AND    FRESP.RESPONSIBILITY_NAME = 'Payables, Vision Operations (USA)';
 ERROR_MSG:=NULL;



 DBMS_OUTPUT.PUT_LINE('user id : '||L_USER_ID);
  DBMS_OUTPUT.PUT_LINE('RESP id : '||L_RESP_ID);
   DBMS_OUTPUT.PUT_LINE('APP id : '||L_RESP_APPL_ID);






  FOR H IN HEADERS LOOP

         SELECT ROWID,INVOICE_ID
         INTO LV_ROW_ID,LV_INVOICE_ID
         FROM AP_INVOICES_ALL
        WHERE INVOICE_ID=(SELECT INVOICE_ID
       FROM AP_INVOICES_ALL WHERE INVOICE_NUM=H.INVOICE_NUM);


    DBMS_OUTPUT.PUT_LINE(' BEGIN INVOICE DELETE...');
   

 
     BEGIN
     AP_AI_TABLE_HANDLER_PKG.DELETE_ROW
     (P_ROWID              =>LV_ROW_ID
      ,P_CALLING_SEQUENCE    =>'1');
        COMMIT;
       DBMS_OUTPUT.PUT_LINE('DELETED INVOICE IS :  '||LV_INVOICE_ID);
        EXCEPTION
        WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
        DBMS_OUTPUT.PUT_LINE(SQLCODE);

     END;
   


     END LOOP;

      DBMS_OUTPUT.PUT_LINE('invoice deleted successfully');

        COMMIT;

  END XX_AP_INVOICE_DELETE;



END XX_AP_INVOICE_PKG;
/