Saturday, September 21, 2013

SUPPLIER,SITES,CONTACTS (API Approch Package) Conversion with staging table & Complite Package

/*********************** formating here  ***********************/
drop trigger XXXX_SUP_SITE_CONT_T
drop sequence XXXX_SUP_SITE_CONT_S
drop table  XXXX_SUP_SITE_CONT_STG

/********************       STAGING TABLE Definition  HERE *************************/
CREATE TABLE XXXX_SUP_SITE_CONT_STG
(
  TRANSACTION_ID                 NUMBER,
  OVER_ALL_STATUS_FLAG           VARCHAR2(2), 
  VENDOR_STATUS_FLAG             VARCHAR2(2 BYTE),
  VENDOR_SITE_STATUS_FLAG        VARCHAR2(2 BYTE),
  VENDOR_CONTACT_STATUS_FLAG     VARCHAR2(2),
  ERROR_MESSAGE                  VARCHAR2(4000 BYTE),
  VENDOR_NAME_LS                 VARCHAR2(240 BYTE), 
  SEGMENT1_LS                    VARCHAR2(30 BYTE),
  VENDOR_SITE_CODE_LS            VARCHAR2(15 BYTE), 
  VENDOR_SITE_COUNTRY            VARCHAR2(40 BYTE),
  VENDOR_SITE_ADDRESS_LINE1      VARCHAR2(40 BYTE),
  VENDOR_SITE_CITY               VARCHAR2(40 BYTE),
  VENDOR_SITE_STATE              VARCHAR2(40 BYTE),
  VENDOR_TYPE_NAME_LS            VARCHAR2(40 BYTE),
  VENDOR_TYPE_LOOKUP_CODE        VARCHAR2(30 BYTE),
  PAYMENT_TERMS_LS               VARCHAR2(50 BYTE),
  TERMS_ID                       NUMBER,
  PAY_GROUP_NAME_LS              VARCHAR2(40 BYTE),
  PAY_GROUP_LOOKUP_CODE          VARCHAR2(25 BYTE),
  INVOICE_CURRENCY_CODE_LS       VARCHAR2(15 BYTE),
  PAYMENT_CURRENCY_CODE_LS       VARCHAR2(15 BYTE),
  PAYMENT_METHOD_LOOKUP_NAME_LS  VARCHAR2(40 BYTE),
  PAYMENT_METHOD_LOOKUP_CODE     VARCHAR2(25 BYTE),
  SHIP_TO_ADDRESS_LINE_1_LS      VARCHAR2(240 BYTE),
  SHIP_TO_ADDRESS_LINE_2_LS      VARCHAR2(240 BYTE),
  SHIP_TO_ADDRESS_LINE_3_LS      VARCHAR2(240 BYTE),
  SHIP_TO_TOWN_OR_CITY_LS        VARCHAR2(60 BYTE),
  SHIP_TO_COUNTRY_LS             VARCHAR2(30 BYTE),
  SHIP_TO_POSTAL_CODE_LS         VARCHAR2(60 BYTE),
  SHIP_TO_LOCATION_ID            NUMBER,
  BILL_TO_ADDRESS_LINE_1_LS      VARCHAR2(240 BYTE),
  BILL_TO_ADDRESS_LINE_2_LS      VARCHAR2(240 BYTE),
  BILL_TO_ADDRESS_LINE_3_LS      VARCHAR2(240 BYTE),
  BILL_TO_TOWN_OR_CITY_LS        VARCHAR2(60 BYTE),
  BILL_TO_COUNTRY_LS             VARCHAR2(30 BYTE),
  BILL_TO_POSTAL_CODE_LS         VARCHAR2(60 BYTE),
  BILL_TO_LOCATION_ID            NUMBER,
  SHIP_VIA_LOOKUP_NAME_LS        VARCHAR2(40 BYTE),
  SHIP_VIA_LOOKUP_CODE           VARCHAR2(25 BYTE),
  FREIGHT_TERMS_LOOKUP_NAME_LS   VARCHAR2(40 BYTE),
  FREIGHT_TERMS_LOOKUP_CODE      VARCHAR2(25 BYTE),
  CONTACT_PERSON_NAME_LS         VARCHAR2(240),
  VENDOR_INTERFACE_ID            NUMBER,
  VENDOR_SITE_INTERFACE_ID       NUMBER,
  CREATION_DATE                  DATE,
  CREATED_BY                     NUMBER,
  LAST_UPDATE_DATE               DATE,
  LAST_UPDATED_BY                NUMBER
)
/********************       SEQUENCE Definition  HERE *************************/
CREATE SEQUENCE XXXX_SUP_SITE_CONT_S
/********************      TRIGGER Definition  HERE *************************/
CREATE OR REPLACE TRIGGER XXXX_SUP_SITE_CONT_T
BEFORE INSERT ON APPS.XXXX_SUP_SITE_CONT_STG FOR EACH ROW
BEGIN
SELECT XXXX_SUP_SITE_CONT_S.NEXTVAL INTO  :NEW.TRANSACTION_ID FROM DUAL;
END XXXX_SUP_SITE_CONT_T;
/

SELECT * FROM XXXX_SUP_SITE_CONT_STG

            insert into XXXX_SUP_SITE_CONT_STG(vendor_name_ls,segment1_ls,VENDOR_SITE_CODE_LS,CONTACT_PERSON_NAME_LS)
            values('xyzvenr4',2201234,'SIT423','SRIN11234')
           
           
            insert into XXXX_SUP_SITE_CONT_STG(vendor_name_ls,segment1_ls,VENDOR_SITE_CODE_LS,CONTACT_PERSON_NAME_LS)
            values('abcvenr4',8801234,'SIT423','SRIN21234')
           
           
           
            insert into XXXX_SUP_SITE_CONT_STG(vendor_name_ls,segment1_ls,VENDOR_SITE_CODE_LS,CONTACT_PERSON_NAME_LS)
            values('vvvend4',8511234,'SITE23','SRINA31234')
           
           
           
            insert into XXXX_SUP_SITE_CONT_STG(vendor_name_ls,segment1_ls,VENDOR_SITE_CODE_LS,CONTACT_PERSON_NAME_LS)
            values('vvvr34',851234,'SIT4123','SRINIVA234')
           
                     
COMMIT;
SELECT * FROM XXXX_SUP_SITE_CONT_STG

declare
v1 varchar2(90);
v2 number;
begin
XXXX_SUPP_SITE_CONT_PKG.map(v1,v2);
XXXX_supp_site_cont_pkg.validate(v1,v2);
end;

--ALL PRODS --
CALL_ALLPROD
declare
v1 varchar2(90);
v2 number;
begin
XXXX_SUPP_SITE_CONT_PKG.CALL_ALLPROD(v1,v2);
end;

              
                   
                    select * from ap_SUPPLIERS WHERE TRUNC(CREATION_DATE)=TRUNC(SYSDATE)
                   
                    SELECT * FROM AP_SUPPLIER_SITES_ALL WHERE TRUNC(CREATION_DATE)=TRUNC(SYSDATE)
                   
                   
                    SELECT * FROM AP_SUPPLIER_CONTACTS WHERE  TRUNC(CREATION_DATE)=TRUNC(SYSDATE)
----------------------------------------------------------------------------------------------------------

/* Formatted on 2013/08/19 17:51 (Formatter Plus v4.8.8) */
/************************    PACKAGE *****************/
CREATE OR REPLACE PACKAGE XXXX_supp_site_cont_pkg
IS
   PROCEDURE MAP (errbuf OUT VARCHAR2, retcode OUT NUMBER);
   PROCEDURE VALIDATE (errbuf OUT VARCHAR2, retcode OUT NUMBER);
   PROCEDURE call_api (errbuf OUT VARCHAR2, retcode OUT NUMBER);
   PROCEDURE error_report (errbuf OUT VARCHAR2, retcode OUT NUMBER);
   PROCEDURE call_allprod (errbuf OUT VARCHAR2, retcode OUT NUMBER);
END XXXX_supp_site_cont_pkg;
/
/*******************   VENDOR & VENDOR SITE  PACKAGE ENDS HERE *****************/
/*******************   VENDOR & VENDOR SITE  PACKAGE BODY STARTS HERE *****************/
CREATE OR REPLACE PACKAGE BODY XXXX_supp_site_cont_pkg
IS
   PROCEDURE MAP (errbuf OUT VARCHAR2, retcode OUT NUMBER)
   IS
   BEGIN
/*************************** UPDATE STAGING TABLE STARTS HERE **************/
      UPDATE XXXX_sup_site_cont_stg
         SET over_all_status_flag = 'N',
             vendor_status_flag = 'N',
             vendor_site_status_flag = 'N',
             vendor_contact_status_flag = 'N',
             error_message = NULL,
             terms_id = NULL,
             vendor_type_lookup_code = NULL,
             pay_group_lookup_code = NULL,
             payment_method_lookup_code = NULL,
             ship_to_location_id = NULL,
             bill_to_location_id = NULL,
             ship_via_lookup_code = NULL,
             freight_terms_lookup_code = NULL,
             vendor_interface_id = 102,
             vendor_site_interface_id = 102,
             creation_date = TRUNC (SYSDATE),
             created_by = 1318,
             last_update_date = TRUNC (SYSDATE),
             last_updated_by = 1318;
      UPDATE XXXX_sup_site_cont_stg
         SET invoice_currency_code_ls = 'USD'
       WHERE invoice_currency_code_ls IS NULL;
      UPDATE XXXX_sup_site_cont_stg
         SET payment_currency_code_ls = 'USD'
       WHERE payment_currency_code_ls IS NULL;
      UPDATE XXXX_sup_site_cont_stg
         SET vendor_type_name_ls = 'VENDOR'
       WHERE vendor_type_name_ls IS NULL;
      UPDATE XXXX_sup_site_cont_stg
         SET over_all_status_flag = 'MM',
             error_message = 'Mandatory Column is missing'
       WHERE vendor_name_ls IS NULL OR segment1_ls IS NULL;
      UPDATE XXXX_sup_site_cont_stg
         SET vendor_site_status_flag = 'MM',
             error_message = 'Mandatory Column is missing'
       WHERE vendor_site_code_ls IS NULL;
      UPDATE XXXX_sup_site_cont_stg
         SET vendor_contact_status_flag = 'MM',
             error_message = 'Mandatory Column is missing'
       WHERE contact_person_name_ls IS NULL;
/*************************** UPDATE STAGING TABLE ENDS HERE **************/
      COMMIT;
   END MAP;
   PROCEDURE VALIDATE (errbuf OUT VARCHAR2, retcode OUT NUMBER)
   IS
      v_count           NUMBER;
      v_term_id         NUMBER;
      v_location_id     NUMBER;
      v_ven_lcode       VARCHAR2 (40);
      v_payg_lcode      VARCHAR2 (40);
      v_paym_lcode      VARCHAR2 (40);
      v_shipv_lcode     VARCHAR2 (40);
      v_freight_lcode   VARCHAR2 (40);
      CURSOR ven_cur
      IS
         SELECT vendor_name_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM');
      CURSOR ven_no_cur
      IS
         SELECT vendor_name_ls, segment1_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM');
      CURSOR ven_site_cur (p_vendor_name_ls VARCHAR2)
      IS
         SELECT vendor_name_ls, vendor_site_code_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_site_status_flag NOT IN ('X', 'MM')
            AND vendor_name_ls IS NOT NULL
            AND vendor_name_ls = p_vendor_name_ls;
      CURSOR ven_type_cur
      IS
         SELECT vendor_type_name_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND vendor_type_name_ls IS NOT NULL;
      CURSOR pay_term_cur
      IS
         SELECT payment_terms_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND payment_terms_ls IS NOT NULL;
      CURSOR pay_group_cur
      IS
         SELECT pay_group_name_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND pay_group_name_ls IS NOT NULL;
      CURSOR inv_curr_cur
      IS
         SELECT invoice_currency_code_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND invoice_currency_code_ls IS NOT NULL;
      CURSOR pay_curr_cur
      IS
         SELECT payment_currency_code_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND payment_currency_code_ls IS NOT NULL;
      CURSOR pay_meth_cur
      IS
         SELECT payment_method_lookup_name_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND payment_method_lookup_name_ls IS NOT NULL;
      CURSOR ship_cur
      IS
         SELECT ship_to_address_line_1_ls, ship_to_address_line_2_ls,
                ship_to_address_line_3_ls, ship_to_town_or_city_ls,
                ship_to_country_ls, ship_to_postal_code_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND ship_to_address_line_1_ls IS NOT NULL;
      CURSOR ship_via_cur
      IS
         SELECT ship_via_lookup_name_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND ship_via_lookup_name_ls IS NOT NULL;
      CURSOR freight_cur
      IS
         SELECT freight_terms_lookup_name_ls, transaction_id
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag NOT IN ('X', 'MM')
            AND freight_terms_lookup_name_ls IS NOT NULL;
   BEGIN
      /**********************DUPLICATE RECORD ELIMNATION STARTS HERE**********************************/
      BEGIN
         UPDATE XXXX_sup_site_cont_stg
            SET vendor_status_flag = 'X',
                error_message = 'Duplicate Record'
          WHERE ROWID NOT IN (SELECT   MAX (ROWID)
                                  FROM XXXX_sup_site_cont_stg
                              GROUP BY vendor_name_ls);
         UPDATE XXXX_sup_site_cont_stg
            SET vendor_site_status_flag = 'X',
                error_message = 'Duplicate Record'
          WHERE ROWID NOT IN (SELECT   MAX (ROWID)
                                  FROM XXXX_sup_site_cont_stg
                              GROUP BY vendor_site_code_ls);
         UPDATE XXXX_sup_site_cont_stg
            SET vendor_contact_status_flag = 'X',
                error_message = 'Duplicate Record'
          WHERE ROWID NOT IN (SELECT   MAX (ROWID)
                                  FROM XXXX_sup_site_cont_stg
                              GROUP BY contact_person_name_ls);
         UPDATE XXXX_sup_site_cont_stg
            SET over_all_status_flag = 'MM',
                error_message = 'Mandatory Column Missing'
          WHERE vendor_name_ls IS NULL
             OR segment1_ls IS NULL
             OR vendor_site_code_ls IS NULL;
      END;
 /**********************DUPLICATE RECORD ELIMNATION ENDS HERE**********************************/
/*************************** VENDOR NAME VALIDATION SARTS HERE ******************/
      FOR ven_rec IN ven_cur
      LOOP
         BEGIN
            SELECT COUNT (*)
              INTO v_count
              FROM ap_suppliers
             WHERE UPPER (vendor_name) = UPPER (ven_rec.vendor_name_ls);
            -- here count >0 means the vendor is present in base table then error out other wise it is new vendor.
            IF v_count > 0
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message = 'Vendor alredy Present'
                WHERE transaction_id = ven_rec.transaction_id;
            END IF;
         END;
      END LOOP;
/*************************** VENDOR NAME VALIDATION SARTS HERE ******************/
/*************************** VENDOR  NUMBER (SEGMENT1) VALIDATION SARTS HERE ******************/
      FOR ven_no_rec IN ven_no_cur
      LOOP
         BEGIN
            SELECT COUNT (*)
              INTO v_count
              FROM ap_suppliers
             WHERE UPPER (segment1) = UPPER (ven_no_rec.segment1_ls);
            IF v_count > 0
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                            error_message
                         || ', Vendor Number esist in base table   '
                WHERE transaction_id = ven_no_rec.transaction_id;
            END IF;
         END;
      END LOOP;
/*************************** VENDOR  NUMBER (SEGMENT1) VALIDATION ENDS HERE ******************/
/*************************** VENDOR SITE CODE VALIDATION STARTS HERE ******************/
/*
for VEN_SITE_REC in VEN_SITE_CUR
  loop
    begin
       select VENDOR_SITE_ID into V_VENDOR_SITE_ID from AP_SUPPLIER_SITES_ALL
         where UPPER(vendor_site_code)=upper(VEN_SITE_REC.vendor_site_code_ls)
            and vendor_id=VEN_SITE_REC.vendor_id;
       update XXXX_SUP_SITE_CONT_STG set vendor_site_id=v_vendor_site_id where
           transaction_id=VEN_SITE_REC.transaction_id;
     exception
         when no_data_found then
           update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||', No Site found :'||vendor_site_code_ls
             where  transaction_id=VEN_SITE_REC. transaction_id;
        when too_many_rows then
          update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||', No many Sites found :'||vendor_site_code_ls
            where  transaction_id=VEN_SITE_REC. transaction_id;
        when others then
          update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||', UnExcepted error at :'||vendor_site_code_ls
            where  transaction_id=VEN_SITE_REC. transaction_id;
    end;
  end loop;
*/
                                 /************* site is dependacy validation  ***************/
      FOR ven_rec IN ven_cur
      LOOP
         BEGIN
            FOR ven_site_rec IN ven_site_cur (ven_rec.vendor_name_ls)
            LOOP
               BEGIN
                  SELECT COUNT (*)
                    INTO v_count
                    FROM ap_suppliers as1, ap_supplier_sites_all assa
                   WHERE as1.vendor_id = assa.vendor_id
                     AND as1.vendor_name = ven_site_rec.vendor_name_ls
                     AND assa.vendor_site_code =
                                              ven_site_rec.vendor_site_code_ls;
                  IF v_count > 0
                  THEN
                     UPDATE XXXX_sup_site_cont_stg
                        SET vendor_site_status_flag = 'VE',
                            error_message =
                                  error_message
                               || ',Same SITE is exists for this Vendor'
                      WHERE transaction_id = ven_site_rec.transaction_id;
                  END IF;
               END;
            END LOOP;
         END;
      END LOOP;
/*************************** VENDOR SITE CODE VALIDATION ENDS HERE ******************/
/*************************** VENDOR TYPE LOOKUP CODE VALIDATION STARTS HERE ******************/
      FOR ven_type_rec IN ven_type_cur
      LOOP
         BEGIN
            SELECT lookup_code
              INTO v_ven_lcode
              FROM fnd_lookup_values
             WHERE 1 = 1
               AND UPPER (lookup_type) =
                                     UPPER ('vendor type')
                                                          --must be upper case
               AND LANGUAGE = USERENV ('lang')
               AND UPPER (meaning) = UPPER (ven_type_rec.vendor_type_name_ls);
            UPDATE XXXX_sup_site_cont_stg
               SET vendor_type_lookup_code = v_ven_lcode
             WHERE transaction_id = ven_type_rec.transaction_id;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                             error_message || 'vendor type name is not exist '
                WHERE transaction_id = ven_type_rec.transaction_id;
            WHEN TOO_MANY_ROWS
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                                     error_message || 'many vendor type name '
                WHERE transaction_id = ven_type_rec.transaction_id;
            WHEN OTHERS
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                               error_message || 'vendor type name is invalid '
                WHERE transaction_id = ven_type_rec.transaction_id;
         END;
      END LOOP;
/*************************** VENDOR TYPE LOOKUP CODE VALIDATION ENDS HERE ******************/
/*************************** PAYMENT TERMS     VLIDATION STARTS HERE ******************/
      FOR pay_term_rec IN pay_term_cur
      LOOP
         BEGIN
            SELECT term_id
              INTO v_term_id
              FROM ap_terms_tl
             WHERE 1 = 1
               AND LANGUAGE = USERENV ('lang')
               AND UPPER (NAME) = UPPER (pay_term_rec.payment_terms_ls);
            UPDATE XXXX_sup_site_cont_stg
               SET terms_id = v_term_id
             WHERE transaction_id = pay_term_rec.transaction_id;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                            error_message
                         || payment_terms_ls
                         || '  does not exsist. '
                WHERE transaction_id = pay_term_rec.transaction_id;
            WHEN TOO_MANY_ROWS
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                            error_message
                         || payment_terms_ls
                         || '  multiple are exsist. '
                WHERE transaction_id = pay_term_rec.transaction_id;
            WHEN OTHERS
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                            error_message
                         || payment_terms_ls
                         || '  is Unexpected error. '
                WHERE transaction_id = pay_term_rec.transaction_id;
         END;
      END LOOP;
/*************************** PAYMENT TERMS     VLIDATION ENDS HERE ******************/
/*************************** PAYMENT GROUP LOOKUP CODE VLIDATION STARTS HERE ******************/
      FOR pay_group_rec IN pay_group_cur
      LOOP
         BEGIN
            SELECT lookup_code
              INTO v_payg_lcode
              FROM fnd_lookup_values
             WHERE 1 = 1
               AND UPPER (lookup_type) =
                                       UPPER ('pay group')
                                                          --must be upper case
               AND LANGUAGE = USERENV ('lang')
               AND UPPER (meaning) = UPPER (pay_group_rec.pay_group_name_ls);
            UPDATE XXXX_sup_site_cont_stg
               SET pay_group_lookup_code = v_payg_lcode
             WHERE transaction_id = pay_group_rec.transaction_id;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message = error_message || 'invalied pay group '
                WHERE transaction_id = pay_group_rec.transaction_id;
            WHEN TOO_MANY_ROWS
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message = error_message || 'too many pay group '
                WHERE transaction_id = pay_group_rec.transaction_id;
            WHEN OTHERS
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                          error_message || 'un expected error at   pay group '
                WHERE transaction_id = pay_group_rec.transaction_id;
         END;
      END LOOP;
/*************************** PAYMENT GROUP LOOKUP CODE VLIDATION ENDS HERE ******************/
/*************************** INVOICE CURRENCY CODE VLIDATION STARTS HERE ******************/
      FOR inv_curr_rec IN inv_curr_cur
      LOOP
         BEGIN
            SELECT COUNT (*)
              INTO v_count
              FROM fnd_currencies
             WHERE UPPER (currency_code) =
                                 UPPER (inv_curr_rec.invoice_currency_code_ls);
            IF v_count = 0
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                            error_message
                         || ' , invoice currency code is not present '
                WHERE transaction_id = inv_curr_rec.transaction_id;
            END IF;
         END;
      END LOOP;
/*************************** INVOICE CURRENCY CODE VLIDATION ENDS HERE ******************/
/*************************** payment CURRENCY CODE VLIDATION STARTS HERE ******************/
      FOR pay_curr_rec IN pay_curr_cur
      LOOP
         BEGIN
            SELECT COUNT (*)
              INTO v_count
              FROM fnd_currencies
             WHERE UPPER (currency_code) =
                                 UPPER (pay_curr_rec.payment_currency_code_ls);
            IF v_count = 0
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET vendor_status_flag = 'VE',
                      error_message =
                            error_message
                         || ' , payment currency code is not present '
                WHERE transaction_id = pay_curr_rec.transaction_id;
            END IF;
         END;
      END LOOP;
/*************************** payment CURRENCY CODE VLIDATION ENDS HERE ******************/
/*************************** payment method loop CODE VLIDATION STARTS HERE ******************/
/*
-- payment method shown as showtopper error by ORACLE FOUNDATION DEVELOPERS.
for PAY_METH_REC in PAY_METH_CUR
    loop
      begin
         select LOOKUP_CODE INTO V_payM_LCODE  from fnd_lookup_values  where 1=1
            and upper(lookup_type)=upper('PAYMENT METHOD')
             and upper(meaning)=upper(PAY_METH_REC.PAYMENT_METHOD__NAME_LS);
        update XXXX_SUP_SITE_CONT_STG set payment_mehthod_lookup_
     execption
---PAYMENT_METHOD__NAME_LS
         if v_count=0 then
           update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||' , payment method lookup  is not present '
            where transaction_id=PAY_METH_REC.transaction_id;
         end if;
      end;
    end loop;
*/
/*************************** payment method loop CODE VLIDATION ENDS HERE ******************/
/*************************** ship to location VLIDATION STARTS HERE ******************/
/*
for SHIP_REC in SHIP_CUR
    loop
     begin
       select LOCATION_ID into V_LOCATION_ID from HR_LOCATIONS where 1=1
           and address_line_1=SHIP_REC.ship_to_address_line_1_ls
           and address_line_2=SHIP_REC.ship_to_address_line_2_ls
           and address_line_3=SHIP_REC.ship_to_address_line_3_ls
           and town_or_city=SHIP_REC.ship_to_town_or_city_ls
           and country=SHIP_REC.ship_to_country_ls
           and postal_code=SHIP_REC.ship_to_postal_code_ls;
      update XXXX_SUP_SITE_CONT_STG set SHIP_TO_LOCATION_ID=v_location_id
           where transaction_id=SHIP_REC.transaction_id;
      exception
          when no_data_found then
             update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE', error_message=error_message||ship_to_address_line_1_ls|| ' address may not exsist. '
                 where transaction_id=SHIP_REC.transaction_id;
         when too_many_rows then
            update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE', error_message=error_message||ship_to_address_line_1_ls|| ' address may be multiple are exsist. '
                 where transaction_id=SHIP_REC.transaction_id;
        when others then
            update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE', error_message=error_message||ship_to_address_line_1_ls|| '  is Unexpected error. '
                 where transaction_id=SHIP_REC.transaction_id;
     end;
   end loop;
*/
/*************************** ship to location VLIDATION ENDS HERE ******************/
/*************************** ship via  LOOKUP CODE VLIDATION STARTS HERE ******************/
/*
for SHIP_VIA_REC in SHIP_VIA_CUR
    loop
      begin
             select LOOKUP_CODE into V_shipV_Lcode from fnd_lookup_values where 1=1
                 and upper(lookup_type)=upper('SHIP_VIA')
                 and upper(meaning)=upper(SHIP_VIA_REC.SHIP_VIA_LOOKUP_NAME_LS);
            update XXXX_SUP_SITE_CONT_STG set SHIP_VIA_LOOKUP_CODE=V_shipV_Lcode
               where transaction_id=SHIP_VIA_REC.transaction_id;
          exception
              when NO_DATA_FOUND then
                  update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||'No ship via lookup matching'
                    where transaction_id=SHIP_VIA_REC.transaction_id;
              when TOO_MANY_ROWS then
                  update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||'TOO MANY ship via lookup'
                    where transaction_id=SHIP_VIA_REC.transaction_id;
              when OTHERS then
                  update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||'UnExpected ship via lookup'
                    where transaction_id=SHIP_VIA_REC.transaction_id;
      end;
    end loop;
*/
/*************************** ship via  LOOKUP CODE VLIDATION ENDS HERE ******************/
/*************************** FREIGHT TERMS LOOKUP CODE VLIDATION STARTS HERE ******************/
/*
for FREIGHT_REC in FREIGHT_CUR
    loop
      begin
             select LOOKUP_CODE into V_FREIGHT_Lcode from fnd_lookup_values where 1=1
             and upper(lookup_type)=upper('FREIGHT TERMS')
             and upper(meaning)=upper(FREIGHT_REC.FREIGHT_TERMS_LOOKUP_NAME_LS);
          update XXXX_SUP_SITE_CONT_STG set FREIGHT_TERMS_LOOKUP_CODE=V_FREIGHT_Lcode
               where transaction_id=FREIGHT_REC.transaction_id;

    EXCEPTION
       when NO_DATA_FOUND then
          update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||',No freight code present'
               where transaction_id=FREIGHT_REC.transaction_id;
       when TOO_MANY_ROWS then
          update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||', too many freight codes '
               where transaction_id=FREIGHT_REC.transaction_id;
       when OTHERS then
          update XXXX_SUP_SITE_CONT_STG set VENDOR_STATUS_FLAG='VE',error_message=error_message||'unexpected error at freight code'
               where transaction_id=FREIGHT_REC.transaction_id;
      end;
    end loop;
*/
      UPDATE XXXX_sup_site_cont_stg
         SET over_all_status_flag = 'V'
       WHERE over_all_status_flag = 'N';
      UPDATE XXXX_sup_site_cont_stg
         SET vendor_status_flag = 'V'
       WHERE vendor_status_flag = 'N';
      UPDATE XXXX_sup_site_cont_stg
         SET vendor_site_status_flag = 'V'
       WHERE vendor_site_status_flag = 'N';
      UPDATE XXXX_sup_site_cont_stg
         SET vendor_contact_status_flag = 'V'
       WHERE vendor_contact_status_flag = 'N';
/*************************** FREIGHT  TERMS  LOOKUP CODE VLIDATION ENDS HERE ******************/
      COMMIT;
   END VALIDATE;
   PROCEDURE call_api (errbuf OUT VARCHAR2, retcode OUT NUMBER)
   IS
      x_return_status        VARCHAR2 (90);
      x_msg_count            NUMBER;
      x_msg_data             VARCHAR2 (90);
      p_vendor_rec           ap_vendor_pub_pkg.r_vendor_rec_type;
      x_vendor_id            ap_suppliers.vendor_id%TYPE;
      x_party_id             hz_parties.party_id%TYPE;
      p_vendor_site_rec      ap_vendor_pub_pkg.r_vendor_site_rec_type;
      x_vendor_site_id       NUMBER;
      x_party_site_id        NUMBER;
      x_location_id          NUMBER;
      p_vendor_contact_rec   ap_vendor_pub_pkg.r_vendor_contact_rec_type;
      x_vendor_contact_id    NUMBER;
      x_per_party_id         NUMBER;
      x_rel_party_id         NUMBER;
      x_rel_id               NUMBER;
      x_org_contact_id       NUMBER;
      x_msg_index_out        NUMBER;
      CURSOR sup_cur
      IS
         SELECT *
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_status_flag = 'V';
      CURSOR supp_site_cur (p_vendor_name_ls VARCHAR2)
      IS
         SELECT *
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_name_ls = p_vendor_name_ls
            AND vendor_site_status_flag = 'V';
      CURSOR supp_cont_cur (
         p_vendor_name_ls        VARCHAR2,
         p_vendor_site_code_ls   VARCHAR2
      )
      IS
         SELECT *
           FROM XXXX_sup_site_cont_stg
          WHERE vendor_name_ls = p_vendor_name_ls
            AND vendor_site_code_ls = p_vendor_site_code_ls
            AND vendor_contact_status_flag = 'V';
   BEGIN
/*******************       VENDOR LOOP STARTS FROM HERE   ***************************************/
      FOR sup_rec IN sup_cur
      LOOP
         BEGIN
            p_vendor_rec.vendor_name := sup_rec.vendor_name_ls;
            p_vendor_rec.segment1 := sup_rec.segment1_ls;
            p_vendor_rec.vendor_type_lookup_code :=
                                      UPPER (sup_rec.vendor_type_lookup_code);
            p_vendor_rec.terms_id := sup_rec.terms_id;
            --   P_vendor_rec.PAY_GROUP_LOOKUP_CODE:=upper(SUP_REC.PAY_GROUP_LOOKUP_CODE);
            p_vendor_rec.invoice_currency_code :=
                                     UPPER (sup_rec.invoice_currency_code_ls);
            p_vendor_rec.payment_currency_code :=
                                     UPPER (sup_rec.payment_currency_code_ls);
      --    P_vendor_rec.<NO PARAMETER>:=SUP_REC.PAYMENT_METHOD_LOOKUP_CODE;
     --     show topper error (BUG.) but mandatory in MD 5O DOCUMENT
     --     P_vendor_rec.SHIP_VIA_LOOKUP_CODE:=UPPER(SUP_REC.SHIP_VIA_LOOKUP_CODE);
 --SITE LEVEL
        --  P_vendor_rec.FREIGHT_TERMS_LOOKUP_CODE:=UPPER(SUP_REC.FREIGHT_TERMS_LOOKUP_CODE);
--SITE LEVEL
            mo_global.set_policy_context ('S', 204);
            ap_vendor_pub_pkg.create_vendor
                           (p_api_version           => 1.0,
                            p_init_msg_list         => fnd_api.g_true,
                            p_commit                => fnd_api.g_true,
                            p_validation_level      => fnd_api.g_valid_level_full,
                            x_return_status         => x_return_status,
                            x_msg_count             => x_msg_count,
                            x_msg_data              => x_msg_data,
                            p_vendor_rec            => p_vendor_rec,
                            x_vendor_id             => x_vendor_id,
                            x_party_id              => x_party_id
                           );
            fnd_file.put_line
                     (fnd_file.output,
                      '                          vendor_NAME                 '
                     );
            fnd_file.put_line
                (fnd_file.output,
                 '                           ----------------                '
                );
            fnd_file.put_line (fnd_file.output,
                               ' x_vendor_id   :    ' || x_vendor_id
                              );
            fnd_file.put_line (fnd_file.output,
                               ' x_msg_count  :     ' || x_msg_count
                              );
            fnd_file.put_line (fnd_file.output,
                               ' x_return_status  :' || x_return_status
                              );
            fnd_file.put_line (fnd_file.output,
                               ' x_msg_data  :       ' || x_msg_data
                              );
/************************** vendor site loop starts form here   ***************************/
            FOR supp_site_rec IN supp_site_cur (sup_rec.vendor_name_ls)
            LOOP
               BEGIN
                  p_vendor_site_rec.vendor_id := x_vendor_id;               --
                  p_vendor_site_rec.org_id := 204;
                  p_vendor_site_rec.vendor_site_code :=
                                            supp_site_rec.vendor_site_code_ls;
                  p_vendor_site_rec.country :=
                                            supp_site_rec.vendor_site_country;
                  p_vendor_site_rec.address_line1 :=
                                      supp_site_rec.vendor_site_address_line1;
                  p_vendor_site_rec.city := supp_site_rec.vendor_site_city;
                  p_vendor_site_rec.state := supp_site_rec.vendor_site_state;
                  mo_global.set_policy_context ('S', 204);
                  ap_vendor_pub_pkg.create_vendor_site
                           (p_api_version           => 1.0,
                            p_init_msg_list         => fnd_api.g_true,
                            p_commit                => fnd_api.g_true,
                            p_validation_level      => fnd_api.g_valid_level_full,
                            x_return_status         => x_return_status,
                            x_msg_count             => x_msg_count,
                            x_msg_data              => x_msg_data,
                            p_vendor_site_rec       => p_vendor_site_rec,
                            x_vendor_site_id        => x_vendor_site_id,
                            x_party_site_id         => x_party_site_id,
                            x_location_id           => x_location_id
                           );
                  /***************  ERROR AT SITE LEVEL ***************/
                  fnd_msg_pub.initialize;
                  FOR i IN 1 .. x_msg_count
                  LOOP
                     BEGIN
                        fnd_msg_pub.get (p_msg_index          => i,
                                         p_encoded            => 'F',
                                         p_data               => x_msg_data,
                                         p_msg_index_out      => x_msg_index_out
                                        );
                        fnd_file.put_line (fnd_file.output,
                                           'X_MSG_DATA     :  ' || x_msg_data
                                          );
                     END;
                  END LOOP;
                  fnd_file.put_line
                     (fnd_file.output,
                      '                           vendor_site                 '
                     );
                  fnd_file.put_line
                     (fnd_file.output,
                      '                           -------------                '
                     );
                  fnd_file.put_line (fnd_file.output,
                                     ' x_msg_count  :     ' || x_msg_count
                                    );
                  fnd_file.put_line (fnd_file.output,
                                     ' x_return_status  :' || x_return_status
                                    );
                  fnd_file.put_line (fnd_file.output,
                                     ' x_msg_data  :       ' || x_msg_data
                                    );
                  fnd_file.put_line (fnd_file.output,
                                     ' x_party_site_id  :  '
                                     || x_party_site_id
                                    );
                  fnd_file.put_line (fnd_file.output,
                                     ' x_location_id  :  ' || x_location_id
                                    );
/************************** vendor site CONTACT loop starts form here   ***************************/
                  FOR supp_cont_rec IN
                     supp_cont_cur (sup_rec.vendor_name_ls,
                                    sup_rec.vendor_site_code_ls
                                   )
                  LOOP
                     BEGIN
                        p_vendor_contact_rec.vendor_id := x_vendor_id;      --
                        p_vendor_contact_rec.org_id := 204;
                        p_vendor_contact_rec.org_party_site_id :=
                                                              x_party_site_id;
                        p_vendor_contact_rec.person_last_name :=
                                         supp_cont_rec.contact_person_name_ls;
                        mo_global.set_policy_context ('S', 204);
                        ap_vendor_pub_pkg.create_vendor_contact
                           (p_api_version             => 1.0,
                            p_init_msg_list           => fnd_api.g_true,
                            p_commit                  => fnd_api.g_true,
                            p_validation_level        => fnd_api.g_valid_level_full,
                            x_return_status           => x_return_status,
                            x_msg_count               => x_msg_count,
                            x_msg_data                => x_msg_data,
                            p_vendor_contact_rec      => p_vendor_contact_rec,
                            x_vendor_contact_id       => x_vendor_contact_id,
                            x_per_party_id            => x_per_party_id,
                            x_rel_party_id            => x_rel_party_id,
                            x_rel_id                  => x_rel_id,
                            x_org_contact_id          => x_org_contact_id,
                            x_party_site_id           => x_party_site_id
                           );
                        fnd_file.put_line
                           (fnd_file.output,
                            '                          vendor CONTACTS....                '
                           );
                        fnd_file.put_line
                           (fnd_file.output,
                            '                          ----------***----------                '
                           );
                        fnd_file.put_line (fnd_file.output,
                                              ' x_msg_count  :     '
                                           || x_msg_count
                                          );
                        fnd_file.put_line (fnd_file.output,
                                              ' x_return_status  :'
                                           || x_return_status
                                          );
                        fnd_file.put_line (fnd_file.output,
                                              ' x_msg_data  :       '
                                           || x_msg_data
                                          );
                        fnd_file.put_line (fnd_file.output,
                                              ' x_org_contact_id  :  '
                                           || x_org_contact_id
                                          );
                        fnd_file.put_line (fnd_file.output,
                                              ' x_rel_party_id  :  '
                                           || x_rel_party_id
                                          );
                        fnd_file.put_line (fnd_file.output,
                                              ' x_vendor_contact_id   :   '
                                           || x_vendor_contact_id
                                          );
                        fnd_file.put_line (fnd_file.output, '');
                        fnd_file.put_line (fnd_file.output, '');
                        fnd_file.put_line (fnd_file.output, '');
                     END;
                  END LOOP;
/*******************       VENDOR  contacts loop ENDS FROM HERE   ***************************************/
               END;
            END LOOP;
/************************** vendor site loop ends form here   ***************************/
         EXCEPTION
            WHEN OTHERS
            THEN
               UPDATE XXXX_sup_site_cont_stg
                  SET over_all_status_flag = 'LE',
                      error_message =
                                  error_message || 'Rejected By API..........'
                WHERE transaction_id = sup_rec.transaction_id;
         END;
      END LOOP;
/*******************       VENDOR LOOP STARTS FROM HERE   ***************************************/
   END call_api;
/*******************       ERROR_REPORT STARTS  HERE   ***************************************/
   PROCEDURE error_report (errbuf OUT VARCHAR2, retcode OUT NUMBER)
   IS
      v_count       NUMBER;
      v_valied      NUMBER;
      v_failed      NUMBER;
      v_duplicate   NUMBER;
      CURSOR err_cur
      IS
         SELECT *
           FROM XXXX_sup_site_cont_stg
          WHERE error_message IS NOT NULL;
   BEGIN
      fnd_file.put_line (fnd_file.output,
                         '                         XXXX SUPPLIER REPORT'
                        );
      fnd_file.put_line
                      (fnd_file.output,
                       '                         ------------------------'
                      );
      fnd_file.put_line (fnd_file.output, '');
      fnd_file.put_line (fnd_file.output,
                            RPAD ('Supplier No', 25, ' ')
                         || RPAD ('Supplier Name', 30, ' ')
                         || RPAD ('Supplier Site', 20, ' ')
                         || RPAD ('Supplier Contact', 40, ' ')
                         || RPAD ('Error', 450, ' ')
                        );
      fnd_file.put_line (fnd_file.output,
                            RPAD ('-----------', 25, ' ')
                         || RPAD ('--------------', 30, ' ')
                         || RPAD ('----------------', 20, ' ')
                         || RPAD ('---------------------', 40, ' ')
                         || RPAD ('------', 40, ' ')
                        );
      FOR err_rec IN err_cur
      LOOP
         BEGIN
            fnd_file.put_line (fnd_file.output,
                                  RPAD (err_rec.segment1_ls, 25, ' ')
                               || RPAD (err_rec.vendor_name_ls, 30, ' ')
                               || RPAD (err_rec.vendor_site_code_ls, 20, ' ')
                               || RPAD (err_rec.contact_person_name_ls,
                                        40,
                                        ' '
                                       )
                               || RPAD (err_rec.error_message, 450, ' ')
                              );
         END;
      END LOOP;
      fnd_file.put_line
                     (fnd_file.output,
                      '                                            ----------'
                     );
      fnd_file.put_line
                    (fnd_file.output,
                     '                                            END OF DATA'
                    );
      fnd_file.put_line
                     (fnd_file.output,
                      '                                            ----------'
                     );
      fnd_file.put_line (fnd_file.output, '');
      fnd_file.put_line (fnd_file.output, '');
      fnd_file.put_line (fnd_file.output, '');
      fnd_file.put_line (fnd_file.output, '                          -------');
      fnd_file.put_line (fnd_file.output, '                          SUMMARY');
      fnd_file.put_line (fnd_file.output, '                          -------');
      SELECT COUNT (*)
        INTO v_count
        FROM XXXX_sup_site_cont_stg;
      fnd_file.put_line
                (fnd_file.output,
                    '              Total Number of Records              :    '
                 || v_count
                );
      SELECT COUNT (*)
        INTO v_failed
        FROM XXXX_sup_site_cont_stg
       WHERE error_message IS NOT NULL;
      fnd_file.put_line
                (fnd_file.output,
                    '              Total Number of invalid Records      :    '
                 || v_failed
                );
      SELECT COUNT (*)
        INTO v_duplicate
        FROM XXXX_sup_site_cont_stg
       WHERE     vendor_status_flag = 'X'            
          AND error_message IS NOT NULL;
      fnd_file.put_line
                (fnd_file.output,
                    '              Total Number of duplicate Records    :    '
                 || v_duplicate
                );
   END error_report;
/*******************       ERROR_REPORT ENDS  HERE   ***************************************/
   PROCEDURE call_allprod (errbuf OUT VARCHAR2, retcode OUT NUMBER)
   IS
      v1   VARCHAR2 (240);
      v2   NUMBER;
   BEGIN
      XXXX_supp_site_cont_pkg.MAP (v1, v2);
      XXXX_supp_site_cont_pkg.VALIDATE (v1, v2);
      XXXX_supp_site_cont_pkg.call_api (v1, v2);
      XXXX_supp_site_cont_pkg.error_report (v1, v2);
   END call_allprod;
END XXXX_supp_site_cont_pkg;
/
/*******************   VENDOR & VENDOR SITE  PACKAGE BODY ENDS HERE *****************/