Tuesday 20 December 2016

Supplier Conversion


CREATE OR REPLACE PACKAGE BODY XXCSC_AP_SUPPLIERS_CONV_PKG
AS

/*  $Header: XXCSC_AP_SUPPLIERS_CONV_PKG.pkb version date time object_type module     $
===========================================================================================

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


 History:

  Name                Version     Reason for Change   Date
===========================================================================================
Madhu  Dhare        1.0         Original   12-JUN-2014

===========================================================================================
*/

---------------------------------------------------------------------------------------------
-- Variable Declaration
---------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------
-- PROCEDURE NAME  :  XXCSC_AP_SUPPLIERS_MAPPING_PROC
-- DESCRIPTION     :  Supplier Mapping Activity in Staging Table
---------------------------------------------------------------------------------------------

PROCEDURE XXCSC_AP_SUPP_MAPPING_PROC (x_object_name IN  VARCHAR2
    ,x_stage    IN  VARCHAR2
    )
IS

x_query   VARCHAR2(4000);

CURSOR CUR_MAP IS
SELECT table_name
      ,column_name
      ,legacy_code
      ,legacy_description
      ,target_code
      ,target_description
  FROM XXHR.xxcsc_cmn_mapping_all mt
      ,XXHR.xxcsc_cmn_metadata_all st
 WHERE mt.object_code = st.object_code
   AND mt.object_dep_seq = st.object_dep_seq
   AND st.object_name = x_object_name
   AND mt.enable_flag = x_yes
   AND st.enable_flag = x_yes;

BEGIN

  XXCSC_AP_SUPPLIERS_CONV_PKG.x_object := x_object_name;

--- Update the PROCESS FLAG AS M
   XXCSC_AP_SUPP_STATUS_PROC (x_mapping_flag
                ,NULL -- x_status
    );

   FOR rec_map IN cur_map LOOP
       x_query := 'UPDATE XXHR.' || rec_map.table_name ||' SET ' ||rec_map.column_name || ' = '''|| rec_map.target_code ||''' , status_flag = ''' ||x_mapped_flag || '''  WHERE  EXISTS (SELECT 1 FROM XXHR.xxcsc_cmn_mapping_all b WHERE b.enable_flag = ''Y'' AND b.legacy_code = '|| rec_map.column_name || ' )' ;
       EXECUTE IMMEDIATE (x_query);
       COMMIT;
   END LOOP;

   --- Update the STATUS FLAG AS NM
   XXCSC_AP_SUPP_STATUS_PROC (NULL
                ,x_notmapped_flag -- x_status
     );


   IF x_stage = x_mapping_stg THEN
      XXCSC_AP_SUPP_ERROR_PROC (x_object_name
        ,x_stage
      );
   END IF;

EXCEPTION
   WHEN OTHERS THEN
        XXCSC_AP_SUPP_PRINT_PROC('ERROR :  '|| SQLCODE);
        XXCSC_AP_SUPP_PRINT_PROC('ERROR DESCRIPTION - ' || SQLERRM);
        ROLLBACK;

END XXCSC_AP_SUPP_MAPPING_PROC;

---------------------------------------------------------------------------------------------
-- PROCEDURE NAME  :  XXCSC_AP_SUPPLIERS_VALIDATION_PROC
-- DESCRIPTION     :  Supplier Validation Activity in Staging table
---------------------------------------------------------------------------------------------

PROCEDURE XXCSC_AP_SUPP_VALIDATION_PROC (x_object_name IN  VARCHAR2
,x_stage       IN  VARCHAR2
)
IS

-- Local Variable Declaration
  x_cnt NUMBER ;
  x_query VARCHAR2(4000);
  x_select VARCHAR2(2000);
  x_str VARCHAR2(100);
  x_arg1         VARCHAR2(100);
  x_arg2         VARCHAR2(100);
  x_arg3         VARCHAR2(100);
  x_arg4         VARCHAR2(100);
  x_pr_flag      VARCHAR2(20);
  x_st_flag      VARCHAR2(20);
  x_val NUMBER;
  x_val1 NUMBER;


-- Ref Cursor Declaration
  TYPE x_ref_cur  IS REF CURSOR;
  x_dyn_cur1  x_ref_cur;
  x_dyn_cur2  x_ref_cur;

-- Cursor Declaration
  CURSOR cur_tbl IS
  SELECT DISTINCT
         st.table_name
        ,st.key_column1  key_column1
        ,NVL(st.key_column2,'1') key_column2
        ,NVL(st.key_column3,'1') key_column3
,st.object_dep_seq  
    FROM XXHR.xxcsc_cmn_metadata_all st    
   WHERE st.object_name = x_object_name
     AND st.enable_flag = x_yes
ORDER BY object_dep_seq;

  CURSOR cur_valid  IS
  SELECT st.table_name
        ,st.key_column1
        ,NVL(st.key_column2,'1') key_column2
        ,NVL(st.key_column3, '1') key_column3            
        ,cv1.valid_code
        ,cv1.valid_message      
        ,cv1.sql_validation
,cv1.valid_type
    FROM XXHR.xxcsc_cmn_validations_all cv1
        ,XXHR.xxcsc_cmn_metadata_all st
   WHERE cv1.object_code = st.object_code
     AND cv1.object_dep_seq = st.object_dep_seq
     AND st.object_name =  x_object_name
     AND st.enable_flag = x_yes
     AND cv1.enable_flag = x_yes
     AND cv1.execution_seq <1000
ORDER BY st.object_dep_seq
        ,cv1.execution_seq;

  CURSOR cur_valid1  IS
  SELECT st.table_name
        ,st.key_column1
        ,NVL(st.key_column2,'1') key_column2
        ,NVL(st.key_column3, '1') key_column3            
        ,cv1.valid_code
        ,cv1.valid_message      
        ,cv1.sql_validation
,cv1.valid_type
    FROM XXHR.xxcsc_cmn_validations_all cv1
        ,XXHR.xxcsc_cmn_metadata_all st
   WHERE cv1.object_code = st.object_code
     AND cv1.object_dep_seq = st.object_dep_seq
     AND st.object_name =  x_object_name
     AND st.enable_flag = x_yes
     AND cv1.enable_flag = x_yes
     AND cv1.execution_seq >=1000
ORDER BY st.object_dep_seq
        ,cv1.execution_seq;

BEGIN
    XXCSC_AP_SUPPLIERS_CONV_PKG.x_object := x_object_name;

    XXCSC_AP_SUPP_STATUS_PROC (x_validate_flag
                 ,NULL -- x_status
     );

    FOR rec_tbl IN cur_tbl LOOP
        x_select := 'SELECT RECORD_ID, '|| rec_tbl.key_column1 ||' ,'||rec_tbl.key_column2 || ' ,'|| rec_tbl.key_column3|| ' FROM XXHR.'|| TRIM(rec_tbl.table_name);
        x_select := REPLACE(x_select,'1','DECODE(1,1,'' '')');

OPEN x_dyn_cur1 FOR x_select;
LOOP
FETCH x_dyn_cur1 INTO x_arg1,x_arg2,x_arg3,x_arg4 ;

        EXIT WHEN x_dyn_cur1%NOTFOUND;

           FOR rec_valid IN cur_valid LOOP
      IF (rec_valid.table_name=rec_tbl.table_name) THEN
BEGIN              
  x_query := rec_valid.sql_validation;
            x_str := ' AND MT.RECORD_ID='||x_arg1;
                   x_query := CONCAT(x_query,x_str);

                   EXECUTE IMMEDIATE (x_query) INTO x_cnt;

  IF x_cnt >0 THEN
                       x_query := 'UPDATE XXHR.'|| TRIM(rec_valid.TABLE_NAME) ||' SET error_code = error_code ||'','|| rec_valid.VALID_CODE || ''', status_flag = ''' || rec_valid.valid_type || ''' WHERE record_id = '||x_arg1 ;
             EXECUTE IMMEDIATE (x_query) ;

                 COMMIT;
  END IF;

     EXCEPTION
WHEN OTHERS THEN
XXCSC_AP_SUPP_PRINT_PROC('ERROR OCCURED: ' || SQLCODE);
XXCSC_AP_SUPP_PRINT_PROC('ERROR OCCURED IN VALIDATION STAGE - ' || SQLERRM);
ROLLBACK;

END;

      END IF;
           END LOOP;
END LOOP;
    END LOOP;


--Orphan Record Validate Start
   FOR rec_tbl IN cur_tbl LOOP
        x_select := 'SELECT RECORD_ID, '|| rec_tbl.key_column1 ||' ,'||rec_tbl.key_column2 || ' ,'|| rec_tbl.key_column3|| ' FROM XXHR.'|| TRIM(rec_tbl.table_name);
        x_select := REPLACE(x_select,'1','DECODE(1,1,'' '')');

OPEN x_dyn_cur1 FOR x_select;
LOOP
FETCH x_dyn_cur1 INTO x_arg1,x_arg2,x_arg3,x_arg4 ;

        EXIT WHEN x_dyn_cur1%NOTFOUND;

           FOR rec_valid IN cur_valid1 LOOP
      IF (rec_valid.table_name=rec_tbl.table_name) THEN
BEGIN              
  x_query := rec_valid.sql_validation;
            x_str := ' AND MT.RECORD_ID='||x_arg1;
                   x_query := CONCAT(x_query,x_str);

                   EXECUTE IMMEDIATE (x_query) INTO x_cnt;

  IF x_cnt >0 THEN
                       x_query := 'UPDATE XXHR.'|| TRIM(rec_valid.TABLE_NAME) ||' SET error_code = error_code ||'','|| rec_valid.VALID_CODE || ''', status_flag = ''' || rec_valid.valid_type || ''' WHERE record_id = '||x_arg1 ;
             EXECUTE IMMEDIATE (x_query) ;

                 COMMIT;
  END IF;

     EXCEPTION
WHEN OTHERS THEN
XXCSC_AP_SUPP_PRINT_PROC('ERROR OCCURED: ' || SQLCODE);
XXCSC_AP_SUPP_PRINT_PROC('ERROR OCCURED IN VALIDATION STAGE - ' || SQLERRM);
ROLLBACK;

END;

      END IF;
           END LOOP;
END LOOP;
    END LOOP;
--Orphan Record  Validate End

   --- Update the STATUS FLAG AS V
   XXCSC_AP_SUPP_STATUS_PROC (NULL
                ,x_validate_flag -- x_status
     );

   IF x_stage = x_validate_stg THEN
      XXCSC_AP_SUPP_ERROR_PROC (x_object_name
        ,x_stage
      );
   END IF;
     

EXCEPTION
   WHEN OTHERS THEN
        XXCSC_AP_SUPP_PRINT_PROC('ERROR OCCURED: ' || SQLCODE);
        XXCSC_AP_SUPP_PRINT_PROC('ERROR OCCURED IN VALIDATION STAGE - ' || SQLERRM);
        ROLLBACK;

END XXCSC_AP_SUPP_VALIDATION_PROC;

---------------------------------------------------------------------------------------------
-- PROCEDURE NAME  :  XXCSC_AP_SUPPLIERS_TRANSFER_PROC
-- DESCRIPTION     :  Supplier Data Transfer from Staging Table into Interface Table
---------------------------------------------------------------------------------------------

PROCEDURE XXCSC_AP_SUPP_TRANSFER_PROC (x_object_name IN  VARCHAR2
     ,x_stage IN  VARCHAR2
     )
IS
    x_pr_flag      VARCHAR2(20);
    x_st_flag      VARCHAR2(20);

BEGIN
    XXCSC_AP_SUPPLIERS_CONV_PKG.x_object := x_object_name;
 
 FOR rec_hr IN cur_hr LOOP
       UPDATE XXHR.xxcsc_ap_supplier_headers
          SET process_flag = x_transfer_flag;
     
       COMMIT;
   END LOOP;

--- Update the PROCESS FLAG
   FOR rec_st IN cur_st LOOP
       UPDATE XXHR.xxcsc_ap_supplier_sites
          SET process_flag = x_transfer_flag;

       COMMIT;
   END LOOP;

--- Update the PROCESS FLAG
   FOR rec_cn IN cur_cn LOOP
       UPDATE XXHR.xxcsc_ap_supplier_contacts
          SET process_flag = x_transfer_flag;

       COMMIT;
   END LOOP;

-- Purge Supplier Interface Table

   DELETE FROM APPS.ap_suppliers_int;
   DELETE FROM APPS.ap_supplier_sites_int;
   DELETE FROM APPS.ap_sup_site_contact_int;
   COMMIT;

   FOR rec_hdr IN  cur_hdr (x_validate_flag) LOOP
       BEGIN
          -- SUPPLIER HEADER INSERT INTO INTERFACE TABLE
  INSERT INTO APPS.ap_suppliers_int
         (
  vendor_interface_id
 ,last_update_date
 ,last_updated_by
 ,vendor_name
 ,vendor_name_alt
 ,segment1
 ,summary_flag
 ,enabled_flag
 ,last_update_login
 ,creation_date
 ,created_by
 ,employee_id
 ,vendor_type_lookup_code
 ,customer_num
 ,one_time_flag
 ,min_order_amount
 ,ship_to_location_id
 ,ship_to_location_code
 ,bill_to_location_id
 ,bill_to_location_code
 ,ship_via_lookup_code
 ,freight_terms_lookup_code
 ,fob_lookup_code
 ,terms_id
 ,terms_name
 ,set_of_books_id
 ,always_take_disc_flag
 ,pay_date_basis_lookup_code
 ,pay_group_lookup_code
 ,payment_priority
 ,invoice_currency_code
 ,payment_currency_code
 ,invoice_amount_limit
 ,hold_all_payments_flag
 ,hold_future_payments_flag
 ,hold_reason
 ,distribution_set_id
 ,distribution_set_name
 ,accts_pay_code_combination_id
 ,prepay_code_combination_id
 ,num_1099
 ,type_1099
 ,organization_type_lookup_code
 ,vat_code
 ,start_date_active
 ,end_date_active
 ,minority_group_lookup_code
 ,payment_method_lookup_code
 ,women_owned_flag
 ,small_business_flag
 ,standard_industry_class
 ,hold_flag
 ,purchasing_hold_reason
 ,hold_by
 ,hold_date
 ,terms_date_basis
 ,inspection_required_flag
 ,receipt_required_flag
 ,qty_rcv_tolerance
 ,qty_rcv_exception_code
 ,enforce_ship_to_location_code
 ,days_early_receipt_allowed
 ,days_late_receipt_allowed
 ,receipt_days_exception_code
 ,receiving_routing_id
 ,allow_substitute_receipts_flag
 ,allow_unordered_receipts_flag
 ,hold_unmatched_invoices_flag
 ,exclusive_payment_flag
 ,ap_tax_rounding_rule
 ,auto_tax_calc_flag
 ,auto_tax_calc_override
 ,amount_includes_tax_flag
 ,tax_verification_date
 ,name_control
 ,state_reportable_flag
 ,federal_reportable_flag
 ,attribute_category
 ,attribute1
 ,attribute2
 ,attribute3
 ,attribute4
 ,attribute5
 ,attribute6
 ,attribute7
 ,attribute8
 ,attribute9
 ,attribute10
 ,attribute11
 ,attribute12
 ,attribute13
 ,attribute14
 ,attribute15
 ,request_id
 ,program_application_id
 ,program_id
 ,program_update_date
 ,vat_registration_num
 ,auto_calculate_interest_flag
 ,exclude_freight_from_discount
 ,tax_reporting_name
 ,allow_awt_flag
 ,awt_group_id
 ,awt_group_name
 ,global_attribute1
 ,global_attribute2
 ,global_attribute3
 ,global_attribute4
 ,global_attribute5
 ,global_attribute6
 ,global_attribute7
 ,global_attribute8
 ,global_attribute9
 ,global_attribute10
 ,global_attribute11
 ,global_attribute12
 ,global_attribute13
 ,global_attribute14
 ,global_attribute15
 ,global_attribute16
 ,global_attribute17
 ,global_attribute18
 ,global_attribute19
 ,global_attribute20
 ,global_attribute_category
 ,edi_transaction_handling
 ,edi_payment_method
 ,edi_payment_format
 ,edi_remittance_method
 ,edi_remittance_instruction
 ,bank_charge_bearer
 ,match_option
 ,future_dated_payment_ccid
 ,create_debit_memo_flag
 ,offset_tax_flag
 ,import_request_id
 ,status
 ,reject_code
 ,ece_tp_location_code
 ,iby_bank_charge_bearer
 ,bank_instruction1_code
 ,bank_instruction2_code
 ,bank_instruction_details
 ,payment_reason_code
 ,payment_reason_comments
 ,payment_text_message1
 ,payment_method_code
 )
   VALUES
        (
  rec_hdr.record_id
 ,SYSDATE --last_update_date
 ,APPS.FND_GLOBAL.USER_ID --last_updated_by
 ,rec_hdr.vendor_name
 ,rec_hdr.vendor_name_alt
 ,rec_hdr.vendor_number
 ,rec_hdr.summary_flag
 ,rec_hdr.enabled_flag
 ,APPS.FND_GLOBAL.USER_ID --last_update_login
 ,SYSDATE --creation_date
 ,APPS.FND_GLOBAL.USER_ID --created_by
 ,rec_hdr.employee_id
 ,rec_hdr.vendor_type_lookup_code
 ,rec_hdr.customer_num
 ,rec_hdr.one_time_flag
 ,rec_hdr.min_order_amount
 ,rec_hdr.ship_to_location_id
 ,rec_hdr.ship_to_location_code
 ,rec_hdr.bill_to_location_id
 ,rec_hdr.bill_to_location_code
 ,rec_hdr.ship_via_lookup_code
 ,rec_hdr.freight_terms_lookup_code
 ,rec_hdr.fob_lookup_code
 ,rec_hdr.terms_id
 ,rec_hdr.terms_name
 ,rec_hdr.set_of_books_id
 ,rec_hdr.always_take_disc_flag
 ,rec_hdr.pay_date_basis_lookup_code
 ,rec_hdr.pay_group_lookup_code
 ,rec_hdr.payment_priority
 ,rec_hdr.invoice_currency_code
 ,rec_hdr.payment_currency_code
 ,rec_hdr.invoice_amount_limit
 ,rec_hdr.hold_all_payments_flag
 ,rec_hdr.hold_future_payments_flag
 ,rec_hdr.hold_reason
 ,rec_hdr.distribution_set_id
 ,rec_hdr.distribution_set_name
 ,rec_hdr.accts_pay_code_combination_id
 ,rec_hdr.prepay_code_combination_id
 ,rec_hdr.num_1099
 ,rec_hdr.type_1099
 ,rec_hdr.organization_type_lookup_code
 ,rec_hdr.vat_code
 ,rec_hdr.start_date_active
 ,rec_hdr.end_date_active
 ,rec_hdr.minority_group_lookup_code
 ,rec_hdr.payment_method_lookup_code
 ,rec_hdr.women_owned_flag
 ,rec_hdr.small_business_flag
 ,rec_hdr.standard_industry_class
 ,rec_hdr.hold_flag
 ,rec_hdr.purchasing_hold_reason
 ,rec_hdr.hold_by
 ,rec_hdr.hold_date
 ,rec_hdr.terms_date_basis
 ,rec_hdr.inspection_required_flag
 ,rec_hdr.receipt_required_flag
 ,rec_hdr.qty_rcv_tolerance
 ,rec_hdr.qty_rcv_exception_code
 ,rec_hdr.enforce_ship_to_location_code
 ,rec_hdr.days_early_receipt_allowed
 ,rec_hdr.days_late_receipt_allowed
 ,rec_hdr.receipt_days_exception_code
 ,rec_hdr.receiving_routing_id
 ,rec_hdr.allow_substitute_receipts_flag
 ,rec_hdr.allow_unordered_receipts_flag
 ,rec_hdr.hold_unmatched_invoices_flag
 ,rec_hdr.exclusive_payment_flag
 ,rec_hdr.ap_tax_rounding_rule
 ,rec_hdr.auto_tax_calc_flag
 ,rec_hdr.auto_tax_calc_override
 ,rec_hdr.amount_includes_tax_flag
 ,rec_hdr.tax_verification_date
 ,rec_hdr.name_control
 ,rec_hdr.state_reportable_flag
 ,rec_hdr.federal_reportable_flag
 ,rec_hdr.attribute_category
 ,rec_hdr.attribute1
 ,rec_hdr.attribute2
 ,rec_hdr.attribute3
 ,rec_hdr.attribute4
 ,rec_hdr.attribute5
 ,rec_hdr.attribute6
 ,rec_hdr.attribute7
 ,rec_hdr.attribute8
 ,rec_hdr.attribute9
 ,rec_hdr.attribute10
 ,rec_hdr.attribute11
 ,rec_hdr.attribute12
 ,rec_hdr.attribute13
 ,rec_hdr.attribute14
 ,rec_hdr.attribute15
 ,APPS.FND_GLOBAL.CONC_REQUEST_ID -- request_id
 ,NULL -- program_application_id
 ,NULL -- program_id
 ,NULL -- program_update_date
 ,rec_hdr.vat_registration_num
 ,rec_hdr.auto_calculate_interest_flag
 ,rec_hdr.exclude_freight_from_discount
 ,rec_hdr.tax_reporting_name
 ,rec_hdr.allow_awt_flag
 ,rec_hdr.awt_group_id
 ,rec_hdr.awt_group_name
 ,rec_hdr.global_attribute1
 ,rec_hdr.global_attribute2
 ,rec_hdr.global_attribute3
 ,rec_hdr.global_attribute4
 ,rec_hdr.global_attribute5
 ,rec_hdr.global_attribute6
 ,rec_hdr.global_attribute7
 ,rec_hdr.global_attribute8
 ,rec_hdr.global_attribute9
 ,rec_hdr.global_attribute10
 ,rec_hdr.global_attribute11
 ,rec_hdr.global_attribute12
 ,rec_hdr.global_attribute13
 ,rec_hdr.global_attribute14
 ,rec_hdr.global_attribute15
 ,rec_hdr.global_attribute16
 ,rec_hdr.global_attribute17
 ,rec_hdr.global_attribute18
 ,rec_hdr.global_attribute19
 ,rec_hdr.global_attribute20
 ,rec_hdr.global_attribute_category
 ,rec_hdr.edi_transaction_handling
 ,rec_hdr.edi_payment_method
 ,rec_hdr.edi_payment_format
 ,rec_hdr.edi_remittance_method
 ,rec_hdr.edi_remittance_instruction
 ,rec_hdr.bank_charge_bearer
 ,rec_hdr.match_option
 ,rec_hdr.future_dated_payment_ccid
 ,rec_hdr.create_debit_memo_flag
 ,rec_hdr.offset_tax_flag
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL
 ,NULL);

          UPDATE XXHR.xxcsc_ap_supplier_headers hdr
             SET hdr.status_flag = x_transfered_flag
           WHERE hdr.vendor_number = rec_hdr.vendor_number
    AND hdr.record_id = rec_hdr.record_id;

          FOR rec_sit IN  cur_sit (x_validate_flag,rec_hdr.vendor_number) LOOP
              BEGIN
     
        INSERT INTO APPS.ap_supplier_sites_int
       (
 vendor_interface_id
,last_update_date
,last_updated_by
,vendor_id
,vendor_site_code
,vendor_site_code_alt
,last_update_login
,creation_date
,created_by
,purchasing_site_flag
,rfq_only_site_flag
,pay_site_flag
,attention_ar_flag
,address_line1
,address_lines_alt
,address_line2
,address_line3
,city
,state
,zip
,province
,country
,area_code
,phone
,customer_num
,ship_to_location_id
,ship_to_location_code
,bill_to_location_id
,bill_to_location_code
,ship_via_lookup_code
,freight_terms_lookup_code
,fob_lookup_code
,inactive_date
,fax
,fax_area_code
,telex
,payment_method_lookup_code
,terms_date_basis
,vat_code
,distribution_set_id
,distribution_set_name
,accts_pay_code_combination_id
,prepay_code_combination_id
,pay_group_lookup_code
,payment_priority
,terms_id
,terms_name
,invoice_amount_limit
,pay_date_basis_lookup_code
,always_take_disc_flag
,invoice_currency_code
,payment_currency_code
,hold_all_payments_flag
,hold_future_payments_flag
,hold_reason
,hold_unmatched_invoices_flag
,ap_tax_rounding_rule
,auto_tax_calc_flag
,auto_tax_calc_override
,amount_includes_tax_flag
,exclusive_payment_flag
,tax_reporting_site_flag
,attribute_category
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,request_id
,program_application_id
,program_id
,program_update_date
,exclude_freight_from_discount
,vat_registration_num
,org_id
,operating_unit_name
,address_line4
,county
,address_style
,language
,allow_awt_flag
,awt_group_id
,awt_group_name
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,global_attribute_category
,edi_transaction_handling
,edi_id_number
,edi_payment_method
,edi_payment_format
,edi_remittance_method
,bank_charge_bearer
,edi_remittance_instruction
,pay_on_code
,default_pay_site_id
,pay_on_receipt_summary_code
,tp_header_id
,ece_tp_location_code
,pcard_site_flag
,match_option
,country_of_origin_code
,future_dated_payment_ccid
,create_debit_memo_flag
,offset_tax_flag
,supplier_notif_method
,email_address
,remittance_email
,primary_pay_site_flag
,import_request_id
,status
,reject_code
,shipping_control
,duns_number
,tolerance_id
,tolerance_name
,iby_bank_charge_bearer
,bank_instruction1_code
,bank_instruction2_code
,bank_instruction_details
,payment_reason_code
,payment_reason_comments
,delivery_channel_code
,payment_format_code
,settlement_priority
,payment_text_message1
,payment_text_message2
,payment_text_message3
,vendor_site_interface_id
,payment_method_code
,retainage_rate
,gapless_inv_num_flag
,selling_company_identifier
)
  VALUES
        (
         rec_hdr.record_id
,SYSDATE -- last_update_date
,APPS.FND_GLOBAL.USER_ID --last_updated_by
,NULL -- rec_sit.vendor_id
,rec_sit.vendor_site_code
,rec_sit.vendor_site_code_alt
,APPS.FND_GLOBAL.USER_ID -- last_update_login
,SYSDATE -- creation_date
,APPS.FND_GLOBAL.USER_ID               -- created_by
,rec_sit.purchasing_site_flag
,rec_sit.rfq_only_site_flag
,rec_sit.pay_site_flag
,rec_sit.attention_ar_flag
,rec_sit.address_line1
,rec_sit.address_lines_alt
,rec_sit.address_line2
,rec_sit.address_line3
,rec_sit.city
,rec_sit.state
,rec_sit.zip
,rec_sit.province
,rec_sit.country
,rec_sit.area_code
,rec_sit.phone
,rec_sit.customer_num
,rec_sit.ship_to_location_id
,rec_sit.ship_to_location_code
,rec_sit.bill_to_location_id
,rec_sit.bill_to_location_code
,rec_sit.ship_via_lookup_code
,rec_sit.freight_terms_lookup_code
,rec_sit.fob_lookup_code
,rec_sit.inactive_date
,rec_sit.fax
,rec_sit.fax_area_code
,rec_sit.telex
,rec_sit.payment_method_lookup_code
,rec_sit.terms_date_basis
,rec_sit.vat_code
,rec_sit.distribution_set_id
,rec_sit.distribution_set_name
,rec_sit.accts_pay_code_combination_id
,rec_sit.prepay_code_combination_id
,rec_sit.pay_group_lookup_code
,rec_sit.payment_priority
,rec_sit.terms_id
,rec_sit.terms_name
,rec_sit.invoice_amount_limit
,rec_sit.pay_date_basis_lookup_code
,rec_sit.always_take_disc_flag
,rec_sit.invoice_currency_code
,rec_sit.payment_currency_code
,rec_sit.hold_all_payments_flag
,rec_sit.hold_future_payments_flag
,rec_sit.hold_reason
,rec_sit.hold_unmatched_invoices_flag
,rec_sit.ap_tax_rounding_rule
,rec_sit.auto_tax_calc_flag
,rec_sit.auto_tax_calc_override
,rec_sit.amount_includes_tax_flag
,rec_sit.exclusive_payment_flag
,rec_sit.tax_reporting_site_flag
,rec_sit.attribute_category
,rec_sit.attribute1
,rec_sit.attribute2
,rec_sit.attribute3
,rec_sit.attribute4
,rec_sit.attribute5
,rec_sit.attribute6
,rec_sit.attribute7
,rec_sit.attribute8
,rec_sit.attribute9
,rec_sit.attribute10
,rec_sit.attribute11
,rec_sit.attribute12
,rec_sit.attribute13
,rec_sit.attribute14
,rec_sit.attribute15
,rec_sit.request_id
,NULL -- program_application_id
,NULL -- program_id
,NULL -- program_update_date
,rec_sit.exclude_freight_from_discount
,rec_sit.vat_registration_num
,rec_sit.org_id
,rec_sit.org_name
,rec_sit.address_line4
,rec_sit.county
,rec_sit.address_style
,rec_sit.language
,rec_sit.allow_awt_flag
,rec_sit.awt_group_id
,rec_sit.awt_group_name
,rec_sit.global_attribute1
,rec_sit.global_attribute2
,rec_sit.global_attribute3
,rec_sit.global_attribute4
,rec_sit.global_attribute5
,rec_sit.global_attribute6
,rec_sit.global_attribute7
,rec_sit.global_attribute8
,rec_sit.global_attribute9
,rec_sit.global_attribute10
,rec_sit.global_attribute11
,rec_sit.global_attribute12
,rec_sit.global_attribute13
,rec_sit.global_attribute14
,rec_sit.global_attribute15
,rec_sit.global_attribute16
,rec_sit.global_attribute17
,rec_sit.global_attribute18
,rec_sit.global_attribute19
,rec_sit.global_attribute20
,rec_sit.global_attribute_category
,rec_sit.edi_transaction_handling
,rec_sit.edi_id_number
,rec_sit.edi_payment_method
,rec_sit.edi_payment_format
,rec_sit.edi_remittance_method
,rec_sit.bank_charge_bearer
,rec_sit.edi_remittance_instruction
,rec_sit.pay_on_code
,rec_sit.default_pay_site_id
,rec_sit.pay_on_receipt_summary_code
,rec_sit.tp_header_id
,rec_sit.ece_tp_location_code
,rec_sit.pcard_site_flag
,rec_sit.match_option
,rec_sit.country_of_origin_code
,rec_sit.future_dated_payment_ccid
,rec_sit.create_debit_memo_flag
,rec_sit.offset_tax_flag
,rec_sit.supplier_notif_method
,rec_sit.email_address
,rec_sit.remittance_email
,rec_sit.primary_pay_site_flag
,NULL -- import_request_id
,NULL -- status
,NULL -- reject_code
,rec_sit.shipping_control
,rec_sit.duns_number
,rec_sit.tolerance_id
,rec_sit.tolerance_name
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,rec_sit.record_id
,NULL
,rec_sit.retainage_rate
,rec_sit.gapless_inv_num_flag
,rec_sit.selling_company_identifier
);

        UPDATE XXHR.xxcsc_ap_supplier_sites sit
                    SET sit.status_flag = x_transfered_flag
                  WHERE sit.vendor_number = rec_hdr.vendor_number
           AND sit.vendor_site_code = rec_sit.vendor_site_code
           AND sit.record_id = rec_sit.record_id;

        FOR rec_con IN  cur_con (x_validate_flag,rec_hdr.vendor_number,rec_sit.vendor_site_code) LOOP
            BEGIN
INSERT INTO APPS.ap_sup_site_contact_int
      (
  last_update_date
  ,last_updated_by
  ,vendor_site_id
  ,vendor_site_code
  ,org_id
  ,operating_unit_name
  ,last_update_login
  ,creation_date
  ,created_by
  ,inactive_date
  ,first_name
  ,middle_name
  ,last_name
  ,prefix
  ,title
  ,mail_stop
  ,area_code
  ,phone
  ,program_application_id
  ,program_id
  ,program_update_date
  ,request_id
  ,contact_name_alt
  ,first_name_alt
  ,last_name_alt
  ,department
  ,import_request_id
  ,status
  ,reject_code
  ,email_address
  ,url
  ,alt_area_code
  ,alt_phone
  ,fax_area_code
  ,fax
  ,vendor_interface_id
  ,vendor_id
  ,vendor_contact_interface_id
)
 VALUES
(
SYSDATE --  last_update_date
  ,APPS.FND_GLOBAL.USER_ID -- last_updated_by
  ,rec_sit.vendor_site_id
  ,rec_con.vendor_site_code
  ,rec_con.org_id -- org_id
  ,rec_con.org_name -- operating_unit_name
  ,APPS.FND_GLOBAL.USER_ID -- last_update_login
  ,SYSDATE -- creation_date
  ,APPS.FND_GLOBAL.USER_ID -- created_by
  ,rec_con.inactive_date
  ,rec_con.first_name
  ,rec_con.middle_name
  ,rec_con.last_name
  ,rec_con.prefix
  ,rec_con.title
  ,rec_con.mail_stop
  ,rec_con.area_code
  ,rec_con.phone
  ,NULL -- program_application_id
  ,NULL -- program_id
  ,NULL -- program_update_date
  ,rec_con.request_id
  ,rec_con.contact_name_alt
  ,rec_con.first_name_alt
  ,rec_con.last_name_alt
  ,rec_con.department
  ,NULL -- import_request_id
  ,NULL -- status
  ,NULL -- reject_code
  ,rec_con.email_address
  ,rec_con.url
  ,rec_con.alt_area_code
  ,rec_con.alt_phone
  ,rec_con.fax_area_code
  ,rec_con.fax
  ,rec_hdr.record_id
  ,NULL -- rec_hdr.record_id
  ,rec_con.record_id
);

                 UPDATE XXHR.xxcsc_ap_supplier_contacts con
                           SET con.status_flag = x_transfered_flag
                         WHERE con.vendor_number = rec_hdr.vendor_number
                  AND con.vendor_site_code = rec_sit.vendor_site_code
                  AND con.record_id = rec_con.record_id;

COMMIT;

            EXCEPTION
                        WHEN OTHERS THEN
                        XXCSC_AP_SUPP_PRINT_PROC ('Contact Error: Error occured while SUPPLIER CONATCS data transfer from Staging table into Interface Table ');
               ROLLBACK;
            END;
        END LOOP;

              EXCEPTION
                 WHEN OTHERS THEN
                 XXCSC_AP_SUPP_PRINT_PROC ('Site Error: Error occured while SUPPLIER SITES data transfer from Staging table into Interface Table ');
        ROLLBACK;
              END;
          END LOOP;

       EXCEPTION
          WHEN OTHERS THEN
          XXCSC_AP_SUPP_PRINT_PROC ('Header Error: Error occured while SUPPLIER HEADERS data transfer from Staging table into Interface Table ');
          ROLLBACK;
       END;
   END LOOP;

      XXCSC_AP_SUPP_STATUS_PROC (NULL
                   ,x_nottransfer_flag -- x_status
       );


    IF x_stage IN (x_transfer_stg, x_all_stg) THEN
      XXCSC_AP_SUPP_ERROR_PROC (x_object_name
        ,x_stage
      );
   END IF;

EXCEPTION
   WHEN OTHERS THEN
        XXCSC_AP_SUPP_PRINT_PROC( 'ERROR OCCURED : '|| SQLCODE );
        XXCSC_AP_SUPP_PRINT_PROC( 'ERROR DESCRIPTION - ' || SQLERRM );
        ROLLBACK;

END XXCSC_AP_SUPP_TRANSFER_PROC;

---------------------------------------------------------------------------------------------
-- PROCEDURE NAME  :  XXCSC_AP_SUPP_ERROR_PROC
-- DESCRIPTION     :  Error Report Generation
---------------------------------------------------------------------------------------------

PROCEDURE XXCSC_AP_SUPP_ERROR_PROC (x_object_name IN   VARCHAR2
  ,x_stage IN   VARCHAR2
  )
IS
-- Variable Declaration
  x_title VARCHAR2(100);
  x_status VARCHAR2(100);
  x_req_id NUMBER;
  x_req_id_1 NUMBER;
  x_start_dt VARCHAR2(100);
  x_end_dt VARCHAR2(100);
  x_exec_time VARCHAR2(100);
  x_conc_prog_name VARCHAR2(100);
  x_param1 VARCHAR2(100);
  x_param2 VARCHAR2(100);
  x_param3 VARCHAR2(100);
  x_sqlqry VARCHAR2(2000);
  x_sqlqry1 VARCHAR2(2000);
  x_err_desc VARCHAR2(2000);
  x_cnt NUMBER  := 0;
  x_key2 NUMBER;
  x_key3 NUMBER;
  x_arg1 VARCHAR2(300);
  x_arg2 VARCHAR2(300);
  x_arg3 VARCHAR2(300);
  x_arg4 VARCHAR2(300);
  x_arg5 VARCHAR2(300);
  x_flag VARCHAR2(1):= 'Y';
  x_str VARCHAR2(200):=' ';

-- Ref Cursor Delaration

  TYPE x_ref_cur IS ref cursor;
  x_dyn_cur   x_ref_cur;
  x_dyn_cur1  x_ref_cur;

  CURSOR cur_tbl IS
  SELECT st.table_name
        ,st.table_description
    FROM XXHR.xxcsc_cmn_metadata_all st
   WHERE st.object_name = TRIM(x_object_name)
     AND st.enable_flag = x_yes
ORDER BY st.object_dep_seq;

  CURSOR cur_det IS
  SELECT st.table_name
        ,st.table_description
        ,st.key_column1
        ,NVL(st.key_column2,1) AS key_column2
        ,NVL(st.key_column3,1) AS key_column3
    FROM XXHR.xxcsc_cmn_metadata_all st
   WHERE st.object_name =  TRIM(x_object_name)
     AND st.enable_flag = x_yes
ORDER BY st.object_dep_seq;

BEGIN
    XXCSC_AP_SUPPLIERS_CONV_PKG.x_object := x_object_name;

    SELECT MAX(REQUEST_ID)
      INTO x_req_id_1
      FROM APPS.FND_CONCURRENT_REQUESTS CR
          ,APPS.FND_CONCURRENT_PROGRAMS_TL B
     WHERE CR.CONCURRENT_PROGRAM_ID = B.CONCURRENT_PROGRAM_ID
       AND ARGUMENT1 = x_object_name;


     SELECT
        ' CONVERSION SUMMARY DETAILS' AS Title          
        ,DECODE(mt.status_code,'C','COMPLETED','E','ERROR') AS status_code        
        ,mt.request_id AS request_id
        ,TO_CHAR(mt.actual_start_date,'DD-MON-YYYY HH:MI:SS') AS actual_start_date
        ,TO_CHAR(SYSDATE,'DD-MON-YYYY HH:MI:SS') AS actual_completion_date
        ,FLOOR(((SYSDATE - mt.actual_start_date)*24*60*60)/3600)|| ' Hours ' ||
              FLOOR((((SYSDATE - mt.actual_start_date)*24*60*60) -
              FLOOR(((SYSDATE - mt.actual_start_date)*24*60*60)/3600)*3600)/60)|| ' Minutes ' ||
              ROUND((((SYSDATE - mt.actual_start_date)*24*60*60) -
              FLOOR(((SYSDATE - mt.actual_start_date)*24*60*60)/3600)*3600 -
              (FLOOR((((SYSDATE - mt.actual_start_date)*24*60*60) -
              FLOOR(((SYSDATE - mt.actual_start_date)*24*60*60)/3600)*3600)/60)*60) )) || ' Secs '
  AS Duration
        ,b.user_concurrent_program_name  AS user_concurrent_program_name
        ,mt.argument1 AS argument1
        ,mt.argument2 AS argument2
        ,mt.argument3 AS argument3
    INTO x_title
        ,x_status
        ,x_req_id
        ,x_start_dt
        ,x_end_dt
        ,x_exec_time
        ,x_conc_prog_name
        ,x_param1
        ,x_param2
        ,x_param3
    FROM APPS.fnd_concurrent_requests mt
        ,APPS.fnd_concurrent_programs a
        ,APPS.fnd_concurrent_programs_TL b
   WHERE a.concurrent_program_id = b.concurrent_program_id
     AND mt.concurrent_program_id = a.concurrent_program_id
     AND mt.concurrent_program_id = b.concurrent_program_id
     AND mt.argument1 = TRIM(x_object_name)
     AND status_code != 'E'
     AND ROWNUM < 2
     AND mt. request_id = x_req_id_1
ORDER BY request_date DESC;

 -- Print Heading

    XXCSC_AP_SUPP_PRINT_PROC ( '   ');
    XXCSC_AP_SUPP_PRINT_PROC ( '   ');
    XXCSC_AP_SUPP_PRINT_PROC ('**************************************************************************');
    XXCSC_AP_SUPP_PRINT_PROC ( UPPER(x_object_name) ||' CONVERSION SUMMARY AND ERROR REPORT               ');
    XXCSC_AP_SUPP_PRINT_PROC ('**************************************************************************');
    XXCSC_AP_SUPP_PRINT_PROC ( '   ');
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Object Name',30,' ') || ':'||x_object_name);
--S    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Load Status',30,' ') || ':'||x_status);
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Concurrent Request ID',30,' ') || ':'||x_req_id );
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Program Start Date',30,' ') || ':'||x_start_dt );
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Program End Date',30,' ') || ':'||x_end_dt );
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Execution time',30,' ') || ':'||x_exec_time );  
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Concurrent Program Name',30,' ') || ':'||x_conc_prog_name );  
    XXCSC_AP_SUPP_PRINT_PROC ('Parameters:' );  
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Object Name',30,' ') || ':'||x_param1 );  
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Stage',30,' ') || ':'||x_param2 );  
    XXCSC_AP_SUPP_PRINT_PROC (RPAD('Forcefully Submit',30,' ') || ':'||x_param3 );  
    XXCSC_AP_SUPP_PRINT_PROC ('  ' );
    XXCSC_AP_SUPP_PRINT_PROC ('**************************************************************************' );
    XXCSC_AP_SUPP_PRINT_PROC ('  ' );

-- Summary Report

    FOR rec_tbl IN cur_tbl LOOP
        XXCSC_AP_SUPP_PRINT_PROC('  ' );
        XXCSC_AP_SUPP_PRINT_PROC( RPAD(rec_tbl.table_description ||' Conversion Summary Details',50,'  ') );
        XXCSC_AP_SUPP_PRINT_PROC( '**********************************************' );  
        XXCSC_AP_SUPP_PRINT_PROC('  ' );

        x_sqlqry := 'SELECT COUNT(1) FROM XXHR.'||rec_tbl.table_name;
        EXECUTE IMMEDIATE x_sqlqry INTO x_cnt;

        XXCSC_AP_SUPP_PRINT_PROC( RPAD('Total Records in '|| rec_tbl.table_description ,50,' ') || ': ' ||x_cnt );

        IF x_stage IN (x_mapping_stg, x_all_stg) THEN
              x_sqlqry1 := x_sqlqry || ' WHERE status_flag = ''' || x_mapped_flag||'''';
           EXECUTE IMMEDIATE x_sqlqry1 INTO x_cnt;
           XXCSC_AP_SUPP_PRINT_PROC( RPAD('Total Records Mapped in '|| rec_tbl.table_description ,50,' ') || ': ' ||x_cnt );
        END IF;
     
        x_sqlqry1 := ' ';

        IF x_stage IN (x_validate_stg, x_all_stg) THEN
              x_sqlqry1 := x_sqlqry || ' WHERE (status_flag IN ('''|| x_error_flag ||''' , '''|| x_warning_flag || ''') OR error_code IS NOT NULL)';
  EXECUTE IMMEDIATE x_sqlqry1 INTO x_cnt;  
           XXCSC_AP_SUPP_PRINT_PROC( RPAD('Total Records Error in  '|| rec_tbl.table_description ,50,' ') || ': ' ||x_cnt  );
        END IF;
 
        x_sqlqry1 := ' ';

        IF x_stage IN (x_transfer_stg, x_all_stg) THEN
           x_sqlqry1 := x_sqlqry || ' WHERE status_flag =  '''||  x_transfered_flag||'''';
           EXECUTE IMMEDIATE x_sqlqry1 INTO x_cnt;  
           XXCSC_AP_SUPP_PRINT_PROC( RPAD('Total Records Transfered in  '|| rec_tbl.table_description ,50,' ') || ': ' ||x_cnt  );
        END IF;
     
    END LOOP;
 
    IF x_stage IN (x_all_stg, x_validate_stg) THEN

       XXCSC_AP_SUPP_PRINT_PROC( '  ' );
       XXCSC_AP_SUPP_PRINT_PROC( '  ' );
       XXCSC_AP_SUPP_PRINT_PROC( 'SUMMARY ERROR DETAILS' );
       XXCSC_AP_SUPP_PRINT_PROC( '*********************' );
       XXCSC_AP_SUPP_PRINT_PROC( '  ' );

       FOR REC_DET IN CUR_DET LOOP  
  x_sqlqry1 := 'SELECT  count(mt.record_id),st.valid_code,st.valid_message
              FROM  XXHR.' ||REC_DET.TABLE_NAME || ' MT
       ,XXHR.xxcsc_cmn_validations_all st
         WHERE INSTR(mt.error_code,st.valid_code)>0
           AND mt.error_code IS NOT NULL
      GROUP BY st.valid_code,st.valid_message
      ORDER BY COUNT(valid_code) DESC';

  XXCSC_AP_SUPP_PRINT_PROC('  ');
  XXCSC_AP_SUPP_PRINT_PROC('Summary of Error for '||REC_DET.TABLE_DESCRIPTION );
  XXCSC_AP_SUPP_PRINT_PROC(RPAD('*',50,'*') );

  x_flag:='Y';
  OPEN x_dyn_cur1 for x_sqlqry1;
  LOOP
      FETCH x_dyn_cur1 INTO x_arg1,x_arg2,x_arg3 ;
      EXIT WHEN x_dyn_cur1%NOTFOUND;

      IF (x_flag='Y') THEN
 x_flag:='N';
 XXCSC_AP_SUPP_PRINT_PROC(RPAD('COUNT',10,' ')||RPAD('ERROR_CODE',30,' ')||RPAD('ERROR_MESSAGE',100,' ') );
 XXCSC_AP_SUPP_PRINT_PROC(RPAD('-',10,'-')||RPAD('-',30,'-')||RPAD('-',100,'-') );
      END IF;

      XXCSC_AP_SUPP_PRINT_PROC(RPAD(x_arg1,10,' ')||RPAD(x_arg2,30,' ')||RPAD(x_arg3,100,' ') );

  END LOOP;
  CLOSE x_dyn_cur1;
       END LOOP;

-- Detail Report
       XXCSC_AP_SUPP_PRINT_PROC ('   ' );
       XXCSC_AP_SUPP_PRINT_PROC ('   ' );
       XXCSC_AP_SUPP_PRINT_PROC( 'ERROR WITH DETAILS' );
       XXCSC_AP_SUPP_PRINT_PROC( '******************' );  
       XXCSC_AP_SUPP_PRINT_PROC ('   ' );

       FOR REC_DET IN CUR_DET LOOP
           x_sqlqry1 := 'SELECT  MT.'||rec_det.key_column1 ||'
                               ,' ||rec_det.key_column2 ||'
                               ,' ||rec_det.key_column3 ||'
                               ,st.valid_code
                               ,' || 'st.valid_message
                         FROM  XXHR.' ||rec_det.table_name || ' mt
                              ,XXHR.xxcsc_cmn_validations_all st
                        WHERE INSTR(mt.error_code,st.valid_code)>0
                          AND mt.error_code IS NOT NULL';
         
  IF TRIM(rec_det.key_column2) = '1' THEN
     x_key2 := 0;
  ELSE
     x_key2 := 20;
  END IF;

  IF TRIM(rec_det.key_column3) = '1' THEN
     x_key3 := 0;
  ELSE
     x_key3 := 20;
  END IF;

           XXCSC_AP_SUPP_PRINT_PROC( '  ' );    
           XXCSC_AP_SUPP_PRINT_PROC(RPAD('Error Details For '||rec_det.table_description,50,'  ') );
           XXCSC_AP_SUPP_PRINT_PROC(RPAD('*',50,'*') );
           XXCSC_AP_SUPP_PRINT_PROC( '  ' );
           XXCSC_AP_SUPP_PRINT_PROC(RPAD(REPLACE(TO_CHAR(rec_det.key_column1),'1',' '),20,' ')||RPAD(REPLACE(TO_CHAR(rec_det.key_column2),'1',' '),x_key2,' ')||RPAD(REPLACE(TO_CHAR(rec_det.key_column3),'1',' '),x_key3,' ')||RPAD('VALIDATION CODE ',25,' ')||RPAD('VALIDATION DESCRIPTION',75,' ') );
           XXCSC_AP_SUPP_PRINT_PROC(RPAD('-',20,'-')||RPAD('-',20,'-')||RPAD('-',20,'-')||RPAD('-',25,'-')||RPAD('-',75,'-') );
     
           x_sqlqry1 := REPLACE(x_sqlqry1,'1','DECODE(1,1,NULL)' );

           x_flag:= 'Y';

           OPEN x_dyn_cur FOR x_sqlqry1;
           LOOP
               FETCH x_dyn_cur INTO x_arg1,x_arg2,x_arg3,x_arg4,x_arg5 ;
         
      EXIT WHEN x_dyn_cur%NOTFOUND;

               XXCSC_AP_SUPP_PRINT_PROC(RPAD(x_arg1,20,' ')||RPAD(x_arg2,x_key2,' ')||RPAD(x_arg3,x_key3,' ')||RPAD(x_arg4,25,' ')||RPAD(x_arg5,75,' ') );      
           END LOOP;

       CLOSE x_dyn_cur;
       END LOOP;
    END IF;

    XXCSC_AP_SUPP_PRINT_PROC ('  ');
    XXCSC_AP_SUPP_PRINT_PROC(RPAD('*',140,'*') );
    XXCSC_AP_SUPP_PRINT_PROC (RPAD(' ',66,' ')||'END OF REPORT' || RPAD(' ',66,' '));
    XXCSC_AP_SUPP_PRINT_PROC(RPAD('*',140,'*') );


EXCEPTION
   WHEN OTHERS THEN
XXCSC_AP_SUPP_PRINT_PROC( 'ERROR CODE        : ' || SQLCODE );
XXCSC_AP_SUPP_PRINT_PROC( 'ERROR DESCRIPTION : ' || SQLERRM );
        ROLLBACK;

END XXCSC_AP_SUPP_ERROR_PROC;


---------------------------------------------------------------------------------------------
-- PROCEDURE NAME  :  XXCSC_AP_SUPP_PRINT_PROC
-- DESCRIPTION     :  Error Report Design
---------------------------------------------------------------------------------------------

PROCEDURE XXCSC_AP_SUPP_PRINT_PROC (x_print   IN  VARCHAR2
   )
IS
   file_handle              UTL_FILE.FILE_TYPE;
   x_directory    VARCHAR2(50) := '/usr/tmp';
   x_reid    NUMBER ;
   x_file_name    VARCHAR2(100);
   x_flag                   VARCHAR2(1);
   x_accept    VARCHAR2(1);
 
BEGIN

  x_file_name := 'XXCSC_AP_SUPPLIER_ERROR.dat';

  IF TRIM(XXCSC_AP_SUPPLIERS_CONV_PKG.x_flag) = 'Y' THEN
     x_accept := 'W';
     XXCSC_AP_SUPPLIERS_CONV_PKG.x_flag := 'N';
  ELSE
     x_accept := 'A' ;
  END IF;

  file_handle := UTL_FILE.FOPEN(x_directory, x_file_name ,x_accept);

  UTL_FILE.PUT_LINE(file_handle,x_print);

  UTL_FILE.FCLOSE(file_handle);



EXCEPTION
   WHEN  Utl_File.INVALID_OPERATION THEN
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'The file could not be opened or operated on as requested. ');
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'The file could not be opened or operated on as requested. ');
         Utl_File.FClose_All;
         ROLLBACK;
   WHEN Utl_File.INVALID_PATH THEN
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'File location or filename was invalid.');
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'File location or filename was invalid.');
         utl_file.fclose_all;
         ROLLBACK;
   WHEN Utl_File.INVALID_MODE THEN
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'The open_mode parameter in FOPEN was invalid. ');
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'The open_mode parameter in FOPEN was invalid. ');
         Utl_File.FClose_All;
         ROLLBACK;
   WHEN Utl_File.INVALID_FILEHANDLE THEN
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'The file handle was invalid. ');
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'The file handle was invalid. ');
         Utl_File.FClose_All;
         ROLLBACK;
   WHEN Utl_File.READ_ERROR THEN
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'An operating system error occurred during the read operation.');
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'An operating system error occurred during the read operation.');
         Utl_File.FClose_All;
         ROLLBACK;
   WHEN Utl_File.WRITE_ERROR THEN
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'An operating system error occurred during the write operation. ');
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'An operating system error occurred during the write operation. ');
         Utl_File.FClose_All;
         ROLLBACK;
   WHEN Utl_File.INTERNAL_ERROR THEN
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'An unspecified error in PL/SQL. ');
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'An unspecified error in PL/SQL. ');
         utl_file.fclose_all;
         ROLLBACK;
   WHEN OTHERS THEN
        -- fnd_file.new_line(APPS.FND_FILE.LOG,1);
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'error in generating output file '||'$'||x_directory||'$'||'/'||'$'||x_file_name);
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,SQLERRM);
         APPS.FND_FILE.PUT_LINE(APPS.FND_FILE.LOG,'*----*----**----*----**----*----**----*----**----*');
END XXCSC_AP_SUPP_PRINT_PROC;

---------------------------------------------------------------------------------------------
-- PROCEDURE NAME  :  XXCSC_AP_SUPP_STATUS_PROC
-- DESCRIPTION     :  Update the PROCESS_FLAG and STATUS_FLAG
---------------------------------------------------------------------------------------------

PROCEDURE XXCSC_AP_SUPP_STATUS_PROC (x_process   IN  VARCHAR2
   ,x_status   IN  VARCHAR2
   )
IS

CURSOR cur_hr IS
SELECT hdr.*
  FROM XXHR.xxcsc_ap_supplier_headers hdr;
 
CURSOR cur_st IS
SELECT sit.*
  FROM XXHR.xxcsc_ap_supplier_sites sit;

CURSOR cur_cn IS
SELECT con.*
  FROM XXHR.xxcsc_ap_supplier_contacts con;

BEGIN

---------------------------------------------------------------------------------------------
-- UPDATE PROCESS FLAG
---------------------------------------------------------------------------------------------
   IF NVL(x_process,'$') != '$' THEN
--- Update the PROCESS FLAG
   FOR rec_hr IN cur_hr LOOP
       UPDATE XXHR.xxcsc_ap_supplier_headers
          SET process_flag = x_process
    ,status_flag = NULL
    ,error_code = NULL;
     
       COMMIT;
   END LOOP;

--- Update the PROCESS FLAG
   FOR rec_st IN cur_st LOOP
       UPDATE XXHR.xxcsc_ap_supplier_sites
          SET process_flag = x_process
    ,status_flag = NULL
    ,error_code = NULL;

       COMMIT;
   END LOOP;

--- Update the PROCESS FLAG
   FOR rec_cn IN cur_cn LOOP
       UPDATE XXHR.xxcsc_ap_supplier_contacts
          SET process_flag = x_process
    ,status_flag = NULL
    ,error_code = NULL;

       COMMIT;
   END LOOP;

END IF;
---------------------------------------------------------------------------------------------
-- UPDATE STATUS FLAG
---------------------------------------------------------------------------------------------

   IF NVL(x_status,'$') != '$' THEN
--- Update the STATUS FLAG
   FOR rec_hr IN cur_hr LOOP
       UPDATE XXHR.xxcsc_ap_supplier_headers
          SET status_flag = x_status
        WHERE status_flag IS NULL;
     
       COMMIT;
   END LOOP;

--- Update the STATUS FLAG
   FOR rec_st IN cur_st LOOP
       UPDATE XXHR.xxcsc_ap_supplier_sites
          SET status_flag = x_status
        WHERE status_flag IS NULL;

       COMMIT;
   END LOOP;

--- Update the STATUS FLAG
   FOR rec_cn IN cur_cn  LOOP
       UPDATE XXHR.xxcsc_ap_supplier_contacts
          SET status_flag = x_status
        WHERE status_flag IS NULL;

       COMMIT;
   END LOOP;

END IF;

EXCEPTION
   WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE( 'ERROR CODE        : ' || SQLCODE );
DBMS_OUTPUT.PUT_LINE( 'ERROR DESCRIPTION : ' || SQLERRM );
        ROLLBACK;

END XXCSC_AP_SUPP_STATUS_PROC;

---------------------------------------------------------------------------------------------
-- PROCEDURE NAME  :  XXCSC_AP_SUPP_RECON_PROC
-- DESCRIPTION     :  RECON Report Design
---------------------------------------------------------------------------------------------

PROCEDURE XXCSC_AP_SUPP_RECON_PROC (x_object   IN  VARCHAR2
   )
IS
   file_handle              UTL_FILE.FILE_TYPE;
   x_directory    VARCHAR2(50)  := '/usr/tmp';
   x_file_name    VARCHAR2(100) := 'XXCSC_AP_SUPPLIER_ERROR.dat';

 
   CURSOR cur_recon IS
          SELECT 'SUPPLIER HEADERS RECONCILIATION REPORT' data FROM DUAL
          UNION ALL
          SELECT '*************************************' FROM DUAL
          UNION ALL
          SELECT RPAD('Total Record Count in Staging Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_headers
          UNION ALL
          SELECT RPAD('Total Record Errored in staging Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_headers WHERE error_code IS NOT NULL
          UNION ALL
          SELECT RPAD('Total Record transfered from staging into Interface Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_headers WHERE status_flag = 'T' AND process_flag = 'T'
          UNION ALL
          SELECT RPAD('Total Record in Interface Table',80,' ') || COUNT(1) FROM APPS.ap_suppliers_int
          UNION ALL
          SELECT RPAD('Total Record Processed from Interface into Oracle Base Table',80,' ') || COUNT(1) FROM APPS.ap_suppliers_int WHERE status ='PROCESSED'
          UNION ALL
          SELECT RPAD('Total Record Rejected while transfering from Interface into Oracle Base Table',80,' ') || COUNT(1) FROM APPS.ap_suppliers_int WHERE status ='REJECTED'
          UNION ALL
          SELECT '  ' FROM DUAL
          UNION ALL
          SELECT 'SUPPLIER SITES RECONCILIATION REPORT' FROM DUAL
          UNION ALL
          SELECT '*************************************' FROM DUAL
          UNION ALL
          SELECT RPAD('Total Record Count in Staging Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_sites
          UNION ALL
          SELECT RPAD('Total Record Errored in staging Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_sites WHERE error_code IS NOT NULL
          UNION ALL
          SELECT RPAD('Total Record transfered from staging into Interface Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_sites WHERE status_flag = 'T' AND process_flag = 'T'
          UNION ALL
          SELECT RPAD('Total Record in Interface Table',80,' ') || COUNT(1) FROM APPS.ap_supplier_sites_int
          UNION ALL
          SELECT RPAD('Total Record Processed from Interface into Oracle Base Table',80,' ') || COUNT(1) FROM APPS.ap_supplier_sites_int WHERE status ='PROCESSED'
          UNION ALL
          SELECT RPAD('Total Record Rejected while transfering from Interface into Oracle Base Table',80,' ') || COUNT(1) FROM APPS.ap_supplier_sites_int WHERE status ='REJECTED'
          UNION ALL
          SELECT '  ' FROM DUAL
          UNION ALL
          SELECT 'SUPPLIER CONTACTS RECONCILIATION REPORT' FROM DUAL
          UNION ALL
          SELECT '**************************************' FROM DUAL
          UNION ALL
          SELECT RPAD('Total Record Count in Staging Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_contacts
          UNION ALL
          SELECT RPAD('Total Record Errored in Staging Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_contacts WHERE error_code IS NOT NULL
          UNION ALL
          SELECT RPAD('Total Record transfered from staging into Interface Table',80,' ') || COUNT(1) FROM XXHR.xxcsc_ap_supplier_contacts WHERE status_flag = 'T' AND process_flag = 'T'
          UNION ALL
          SELECT RPAD('Total Record in Interface Table:',80,' ') || COUNT(1) FROM APPS.ap_sup_site_contact_int
          UNION ALL
          SELECT RPAD('Total Record Processed from Interface into Oracle Base Table',80,' ') || COUNT(1) FROM APPS.ap_sup_site_contact_int WHERE status ='PROCESSED'
          UNION ALL
          SELECT RPAD('Total Record Rejected while transfering from Interface into Oracle Base Table',80,' ') || COUNT(1) FROM APPS.ap_sup_site_contact_int WHERE status ='REJECTED'
          UNION ALL
          SELECT '  ' FROM DUAL;
     
   BEGIN
     file_handle := UTL_FILE.FOPEN(x_directory, x_file_name ,'W');

     file_handle := UTL_FILE.FOPEN(x_directory, x_file_name ,'A');

     UTL_FILE.PUT_LINE(file_handle, RPAD('*',85,'*'));  
     UTL_FILE.PUT_LINE(file_handle, RPAD(' ',35,' ')|| x_object ||' CONVERSION RECON REPORT' || RPAD(' ',35, ' '));
     UTL_FILE.PUT_LINE(file_handle, RPAD('*',85,'*'));
     UTL_FILE.PUT_LINE(file_handle, '  ');
     UTL_FILE.PUT_LINE(file_handle, '  ');

   
     FOR rec_recon IN cur_recon LOOP
         UTL_FILE.PUT_LINE(file_handle, rec_recon.data);  
     END LOOP;

     UTL_FILE.PUT_LINE(file_handle, '  ');
     UTL_FILE.PUT_LINE(file_handle, '  ');
     UTL_FILE.PUT_LINE(file_handle, RPAD('*',85,'*'));
     UTL_FILE.PUT_LINE(file_handle, RPAD(' ',35,' ')|| 'END OF THE REPORT' || RPAD(' ',35, ' '));
     UTL_FILE.PUT_LINE(file_handle, RPAD('*',85,'*'));
     UTL_FILE.PUT_LINE(file_handle, '  ');
     UTL_FILE.PUT_LINE(file_handle, '  ');

     UTL_FILE.FCLOSE(file_handle);
 
EXCEPTION
   WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE( 'ERROR CODE        : ' || SQLCODE );
DBMS_OUTPUT.PUT_LINE( 'ERROR DESCRIPTION : ' || SQLERRM );
DBMS_OUTPUT.PUT_LINE( 'ERROR OCCURED WHILE PRINTING THE RECON REPORT');
        ROLLBACK;

END XXCSC_AP_SUPP_RECON_PROC;

END XXCSC_AP_SUPPLIERS_CONV_PKG;

/

Develop Xml Publisher Reports Steps

Steps to Develop Xml Publisher Reports

Step 1: Register the Report as concurrent Program and change the Output Format as XML.




Step 2: Submit the Concurrent program and Click on view out put to store the xml data.




File Save as User_Report.xml






Step 3: Use the Xml Tags and Create the Template as per requirement.







Step 4: Open Ms Word Document and design the Layout using xml tags.


Step 5: Save the file with .rtf (Rich Text Format).




Step 6: Register the Template and Data Definition in the Xml Publisher Administrator.


Step7: Login in to Xml Publisher Administrator.


Navigation: xml Publisher AdministratorHome Data Definition


Click on Create Data Definition Button.




Click on Apply Button and copy the Data Definition name.


Step 6: Click on Template Tab and Create Template Button.



Click on Apply button.


Step 7: Submit the Concurrent Program.




Check layout is attached to the Concurrent Program.


Click on view out to check the output.



Template Name has to come here.


Data Definition Name


Upload the Template


Concurrent Program
Short Name


Change Type as Rich Text Format.

Change Format as XML

Create New Supplier, Supplier Sites and Contact Information

CREATE TABLE XXC_SUPP_STAGE
(
  VENDOR_NUMBER     VARCHAR2(30),
  VENDOR_NAME     VARCHAR2(240),
  VENDOR_TYPE      VARCHAR2(300),
  ORGANIZATION_TYPE    VARCHAR2(300),
  VENDOR_SITE      VARCHAR2(300),
  VENDOR_PAY_GROUP           VARCHAR2(300),
  VENDOR_PAYMENT_TERMS   VARCHAR2(300),
  ADDRESS_LINE1     VARCHAR2(300),
  ADDRESS_LINE2     VARCHAR2(300),
  ADDRESS_LINE3     VARCHAR2(300),
  ADDRESS_LINE4     VARCHAR2(300),
  CITY       VARCHAR2(25),
  STATE       VARCHAR2(15),
  COUNTRY      VARCHAR2(25),
  ZIP_CODE      VARCHAR2(20),
  VENDOR_SITES_PAY_GROUP   VARCHAR2(300),
  VENDOR_SITES_PAYMENT_TERMS  VARCHAR2(300),
  OPERATING_UNIT_NAME    VARCHAR2(500),
  LIABILITY_ACCOUNT    VARCHAR2(300),
  PREPAY_ACCOUNT                            VARCHAR2(300),
  BANK_NAME      VARCHAR2(300),
  BANK_BRANCH_NAME    VARCHAR2(300),
  BANK_ACCOUNT_NAME                     VARCHAR2(300),
  BANK_ACCOUNT_NUMBER                 VARCHAR2(300),
  CURRENCY_CODE                             VARCHAR2(50),
  CONTACT_FIRST_NAME                     VARCHAR2(100),
  CONTACT_LAST_NAME                      VARCHAR2(150),
  CONTACT_PHONE                             VARCHAR2(100),
  CONTACT_EMAIL                              VARCHAR2(300),
  CONTACT_FAX                                 VARCHAR2(100),
  SET_OF_BOOKS_ID                          NUMBER,
  V_SUPP_FLAG                                  VARCHAR2(10),
  V_SITE_FLAG                                   VARCHAR2(10),
  V_CONTACT_FLAG                            VARCHAR2(10),
  SUPPLIER_ERROR_MESSAGE              VARCHAR2(2000),
  SITE_ERROR_MESSAGE                     VARCHAR2(2000),
  CONTACT_ERROR_MESSAGE              VARCHAR2(200),
  CREATED_BY                                    NUMBER,
  CREATION_DATE                              DATE,
  LAST_UPDATED_BY                           NUMBER,
  LAST_UPDATE_DATE                         DATE,
  LAST_UPDATE_LOGIN                        NUMBER
)

-----------------End Of Staging Table Creation---------------------------------------



---------------------Loader File To load Flat File Data Into Staging Table------------------------------
OPTIONS (SKIP=1)
LOAD DATA
INFILE  '/u02/appltest/apps/apps_st/appl/ap/12.0.0/bin/SAMPLEDATA.txt'
INSERT
into table XXC_SUPP_STAGE
fields terminated by '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
 VENDOR_NAME,
 VENDOR_NUMBER,
  VENDOR_TYPE,
  ORGANIZATION_TYPE,
  VENDOR_SITE,
  VENDOR_PAY_GROUP,
  VENDOR_PAYMENT_TERMS,
  ADDRESS_LINE1,
  ADDRESS_LINE2,
  ADDRESS_LINE3,
  ADDRESS_LINE4,
  CITY,
  STATE,
  COUNTRY,
  ZIP_CODE,
  VENDOR_SITES_PAY_GROUP,
  VENDOR_SITES_PAYMENT_TERMS,
  OPERATING_UNIT_NAME,
  LIABILITY_ACCOUNT,
  PREPAY_ACCOUNT,
  BANK_NAME,
  BANK_BRANCH_NAME,
  BANK_ACCOUNT_NAME,
  BANK_ACCOUNT_NUMBER,
  CURRENCY_CODE,
  CONTACT_FIRST_NAME,
  CONTACT_LAST_NAME,
  CONTACT_PHONE,
  CONTACT_EMAIL,
  CONTACT_FAX,
  SET_OF_BOOKS_ID CONSTANT "1",
  V_SUPP_FLAG CONSTANT "N",
  V_SITE_FLAG CONSTANT "N",
  V_CONTACT_FLAG CONSTANT "N",
  SUPPLIER_ERROR_MESSAGE CONSTANT "",
  SITE_ERROR_MESSAGE     CONSTANT "",
  CONTACT_ERROR_MESSAGE  CONSTANT "",   
  CREATED_BY CONSTANT "-1",
  CREATION_DATE SYSDATE,
  LAST_UPDATED_BY CONSTANT "-1",
  LAST_UPDATE_DATE SYSDATE,
  LAST_UPDATE_LOGIN CONSTANT "-1"
)

----------------------------------End Of Loader File--------------------------------------------

CREATE OR REPLACE PACKAGE XXC_SUP_CREATION_PKG
/*
*/
IS
---THIS PROCEDURE IS TO VALIDATE SUPPLERS
PROCEDURE  XXC_SUPPLIERS_VALIDATE(p_vendor_number varchar2 default null);
 --This Procedure is used to Create Vendor.
 PROCEDURE  XXC_CREATE_SUPPLIERS(p_vendor_number varchar2 default null);
 --This Procedure is used to create Vendor sites.
 PROCEDURE  XXC_CREATE_SUPPLIER_SITES(   p_vendor_number    varchar2 default null,
     p_vendor_site      varchar2 default null);
--This Procedure is used to create vendor contact information.
PROCEDURE XXC_CREATE_SUPPLIERS_CONTACTS( p_vendor_number    varchar2 default null,
                    p_vendor_site       varchar2 default null);
---This PROCEDURE  is used to create supplier information Totally
 PROCEDURE   XXC_MAIN_SUPPLIER(
                             errbuf out NOCOPY varchar2,
                             retcode out NOCOPY varchar2,
                             p_vendor_number varchar2   default null,
                             p_vendor_site varchar2 default null);
---This PROCEDURE  is used for display purpose----------------
Procedure XXC_DISPLAY_MESSAGE(p_mode Varchar2, p_message Varchar2);
-----------CURSORs----------------------------------

----This Cursor is used for validating the stagingTable Data
CURSOR C_STAGE(p_vendor_number varchar2)
IS SELECT * FROM XXC_SUPP_STAGE
   WHERE vendor_number=nvl(p_vendor_number,vendor_number);

---------------This Cursor is used For Inserting Valid Suppliers Data Into BaseTables

CURSOR c_supplier(p_vendor_number varchar2)
 IS SELECT * FROM XXC_SUPP_STAGE WHERE
  v_supp_flag='V' AND
   vendor_number=nvl(p_vendor_number,vendor_number);

-- --------This Cursor Is used to  For Inserting Valid SupplierSites for Suppliers into the Base Tables
CURSOR c_site(p_vendor_number varchar2,p_vendor_site varchar2)
 IS  SELECT * FROM XXC_SUPP_STAGE WHERE  v_supp_flag='V' and v_site_flag='V'
           and vendor_number=nvl(p_vendor_number,vendor_number)
           and vendor_site=nvl(p_vendor_site,vendor_site);

--------------This  Cursor is Used For Inserting Valid Suppliers Contacts Data Into the Base tables
CURSOR c_contact(p_vendor_number varchar2,p_vendor_site varchar2)
 IS  SELECT  * FROM XXC_SUPP_STAGE
  WHERE  v_supp_flag='V' and v_contact_flag='V' and v_site_flag='V'
   and vendor_number=nvl(p_vendor_number,vendor_number)
   and vendor_site=nvl(p_vendor_site,vendor_site);
-----------END OF Cursors------------------------------------
END XXC_SUP_CREATION_PKG;
/



CREATE OR REPLACE PACKAGE BODY XXC_SUP_CREATION_PKG
/*
Author          : SAI GOWTHAM .V
File Name       :  XXC_SUPP_CREATION_PKG.pkb
Created Date    :  AUG 2011
Modified By  :  SAI GOWTHAM.V
Modified Date :  AUG 2011
Package Name :  XXC_SUP_CREATION_PKG
Description :  This package is used to create New Supplier, supplier sites and Contact information.
Comments        :
*/
IS
-----------PROCEDURE   for display message--------------
PROCEDURE   XXC_DISPLAY_MESSAGE(p_mode VARCHAR2, p_message VARCHAR2) is
BEGIN
 IF UPPER(p_mode) = 'output' THEN
 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,p_message);
 ELSIF UPPER(p_mode) = 'log' THEN
 FND_FILE.PUT_LINE(FND_FILE.LOG,p_message);
 dbms_output.put_line(p_message);
 END IF;
 dbms_output.put_line(substr(p_message,1,80)); 
END XXC_DISPLAY_MESSAGE;
-----------END of display message--------------------
--------start of validate suppliers--------------
procedure xxc_suppliers_validate(p_vendor_number VARCHAR2 default null)
is

-------Local Variables  Declaration
 lv_vendor_num          VARCHAR2(50);
 lv_vendor_name                VARCHAR2(100);
 lv_organization_type         VARCHAR2(200);
 lv_vendor_pay_group         VARCHAR2(200);
 lv_organization_id              VARCHAR2(250);
 lv_liability_account             VARCHAR2(300);
 lv_prepay_account             VARCHAR2(300);
 lv_terms_id          VARCHAR2(100);
 lv_supp_errmsg          VARCHAR2(2000);
 lv_site_errmsg          VARCHAR2(2000);
 lv_contact_errmsg         VARCHAR2(2000);
 lv_vendor_site_code           VARCHAR2(200);
 lv_vendor_sites_pay_group VARCHAR2(300);
 lv_vendor_type                   VARCHAR2(100);
 lv_vendor_number              VARCHAR2(250);
        lv_currency_code                VARCHAR2(50);
 lv_country_code                  VARCHAR2(10);
 lv_sites_terms_id                 VARCHAR2(100);
 lv_supp_flag                        VARCHAR2(10);
 lv_site_flag                          VARCHAR2(10);
 lv_contact_flag                     VARCHAR2(10);
 BEGIN
 XXC_DISPLAY_MESSAGE('log','Start VALIDATE_SUPLIERS ');

------Opening  The loop  from Spec For Validating Data 

 FOR CP_STAGE IN C_STAGE(p_vendor_number) LOOP

 ------Assinging values To lical Varibles to handle Errors
      
      lv_supp_flag           :='N';
      lv_site_flag             :='N';
      lv_contact_flag        :='N';
      lv_supp_errmsg       :='';  
      lv_site_errmsg         :='';  
      lv_contact_errmsg    :='';
      
      ------------------START OF VENDOR NUMBERAND VENDORNAME VALIDATION -----------------
       IF CP_STAGE.VENDOR_NUMBER IS NOT NULL THEN
   BEGIN
         SELECT SEGMENT1,VENDOR_NAME
         INTO   lv_vendor_num,LV_VENDOR_NAME
         FROM   AP_SUPPLIERS
         WHERE  TRIM(SEGMENT1)=TRIM(CP_STAGE.VENDOR_NUMBER); 
    EXCEPTION
         WHEN NO_DATA_FOUND THEN
          NULL;
         WHEN TOO_MANY_ROWS THEN
         XXC_DISPLAY_MESSAGE('log',CP_STAGE.VENDOR_NUMBER||' - '||'THERE ARE MORE THAN ONE VENDOR NUMBER ');
  WHEN OTHERS THEN
  XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
   END;
   IF lv_vendor_num IS NOT NULL AND lv_vendor_name IS NOT NULL THEN
   lv_supp_flag := 'Y';
   lv_supp_errmsg:=CP_STAGE.VENDOR_NUMBER||'   '||CP_STAGE.VENDOR_NAME||' - '||'VENDOR NUMBER OR VENDOR_NAME IS ALREADY EXIST NOT VALID';
   lv_supp_errmsg:=lv_supp_errmsg||' ; ';
  XXC_DISPLAY_MESSAGE('log',CP_STAGE.VENDOR_NUMBER||'  '||CP_STAGE.VENDOR_NAME||' - '||'VENDOR NUMBER OR VENDOR_NAME ALREADY EXIST NOT VALID');
        END IF;
 END IF;
 ------------------------------END OF VENDOR_ NUMBERAND VENDORNAME VALIDATION------------------
 ---------------------------START OF ORGANIZATION_TYPE --------------------
 IF CP_STAGE.ORGANIZATION_TYPE IS NOT NULL THEN
 BEGIN
  SELECT LOOKUP_CODE 
  INTO lv_organization_type 
  FROM PO_LOOKUP_CODES WHERE LOOKUP_TYPE='ORGANIZATION TYPE' 
  AND   TRIM(LOOKUP_CODE)=TRIM(CP_STAGE.ORGANIZATION_TYPE);
        EXCEPTION WHEN NO_DATA_FOUND THEN
         lv_supp_flag := 'Y';
  lv_supp_errmsg:= lv_supp_errmsg||CP_STAGE.ORGANIZATION_TYPE||' -  '||'ORGANIZATION_TYPE  INVALID';
  XXC_DISPLAY_MESSAGE('log',lv_supp_errmsg);
               WHEN OTHERS THEN
         XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
 END; 
 END IF;
 ----------------------------END OF ORGANIZATION_TYPE---------------
 ------START OF VENDOR_TYPE VALIDATION -----------------
 IF CP_STAGE.VENDOR_TYPE IS NOT NULL THEN
          BEGIN
            SELECT LOOKUP_CODE
            INTO   lv_vendor_type
            FROM   PO_LOOKUP_CODES
            WHERE LOOKUP_TYPE='VENDOR TYPE' AND
            TRIM(LOOKUP_CODE)=TRIM(CP_STAGE.VENDOR_TYPE);
       EXCEPTION
          WHEN NO_DATA_FOUND THEN
              lv_supp_flag := 'Y';
       lv_supp_errmsg:=lv_supp_errmsg||CP_STAGE.VENDOR_TYPE||' - '||'VENDOR TYPE IS NOT VALID';
           XXC_DISPLAY_MESSAGE('log',CP_STAGE.VENDOR_TYPE||' - '||'VENDOR TYPE IS NOT VALID');
    WHEN OTHERS THEN
      XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
 END IF;
 ----------END OF VENDOR_TYPE----------------------
 ----------------START OF VENDOR_TERMS_NAME ------------------
 IF CP_STAGE.VENDOR_PAYMENT_TERMS IS NOT NULL THEN
        BEGIN
  SELECT  TERM_ID
  INTO    lv_terms_id
  FROM    AP_TERMS_TL
  WHERE    UPPER(TRIM(NAME))= UPPER(TRIM(CP_STAGE.VENDOR_PAYMENT_TERMS));
         EXCEPTION
                WHEN NO_DATA_FOUND THEN
               lv_supp_flag := 'Y';
       lv_supp_errmsg:=lv_supp_errmsg||CP_STAGE.VENDOR_PAYMENT_TERMS||' - '||'INVALID PAYMENT TERMS';
       lv_supp_errmsg:=lv_supp_errmsg||' ; ';             
       WHEN OTHERS THEN
       XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
   END IF;
   ----------------------END OF TERMS_NAME--------------------------------
   ------------START OF VENDOR_PAY_GROUP -------------------
 IF CP_STAGE.VENDOR_PAY_GROUP IS NOT NULL THEN
  BEGIN
 SELECT LOOKUP_CODE INTO lv_vendor_pay_group
 FROM PO_LOOKUP_CODES WHERE LOOKUP_TYPE='PAY GROUP'
 AND  LOOKUP_CODE=CP_STAGE.VENDOR_PAY_GROUP;
  EXCEPTION
              WHEN NO_DATA_FOUND THEN
               lv_supp_flag := 'Y';
        lv_supp_errmsg:=lv_supp_errmsg||CP_STAGE.VENDOR_PAY_GROUP||' - '||'INVALID VENDOR PAY GROUP';
        lv_supp_errmsg:=lv_supp_errmsg||' ; ';             
       WHEN OTHERS THEN
    XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
END IF;
---------------END OF VENDOR_PAY_GROUP--------------------
   -----------------START OF OPERATING UNIT NAME ----------------
IF CP_STAGE.OPERATING_UNIT_NAME IS NOT NULL THEN
 BEGIN
 SELECT ORGANIZATION_ID
  INTO lv_organization_id 
  FROM HR_OPERATING_UNITS 
  WHERE  UPPER(NAME)=UPPER(CP_STAGE.OPERATING_UNIT_NAME);
  EXCEPTION
                WHEN NO_DATA_FOUND THEN
               lv_site_flag := 'Y';
       lv_site_errmsg:=lv_site_errmsg||CP_STAGE.OPERATING_UNIT_NAME||' - '||'INVALID OPERATING UNIT NAME';
        lv_site_errmsg:=lv_site_errmsg||' ; ';             
       WHEN OTHERS THEN
       XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
END IF;
   ---------------------END OF OPERATING_UNIT---------------
 --------------------START OF CURRENCY_CODE ----------------
   IF CP_STAGE.CURRENCY_CODE IS NOT NULL THEN
 BEGIN
 SELECT CURRENCY_CODE  
  INTO lv_currency_code  
  FROM  FND_CURRENCIES
  WHERE UPPER(CURRENCY_CODE)=UPPER(CP_STAGE.CURRENCY_CODE);
  EXCEPTION
                WHEN NO_DATA_FOUND THEN
               lv_site_flag := 'Y';
        lv_site_errmsg:=lv_site_errmsg||CP_STAGE.CURRENCY_CODE||' - '||'INVALID CURRENCY';
       lv_site_errmsg:=lv_site_errmsg||' ; ';             
       WHEN OTHERS THEN
    XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
END IF;
   --------------------END OF CURRENCY_CODE-------------
------------------------START OF COUNTRY CODE -----------------
IF CP_STAGE.COUNTRY IS NOT NULL THEN
      BEGIN
         SELECT TERRITORY_CODE
         INTO   lv_country_code FROM   FND_TERRITORIES_VL
         WHERE  TRIM(TERRITORY_CODE)=TRIM(CP_STAGE.COUNTRY);         
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
              lv_site_flag :='Y';
             lv_site_errmsg:=lv_site_errmsg||CP_STAGE.COUNTRY||' - '||'COUNTRY IS NOT VALID';
              lv_site_errmsg:=lv_site_errmsg||' ; ';
          XXC_DISPLAY_MESSAGE('log',CP_STAGE.COUNTRY||' - '||'COUNTRY IS NOT VALID');
   WHEN OTHERS THEN
   XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
     END;
 END IF;
---------------------END OF COUNTRY CODE-----------------------
----------------START OF VENDOR_SITES_TERMS_NAME ------------------
 IF CP_STAGE.VENDOR_SITES_PAYMENT_TERMS  IS NOT NULL THEN
        BEGIN
  SELECT  TERM_ID
  INTO    lv_sites_terms_id
  FROM    AP_TERMS_TL
  WHERE    UPPER(TRIM(NAME))= UPPER(TRIM(CP_STAGE.VENDOR_SITES_PAYMENT_TERMS ));
         EXCEPTION
                WHEN NO_DATA_FOUND THEN
               lv_site_flag := 'Y';
       lv_site_errmsg:=lv_site_errmsg||CP_STAGE.VENDOR_SITES_PAYMENT_TERMS ||' - '||'INVALID SITES PAYMENT TERMS';
        lv_site_errmsg:=lv_site_errmsg||' ; ';             
       WHEN OTHERS THEN
       XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
   END IF;
   ----------------------END OF  VENDOR SITES TERMS_NAME--------------------------------
   ------------START OF VENDOR_SITES_PAY_GROUP -------------------
 IF CP_STAGE.VENDOR_SITES_PAY_GROUP IS NOT NULL THEN
  BEGIN
 SELECT LOOKUP_CODE INTO lv_vendor_sites_pay_group
 FROM PO_LOOKUP_CODES WHERE LOOKUP_TYPE='PAY GROUP'
 AND  LOOKUP_CODE=CP_STAGE.VENDOR_SITES_PAY_GROUP;
  EXCEPTION
              WHEN NO_DATA_FOUND THEN
               lv_site_flag := 'Y';
        lv_site_errmsg:=lv_site_errmsg||CP_STAGE.VENDOR_SITES_PAY_GROUP||' - '||'INVALID VENDOR SITES PAY GROUP';
        lv_site_errmsg:=lv_site_errmsg||' ; ';             
       WHEN OTHERS THEN
    XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
END IF;
---------------END OF VENDOR_SITES_PAY_GROUP--------------------
----------------START OF LIABILITY_ACCOUNT ----------------
IF CP_STAGE.LIABILITY_ACCOUNT IS NOT NULL THEN
BEGIN
 SELECT CONCATENATED_SEGMENTS INTO 
 lv_liability_account 
 FROM GL_CODE_COMBINATIONS_KFV WHERE TRIM(CONCATENATED_SEGMENTS)=TRIM(CP_STAGE.LIABILITY_ACCOUNT);
EXCEPTION
              WHEN NO_DATA_FOUND THEN
               lv_site_flag := 'Y';
        lv_site_errmsg:=lv_site_errmsg||CP_STAGE.LIABILITY_ACCOUNT||' - '||'INVALID LIABILITY ACCOUNT';
       lv_site_errmsg:=lv_site_errmsg||' ; ';             
       WHEN OTHERS THEN
    XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
 END IF;
---------------END OF LIABILITY_ACCOUNT---------------------------
----------------START OF PREPAY_ACCOUNT ----------------
IF CP_STAGE.PREPAY_ACCOUNT IS NOT NULL THEN
BEGIN
 SELECT CONCATENATED_SEGMENTS INTO 
 lv_prepay_account
 FROM GL_CODE_COMBINATIONS_KFV WHERE TRIM(CONCATENATED_SEGMENTS)=TRIM(CP_STAGE.LIABILITY_ACCOUNT);
EXCEPTION
              WHEN NO_DATA_FOUND THEN
               lv_site_flag := 'Y';
        lv_site_errmsg:=lv_site_errmsg||CP_STAGE.PREPAY_ACCOUNT||' - '||'INVALID PREPAY ACCOUNT';
       lv_site_errmsg:=lv_site_errmsg||' ; ';             
       WHEN OTHERS THEN
    XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
        END;
 END IF;
---------------END OF LIABILITY_ACCOUNT---------------------------
--------------------START OF VENDOR_SITE_CODE  ------------------
IF CP_STAGE.VENDOR_SITE IS NOT NULL THEN
BEGIN
 SELECT A.SEGMENT1,
 B.VENDOR_SITE_CODE 
 INTO LV_VENDOR_NUMBER,
 lv_vendor_site_code 
 FROM  AP_SUPPLIERS A,
 AP_SUPPLIER_SITES_ALL B
 WHERE A.VENDOR_ID=B.VENDOR_ID 
 AND TRIM(B.VENDOR_SITE_CODE)=TRIM(CP_STAGE.VENDOR_SITE)
 AND A.SEGMENT1=CP_STAGE.VENDOR_NUMBER;
EXCEPTION
         WHEN NO_DATA_FOUND THEN
          NULL;
         WHEN TOO_MANY_ROWS THEN
         XXC_DISPLAY_MESSAGE('log',CP_STAGE.VENDOR_SITE||' - '||'THERE ARE MORE THAN ONE VENDOR SITES ');
  WHEN OTHERS THEN
  XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
 END;
  IF lv_vendor_site_code IS NOT NULL THEN
   lv_site_flag := 'Y';
   lv_contact_flag:='Y';
  lv_site_errmsg:=CP_STAGE.VENDOR_SITE||' - '||' VENDOR_SITE IS ALREADY EXIST NOT VALID';
  lv_contact_errmsg:=CP_STAGE.VENDOR_SITE||' - '||' VENDOR_SITE IS ALREADY EXIST NOT VALID';
   --LV_ERRMSG:=LV_ERRMSG||' ; ';
  XXC_DISPLAY_MESSAGE('log',CP_STAGE.VENDOR_NUMBER||'  '||CP_STAGE.VENDOR_SITE||' - '||' VENDOR_SITE ALREADY EXIST NOT VALID');
          END IF;
 END IF;
--------------------END OF VENDOR_SITE_CODE--------------------------------------
   -- Changing the STAGEing table flag
------------------------------------
--
IF lv_supp_flag ='N'   THEN
 BEGIN
  UPDATE XXC_SUPP_STAGE
  SET    v_supp_flag ='V' 
        ,supplier_error_message =  null
  where  vendor_number =cp_stage.vendor_number;
COMMIT;
  EXCEPTION
        WHEN OTHERS THEN
     XXC_DISPLAY_MESSAGE('log','Error Occured During Updation of Valid Records in Update in xxc_supp_staging');
 END;
END IF;
--
IF lv_supp_flag = 'Y'  THEN
 BEGIN
 UPDATE XXC_SUPP_STAGE
 SET    v_supp_flag ='E'  
       ,supplier_error_message =lv_supp_errmsg
 where  vendor_number = cp_stage.vendor_number;
COMMIT;
 EXCEPTION
         WHEN OTHERS THEN
      XXC_DISPLAY_MESSAGE('log','Error Occured During Updation of Error Records in xxc_supp_staging');
 END;
END IF;
--
--
IF lv_site_flag = 'N'  THEN
 BEGIN
  UPDATE XXC_SUPP_STAGE
  SET    
         v_site_flag ='V' 
        ,site_error_message = null
  where  vendor_number = cp_stage.vendor_number;
COMMIT;
  EXCEPTION
        WHEN OTHERS THEN
     XXC_DISPLAY_MESSAGE('log','Error Occured During Updation of Valid Records in Update in xxc_supp_staging');
 END;
END IF;
--
IF  lv_site_flag='Y'  THEN
 BEGIN
 UPDATE XXC_SUPP_STAGE
 SET    
         v_site_flag ='E'
       ,site_error_message = lv_site_errmsg
 where  vendor_number =cp_stage.vendor_number;
COMMIT;
 EXCEPTION
         WHEN OTHERS THEN
      XXC_DISPLAY_MESSAGE('log','Error Occured During Updation of Error Records in xxc_supp_staging');
 END;
END IF;
--
IF lv_contact_flag ='N' THEN
 BEGIN
  UPDATE XXC_SUPP_STAGE
  SET   
  v_contact_flag='V'
        ,contact_error_message = null
  where  vendor_number = cp_stage.vendor_number;
COMMIT;
  EXCEPTION
        WHEN OTHERS THEN
     XXC_DISPLAY_MESSAGE('log','Error Occured During Updation of Valid Records in Update in xxc_supp_staging');
 END;
END IF;
--
IF  lv_contact_flag = 'Y' THEN
 BEGIN
 UPDATE XXC_SUPP_STAGE
 SET   
  v_contact_flag='E'
       ,contact_error_message = lv_contact_errmsg
 where  vendor_number =cp_stage.vendor_number;
COMMIT;
 EXCEPTION
         WHEN OTHERS THEN
      XXC_DISPLAY_MESSAGE('log','Error Occured During Updation of Error Records in xxc_supp_staging');
 END;
END IF;
XXC_DISPLAY_MESSAGE('log','End the VALIDATE_SUPLIERS ');
   END LOOP;
    END xxc_suppliers_validate;--------end of validate suppliers-----------------------
----------start of xxc_create_suppliers----------
PROCEDURE   XXC_CREATE_SUPPLIERS(p_vendor_number VARCHAR2 default null)
is
  lv_vendor_rec      AP_VENDOR_PUB_PKG.R_VENDOR_REC_TYPE;
  lv_return_status   VARCHAR2(10);
  lv_msg_count       NUMBER;
  lv_msg_data        VARCHAR2(1000);
  lv_vendor_id        NUMBER;
  lv_party_id           NUMBER;
BEGIN
fnd_global.apps_initialize(user_id => fnd_global.USER_ID,resp_id => fnd_global.RESP_ID,resp_appl_id => fnd_global.RESP_APPl_ID);
--fnd_global.apps_initialize(0,20707,201);
FOR cp_supplier in c_supplier(p_vendor_number) LOOP

--Assingning Staging Table Data To Record Type

  lv_vendor_rec.vendor_name                          := cp_supplier.vendor_name;        --Supplier Name
  lv_vendor_rec.segment1                                := cp_supplier.vendor_number;
  lv_vendor_rec.organization_type_lookup_code := cp_supplier.organization_type;
  lv_vendor_rec.vendor_type_lookup_code         := cp_supplier.vendor_type;
  lv_vendor_rec.pay_group_lookup_code            :=cp_supplier.vendor_pay_group;
  lv_vendor_rec.terms_name                             :=cp_supplier.vendor_payment_terms;
  lv_vendor_rec.set_of_books_id                        :=cp_supplier.set_of_books_id;
  lv_vendor_rec.summary_flag := 'N';  
  lv_vendor_rec.enabled_flag := 'Y';
       --lv_vendor_rec.match_option:='P' ;                     --Match Option

----Api  To Create Vendor

AP_VENDOR_PUB_PKG.CREATE_VENDOR
                    ( p_api_version     => 1, 
        p_vendor_rec     => lv_vendor_rec,
                      x_return_status  => lv_return_status,
                      x_msg_count      => lv_msg_count,
                      x_msg_data       => lv_msg_data,
                      x_vendor_id       => lv_vendor_id,
                      x_party_id          => lv_party_id
                     );
       IF (lv_return_status <> 'S') THEN
       XXC_DISPLAY_MESSAGE('log','Encountered ERROR in supplier creation!!!');
       XXC_DISPLAY_MESSAGE('log','--------------------------------------');
       XXC_DISPLAY_MESSAGE('log',lv_msg_data);
                 IF lv_msg_count > 1 THEN
      FOR i IN 1..lv_msg_count LOOP
     XXC_DISPLAY_MESSAGE('log',substr(FND_MSG_PUB.Get( p_encoded => FND_API.G_FALSE ),1,255));
     XXC_DISPLAY_MESSAGE('log',substr(FND_MSG_PUB.Get( p_encoded => FND_API.G_FALSE ),1,255));
      END LOOP;
                              END IF;
        END IF;
COMMIT;
XXC_DISPLAY_MESSAGE('log','return_status: '||lv_return_status);
XXC_DISPLAY_MESSAGE('log','msg_data: '||lv_msg_data);
XXC_DISPLAY_MESSAGE('log','vendor_id: '||lv_vendor_id);
XXC_DISPLAY_MESSAGE('log','party_id: '||lv_party_id);
end LOOP;         --------End Of Supppliers Loop
END XXC_CREATE_SUPPLIERS;
---------end of create suppliers------------------------
-------------------start of create supplier site------------------
PROCEDURE   XXC_CREATE_SUPPLIER_SITES(   p_vendor_number    VARCHAR2 default null,
                                    p_vendor_site      VARCHAR2 default null)
is
 lv_vendor_site_rec         AP_VENDOR_PUB_PKG.R_VENDOR_SITE_REC_TYPE;
 lv_return_status             VARCHAR2(10);
 lv_msg_count                 NUMBER;
 lv_msg_data                  VARCHAR2(1000);
 lv_vendor_site_id           NUMBER;
 lv_party_site_id              NUMBER;
 lv_location_id                 NUMBER;
BEGIN
 fnd_global.apps_initialize(user_id => fnd_global.USER_ID,resp_id => fnd_global.RESP_ID,resp_appl_id => fnd_global.RESP_APPL_ID);
 --fnd_global.apps_initialize(0,20707,201);

---opening loop valid site data

FOR cp_site in c_site(p_vendor_number,p_vendor_site) LOOP
---QUERY TO GET VENDOR_ID
BEGIN
 SELECT vendor_id
 INTO lv_vendor_site_rec.vendor_id
 FROM ap_suppliers
 WHERE segment1 = cp_site.vendor_number ;  --Vendor Number
EXCEPTION  
  WHEN OTHERS THEN
 XXC_DISPLAY_MESSAGE('log','no supplier created'||sqlcode||'  -  '||sqlerrm);
END;
--QUERY TO GET ACCT_PAY_CODE_COMBINATION_ID
BEGIN
SELECT code_combination_id INTO
     lv_vendor_site_rec.ACCTS_PAY_CODE_COMBINATION_ID
 FROM GL_CODE_COMBINATIONS_KFV 
 WHERE concatenated_segments=cp_site.liability_account;
 EXCEPTION WHEN OTHERS
  THEN
   XXC_DISPLAY_MESSAGE('log','accts'||SQLCODE||SQLERRM);
END;
----
--QUERY TO GET ACCT_PAY_CODE_COMBINATION_ID
BEGIN
SELECT code_combination_id INTO
     lv_vendor_site_rec.prepay_code_combination_id
 FROM GL_CODE_COMBINATIONS_KFV 
 WHERE concatenated_segments=cp_site.prepay_account;
 EXCEPTION WHEN OTHERS
  THEN
   XXC_DISPLAY_MESSAGE('log','accts1'||SQLCODE||SQLERRM);
END;
----
---QUERY TO GET ORG_ID
BEGIN
SELECT   
ORGANIZATION_ID INTO  
lv_vendor_site_rec.org_id FROM 
HR_ALL_ORGANIZATION_UNITS  where name =cp_site.operating_unit_name;
EXCEPTION WHEN OTHERS THEN
XXC_DISPLAY_MESSAGE('log','org_id'||SQLCODE||SQLERRM);
END;
-----------------
----------Assigning Staging Table Data To  Reocrd Type :R_VENDOR_SITE_REC_TYPE

XXC_DISPLAY_MESSAGE('log','Vendor id is :'||lv_vendor_site_rec.vendor_id);
 lv_vendor_site_rec.vendor_site_code             :=cp_site.vendor_site; --Vendor Site Code
 lv_vendor_site_rec.address_line1                   := cp_site.address_line1;       --Address line1
 lv_vendor_site_rec.address_line2                   :=cp_site.address_line2;       --Address line2
        lv_vendor_site_rec.address_line3                   := cp_site.address_line3;       --Address line3
 lv_vendor_site_rec.address_line4                   := cp_site.address_line4;       --Address line4
 lv_vendor_site_rec.city                                  := cp_site.city;               -----city
        lv_vendor_site_rec.state                                := cp_site.state;               ----state
 lv_vendor_site_rec.zip                                   := cp_site.zip_code;              ------zip_code
 lv_vendor_site_rec.country_of_origin_code     := cp_site.country;           --Country
 lv_vendor_site_rec.country                            :=cp_site.country;
 lv_vendor_site_rec.pay_group_lookup_code    := cp_site.vendor_sites_pay_group;--pay group
 lv_vendor_site_rec.terms_name                     := cp_site.vendor_sites_payment_terms;---terms   
        lv_vendor_site_rec.org_name                         := cp_site.operating_unit_name; -- operating unit name
 lv_vendor_site_rec.payment_currency_code    := cp_site.CURRENCY_CODE;       ---.payment_currency_code
 lv_vendor_site_rec.invoice_currency_code       := cp_site.CURRENCY_CODE;      ---invoice currency code
 lv_vendor_site_rec.purchasing_site_flag          :='Y';
 lv_vendor_site_rec.pay_site_flag                     :='Y';
      --Optional
 --lv_vendor_site_rec.rfq_only_site_flag  :='N';

  ------Api to create Venodr sites

AP_VENDOR_PUB_PKG.CREATE_VENDOR_SITE  ( p_api_version             => 1, 
         p_vendor_site_rec       => lv_vendor_site_rec,
         x_return_status           => lv_return_status,
         x_msg_count               => lv_msg_count,
         x_msg_data                => lv_msg_data,
         x_vendor_site_id         => lv_vendor_site_id,
         x_party_site_id            => lv_party_site_id,
         x_location_id               => lv_location_id
         );
       IF (lv_return_status <> 'S') THEN
       XXC_DISPLAY_MESSAGE('log','Encountered ERROR in supplier site creation!!!');
       XXC_DISPLAY_MESSAGE('log','--------------------------------------');
       XXC_DISPLAY_MESSAGE('log',lv_msg_data);
       IF lv_msg_count > 1 THEN
                        FOR i IN 1..lv_msg_count LOOP
   XXC_DISPLAY_MESSAGE('log',substr(FND_MSG_PUB.Get( p_encoded => FND_API.G_FALSE ),1,255));
                         XXC_DISPLAY_MESSAGE('log',substr(FND_MSG_PUB.Get( p_encoded => FND_API.G_FALSE ),1,255));
                        END LOOP;
                      END IF;
        END IF;
COMMIT;
XXC_DISPLAY_MESSAGE('log','return_status: '||lv_return_status);
XXC_DISPLAY_MESSAGE('log','msg_data: '||lv_msg_data);
XXC_DISPLAY_MESSAGE('log','msg_data: '||lv_msg_count);
XXC_DISPLAY_MESSAGE('log','vendor_site_id: '||lv_vendor_site_id);
XXC_DISPLAY_MESSAGE('log','party_site_id: '||lv_party_site_id);
XXC_DISPLAY_MESSAGE('log','location_id: '||lv_location_id);
END LOOP;                                       ------------------End of  sites loop
END XXC_CREATE_SUPPLIER_SITES ;
-------------END of create supplier site--------------
----------------start of supplier contact--------------------
PROCEDURE   XXC_CREATE_SUPPLIERS_CONTACTS(   p_vendor_number    VARCHAR2 default null,
                                p_vendor_site      VARCHAR2  default null )
IS
lv_vendor_contact_rec      AP_VENDOR_PUB_PKG.R_VENDOR_CONTACT_REC_TYPE;
lv_return_status               VARCHAR2(10);
lv_msg_count                   NUMBER;
lv_msg_data                    VARCHAR2(1000);
lv_vendor_id                    NUMBER;
lv_party_id                       NUMBER;
lv_vendor_contact_id        NUMBER;
lv_per_party_id                NUMBER;
lv_rel_party_id                 NUMBER;
lv_rel_id                          NUMBER;
lv_org_contact_id             NUMBER;
lv_party_site_id                NUMBER;

BEGIN

fnd_global.apps_initialize(user_id => fnd_global.USER_ID,resp_id => fnd_global.RESP_ID,resp_appl_id => fnd_global.RESP_APPL_ID);
 --fnd_global.apps_initialize(0,20707,200);
--- opening loop for valid contacts
FOR cp_contact in c_contact(p_vendor_number,p_vendor_site) LOOP

 
--Query to get Vendor Id
   BEGIN
     SELECT vendor_id
     INTO lv_vendor_contact_rec.vendor_id
     FROM ap_suppliers
     WHERE segment1 =cp_contact.vendor_number ;  --Vendor Number
    EXCEPTION WHEN OTHERS THEN
            XXC_DISPLAY_MESSAGE('log','ERROR OCCURED DURING FETCHING VENDOR_ID'||'    '||SQLCODE||' -  '||SQLERRM);
     END;
    --XXC_DISPLAY_MESSAGE('log','Vendor id is :'||lv_vendor_contact_rec.vendor_id);
--Query to get Party Site Id
  BEGIN
     SELECT party_site_id
     INTO   lv_vendor_contact_rec.org_party_site_id
     FROM ap_supplier_sites_all
     WHERE vendor_site_code =cp_contact.vendor_site
     AND vendor_id = lv_vendor_contact_rec.vendor_id ;
   EXCEPTION WHEN OTHERS THEN
 XXC_DISPLAY_MESSAGE('log','ERROR OCCURED DURING FETCHING OF VENDOR_SITE_CODE'||'    '||SQLCODE||'  -  '||SQLERRM);
   END;
---------QUERY TO GET ORG_ID
BEGIN
SELECT   
ORGANIZATION_ID INTO  
lv_vendor_contact_rec.org_id FROM 
HR_ALL_ORGANIZATION_UNITS  where name =cp_contact.operating_unit_name;
EXCEPTION WHEN OTHERS THEN
XXC_DISPLAY_MESSAGE('log',SQLCODE||SQLERRM);
END;
-----
    XXC_DISPLAY_MESSAGE('log','Party site id is :'||lv_vendor_contact_rec.org_party_site_id);
   
----Assigning Values to Contacts record type from staging Table

lv_vendor_contact_rec.PERSON_FIRST_NAME := cp_contact.contact_first_name;  --First Name
lv_vendor_contact_rec.PERSON_LAST_NAME  := cp_contact.contact_last_name;   --Last Name
lv_vendor_contact_rec.phone                        := cp_contact.contact_phone;                 --Phone Number
lv_vendor_contact_rec.email_address            := cp_contact.contact_email ;         --Email Address
lv_vendor_contact_rec.fax_phone                  := cp_contact.contact_fax;           -----fax number

-------Api To Create Vendor Contacts

AP_VENDOR_PUB_PKG.CREATE_VENDOR_CONTACT
       ( p_api_version                => 1,
         p_vendor_contact_rec     => lv_vendor_contact_rec,
         x_return_status              => lv_return_status,
         x_msg_count                  => lv_msg_count,
         x_msg_data                   => lv_msg_data,
         x_vendor_contact_id       => lv_vendor_contact_id,
         x_per_party_id               => lv_per_party_id,
         x_rel_party_id                => lv_rel_party_id,
         x_rel_id                         => lv_rel_id,
         x_org_contact_id            => lv_org_contact_id,
         x_party_site_id              => lv_party_site_id
        );
 IF (lv_return_status <> 'S') THEN
       XXC_DISPLAY_MESSAGE('log','Encountered ERROR in supplier contact creation!!!');
       XXC_DISPLAY_MESSAGE('log','--------------------------------------');
       XXC_DISPLAY_MESSAGE('log',lv_msg_data);
       IF lv_msg_count > 1 THEN
                        FOR i IN 1..lv_msg_count LOOP
   XXC_DISPLAY_MESSAGE('log',substr(FND_MSG_PUB.Get( p_encoded => FND_API.G_FALSE ),1,255));
                         XXC_DISPLAY_MESSAGE('log',substr(FND_MSG_PUB.Get( p_encoded => FND_API.G_FALSE ),1,255));
                        END LOOP;
                      END IF;
        END IF;
 COMMIT;
  XXC_DISPLAY_MESSAGE('log','return_status: '||lv_return_status);
  XXC_DISPLAY_MESSAGE('log','msg_data: '||lv_msg_data);
  XXC_DISPLAY_MESSAGE('log','msg_data_count: '||lv_msg_count);
  XXC_DISPLAY_MESSAGE('log','vendor Contact Id: '||lv_vendor_contact_id);
  XXC_DISPLAY_MESSAGE('log','per_party_id: '||lv_per_party_id);
  XXC_DISPLAY_MESSAGE('log','rel_party_id: '||lv_rel_party_id);
  XXC_DISPLAY_MESSAGE('log','rel_id: '||lv_rel_id);
  XXC_DISPLAY_MESSAGE('log','org_contact_id: '||lv_org_contact_id);
  XXC_DISPLAY_MESSAGE('log','party_site_id: '||lv_party_site_id);
  END LOOP;------------End of Contacts Loop
End XXC_CREATE_SUPPLIERS_CONTACTS;
------------------end of supplier contact-------------------------

----This is The main Procedure it will  Create Records for All valid  Suppliers,Sites and Contacts Information


-----start of main PROCEDURE  -------------------------
 PROCEDURE   XXC_MAIN_SUPPLIER(
                    ERRBUF OUT NOCOPY VARCHAR2,
                    RETCODE OUT NOCOPY VARCHAR2,
                    p_vendor_number VARCHAR2   DEFAULT NULL,
                    p_vendor_site VARCHAR2 DEFAULT NULL)
is
BEGIN
fnd_global.apps_initialize(user_id => fnd_global.USER_ID,resp_id => fnd_global.RESP_ID,resp_appl_id => fnd_global.RESP_APPL_ID);
      XXC_SUPPLIERS_VALIDATE(p_vendor_number);
      XXC_CREATE_SUPPLIERS(p_vendor_number);
      XXC_CREATE_SUPPLIER_SITES(p_vendor_number,p_vendor_site);
      XXC_CREATE_SUPPLIERS_CONTACTS(p_vendor_number,p_vendor_site);       
END xxc_main_supplier;
------------END of main supplier-------------
END XXC_SUP_CREATION_PKG;
/





PO Interface

CREATE OR REPLACE PROCEDURE PO_INT(ERRBUF OUT VARCHAR2,
                                    RETCODE OUT VARCHAR2)
AS
CURSOR C1 IS SELECT * FROM XX_HEADERS;
CURSOR C2 IS SELECT * FROM XX_LINES;
CURSOR C3 IS SELECT * FROM XX_DIST;
L_VENDOR_ID NUMBER(10);
L_ITEM VARCHAR2(150);
L_FLAG VARCHAR2(4) DEFAULT 'A';
L_MSG VARCHAR2(200);
L_SITE_CODE VARCHAR2(100);
L_CURR_CODE VARCHAR2(10);
L_ORG_ID NUMBER(6);
begin
DELETE FROM PO_HEADERS_INTERFACE;
DELETE FROM PO_LINES_INTERFACE;
DELETE FROM PO_DISTRIBUTIONS_INTERFACE;
COMMIT;
FOR X1 IS C1 LOOP
BEGIN
 SELECT VENDOR_ID
 INTO L_VENDOR_ID
 FROM PO_VENDORS
 WHERE VENDOR_NAME = X1.VENDOR_NAME
 EXCEPTION WHEN OTHERS THEN
 L_FLAG :='E';
 L_MSG := 'VENDOR ID IS NOT IN SYSTEM';
 FND_FILE.PUT_LINE(FND_FILE.LOG,'ERROR OCCURED'||L_MSG);
 END;
 -- VENDOR SITE CODE VALIDATION
 BEGIN
 SELECT VENDOR_SITE_CODE
 INTO L_SITE_CODE
 FROM PO_VENDOR_SITES_ALL
 WHERE VENDOR_SITE_CODE=X1.VENDOR_SITE_CODE;
 EXCEPTION WHEN OTHERS THEN
 L_FLAG  :='E';
 L_MSG := 'VENDOR SITE CODE IS NOT IN SYSTEM';
 FND_FILE.PUT_LINE(FND_FILE.LOG,'ERROR OCCURED'||L_MSG);
 END;
 -- END OF SITE CODE VALIDATION
-- CURRECY CODE VALIDATION
BEGIN
SELECT CURRENCY_CODE
INTO L_CURR_CODE
FROM FND_CURRENCIES WHERE
CURRENCY_CODE=X1.CURRENCY_CODE;
EXCEPTION WHEN OTHERS THEN
L_FLAG :='E';
L_MSG:='CURRENCY CODE IS INVALID';
FND_FILE.PUT_LINE(FND_FILE.LOG,'ERROR OCCURED'||L_MSG);
END;
--END OF TE CURRENCY VALIDATIN
-- OPERATING UNIT ID VAIDATION
BEGIN
SELECT ORGANIZATION_ID
INTO L_ORG_ID
FROM HR_OPERATING_UNITS
WHERE ORGANIZATION_ID=X1.ORG_ID;
EXCEPTION WHEN OTHERS THEN
L_FLAG :='E',
L_MSG:='INVALID ORGANIZATION ID';
FND_FILE.PUT_LINE(FND_FILE.LOG,'ERROR OCCURED'++L_MSG);
END;
--END OF THE ORG ID VALIDATION
IF L_FLAG !='E' THEN
INSERT INTO PO_HEADERS_INTERFACE
(
INTERFACE_HEADER_ID
,BATCH_ID
,ACTION
,ORG_ID
,DOCUMENT_TYPE_CODE
,CURRENCY_CODE
,AGENT_NAME
,VENDOR_NAME
,VENDOR_SITE_CODE
,SHIP_TO_LOCATION
,BILL_TO_LOCATION
,CREATION_DATE
,APPROVAL_STATUS
,APPROVED_DATE
,FREIGHT_TERMS
)
VALUES
(
X1.INTERFACE_HEADER_ID,
,X1.BATCH_ID
,X1.ACTION
,X1.ORG_ID
,X1.DOCUMENT_TYPE_CODE
,X1.CURRENCY_CODE
,X1.AGENT_NAME
,X1.VENDOR_NAME
,X1.VENDOR_SITE_CODE
,X1.SHIP_TO_LOCATION
,X1.BILL_TO_LOCATION
,SYSDATE-10
,X1.APPROVAL_STATUS
,SYSDATE
,X1.FREIGHT_TERMS
);
END IF;
END LOOP;
FOR X2 IN C2 LOOP
L_FLAG :='A';
--ITEM VALIDATION
BEGIN
SELECT SEGMENT1
INTO L_ITEM
FROM MTL_SYSTEM_ITEMS_B
WHERE SEGMENT1 =X2.ITEM
AND ORGANIZATION_ID FND_PROFILE.VALUE('ORG_ID');
EXCEPTION WHEN OTHERS THEN
L_FLAG :='E';
L_MSG := 'ITEM ISNOT VALID ITEM';
FND_FILE.PUT_LINE(FND_FILE.LOG,'ERROR OCCURED'||L_MSG);
END;
--END OF THE ITEM VALIDATION
IF L_FLAG !='E' THEN
INSERT INTO PO_LINES_INTERFACE
(
INTERFACE_LINE_ID
,INTERFACE_HEADER_ID
,LINE_NUM
,SHIPMENT_NUM
,LINE_TYPE
,ITEM
,ITEM_DESCRIPTION
,ITEM_ID
,UOM_CODE
,QUANTITY
,UNIT_PRICE
,SHIP_TO_ORGANIZATION_CODE
,SHIP_TO_LOCATION
,NEED_BY_DATE
,PROMISED_DATE
,LIST_PRICE_PER_UNIT
)
VALUES
(
X2.INTERFACE_LINE_ID
,X2.INTERFACE_HEADER_ID
,X2.LINE_NUM
,X2.SHIPMENT_NUM
,X2.LINE_TYPE
,X2.ITEM
,X2.ITEM_DESCRIPTION
,X2.ITEM_ID
,X2.UOM_CODE
,X2.QUANTITY
,X2.UNIT_PRICE
,X2.SHIP_TO_ORGANIZATION_CODE
,X2.SHIP_TO_LOCATION
,SYSDATE
,SYSDATE
,X2.LIST_PRICE_PER_UNIT
)
END IF;
END LOOP;
FOR X3 IN C3 LOOP
L_FLAG :='A';
IF L_FLAG !='E' THEN
INSERT INTO PO_DISTRIBUTIONS_INTERFACE
(
INTERFACE_HEADER_ID
,INTERFACE_LINE_ID
,INTERFACE_DISTRIBUTION_ID
,SET_OF_BOOKS_ID
,DESTINATION_ORGANIZATION_ID
,ORG_ID
,QUANTITY_ORDERED
)
VALUES
(
X3.INTERFACE_HEADER_ID
,X3.INTERFACE_LINE_ID
,X3.INTERFACE_DISTRIBUTION_ID
,X3.SET_OF_BOOKS_ID
,X3.DESTINATION_ORGANIZATION_ID
,X3.ORG_ID
,X3.QUANTITY_ORDERED
);
END IF;
END LOOP;
COMMIT;
END PO_INT;