PLSQL Programs

1. Pseudo Code
2. AR Invoice creation
3. Supplier creation
4. Customer creation
5. HRMS API’s for data anonymization/ masking/ scrambling
6. Send output of Standard PO Concurrent program via Email
7. Creation of Value Set Values Anonymous Block
8. Insert data into table using FORALL
9. UTL_FILE – Outbound
10. API to create table type value set, delete concurrent program, executable and create new executable, program, parameters and attach to request group


1. Pseudo Code

SET SERVEROUTPUT ON;
CLEAR SCREEN;
DECLARE
  CURSOR cur_name IS SELECT * FROM dba_objects;
  TYPE lv_cur_name_typ IS
    TABLE OF cur_name%rowtype;
  lv_cur_name_tab   lv_cur_name_typ := lv_cur_name_typ ();
  ln_api_error      NUMBER;
  lv_error EXCEPTION;
BEGIN
  OPEN cur_name;
  LOOP
    FETCH cur_name BULK COLLECT INTO lv_cur_name_tab LIMIT 200;
    EXIT WHEN lv_cur_name_tab.count = 0;
    FOR i IN 1..lv_cur_name_tab.count LOOP
      BEGIN
        BEGIN
          FOR j IN ( SELECT * FROM all_objects
          ) LOOP
--API call or action
            NULL;
          END LOOP;
        EXCEPTION
          WHEN OTHERS THEN
            RAISE lv_error;
            ln_api_error   := ln_api_error + 1;
        END;
        BEGIN
          FOR j IN ( SELECT * FROM all_objects
          ) LOOP
--API call or action
            NULL;
          END LOOP;
        EXCEPTION
          WHEN OTHERS THEN
            RAISE lv_error;
            ln_api_error   := ln_api_error + 1;
        END;
        BEGIN
          FOR j IN ( SELECT * FROM all_objects
          ) LOOP
--API call or action
            NULL;
          END LOOP;
        EXCEPTION
          WHEN OTHERS THEN
            RAISE lv_error;
            ln_api_error   := ln_api_error + 1;
        END;
      EXCEPTION
        WHEN lv_error THEN
          ROLLBACK;
      END;
    END LOOP;
  END LOOP;
  CLOSE cur_name;
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(sqlerrm);
END;
/
SHOW ERROR;

2. AR Invoice creation

DECLARE
  l_return_status           VARCHAR2(1);
  l_msg_count               NUMBER;
  l_msg_data                VARCHAR2(2000);
  l_batch_id                NUMBER;
  l_batch_source_rec        ar_invoice_api_pub.batch_source_rec_type;
  l_trx_header_tbl          ar_invoice_api_pub.trx_header_tbl_type;
  l_trx_lines_tbl           ar_invoice_api_pub.trx_line_tbl_type;
  l_trx_dist_tbl            ar_invoice_api_pub.trx_dist_tbl_type;
  l_trx_salescredits_tbl    ar_invoice_api_pub.trx_salescredits_tbl_type;
  l_trx_contingencies_tbl   ar_invoice_api_pub.trx_contingencies_tbl_type;
  v_line_no                 NUMBER := 0;
  v_line_dist_no            NUMBER := 0;
  CURSOR cbatch IS SELECT customer_trx_id FROM ra_customer_trx_all WHERE batch_id = l_batch_id;

  CURSOR cvalidtxn IS SELECT trx_header_id
                      FROM ar_trx_header_gt
                      WHERE trx_header_id NOT IN (
    SELECT trx_header_id FROM ar_trx_errors_gt
  );

BEGIN
/*Applications context set. Initialize the session before calling any public or private APIs. This is recommended practice*/
  fnd_global.apps_initialize(
    user_id        => fnd_profile.value('USER_ID')
    ,resp_id        => fnd_profile.value('RESP_ID')
    ,resp_appl_id   => fnd_profile.value('RESP_APPL_ID')
  );

  mo_global.init('AR');
  mo_global.set_policy_context('S',fnd_profile.value('ORG_ID'));
  fnd_client_info.set_org_context(fnd_profile.value('ORG_ID'));

/*Populate batch source information*/
  l_batch_source_rec.batch_source_id                   := 5027;

/*Populate header information*/
  l_trx_header_tbl(1).trx_header_id                    := 2764315;
  l_trx_header_tbl(1).bill_to_customer_id              := 2651;
  l_trx_header_tbl(1).ship_to_customer_id              := 1035;
  l_trx_header_tbl(1).cust_trx_type_id                 := 1026;
  l_trx_header_tbl(1).trx_date                         := SYSDATE;
  l_trx_header_tbl(1).term_id                          := 1000;
  l_trx_header_tbl(1).primary_salesrep_id              := -3;
  l_trx_header_tbl(1).trx_currency                     := 'GBP';
  l_trx_header_tbl(1).exchange_rate_type               := NULL;
  l_trx_header_tbl(1).exchange_date                    := NULL;
  l_trx_header_tbl(1).exchange_rate                    := NULL;
  l_trx_header_tbl(1).attribute5                       := 'ABC123';
  l_trx_header_tbl(1).purchase_order                   := 'DEF456';
  l_trx_header_tbl(1).purchase_order_date              := (SYSDATE - 5);
  l_trx_header_tbl(1).trx_class                        := 'INV';

/*Populate line information*/
  v_line_no                                            := v_line_no + 1;/*Fetch line records and LOOP them*/
  l_trx_lines_tbl(v_line_no).trx_header_id             := 2764315;
  l_trx_lines_tbl(v_line_no).trx_line_id               := 3003327;
  l_trx_lines_tbl(v_line_no).line_number               := 1;
  l_trx_lines_tbl(v_line_no).quantity_invoiced         := 10;
  l_trx_lines_tbl(v_line_no).unit_selling_price        := 100;
  l_trx_lines_tbl(v_line_no).line_type                 := 'LINE';
  l_trx_lines_tbl(v_line_no).description               := 'Goods1@STANDARD Rate';
  l_trx_lines_tbl(v_line_no).tax_classification_code   := 'MIXED'; /*'ZERO RATED' or 'MIXED' or 'STANDARD'*/

/*Populate distribution information*/
  v_line_dist_no                                       := v_line_dist_no + 1; /*Fetch line records and LOOP them*/
  l_trx_dist_tbl(v_line_dist_no).trx_dist_id           := 3382546;
  l_trx_dist_tbl(v_line_dist_no).trx_line_id           := 3003327;
  l_trx_dist_tbl(v_line_dist_no).trx_header_id         := 2764315;
  l_trx_dist_tbl(v_line_dist_no).account_class         := 'REV';
  l_trx_dist_tbl(v_line_dist_no).percent               := 100;
  l_trx_dist_tbl(v_line_dist_no).code_combination_id   := 2173791;
  l_trx_dist_tbl(v_line_dist_no).amount                := 1000;

/*Populate line tax information*/
  v_line_no                                            := v_line_no + 1;
  l_trx_lines_tbl(v_line_no).taxable_flag              := 'N';
  l_trx_lines_tbl(v_line_no).trx_header_id             := 2764315;
  l_trx_lines_tbl(v_line_no).trx_line_id               := 3003328;
  l_trx_lines_tbl(v_line_no).link_to_trx_line_id       := 3003327;
  l_trx_lines_tbl(v_line_no).line_number               := 1;
  l_trx_lines_tbl(v_line_no).line_type                 := 'TAX';
  l_trx_lines_tbl(v_line_no).tax_regime_code           := 'GB VAT';
  l_trx_lines_tbl(v_line_no).tax                       := 'GB VAT';
  l_trx_lines_tbl(v_line_no).tax_jurisdiction_code     := 'GB VAT UK';
  l_trx_lines_tbl(v_line_no).tax_status_code           := 'MIXED'; /*'ZERO RATED' or 'MIXED' or 'STANDARD'*/
  l_trx_lines_tbl(v_line_no).tax_rate_code             := 'MIXED'; /*'ZERO RATED' or 'MIXED' or 'STANDARD'*/
  l_trx_lines_tbl(v_line_no).tax_rate                  := 20;
  l_trx_lines_tbl(v_line_no).amount                    := 200;

/*Call the invoice api to create multiple invoices in a batch*/
  ar_invoice_api_pub.create_invoice(
    p_api_version             => 1.0
    ,p_batch_source_rec        => l_batch_source_rec
    ,p_trx_header_tbl          => l_trx_header_tbl
    ,p_trx_lines_tbl           => l_trx_lines_tbl
    ,p_trx_dist_tbl            => l_trx_dist_tbl
    ,p_trx_salescredits_tbl    => l_trx_salescredits_tbl
    ,p_trx_contingencies_tbl   => l_trx_contingencies_tbl
    ,x_return_status           => l_return_status
    ,x_msg_count               => l_msg_count
    ,x_msg_data                => l_msg_data
  );

  IF
    l_return_status = fnd_api.g_ret_sts_error OR l_return_status = fnd_api.g_ret_sts_unexp_error
  THEN
    dbms_output.put_line('unexpected errors found!');
  ELSE
    FOR cvalidtxnrec IN cvalidtxn LOOP
      IF
        ( ar_invoice_api_pub.g_api_outputs.batch_id IS NOT NULL )
      THEN
        dbms_output.put_line('Invoice(s) suceessfully created!');
        dbms_output.put_line('Batch ID: ' || ar_invoice_api_pub.g_api_outputs.batch_id);
        l_batch_id   := ar_invoice_api_pub.g_api_outputs.batch_id;
        FOR cbatchrec IN cbatch LOOP
          dbms_output.put_line('Cust Trx Id ' || cbatchrec.customer_trx_id);
        END LOOP;

      ELSE
        dbms_output.put_line('Errors found!');
      END IF;
    END LOOP;
  END IF;

  COMMIT;
END;

3. Supplier creation

CREATE OR REPLACE PACKAGE BODY xxab_supplier_conversion AS
/*************************************************************************
* TYPE : Package Body *
* NAME : xxab_supplier_conversion *
************************************************************************/
------------------------------
-- Global Variable Declaration
------------------------------
  g_return_status              VARCHAR2(2000);
  g_msg_count                  NUMBER;
  g_msg_data                   VARCHAR2(2000);
  g_msg_index_out              NUMBER;

------------------------------
-- * Procedure Name : xxab_create_vendor_site
-- * Description : This Procedure creates the Supplier sites
------------------------------
  PROCEDURE xxab_create_vendor_site (
    p_vendor_id IN NUMBER
  ) IS
    l_vendor_site_rec        apps.ap_vendor_pub_pkg.r_vendor_site_rec_type;
    l_vendor_cont_rec        apps.ap_vendor_pub_pkg.r_vendor_contact_rec_type;
    p_party_site_use_rec     hz_party_site_v2pub.party_site_use_rec_type;
    p_contact_point_rec      hz_contact_point_v2pub.contact_point_rec_type;
    p_edi_rec                hz_contact_point_v2pub.edi_rec_type;
    p_email_rec              hz_contact_point_v2pub.email_rec_type;
    p_phone_rec              hz_contact_point_v2pub.phone_rec_type;
    p_telex_rec              hz_contact_point_v2pub.telex_rec_type;
    p_web_rec                hz_contact_point_v2pub.web_rec_type;
    x_contact_point_id       NUMBER;
    x_party_site_use_id      NUMBER;
    x_vendor_site_id         NUMBER;
    x_party_site_id          NUMBER;
    x_location_id            NUMBER;
    lv_supplier_number       VARCHAR2(100);
    lv_supplier_name         VARCHAR2(1000);
    ln_count                 NUMBER;
    l_vendor_site_org_id     VARCHAR2(50);
    lv_user_id               NUMBER;
    lv_responsibility_id     NUMBER;
    lv_application_id        NUMBER;
    lv_organization_id       NUMBER;
    ln_user_id               NUMBER;
    ln_responsibility_id     NUMBER;
    ln_application_id        NUMBER;
    ln_organization_id       NUMBER;
    lv_unit                  VARCHAR2(20);
    l_party_tax_profile_id   VARCHAR2(100);
    CURSOR cur_sup_tab (
      p_vendor_id NUMBER
    ) IS SELECT segment1
               ,vendor_name
         FROM ap_suppliers
         WHERE vendor_id = p_vendor_id;
    CURSOR cur_stg_tab (
      p_supplier_number VARCHAR2
      ,p_supplier_name VARCHAR2
    ) IS SELECT *
         FROM xxab_supp_stg_tab
         WHERE 1 = 1
               AND   vendor_number = p_supplier_number
               AND   vendor_name = p_supplier_name;
    l_vendor_sites           cur_stg_tab%rowtype;
    CURSOR cur_org_id (
      p_unit VARCHAR2
    ) IS SELECT organization_id
         FROM hr_all_organization_units
         WHERE name = DECODE(
      p_unit
      ,'USABC'
      ,'ABCAAA'
      ,'USDEF'
      ,'ABCAAA'
      ,'USXYZ'
      ,'ABC'
    );
  BEGIN
    OPEN cur_sup_tab(p_vendor_id);
    FETCH cur_sup_tab INTO lv_supplier_number,lv_supplier_name;
    CLOSE cur_sup_tab;
    OPEN cur_stg_tab(
      lv_supplier_number
      ,lv_supplier_name
    );
    FETCH cur_stg_tab INTO l_vendor_sites;
    IF
      l_vendor_sites.unit = 'USXYZ'
    THEN
      lv_user_id                                           := NULL;
      lv_responsibility_id                                 := NULL;
      lv_application_id                                    := NULL;
      BEGIN
        SELECT fu.user_id
              ,frt.responsibility_id
              ,frt.application_id INTO
          lv_user_id,lv_responsibility_id,lv_application_id
        FROM fnd_user fu
            ,fnd_responsibility_tl frt
        WHERE fu.user_name = 'SYSADMIN'
              AND   frt.responsibility_name = 'Payables AB Supplier Setup';
      EXCEPTION
        WHEN OTHERS THEN
          NULL;
      END;
      fnd_global.apps_initialize(
        lv_user_id
        ,lv_responsibility_id
        ,lv_application_id
      );
      mo_global.init('SQLAP');
      OPEN cur_org_id(l_vendor_sites.unit);
      FETCH cur_org_id INTO l_vendor_site_org_id;
      CLOSE cur_org_id;
      fnd_client_info.set_org_context(l_vendor_site_org_id);
      l_vendor_site_rec.last_update_date                   := SYSDATE;
      l_vendor_site_rec.last_updated_by                    := fnd_global.user_id;
      l_vendor_site_rec.vendor_id                          := p_vendor_id;
      l_vendor_site_rec.vendor_site_code                   := l_vendor_sites.vendor_site_code;
      l_vendor_site_rec.country                            := l_vendor_sites.vendor_site_country;
      l_vendor_site_rec.address_line1                      := l_vendor_sites.vendor_site_add1;
      l_vendor_site_rec.address_line2                      := l_vendor_sites.vendor_site_add2;
      l_vendor_site_rec.address_line3                      := l_vendor_sites.vendor_site_add3;
      l_vendor_site_rec.address_line4                      := l_vendor_sites.vendor_site_add4;
      l_vendor_site_rec.city                               := l_vendor_sites.vendor_site_city;
      l_vendor_site_rec.zip                                := l_vendor_sites.vendor_site_zip;
      l_vendor_site_rec.org_id                             := l_vendor_site_org_id;
      l_vendor_site_rec.area_code                          := l_vendor_sites.vendor_phone_area_code;
      l_vendor_site_rec.phone                              := l_vendor_sites.vendor_phone_number;
      l_vendor_site_rec.email_address                      := l_vendor_sites.vendor_email_address;
      l_vendor_site_rec.vat_registration_num               := l_vendor_sites.vat_registration_num;
      l_vendor_site_rec.ap_tax_rounding_rule               := 'NEAREST';
      l_vendor_site_rec.vat_code                           := 'STANDARD';
      l_vendor_site_rec.auto_tax_calc_flag                 := 'Y';
      l_vendor_site_rec.supplier_notif_method              := 'PRINT';
      l_vendor_site_rec.purchasing_site_flag               := 'Y';
      l_vendor_site_rec.pay_site_flag                      := 'Y';
      l_vendor_site_rec.pay_group_lookup_code              := l_vendor_sites.pay_group_lookup_code;
      l_vendor_site_rec.hold_unmatched_invoices_flag       := 'Y';
      l_vendor_site_rec.hold_reason                        := 'UNMATCHED INVOICES';
      l_vendor_site_rec.ext_payee_rec.default_pmt_method   := 'EFT';
      l_vendor_site_rec.remittance_email                   := l_vendor_sites.remittance_email_address; --v0.2
      IF
        l_vendor_sites.remittance_email_address IS NOT NULL
      THEN
        l_vendor_site_rec.remit_advice_delivery_method   := 'EMAIL';
      END IF;
-- Call the Vendor site API
      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      => g_return_status
        ,x_msg_count          => g_msg_count
        ,x_msg_data           => g_msg_data
        ,p_vendor_site_rec    => l_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
      );
      IF
        g_return_status <> fnd_api.g_ret_sts_success
      THEN
        FOR v_index IN 1..g_msg_count LOOP
          fnd_msg_pub.get(
            p_msg_index       => v_index
            ,p_encoded         => 'F'
            ,p_data            => g_msg_data
            ,p_msg_index_out   => g_msg_index_out
          );
          g_msg_data   := substr(
            g_msg_data
            ,1
            ,200
          );
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error at Vendor site creation :'
            || g_msg_data
          );
          ROLLBACK;
        END LOOP;
      ELSE
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Vendor site: '
          || l_vendor_site_rec.vendor_site_code
          || ' created for vendor: '
          || lv_supplier_number
        );
/*API to update Communication details under Address Book section*/ --v0.4
        IF
          l_vendor_sites.vendor_phone_area_code IS NOT NULL OR l_vendor_sites.vendor_phone_number IS NOT NULL OR l_vendor_sites.vendor_email_address IS NOT NULL
        THEN
-- Initializing the Mandatory API parameters
          p_contact_point_rec.contact_point_type   := 'PHONE';
          p_contact_point_rec.owner_table_name     := 'HZ_PARTY_SITES';
          p_contact_point_rec.owner_table_id       := x_party_site_id;
          p_contact_point_rec.primary_flag         := 'Y';
          p_contact_point_rec.created_by_module    := 'POS_SUPPLIER_MGMT';
          p_phone_rec.phone_area_code              := l_vendor_sites.vendor_phone_area_code;
          p_phone_rec.phone_number                 := l_vendor_sites.vendor_phone_number;
          p_phone_rec.phone_line_type              := 'GEN';
          hz_contact_point_v2pub.create_contact_point(
            p_init_msg_list       => fnd_api.g_true
            ,p_contact_point_rec   => p_contact_point_rec
            ,p_edi_rec             => p_edi_rec
            ,p_email_rec           => p_email_rec
            ,p_phone_rec           => p_phone_rec
            ,p_telex_rec           => p_telex_rec
            ,p_web_rec             => p_web_rec
            ,x_contact_point_id    => x_contact_point_id
            ,x_return_status       => g_return_status
            ,x_msg_count           => g_msg_count
            ,x_msg_data            => g_msg_data
          );
          IF
            g_return_status <> fnd_api.g_ret_sts_success
          THEN
            FOR i IN 1..g_msg_count LOOP
              g_msg_data   := fnd_msg_pub.get(
                p_msg_index   => i
                ,p_encoded     => 'F'
              );
              dbms_output.put_line(i
              || ') '
              || g_msg_data);
            END LOOP;
          END IF;
-- Initializing the Mandatory API parameters
          p_contact_point_rec.contact_point_type   := 'EMAIL';
          p_contact_point_rec.owner_table_name     := 'HZ_PARTY_SITES';
          p_contact_point_rec.owner_table_id       := x_party_site_id;
          p_contact_point_rec.primary_flag         := 'Y';
          p_contact_point_rec.created_by_module    := 'POS_SUPPLIER_MGMT';
          p_email_rec.email_address                := l_vendor_sites.vendor_email_address;
          hz_contact_point_v2pub.create_contact_point(
            p_init_msg_list       => fnd_api.g_true
            ,p_contact_point_rec   => p_contact_point_rec
            ,p_edi_rec             => p_edi_rec
            ,p_email_rec           => p_email_rec
            ,p_phone_rec           => p_phone_rec
            ,p_telex_rec           => p_telex_rec
            ,p_web_rec             => p_web_rec
            ,x_contact_point_id    => x_contact_point_id
            ,x_return_status       => g_return_status
            ,x_msg_count           => g_msg_count
            ,x_msg_data            => g_msg_data
          );
          IF
            g_return_status <> fnd_api.g_ret_sts_success
          THEN
            FOR i IN 1..g_msg_count LOOP
              g_msg_data   := fnd_msg_pub.get(
                p_msg_index   => i
                ,p_encoded     => 'F'
              );
              dbms_output.put_line(i
              || ') '
              || g_msg_data);
            END LOOP;
          END IF;
        END IF;
/*API to update Address Purpose to Purchasing*/
        p_party_site_use_rec.site_use_type       := 'PURCHASING';
        p_party_site_use_rec.party_site_id       := x_party_site_id;
        p_party_site_use_rec.created_by_module   := 'POS_SUPPLIER_MGMT';
        hz_party_site_v2pub.create_party_site_use(
          p_init_msg_list        => fnd_api.g_true
          ,p_party_site_use_rec   => p_party_site_use_rec
          ,x_party_site_use_id    => x_party_site_use_id
          ,x_return_status        => g_return_status
          ,x_msg_count            => g_msg_count
          ,x_msg_data             => g_msg_data
        );
/*API to update Address Purpose to Payments*/
        p_party_site_use_rec.site_use_type       := 'PAY';
        p_party_site_use_rec.party_site_id       := x_party_site_id;
        p_party_site_use_rec.created_by_module   := 'POS_SUPPLIER_MGMT';
        hz_party_site_v2pub.create_party_site_use(
          p_init_msg_list        => fnd_api.g_true
          ,p_party_site_use_rec   => p_party_site_use_rec
          ,x_party_site_use_id    => x_party_site_use_id
          ,x_return_status        => g_return_status
          ,x_msg_count            => g_msg_count
          ,x_msg_data             => g_msg_data
        );
        BEGIN
          SELECT party_tax_profile_id INTO
            l_party_tax_profile_id
          FROM zx_party_tax_profile
          WHERE party_id = x_party_site_id
                AND   party_type_code = 'THIRD_PARTY_SITE'
                AND   ROWNUM = 1;
        EXCEPTION
          WHEN OTHERS THEN
            l_party_tax_profile_id   := NULL;
        END;
        IF
          l_vendor_sites.vat_registration_num IS NOT NULL
        THEN
/*API to update Tax Registration Number at Supplier site level under Tax Details section*/
          zx_registrations_pkg.insert_row(
            p_request_id                  => NULL
            ,p_attribute1                  => NULL
            ,p_attribute2                  => NULL
            ,p_attribute3                  => NULL
            ,p_attribute4                  => NULL
            ,p_attribute5                  => NULL
            ,p_attribute6                  => NULL
            ,p_rounding_rule_code          => 'NEAREST'
            ,p_validation_rule             => NULL
            ,p_tax_jurisdiction_code       => NULL
            ,p_self_assess_flag            => NULL
            ,p_registration_status_code    => NULL
            ,p_registration_source_code    => NULL
            ,p_registration_reason_code    => NULL
            ,p_tax                         => 'GB VAT'
            ,p_tax_regime_code             => 'GB VAT'
            ,p_inclusive_tax_flag          => NULL
            ,p_effective_from              => SYSDATE
            ,p_effective_to                => NULL
            ,p_rep_party_tax_name          => NULL
            ,p_default_registration_flag   => NULL
            ,p_bank_account_num            => NULL
            ,p_record_type_code            => NULL
            ,p_legal_location_id           => NULL
            ,p_tax_authority_id            => NULL
            ,p_rep_tax_authority_id        => NULL
            ,p_coll_tax_authority_id       => NULL
            ,p_registration_type_code      => NULL
            ,p_registration_number         => l_vendor_sites.vat_registration_num
            ,p_party_tax_profile_id        => l_party_tax_profile_id
            ,p_legal_registration_id       => NULL
            ,p_bank_id                     => NULL
            ,p_bank_branch_id              => NULL
            ,p_account_site_id             => NULL
            ,p_attribute14                 => NULL
            ,p_attribute15                 => NULL
            ,p_attribute_category          => NULL
            ,p_program_login_id            => NULL
            ,p_account_id                  => NULL
            ,p_tax_classification_code     => NULL
            ,p_attribute7                  => NULL
            ,p_attribute8                  => NULL
            ,p_attribute9                  => NULL
            ,p_attribute10                 => NULL
            ,p_attribute11                 => NULL
            ,p_attribute12                 => NULL
            ,p_attribute13                 => NULL
            ,x_return_status               => g_return_status
          );
/*API to update Tax Registration Number at Supplier site level under Tax and Reporting section*/
          FOR v_site IN ( SELECT pvsa.*
                                ,pvsa.rowid
                          FROM po_vendor_sites_all pvsa
                          WHERE party_site_id = x_party_site_id
          ) LOOP
            ap_vendor_sites_pkg.update_row(
              x_rowid                          => v_site.rowid
              ,x_vendor_site_id                 => v_site.vendor_site_id
              ,x_last_update_date               => v_site.last_update_date
              ,x_last_updated_by                => v_site.last_updated_by
              ,x_vendor_id                      => v_site.vendor_id
              ,x_vendor_site_code               => v_site.vendor_site_code
              ,x_last_update_login              => v_site.last_update_login
              ,x_creation_date                  => v_site.creation_date
              ,x_created_by                     => v_site.created_by
              ,x_purchasing_site_flag           => v_site.purchasing_site_flag
              ,x_rfq_only_site_flag             => v_site.rfq_only_site_flag
              ,x_pay_site_flag                  => v_site.pay_site_flag
              ,x_attention_ar_flag              => v_site.attention_ar_flag
              ,x_address_line1                  => v_site.address_line1
              ,x_address_line2                  => v_site.address_line2
              ,x_address_line3                  => v_site.address_line3
              ,x_city                           => v_site.city
              ,x_state                          => v_site.state
              ,x_zip                            => v_site.zip
              ,x_province                       => v_site.province
              ,x_country                        => v_site.country
              ,x_area_code                      => v_site.area_code
              ,x_phone                          => v_site.phone
              ,x_customer_num                   => v_site.customer_num
              ,x_ship_to_location_id            => v_site.ship_to_location_id
              ,x_bill_to_location_id            => v_site.bill_to_location_id
              ,x_ship_via_lookup_code           => v_site.ship_via_lookup_code
              ,x_freight_terms_lookup_code      => v_site.freight_terms_lookup_code
              ,x_fob_lookup_code                => v_site.fob_lookup_code
              ,x_inactive_date                  => v_site.inactive_date
              ,x_fax                            => v_site.fax
              ,x_fax_area_code                  => v_site.fax_area_code
              ,x_telex                          => v_site.telex
              ,x_bank_account_name              => v_site.bank_account_name
              ,x_bank_account_num               => v_site.bank_account_num
              ,x_bank_num                       => v_site.bank_num
              ,x_bank_account_type              => v_site.bank_account_type
              ,x_terms_date_basis               => v_site.terms_date_basis
              ,x_current_catalog_num            => v_site.current_catalog_num
              ,x_distribution_set_id            => v_site.distribution_set_id
              ,x_accts_pay_ccid                 => v_site.accts_pay_code_combination_id
              ,x_future_dated_payment_ccid      => v_site.future_dated_payment_ccid
              ,x_prepay_code_combination_id     => v_site.prepay_code_combination_id
              ,x_pay_group_lookup_code          => v_site.pay_group_lookup_code
              ,x_payment_priority               => v_site.payment_priority
              ,x_terms_id                       => v_site.terms_id
              ,x_invoice_amount_limit           => v_site.invoice_amount_limit
              ,x_pay_date_basis_lookup_code     => v_site.pay_date_basis_lookup_code
              ,x_always_take_disc_flag          => v_site.always_take_disc_flag
              ,x_invoice_currency_code          => v_site.invoice_currency_code
              ,x_payment_currency_code          => v_site.payment_currency_code
              ,x_hold_all_payments_flag         => v_site.hold_all_payments_flag
              ,x_hold_future_payments_flag      => v_site.hold_future_payments_flag
              ,x_hold_reason                    => v_site.hold_reason
              ,x_hold_unmatched_invoices_flag   => v_site.hold_unmatched_invoices_flag
              ,x_match_option                   => v_site.match_option
              ,x_create_debit_memo_flag         => v_site.create_debit_memo_flag
              ,x_tax_reporting_site_flag        => v_site.tax_reporting_site_flag
              ,x_attribute_category             => v_site.attribute_category
              ,x_attribute1                     => v_site.attribute1
              ,x_attribute2                     => v_site.attribute2
              ,x_attribute3                     => v_site.attribute3
              ,x_attribute4                     => v_site.attribute4
              ,x_attribute5                     => v_site.attribute5
              ,x_attribute6                     => v_site.attribute6
              ,x_attribute7                     => v_site.attribute7
              ,x_attribute8                     => v_site.attribute8
              ,x_attribute9                     => v_site.attribute9
              ,x_attribute10                    => v_site.attribute10
              ,x_attribute11                    => v_site.attribute11
              ,x_attribute12                    => v_site.attribute12
              ,x_attribute13                    => v_site.attribute13
              ,x_attribute14                    => v_site.attribute14
              ,x_attribute15                    => v_site.attribute15
              ,x_validation_number              => v_site.validation_number
              ,x_exclude_freight_from_disc      => v_site.exclude_freight_from_discount
              ,x_vat_registration_num           => l_vendor_sites.vat_registration_num
              ,–v_site.vat_registration_num
              ,x_check_digits                   => v_site.check_digits
              ,x_bank_number                    => v_site.bank_number
              , --v0.3
              x_address_line4                  => v_site.address_line4
              ,x_county                         => v_site.county
              ,x_address_style                  => v_site.address_style
              ,x_language                       => v_site.language
              ,x_allow_awt_flag                 => v_site.allow_awt_flag
              ,x_awt_group_id                   => v_site.awt_group_id
              ,x_pay_awt_group_id               => v_site.pay_awt_group_id
              ,x_pay_on_code                    => v_site.pay_on_code
              ,x_default_pay_site_id            => v_site.default_pay_site_id
              ,x_pay_on_receipt_summary_code    => v_site.pay_on_receipt_summary_code
              ,x_bank_branch_type               => v_site.bank_branch_type
              ,x_edi_id_number                  => v_site.edi_id_number
              ,x_vendor_site_code_alt           => v_site.vendor_site_code_alt
              ,x_address_lines_alt              => v_site.address_lines_alt
              ,x_global_attribute_category      => v_site.global_attribute_category
              ,x_global_attribute1              => v_site.global_attribute1
              ,x_global_attribute2              => v_site.global_attribute2
              ,x_global_attribute3              => v_site.global_attribute3
              ,x_global_attribute4              => v_site.global_attribute4
              ,x_global_attribute5              => v_site.global_attribute5
              ,x_global_attribute6              => v_site.global_attribute6
              ,x_global_attribute7              => v_site.global_attribute7
              ,x_global_attribute8              => v_site.global_attribute8
              ,x_global_attribute9              => v_site.global_attribute9
              ,x_global_attribute10             => v_site.global_attribute10
              ,x_global_attribute11             => v_site.global_attribute11
              ,x_global_attribute12             => v_site.global_attribute12
              ,x_global_attribute13             => v_site.global_attribute13
              ,x_global_attribute14             => v_site.global_attribute14
              ,x_global_attribute15             => v_site.global_attribute15
              ,x_global_attribute16             => v_site.global_attribute16
              ,x_global_attribute17             => v_site.global_attribute17
              ,x_global_attribute18             => v_site.global_attribute18
              ,x_global_attribute19             => v_site.global_attribute19
              ,x_global_attribute20             => v_site.global_attribute20
              ,x_bank_charge_bearer             => v_site.bank_charge_bearer
              ,x_ece_tp_location_code           => v_site.ece_tp_location_code
              ,x_pcard_site_flag                => v_site.pcard_site_flag
              ,x_country_of_origin_code         => v_site.country_of_origin_code
              ,x_calling_sequence               => 'SQL SCRIPT – RFC7917'
              ,x_shipping_location_id           => NULL
              , --v_Site.shipping_location_id, -- do not update shipping location information
              x_supplier_notif_method          => v_site.supplier_notif_method
              ,x_email_address                  => v_site.email_address
              ,x_primary_pay_site_flag          => v_site.primary_pay_site_flag
              ,x_org_id                         => v_site.org_id
            );
          END LOOP;
        END IF;
      END IF;
    ELSE
      lv_user_id                                           := NULL;
      lv_responsibility_id                                 := NULL;
      lv_application_id                                    := NULL;
      BEGIN
        SELECT fu.user_id
              ,frt.responsibility_id
              ,frt.application_id INTO
          lv_user_id,lv_responsibility_id,lv_application_id
        FROM fnd_user fu
            ,fnd_responsibility_tl frt
        WHERE fu.user_name = 'SYSADMIN'
              AND   frt.responsibility_name = 'ABC Payables Supplier Setup';
      EXCEPTION
        WHEN OTHERS THEN
          NULL;
      END;
      fnd_global.apps_initialize(
        lv_user_id
        ,lv_responsibility_id
        ,lv_application_id
      );
      mo_global.init('SQLAP');
      OPEN cur_org_id(l_vendor_sites.unit);
      FETCH cur_org_id INTO l_vendor_site_org_id;
      CLOSE cur_org_id;
      fnd_client_info.set_org_context(l_vendor_site_org_id);
      l_vendor_site_rec.last_update_date                   := SYSDATE;
      l_vendor_site_rec.last_updated_by                    := fnd_global.user_id;
      l_vendor_site_rec.vendor_id                          := p_vendor_id;
      l_vendor_site_rec.vendor_site_code                   := l_vendor_sites.vendor_site_code;
      l_vendor_site_rec.country                            := l_vendor_sites.vendor_site_country;
      l_vendor_site_rec.address_line1                      := l_vendor_sites.vendor_site_add1;
      l_vendor_site_rec.address_line2                      := l_vendor_sites.vendor_site_add2;
      l_vendor_site_rec.address_line3                      := l_vendor_sites.vendor_site_add3;
      l_vendor_site_rec.address_line4                      := l_vendor_sites.vendor_site_add4;
      l_vendor_site_rec.city                               := l_vendor_sites.vendor_site_city;
      l_vendor_site_rec.zip                                := l_vendor_sites.vendor_site_zip;
      l_vendor_site_rec.org_id                             := l_vendor_site_org_id;
      l_vendor_site_rec.area_code                          := l_vendor_sites.vendor_phone_area_code;
      l_vendor_site_rec.phone                              := l_vendor_sites.vendor_phone_number;
      l_vendor_site_rec.email_address                      := l_vendor_sites.vendor_email_address;
      l_vendor_site_rec.vat_registration_num               := l_vendor_sites.vat_registration_num;
      l_vendor_site_rec.ap_tax_rounding_rule               := 'NEAREST';
      l_vendor_site_rec.vat_code                           := 'STANDARD';
      l_vendor_site_rec.auto_tax_calc_flag                 := 'Y';
      –l_vendor_site_rec.tolerance_name                    := 'ABC – Tolerance';
      l_vendor_site_rec.supplier_notif_method              := 'PRINT';
      l_vendor_site_rec.purchasing_site_flag               := 'Y';
      l_vendor_site_rec.pay_site_flag                      := 'Y';
      l_vendor_site_rec.pay_group_lookup_code              := l_vendor_sites.pay_group_lookup_code;
      l_vendor_site_rec.hold_unmatched_invoices_flag       := 'Y';
      l_vendor_site_rec.hold_reason                        := 'UNMATCHED INVOICES';
      l_vendor_site_rec.ext_payee_rec.default_pmt_method   := 'EFT';
      l_vendor_site_rec.remittance_email                   := l_vendor_sites.remittance_email_address; --v0.2
      IF
        l_vendor_sites.remittance_email_address IS NOT NULL
      THEN
        l_vendor_site_rec.remit_advice_delivery_method   := 'EMAIL';
      END IF;
-- Call the API
      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      => g_return_status
        ,x_msg_count          => g_msg_count
        ,x_msg_data           => g_msg_data
        ,p_vendor_site_rec    => l_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
      );
      IF
        g_return_status <> fnd_api.g_ret_sts_success
      THEN
        FOR v_index IN 1..g_msg_count LOOP
          fnd_msg_pub.get(
            p_msg_index       => v_index
            ,p_encoded         => 'F'
            ,p_data            => g_msg_data
            ,p_msg_index_out   => g_msg_index_out
          );
          g_msg_data   := substr(
            g_msg_data
            ,1
            ,200
          );
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error at Vendor site creation :'
            || g_msg_data
          );
          ROLLBACK;
        END LOOP;
      ELSE
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Vendor site: '
          || l_vendor_site_rec.vendor_site_code
          || ' created for vendor: '
          || lv_supplier_number
        );
/*API to update Communication details under Address Book section*/ --v0.4
        IF
          l_vendor_sites.vendor_phone_area_code IS NOT NULL OR l_vendor_sites.vendor_phone_number IS NOT NULL OR l_vendor_sites.vendor_email_address IS NOT NULL
        THEN
-- Initializing the Mandatory API parameters
          p_contact_point_rec.contact_point_type   := 'PHONE';
          p_contact_point_rec.owner_table_name     := 'HZ_PARTY_SITES';
          p_contact_point_rec.owner_table_id       := x_party_site_id;
          p_contact_point_rec.primary_flag         := 'Y';
          p_contact_point_rec.created_by_module    := 'POS_SUPPLIER_MGMT';
          p_phone_rec.phone_area_code              := l_vendor_sites.vendor_phone_area_code;
          p_phone_rec.phone_number                 := l_vendor_sites.vendor_phone_number;
          p_phone_rec.phone_line_type              := 'GEN';
          hz_contact_point_v2pub.create_contact_point(
            p_init_msg_list       => fnd_api.g_true
            ,p_contact_point_rec   => p_contact_point_rec
            ,p_edi_rec             => p_edi_rec
            ,p_email_rec           => p_email_rec
            ,p_phone_rec           => p_phone_rec
            ,p_telex_rec           => p_telex_rec
            ,p_web_rec             => p_web_rec
            ,x_contact_point_id    => x_contact_point_id
            ,x_return_status       => g_return_status
            ,x_msg_count           => g_msg_count
            ,x_msg_data            => g_msg_data
          );
          IF
            g_return_status <> fnd_api.g_ret_sts_success
          THEN
            FOR i IN 1..g_msg_count LOOP
              g_msg_data   := fnd_msg_pub.get(
                p_msg_index   => i
                ,p_encoded     => 'F'
              );
              dbms_output.put_line(i
              || ') '
              || g_msg_data);
            END LOOP;
          END IF;
-- Initializing the Mandatory API parameters
          p_contact_point_rec.contact_point_type   := 'EMAIL';
          p_contact_point_rec.owner_table_name     := 'HZ_PARTY_SITES';
          p_contact_point_rec.owner_table_id       := x_party_site_id;
          p_contact_point_rec.primary_flag         := 'Y';
          p_contact_point_rec.created_by_module    := 'POS_SUPPLIER_MGMT';
          p_email_rec.email_address                := l_vendor_sites.vendor_email_address;
          hz_contact_point_v2pub.create_contact_point(
            p_init_msg_list       => fnd_api.g_true
            ,p_contact_point_rec   => p_contact_point_rec
            ,p_edi_rec             => p_edi_rec
            ,p_email_rec           => p_email_rec
            ,p_phone_rec           => p_phone_rec
            ,p_telex_rec           => p_telex_rec
            ,p_web_rec             => p_web_rec
            ,x_contact_point_id    => x_contact_point_id
            ,x_return_status       => g_return_status
            ,x_msg_count           => g_msg_count
            ,x_msg_data            => g_msg_data
          );
          IF
            g_return_status <> fnd_api.g_ret_sts_success
          THEN
            FOR i IN 1..g_msg_count LOOP
              g_msg_data   := fnd_msg_pub.get(
                p_msg_index   => i
                ,p_encoded     => 'F'
              );
              dbms_output.put_line(i
              || ') '
              || g_msg_data);
            END LOOP;
          END IF;
        END IF;
/*API to update Address Purpose to Purchasing*/
        p_party_site_use_rec.site_use_type       := 'PURCHASING';
        p_party_site_use_rec.party_site_id       := x_party_site_id;
        p_party_site_use_rec.created_by_module   := 'POS_SUPPLIER_MGMT';
        hz_party_site_v2pub.create_party_site_use(
          p_init_msg_list        => fnd_api.g_true
          ,p_party_site_use_rec   => p_party_site_use_rec
          ,x_party_site_use_id    => x_party_site_use_id
          ,x_return_status        => g_return_status
          ,x_msg_count            => g_msg_count
          ,x_msg_data             => g_msg_data
        );
/*API to update Address Purpose to Payments*/
        p_party_site_use_rec.site_use_type       := 'PAY';
        p_party_site_use_rec.party_site_id       := x_party_site_id;
        p_party_site_use_rec.created_by_module   := 'POS_SUPPLIER_MGMT';
        hz_party_site_v2pub.create_party_site_use(
          p_init_msg_list        => fnd_api.g_true
          ,p_party_site_use_rec   => p_party_site_use_rec
          ,x_party_site_use_id    => x_party_site_use_id
          ,x_return_status        => g_return_status
          ,x_msg_count            => g_msg_count
          ,x_msg_data             => g_msg_data
        );
        BEGIN
          SELECT party_tax_profile_id INTO
            l_party_tax_profile_id
          FROM zx_party_tax_profile
          WHERE party_id = x_party_site_id
                AND   party_type_code = 'THIRD_PARTY_SITE'
                AND   ROWNUM = 1;
        EXCEPTION
          WHEN OTHERS THEN
            l_party_tax_profile_id   := NULL;
        END;
        IF
          l_vendor_sites.vat_registration_num IS NOT NULL
        THEN
/*API to update Tax Registration Number at Supplier site level under Tax Details section*/
          zx_registrations_pkg.insert_row(
            p_request_id                  => NULL
            ,p_attribute1                  => NULL
            ,p_attribute2                  => NULL
            ,p_attribute3                  => NULL
            ,p_attribute4                  => NULL
            ,p_attribute5                  => NULL
            ,p_attribute6                  => NULL
            ,p_rounding_rule_code          => 'NEAREST'
            ,p_validation_rule             => NULL
            ,p_tax_jurisdiction_code       => NULL
            ,p_self_assess_flag            => NULL
            ,p_registration_status_code    => NULL
            ,p_registration_source_code    => NULL
            ,p_registration_reason_code    => NULL
            ,p_tax                         => 'GB VAT'
            ,p_tax_regime_code             => 'GB VAT'
            ,p_inclusive_tax_flag          => NULL
            ,p_effective_from              => SYSDATE
            ,p_effective_to                => NULL
            ,p_rep_party_tax_name          => NULL
            ,p_default_registration_flag   => NULL
            ,p_bank_account_num            => NULL
            ,p_record_type_code            => NULL
            ,p_legal_location_id           => NULL
            ,p_tax_authority_id            => NULL
            ,p_rep_tax_authority_id        => NULL
            ,p_coll_tax_authority_id       => NULL
            ,p_registration_type_code      => NULL
            ,p_registration_number         => l_vendor_sites.vat_registration_num
            ,p_party_tax_profile_id        => l_party_tax_profile_id
            ,p_legal_registration_id       => NULL
            ,p_bank_id                     => NULL
            ,p_bank_branch_id              => NULL
            ,p_account_site_id             => NULL
            ,p_attribute14                 => NULL
            ,p_attribute15                 => NULL
            ,p_attribute_category          => NULL
            ,p_program_login_id            => NULL
            ,p_account_id                  => NULL
            ,p_tax_classification_code     => NULL
            ,p_attribute7                  => NULL
            ,p_attribute8                  => NULL
            ,p_attribute9                  => NULL
            ,p_attribute10                 => NULL
            ,p_attribute11                 => NULL
            ,p_attribute12                 => NULL
            ,p_attribute13                 => NULL
            ,x_return_status               => g_return_status
          );
/*API to update Tax Registration Number at Supplier site level under Tax and Reporting section*/
          FOR v_site IN ( SELECT pvsa.*
                                ,pvsa.rowid
                          FROM po_vendor_sites_all pvsa
                          WHERE party_site_id = x_party_site_id
          ) LOOP
            ap_vendor_sites_pkg.update_row(
              x_rowid                          => v_site.rowid
              ,x_vendor_site_id                 => v_site.vendor_site_id
              ,x_last_update_date               => v_site.last_update_date
              ,x_last_updated_by                => v_site.last_updated_by
              ,x_vendor_id                      => v_site.vendor_id
              ,x_vendor_site_code               => v_site.vendor_site_code
              ,x_last_update_login              => v_site.last_update_login
              ,x_creation_date                  => v_site.creation_date
              ,x_created_by                     => v_site.created_by
              ,x_purchasing_site_flag           => v_site.purchasing_site_flag
              ,x_rfq_only_site_flag             => v_site.rfq_only_site_flag
              ,x_pay_site_flag                  => v_site.pay_site_flag
              ,x_attention_ar_flag              => v_site.attention_ar_flag
              ,x_address_line1                  => v_site.address_line1
              ,x_address_line2                  => v_site.address_line2
              ,x_address_line3                  => v_site.address_line3
              ,x_city                           => v_site.city
              ,x_state                          => v_site.state
              ,x_zip                            => v_site.zip
              ,x_province                       => v_site.province
              ,x_country                        => v_site.country
              ,x_area_code                      => v_site.area_code
              ,x_phone                          => v_site.phone
              ,x_customer_num                   => v_site.customer_num
              ,x_ship_to_location_id            => v_site.ship_to_location_id
              ,x_bill_to_location_id            => v_site.bill_to_location_id
              ,x_ship_via_lookup_code           => v_site.ship_via_lookup_code
              ,x_freight_terms_lookup_code      => v_site.freight_terms_lookup_code
              ,x_fob_lookup_code                => v_site.fob_lookup_code
              ,x_inactive_date                  => v_site.inactive_date
              ,x_fax                            => v_site.fax
              ,x_fax_area_code                  => v_site.fax_area_code
              ,x_telex                          => v_site.telex
              ,x_bank_account_name              => v_site.bank_account_name
              ,x_bank_account_num               => v_site.bank_account_num
              ,x_bank_num                       => v_site.bank_num
              ,x_bank_account_type              => v_site.bank_account_type
              ,x_terms_date_basis               => v_site.terms_date_basis
              ,x_current_catalog_num            => v_site.current_catalog_num
              ,x_distribution_set_id            => v_site.distribution_set_id
              ,x_accts_pay_ccid                 => v_site.accts_pay_code_combination_id
              ,x_future_dated_payment_ccid      => v_site.future_dated_payment_ccid
              ,x_prepay_code_combination_id     => v_site.prepay_code_combination_id
              ,x_pay_group_lookup_code          => v_site.pay_group_lookup_code
              ,x_payment_priority               => v_site.payment_priority
              ,x_terms_id                       => v_site.terms_id
              ,x_invoice_amount_limit           => v_site.invoice_amount_limit
              ,x_pay_date_basis_lookup_code     => v_site.pay_date_basis_lookup_code
              ,x_always_take_disc_flag          => v_site.always_take_disc_flag
              ,x_invoice_currency_code          => v_site.invoice_currency_code
              ,x_payment_currency_code          => v_site.payment_currency_code
              ,x_hold_all_payments_flag         => v_site.hold_all_payments_flag
              ,x_hold_future_payments_flag      => v_site.hold_future_payments_flag
              ,x_hold_reason                    => v_site.hold_reason
              ,x_hold_unmatched_invoices_flag   => v_site.hold_unmatched_invoices_flag
              ,x_match_option                   => v_site.match_option
              ,x_create_debit_memo_flag         => v_site.create_debit_memo_flag
              ,x_tax_reporting_site_flag        => v_site.tax_reporting_site_flag
              ,x_attribute_category             => v_site.attribute_category
              ,x_attribute1                     => v_site.attribute1
              ,x_attribute2                     => v_site.attribute2
              ,x_attribute3                     => v_site.attribute3
              ,x_attribute4                     => v_site.attribute4
              ,x_attribute5                     => v_site.attribute5
              ,x_attribute6                     => v_site.attribute6
              ,x_attribute7                     => v_site.attribute7
              ,x_attribute8                     => v_site.attribute8
              ,x_attribute9                     => v_site.attribute9
              ,x_attribute10                    => v_site.attribute10
              ,x_attribute11                    => v_site.attribute11
              ,x_attribute12                    => v_site.attribute12
              ,x_attribute13                    => v_site.attribute13
              ,x_attribute14                    => v_site.attribute14
              ,x_attribute15                    => v_site.attribute15
              ,x_validation_number              => v_site.validation_number
              ,x_exclude_freight_from_disc      => v_site.exclude_freight_from_discount
              ,x_vat_registration_num           => l_vendor_sites.vat_registration_num
              ,--v_Site.vat_registration_num,
              x_check_digits                   => v_site.check_digits
              ,x_bank_number                    => v_site.bank_number
              , --v0.3
              x_address_line4                  => v_site.address_line4
              ,x_county                         => v_site.county
              ,x_address_style                  => v_site.address_style
              ,x_language                       => v_site.language
              ,x_allow_awt_flag                 => v_site.allow_awt_flag
              ,x_awt_group_id                   => v_site.awt_group_id
              ,x_pay_awt_group_id               => v_site.pay_awt_group_id
              ,x_pay_on_code                    => v_site.pay_on_code
              ,x_default_pay_site_id            => v_site.default_pay_site_id
              ,x_pay_on_receipt_summary_code    => v_site.pay_on_receipt_summary_code
              ,x_bank_branch_type               => v_site.bank_branch_type
              ,x_edi_id_number                  => v_site.edi_id_number
              ,x_vendor_site_code_alt           => v_site.vendor_site_code_alt
              ,x_address_lines_alt              => v_site.address_lines_alt
              ,x_global_attribute_category      => v_site.global_attribute_category
              ,x_global_attribute1              => v_site.global_attribute1
              ,x_global_attribute2              => v_site.global_attribute2
              ,x_global_attribute3              => v_site.global_attribute3
              ,x_global_attribute4              => v_site.global_attribute4
              ,x_global_attribute5              => v_site.global_attribute5
              ,x_global_attribute6              => v_site.global_attribute6
              ,x_global_attribute7              => v_site.global_attribute7
              ,x_global_attribute8              => v_site.global_attribute8
              ,x_global_attribute9              => v_site.global_attribute9
              ,x_global_attribute10             => v_site.global_attribute10
              ,x_global_attribute11             => v_site.global_attribute11
              ,x_global_attribute12             => v_site.global_attribute12
              ,x_global_attribute13             => v_site.global_attribute13
              ,x_global_attribute14             => v_site.global_attribute14
              ,x_global_attribute15             => v_site.global_attribute15
              ,x_global_attribute16             => v_site.global_attribute16
              ,x_global_attribute17             => v_site.global_attribute17
              ,x_global_attribute18             => v_site.global_attribute18
              ,x_global_attribute19             => v_site.global_attribute19
              ,x_global_attribute20             => v_site.global_attribute20
              ,x_bank_charge_bearer             => v_site.bank_charge_bearer
              ,x_ece_tp_location_code           => v_site.ece_tp_location_code
              ,x_pcard_site_flag                => v_site.pcard_site_flag
              ,x_country_of_origin_code         => v_site.country_of_origin_code
              ,x_calling_sequence               => 'SQL SCRIPT – RFC7917'
              ,x_shipping_location_id           => NULL
              , --v_Site.shipping_location_id, -- do not update shipping location information
              x_supplier_notif_method          => v_site.supplier_notif_method
              ,x_email_address                  => v_site.email_address
              ,x_primary_pay_site_flag          => v_site.primary_pay_site_flag
              ,x_org_id                         => v_site.org_id
            );
          END LOOP;
        END IF;
      END IF;
    END IF;
    CLOSE cur_stg_tab;
  END xxab_create_vendor_site;
--------------------------------------------------
-- * Procedure Name : xxab_create_vendor_contact
-- * Description : This Procedure creates the Supplier site
-- * contacts
--------------------------------------------------
  PROCEDURE xxab_create_vendor_contact (
    p_vendor_id        IN NUMBER
    ,p_vendor_site_id   IN NUMBER
  ) IS
    l_vendor_contact_rec   apps.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_party_site_id        NUMBER;
    lv_vendor_number       VARCHAR2(100);
    lv_vendor_site_code    VARCHAR2(100);
    l_vendor_site_org_id   VARCHAR2(50);
    CURSOR cur_sup_tab (
      p_vendor_id NUMBER
    ) IS SELECT segment1 FROM ap_suppliers WHERE vendor_id = p_vendor_id;
    CURSOR cur_sup_site_tab (
      p_vendor_number VARCHAR2
    ) IS SELECT vendor_site_code FROM ap_supplier_sites_all WHERE vendor_id = p_vendor_id;
    CURSOR cur_stg_tab (
      p_vendor_number VARCHAR2
      ,p_vendor_site_code VARCHAR2
    ) IS SELECT *
         FROM xxab_supp_stg_tab
         WHERE 1 = 1
               AND   vendor_number = p_vendor_number
               AND   vendor_site_code = p_vendor_site_code;
    l_site_contacts        cur_stg_tab%rowtype;
    CURSOR cur_org_id (
      p_unit VARCHAR2
    ) IS SELECT organization_id
         FROM hr_all_organization_units
         WHERE name = DECODE(
      p_unit
      ,'USABC'
      ,'ABCAAA'
      ,'USDEF'
      ,'ABCAAA'
      ,'USXYZ'
      ,'ABC'
    );
  BEGIN
    OPEN cur_sup_tab(p_vendor_id);
    FETCH cur_sup_tab INTO lv_vendor_number;
    CLOSE cur_sup_tab;
    OPEN cur_sup_site_tab(lv_vendor_number);
    FETCH cur_sup_site_tab INTO lv_vendor_site_code;
    CLOSE cur_sup_site_tab;
    OPEN cur_stg_tab(
      lv_vendor_number
      ,lv_vendor_site_code
    );
    LOOP
      FETCH cur_stg_tab INTO l_site_contacts;
      EXIT WHEN cur_stg_tab%notfound;
      OPEN cur_org_id(l_site_contacts.unit);
      FETCH cur_org_id INTO l_vendor_site_org_id;
      CLOSE cur_org_id;
-- Assign Contact Details
      l_vendor_contact_rec.vendor_id           := p_vendor_id;
      l_vendor_contact_rec.vendor_site_id      := p_vendor_site_id;
      l_vendor_contact_rec.person_first_name   := l_site_contacts.vendor_contact_first_name;
      l_vendor_contact_rec.person_last_name    := l_site_contacts.vendor_contact_last_name;
      l_vendor_contact_rec.email_address       := l_site_contacts.vendor_contact_email;
      l_vendor_contact_rec.org_id              := l_vendor_site_org_id;
      l_vendor_contact_rec.person_title        := l_site_contacts.person_title;
      IF
        ( l_site_contacts.vendor_contact_first_name IS NOT NULL OR l_site_contacts.vendor_contact_last_name IS NOT NULL OR l_site_contacts.vendor_contact_email IS NOT NULL )
      THEN
        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        => g_return_status
          ,x_msg_count            => g_msg_count
          ,x_msg_data             => g_msg_data
          ,p_vendor_contact_rec   => l_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
        );
        IF
          g_return_status <> fnd_api.g_ret_sts_success
        THEN
          FOR v_index IN 1..fnd_msg_pub.count_msg LOOP
            fnd_msg_pub.get(
              p_msg_index       => v_index
              ,p_encoded         => 'F'
              ,p_data            => g_msg_data
              ,p_msg_index_out   => g_msg_index_out
            );
            g_msg_data   := substr(
              g_msg_data
              ,1
              ,200
            );
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error at Vendor site contacts :'
              || g_msg_data
            );
            ROLLBACK;
          END LOOP;
        ELSE
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Vendor site contact '
            || l_site_contacts.vendor_contact_first_name
            || ' '
            || l_site_contacts.vendor_contact_last_name
            || ' created for vendor: '
            || lv_vendor_number
          );
        END IF;
      ELSE
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Missing Information – Vendor contact details does not exist for vendor :'
          || lv_vendor_number
          || '..!'
        );
      END IF;
    END LOOP;
    CLOSE cur_stg_tab;
  END xxab_create_vendor_contact;
--------------------------------------------------------
-- * Procedure Name : xxab_create_vendor_tax
-- * Description : This Procedure creates the Supplier Tax
--------------------------------------------------------
  PROCEDURE xxab_create_vendor_tax (
    p_vendor_party_id IN NUMBER
  ) IS
    lv_party_tax_profile_id      VARCHAR2(50);
    lv_tax_registration_number   VARCHAR2(50);
    lv_vendor_number             VARCHAR2(50);
    CURSOR cur_ven_tax IS SELECT party_tax_profile_id FROM zx_party_tax_profile WHERE party_id = p_vendor_party_id;
  BEGIN
    OPEN cur_ven_tax;
    FETCH cur_ven_tax INTO lv_party_tax_profile_id;
    CLOSE cur_ven_tax;
    zx_party_tax_profile_pkg.update_row(
      p_party_tax_profile_id           => lv_party_tax_profile_id
      ,p_collecting_authority_flag      => NULL
      ,p_provider_type_code             => NULL
      ,p_create_awt_dists_type_code     => NULL
      ,p_create_awt_invoices_type_cod   => NULL
      ,p_tax_classification_code        => NULL
      ,p_self_assess_flag               => NULL
      ,p_allow_offset_tax_flag          => NULL
      ,p_rep_registration_number        => NULL
      ,p_effective_from_use_le          => NULL
      ,p_record_type_code               => NULL
      ,p_request_id                     => NULL
      ,p_attribute1                     => NULL
      ,p_attribute2                     => NULL
      ,p_attribute3                     => NULL
      ,p_attribute4                     => NULL
      ,p_attribute5                     => NULL
      ,p_attribute6                     => NULL
      ,p_attribute7                     => NULL
      ,p_attribute8                     => NULL
      ,p_attribute9                     => NULL
      ,p_attribute10                    => NULL
      ,p_attribute11                    => NULL
      ,p_attribute12                    => NULL
      ,p_attribute13                    => NULL
      ,p_attribute14                    => NULL
      ,p_attribute15                    => NULL
      ,p_attribute_category             => NULL
      ,p_party_id                       => NULL
      ,p_program_login_id               => NULL
      ,p_party_type_code                => NULL
      ,p_supplier_flag                  => NULL
      ,p_customer_flag                  => NULL
      ,p_site_flag                      => NULL
      ,p_process_for_applicability_fl   => NULL
      ,p_rounding_level_code            => NULL
      ,p_rounding_rule_code             => 'NEAREST'
      ,p_withholding_saaat_date         => NULL
      ,p_inclusive_tax_flag             => NULL
      ,p_allow_awt_flag                 => NULL
      ,p_use_le_as_subscriber_flag      => NULL
      ,p_legal_establishment_flag       => NULL
      ,p_first_party_le_flag            => NULL
      ,p_reporting_authority_flag       => NULL
      ,x_return_status                  => g_return_status
      ,p_registration_type_code         => NULL
      ,p_country_code                   => NULL
    );
    IF
      g_return_status <> fnd_api.g_ret_sts_success
    THEN
      FOR v_index IN 1..fnd_msg_pub.count_msg LOOP
        fnd_msg_pub.get(
          p_msg_index       => v_index
          ,p_encoded         => 'F'
          ,p_data            => g_msg_data
          ,p_msg_index_out   => g_msg_index_out
        );
        g_msg_data   := substr(
          g_msg_data
          ,1
          ,200
        );
        dbms_output.put_line('Error at Vendor tax creation :'
        || g_msg_data);
        ROLLBACK;
      END LOOP;
    ELSE
      dbms_output.put_line('Tax details updated succesfully');
    END IF;
  END xxab_create_vendor_tax;
----------------------------------------------------------
-- * Procedure Name : xxab_bank_account_creation
-- * Description : This Procedure creates the Supplier bank
-- * account
----------------------------------------------------------
  PROCEDURE xxab_bank_account_creation (
    p_vendor_id IN NUMBER
  ) IS
    x_response            iby_fndcpt_common_pub.result_rec_type;
    p_ext_bank_acct_rec   iby_ext_bankacct_pub.extbankacct_rec_type;
    v_supplier_party_id   NUMBER;
    x_acct_id             NUMBER;
    p_count               NUMBER;
    lv_supplier_number    VARCHAR2(100);
    lv_supplier_name      VARCHAR2(1000);
    ln_party_id           NUMBER;
    ln_bank_party_id      NUMBER;
    ln_branch_party_id    NUMBER;
    CURSOR cur_sup_tab (
      p_vendor_id NUMBER
    ) IS SELECT segment1
               ,party_id
               ,vendor_name
         FROM ap_suppliers
         WHERE vendor_id = p_vendor_id;
    CURSOR cur_stg_tab (
      p_supplier_number VARCHAR2
      ,p_supplier_name VARCHAR2
    ) IS SELECT *
         FROM xxab_supp_stg_tab
         WHERE 1 = 1
               AND   vendor_number = p_supplier_number
               AND   vendor_name = p_supplier_name;
    l_vendor_bank         cur_stg_tab%rowtype;
  BEGIN
    OPEN cur_sup_tab(p_vendor_id);
    FETCH cur_sup_tab INTO lv_supplier_number,ln_party_id,lv_supplier_name;
    CLOSE cur_sup_tab;
    OPEN cur_stg_tab(
      lv_supplier_number
      ,lv_supplier_name
    );
    FETCH cur_stg_tab INTO l_vendor_bank;
    IF
      ( l_vendor_bank.bank_name IS NOT NULL AND l_vendor_bank.bank_number IS NOT NULL ) AND ( l_vendor_bank.bank_account_number IS NOT NULL AND l_vendor_bank.bank_account_name IS NOT NULL )
    THEN
      BEGIN
        SELECT bank_party_id INTO
          ln_bank_party_id
        FROM iby_ext_banks_v
        WHERE 1 = 1
              AND   bank_name = l_vendor_bank.bank_name
              AND   bank_number = l_vendor_bank.bank_number;
      EXCEPTION
        WHEN OTHERS THEN
          ln_bank_party_id   := NULL;
      END;
      IF
        nvl(
          ln_bank_party_id
          ,1
        ) <> 1
      THEN
        BEGIN
          SELECT branch_party_id INTO
            ln_branch_party_id
          FROM iby_ext_bank_branches_v
          WHERE bank_party_id = ln_bank_party_id;
        EXCEPTION
          WHEN OTHERS THEN
            NULL;
        END;
        p_ext_bank_acct_rec.acct_owner_party_id        := ln_party_id;
        p_ext_bank_acct_rec.bank_account_name          := l_vendor_bank.bank_account_name;
        p_ext_bank_acct_rec.bank_account_num           := l_vendor_bank.bank_account_number;
        p_ext_bank_acct_rec.bank_id                    := ln_bank_party_id;
        p_ext_bank_acct_rec.branch_id                  := ln_branch_party_id;
        p_ext_bank_acct_rec.saaat_date                 := SYSDATE;
        p_ext_bank_acct_rec.country_code               := 'GB';
        p_ext_bank_acct_rec.currency                   := 'GBP';
        p_ext_bank_acct_rec.foreign_payment_use_flag   := 'N';
        p_ext_bank_acct_rec.payment_factor_flag        := 'N';
        iby_ext_bankacct_pub.create_ext_bank_acct(
          p_api_version         => 1.0
          ,p_init_msg_list       => fnd_api.g_true
          ,p_ext_bank_acct_rec   => p_ext_bank_acct_rec
          ,x_acct_id             => x_acct_id
          ,x_return_status       => g_return_status
          ,x_msg_count           => g_msg_count
          ,x_msg_data            => g_msg_data
          ,x_response            => x_response
        );
        IF
          g_return_status <> fnd_api.g_ret_sts_success
        THEN
          LOOP
            p_count      := p_count + 1;
            g_msg_data   := fnd_msg_pub.get(
              fnd_msg_pub.g_next
              ,fnd_api.g_false
            );
            IF
              g_msg_data IS NULL
            THEN
              EXIT;
            END IF;
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error at bank account creation '
              || p_count
              || ' —'
              || g_msg_data
            );
            ROLLBACK;
          END LOOP;
        ELSE
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Vendor site bank account created for vendor: '
            || lv_supplier_number
          );
        END IF;
      ELSE
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Missing Information – Bank details provided are invalid for vendor: '
          || lv_supplier_number
          || '. Please enter manually in application..!'
        );
      END IF;
    ELSE
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Missing Information – Bank details are not provided for vendor: '
        || lv_supplier_number
        || '. Please enter manually in application..!'
      );
    END IF;
  END xxab_bank_account_creation;
----------------------------------------------------------
-- * Procedure Name : xxab_bank_account_site_assg
-- * Description : This Procedure assigns the Supplier bank
-- * account at Site level
----------------------------------------------------------
  PROCEDURE xxab_bank_account_site_assg (
    p_vendor_id IN NUMBER
  ) IS
--Setting payee Instrument Assignment varibales
    lr_payee_rec             iby_disbursement_setup_pub.payeecontext_rec_type;
    lr_assg_attr             iby_fndcpt_setup_pub.pmtinstrassignment_rec_type;
    ln_assg_id               NUMBER;
    lr_response              iby_fndcpt_common_pub.result_rec_type;
    ln_acct_id               NUMBER;
    l_ext_bank_account_id    NUMBER;
    lv_bank_name             VARCHAR2(200);
    lv_bank_number           VARCHAR2(200);
    ln_bank_account_number   VARCHAR2(200);
    CURSOR cur_sup_tab (
      p_vendor_id NUMBER
    ) IS SELECT a.party_id
               ,b.org_id
               ,b.party_site_id
               ,b.vendor_site_id
               ,a.segment1
               ,a.vendor_name
         FROM ap_suppliers a
             ,ap_supplier_sites_all b
         WHERE a.vendor_id = p_vendor_id
               AND   a.vendor_id = b.vendor_id;
    l_vendor_bank_acnt       cur_sup_tab%rowtype;
  BEGIN
    OPEN cur_sup_tab(p_vendor_id);
    FETCH cur_sup_tab INTO l_vendor_bank_acnt;
    BEGIN
      SELECT bank_name
            ,bank_number
            ,bank_account_number INTO
        lv_bank_name,lv_bank_number,ln_bank_account_number
      FROM xxab_supp_stg_tab
      WHERE 1 = 1
            AND   vendor_number = l_vendor_bank_acnt.segment1
            AND   vendor_name = l_vendor_bank_acnt.vendor_name
            AND   ROWNUM = 1;
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
    END;
    IF
      lv_bank_name IS NOT NULL AND lv_bank_number IS NOT NULL AND ln_bank_account_number IS NOT NULL
    THEN
      BEGIN
        SELECT ext_bank_account_id INTO
          l_ext_bank_account_id
        FROM iby_ext_bank_accounts
        WHERE bank_id = ( SELECT bank_party_id
                          FROM iby_ext_banks_v
                          WHERE 1 = 1
                                AND   bank_name = lv_bank_name
                                AND   bank_number = lv_bank_number
                                AND   bank_account_num = ln_bank_account_number
        );
      EXCEPTION
        WHEN OTHERS THEN
          NULL;
      END;
      lr_payee_rec.payment_function             := 'PAYABLES_DISB';
      lr_payee_rec.party_id                     := l_vendor_bank_acnt.party_id;
      lr_payee_rec.org_type                     := 'OPERATING_UNIT';
      lr_payee_rec.org_id                       := l_vendor_bank_acnt.org_id;
      lr_payee_rec.party_site_id                := l_vendor_bank_acnt.party_site_id;
      lr_payee_rec.supplier_site_id             := l_vendor_bank_acnt.vendor_site_id;
      lr_assg_attr.instrument.instrument_type   := 'BANKACCOUNT';
      lr_assg_attr.instrument.instrument_id     := l_ext_bank_account_id;
      lr_assg_attr.priority                     := 1;
      lr_assg_attr.saaat_date                   := SYSDATE;
      lr_assg_attr.end_date                     := NULL;
      iby_disbursement_setup_pub.set_payee_instr_assignment(
        p_api_version          => 1.0
        ,p_init_msg_list        => fnd_api.g_true
        ,p_commit               => fnd_api.g_true
        ,x_return_status        => g_return_status
        ,x_msg_count            => g_msg_count
        ,x_msg_data             => g_msg_data
        ,p_payee                => lr_payee_rec
        ,p_assignment_attribs   => lr_assg_attr
        ,x_assign_id            => ln_assg_id
        ,x_response             => lr_response
      );
      IF
        g_msg_count = 0
      THEN
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Vendor site bank account assigned to vendor :'
          || l_vendor_bank_acnt.segment1
        );
      END IF;
    END IF;
    CLOSE cur_sup_tab;
  EXCEPTION
    WHEN OTHERS THEN
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Error in SET_PAYEE_INSTR_ASSIGNMENT: '
        || sqlerrm
      );
  END xxab_bank_account_site_assg;
  ------------------------------
-- * Procedure Name : xxab_create_vendor
-- * Description : This main Procedure creates the Supplier
-- * and call procedures internally to
-- * create Sites, Contacts and Tax details
------------------------------
  PROCEDURE xxab_create_vendor (
    p_errbuf    OUT NOCOPY VARCHAR2
    ,p_retcode   OUT NOCOPY VARCHAR2
  ) IS
    l_vendor_rec             apps.ap_vendor_pub_pkg.r_vendor_rec_type;
    x_vendor_id              NUMBER;
    x_party_id               NUMBER;
    x_party_site_id          NUMBER;
    lv_vendor_number         VARCHAR2(100);
    lv_vendor_name           VARCHAR2(1000);
    lv_registration_number   VARCHAR2(50);
    l_rowcount               NUMBER;
    v_resp_name              VARCHAR2(50);
    p_unit                   VARCHAR2(100);
    CURSOR cur_stg_tab (
      p_unit VARCHAR2
    ) IS SELECT DISTINCT vendor_number
                        ,vendor_name
                        ,company_registration_number
                        ,primary_category
                        ,hold_from_payment
                        ,organization_type
                        ,payment_hold_reason
                        ,invoice_currency_code
                        ,payment_currency_code
                        ,payment_priority
                        ,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
                        ,terms_name
                        ,vat_registration_num
         FROM xxab_supp_stg_tab
         WHERE unit = p_unit
    ORDER BY vendor_number;
    l_vendors                cur_stg_tab%rowtype;
  BEGIN
    v_resp_name                                     := fnd_profile.value('RESP_NAME');
    fnd_global.resp_appl_id;
    IF
      v_resp_name = 'ABC Payables Supplier Setup'
    THEN
      p_unit   := ( 'USABC, USDEF' );
    ELSIF v_resp_name = 'Payables AB Supplier Setup' THEN
      p_unit   := 'USXYZ';
    ELSE
      p_retcode   := 2;
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Please select valid responsibility to execute Supplier conversion'
      );
    END IF;
    FOR cur_unit IN ( SELECT TRIM(regexp_substr(
      upper(p_unit)
      ,'[^,]+'
      ,1
      ,level
    ) ) unit
                      FROM dual CONNECT BY
      regexp_substr(
        upper(p_unit)
        ,'[^,]+'
        ,1
        ,level
      ) IS NOT NULL
    ) LOOP
      OPEN cur_stg_tab(cur_unit.unit);
      LOOP
        l_rowcount                                      := cur_stg_tab%rowcount;
        FETCH cur_stg_tab INTO l_vendors;
        EXIT WHEN cur_stg_tab%notfound;
        fnd_file.put_line(
          fnd_file.log
          ,'————————————————————'
        );
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Fetching data for Vendor: '
          || l_vendors.vendor_number
        );
        lv_vendor_number                                := NULL;
        lv_vendor_name                                  := NULL;
        lv_registration_number                          := NULL;
        BEGIN
          SELECT segment1 INTO
            lv_vendor_number
          FROM ap_suppliers
          WHERE segment1 = TO_CHAR(
            l_vendors.vendor_number
          );
        EXCEPTION
          WHEN no_data_found THEN
            lv_vendor_number   := 'A';
          WHEN OTHERS THEN
            lv_vendor_number   := 'A';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,sqlerrm
            );
        END;
        BEGIN
          SELECT vendor_name INTO
            lv_vendor_name
          FROM ap_suppliers
          WHERE vendor_name = TO_CHAR(
            l_vendors.vendor_name
          );
        EXCEPTION
          WHEN no_data_found THEN
            lv_vendor_name   := 'A';
          WHEN OTHERS THEN
            lv_vendor_name   := 'A';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,sqlerrm
            );
        END;
        BEGIN
          SELECT rep_registration_number INTO
            lv_registration_number
          FROM zx_party_tax_profile
          WHERE rep_registration_number = l_vendors.vat_registration_num
                AND   ROWNUM = 1;
        EXCEPTION
          WHEN no_data_found THEN
            lv_registration_number   := 'A';
          WHEN OTHERS THEN
            lv_registration_number   := 'A';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,sqlerrm
            );
        END;
        IF
          nvl(
            lv_vendor_number
            ,'A'
          ) <> l_vendors.vendor_number AND nvl(
            lv_registration_number
            ,'A'
          ) <> nvl(
            l_vendors.vat_registration_num
            ,'B'
          ) AND nvl(
            lv_vendor_name
            ,'A'
          ) <> l_vendors.vendor_name
        THEN
          l_vendor_rec.vendor_id                          := NULL;
          l_vendor_rec.segment1                           := l_vendors.vendor_number;
          l_vendor_rec.vendor_name                        := l_vendors.vendor_name;
          l_vendor_rec.attribute2                         := l_vendors.company_registration_number;
          l_vendor_rec.attribute3                         := l_vendors.primary_category;
          l_vendor_rec.hold_unmatched_invoices_flag       := l_vendors.hold_from_payment;
          l_vendor_rec.vendor_type_lookup_code            := l_vendors.organization_type;
          l_vendor_rec.hold_reason                        := l_vendors.payment_hold_reason;
          l_vendor_rec.invoice_currency_code              := l_vendors.invoice_currency_code;
          l_vendor_rec.payment_currency_code              := l_vendors.payment_currency_code;
          l_vendor_rec.payment_priority                   := l_vendors.payment_priority;
          l_vendor_rec.inspection_required_flag           := l_vendors.inspection_required_flag;
          l_vendor_rec.receipt_required_flag              := l_vendors.receipt_required_flag;
          l_vendor_rec.qty_rcv_tolerance                  := l_vendors.qty_rcv_tolerance;
          l_vendor_rec.qty_rcv_exception_code             := l_vendors.qty_rcv_exception_code;
          l_vendor_rec.enforce_ship_to_location_code      := l_vendors.enforce_ship_to_location_code;
          l_vendor_rec.days_early_receipt_allowed         := l_vendors.days_early_receipt_allowed;
          l_vendor_rec.days_late_receipt_allowed          := l_vendors.days_late_receipt_allowed;
          l_vendor_rec.receipt_days_exception_code        := l_vendors.receipt_days_exception_code;
          l_vendor_rec.receiving_routing_id               := l_vendors.receiving_routing_id;
          l_vendor_rec.terms_name                         := l_vendors.terms_name;
          l_vendor_rec.ext_payee_rec.default_pmt_method   := 'EFT';

 
-- Call the API
          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      => g_return_status
            ,x_msg_count          => g_msg_count
            ,x_msg_data           => g_msg_data
            ,p_vendor_rec         => l_vendor_rec
            ,x_vendor_id          => x_vendor_id
            ,x_party_id           => x_party_id
          );
          IF
            ( g_return_status <> fnd_api.g_ret_sts_success )
          THEN
            FOR i IN 1..fnd_msg_pub.count_msg LOOP
              fnd_msg_pub.get(
                p_msg_index       => i
                ,p_encoded         => 'F'
                ,p_data            => g_msg_data
                ,p_msg_index_out   => g_msg_index_out
              );
              g_msg_data   := substr(
                g_msg_data
                ,1
                ,200
              );
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'Error at Vendor creation :'
                || g_msg_data
              );
            END LOOP;
          ELSE
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Vendor: '
              || l_vendors.vendor_number
              || ' created'
            );
            xxab_create_vendor_site(x_vendor_id);
            xxab_create_vendor_contact(
              x_vendor_id
              ,x_party_site_id
            );
            xxab_create_vendor_tax(x_party_id);
            xxab_update_vendor(x_vendor_id);
            xxab_bank_account_creation(x_vendor_id);
            xxab_bank_account_site_assg(x_vendor_id);
            COMMIT;
          END IF;
        ELSE
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Vendor Name/ Number or Tax registration number already exists for :'
            || l_vendors.vendor_number
          );
          p_retcode   := 1;
        END IF;
        COMMIT;
      END LOOP;
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Total number of records fetched for :'
        || cur_unit.unit
        || ' are '
        || l_rowcount
      );
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'*************************************************************'
      );
      IF
        l_rowcount = 0
      THEN
        p_retcode   := 1;
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Please check the data file..!'
        );
      END IF;
      CLOSE cur_stg_tab;
    END LOOP;
  END xxab_create_vendor;
END xxab_supplier_conversion;
/*
—————————————————————————————————————–
Alternate approach of Supplier creation through interface tables:
Supplier Creation
Maintain Data in Excel and upload it in interfaces table as mentioned below either using SQL Loader or WinSCP
Supplier Interface Table: AP_SUPPLIERS_INT
Mandatory Columns: VENDOR_INTERFACE_ID & VENDOR_NAME
Once data is uploaded in staging tables, use below mentioned requests to upload it
Request Name for Supplier: Supplier Open Interface Import
Supplier Site Creation
Supplier Site Interface Table: AP_SUPPLIER_SITES_INT
Mandatory Columns: VENDOR_SITE_INTERFACE_ID, VENDOR_SITE_CODE & VENDOR_ID
(Vendor ID created in AP_SUPPLIERS table after submission of Supplier Open Interface Import request.)
Once data is uploaded in staging tables, use below mentioned requests to upload it
Request Name for Supplier: Supplier Open Interface Import
Request Name for Supplier Sites: Supplier Sites Open Interface Import*/

4. Customer creation

Customer creation: Create Organization >> Loction >> Party Site >> Party Site Use >> Contact Point >> Org Contact >> Customer Account >> Customer Account Site >> Customer Account Site Use

CREATE OR REPLACE PACKAGE BODY xxar_xx_create_customer AS
/************************************************************************
* TYPE : Package *
* NAME : xxar_xx_create_customer *
* INPUT Parameters : operatting unit *
* OUTPUT Parametrs : out_errbuf,out_retcode *
* PURPOSE : xxtar and xx Customer Creation *
* *
* Author Date Ver Description *
* ——– ———- —- ————————————- *
* ABC 25/05/2018 1.0 Initial *
************************************************************************/
--------------------------------
-- Global Variable Declaration —
--------------------------------
  g_return_status             VARCHAR2(2000);
  g_msg_count                 NUMBER;
  g_msg_data                  VARCHAR2(2000);
--------------------------------
-- * Procedure Name : CREATE_CUST_ACCOUNT
-- * Description : This main Procedure creates the customer
-- * account and call procedures internally to
-- * create location and customer sites
--------------------------------
  PROCEDURE create_cust_account (
    x_errbuff          OUT VARCHAR2
    ,x_retcode          OUT VARCHAR2
    ,p_operating_unit   IN VARCHAR2
  ) IS
--------------------------------
-- Local Variable Declaration —
--------------------------------
    l_cust_account_rec          hz_cust_account_v2pub.cust_account_rec_type;
    l_organization_rec          hz_party_v2pub.organization_rec_type;
    l_customer_profile_rec      hz_customer_profile_v2pub.customer_profile_rec_type;
    l_cust_profile_amt_rec      hz_customer_profile_v2pub.cust_profile_amt_rec_type;
    l_error_flag                VARCHAR2(2000) := 'N';
    l_error_status              VARCHAR2(2000) := 'N';
    l_child_status              VARCHAR2(2000) := 'SUCCESS';
    l_location_id               hz_locations.location_id%TYPE;
    l_party_site_id             hz_party_sites.party_site_id%TYPE;
    l_cust_acc_site_id          hz_cust_acct_sites_all.cust_acct_site_id%TYPE;
    l_site_use_id               hz_cust_site_uses_all.site_use_id%TYPE;
    l_collector_id              ar_collectors.collector_id%TYPE;
    l_application_id            fnd_application.application_id%TYPE;
    l_responsibility_id         fnd_responsibility.responsibility_id%TYPE;
    l_cust_account_id           hz_cust_accounts.cust_account_id%TYPE;
    l_account_number            hz_cust_accounts.account_number%TYPE;
    l_party_id                  hz_parties.party_id%TYPE;
    l_party_number              hz_parties.party_number%TYPE;
    l_profile_id                NUMBER;
    l_profile_class_id          NUMBER;
    l_status                    VARCHAR2(2000);
    l_msg_count                 VARCHAR2(2000);
    l_msg_data                  VARCHAR2(2000);
    l_cust_act_prof_amt_id      VARCHAR2(2000);
    l_cust_account_profile_id   NUMBER(15);
    l_customer_count            NUMBER;

--Cursor to get customer data
    CURSOR cur_data_file (
      p_operating_unit IN VARCHAR2
    ) IS SELECT DISTINCT party_name
                        ,account_name
                        ,payment_term_id
                        ,site_use_code
                        ,nvl(
      identifying_address_flag
      ,'Y'
    ) identifying_address_flag
                        ,collector
                        ,credit_rating
                        ,credit_classification
                        ,review_cycle
                        ,account_status
                        ,nvl(
      created_by_module
      ,'HZ_CPUI'
    ) created_by_module
                        ,profile_class
                        ,currency_code
                        ,overall_credit_limit
                        ,nvl(
      min_dunning_amount
      ,'25'
    ) min_dunning_amount
                        ,nvl(
      min_dunning_invoice_amount
      ,'25'
    ) min_dunning_invoice_amount
                        ,nvl(
      min_statement_amount
      ,'25'
    ) min_statement_amount
                        ,bu
         FROM xxar_xx_customer
         WHERE DECODE(
      bu
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
    ) = p_operating_unit;
--Cursor to get contact details
    CURSOR cur_create_contact (
      l_party_name IN VARCHAR2
    ) IS SELECT DISTINCT party_name
                        ,first_name
                        ,last_name
         FROM xxar_xx_customer
         WHERE party_name = l_party_name
               AND   DECODE(
      bu
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
    ) = p_operating_unit;
--Cursor to get address details
    CURSOR cur_address_data (
      l_party_name IN VARCHAR2
    ) IS SELECT DISTINCT party_name
                        ,address1
                        ,address2
                        ,address3
                        ,city
                        ,country
                        ,postal_code
         FROM xxar_xx_customer
         WHERE party_name = l_party_name
               AND   DECODE(
      bu
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
      ,'xx'
    ) = p_operating_unit;
  BEGIN
    IF
      p_operating_unit NOT IN (
        'xx'
        ,'xx'
      )
    THEN
      x_retcode   := '2';
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Error: Invalid Operating Unit'
      );
    END IF;
    BEGIN
      SELECT application_id INTO
        l_application_id
      FROM fnd_application
      WHERE application_short_name LIKE 'AR';
    EXCEPTION
      WHEN OTHERS THEN
        x_retcode   := '2';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error: Unable to fetch application id'
        );
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error: '
          || sqlerrm
        );
    END;
--Get values for new customer
    FOR rec_data_file IN cur_data_file(p_operating_unit) LOOP
      EXIT WHEN cur_data_file%notfound;
      l_error_flag                                        := 'N';
      l_child_status                                      := 'SUCCESS';
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'*********************************************************************'
      );
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Customer: '
        || rec_data_file.party_name
      );
      BEGIN
        SELECT COUNT(1) INTO
          l_customer_count
        FROM hz_parties
        WHERE party_name = rec_data_file.party_name;
      EXCEPTION
        WHEN OTHERS THEN
          l_error_flag   := 'Y';
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error: While checking duplicate customer'
          );
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error: '
            || sqlerrm
          );
      END;
      IF
        l_customer_count > 0
      THEN
        l_error_flag   := 'Y';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error: Customer with this name already exists'
        );
      END IF;
      IF
        rec_data_file.collector IS NOT NULL
      THEN
        BEGIN
          SELECT collector_id INTO
            l_collector_id
          FROM ar_collectors
          WHERE name = rec_data_file.collector;
        EXCEPTION
          WHEN OTHERS THEN
            l_error_flag   := 'Y';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error: Unable to fetch collector id'
            );
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error: '
              || sqlerrm
            );
        END;
      END IF;
      IF
        rec_data_file.profile_class IS NOT NULL
      THEN
        BEGIN
          SELECT profile_class_id INTO
            l_profile_class_id
          FROM hz_cust_profile_classes
          WHERE name = rec_data_file.profile_class;
        EXCEPTION
          WHEN OTHERS THEN
            l_error_flag   := 'Y';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error: Unable to fetch profile class'
            );
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error: '
              || sqlerrm
            );
        END;
      END IF;
      l_cust_account_rec.created_by_module                := rec_data_file.created_by_module;
      l_cust_account_rec.customer_type                    := 'R';
      l_cust_account_rec.account_name                     := rec_data_file.account_name;
      l_organization_rec.organization_name                := rec_data_file.party_name;
      l_organization_rec.created_by_module                := rec_data_file.created_by_module;
      l_customer_profile_rec.profile_class_id             := l_profile_class_id;
      l_customer_profile_rec.created_by_module            := rec_data_file.created_by_module;
      l_customer_profile_rec.collector_id                 := l_collector_id;
      l_customer_profile_rec.standard_terms               := rec_data_file.payment_term_id;
      l_customer_profile_rec.application_id               := l_application_id;
      l_customer_profile_rec.status                       := 'A';
      l_customer_profile_rec.credit_rating                := rec_data_file.credit_rating;
      l_customer_profile_rec.credit_classification        := rec_data_file.credit_classification;
      l_customer_profile_rec.review_cycle                 := rec_data_file.review_cycle;
      l_customer_profile_rec.account_status               := rec_data_file.account_status;

--Calling API to create customer account
      IF
        l_error_flag = 'N'
      THEN
        BEGIN
          hz_cust_account_v2pub.create_cust_account(
            p_init_msg_list          => 'T'
            ,p_cust_account_rec       => l_cust_account_rec
            ,p_organization_rec       => l_organization_rec
            ,p_customer_profile_rec   => l_customer_profile_rec
            ,p_create_profile_amt     => 'F'
            ,x_cust_account_id        => l_cust_account_id
            ,x_account_number         => l_account_number
            ,x_party_id               => l_party_id
            ,x_party_number           => l_party_number
            ,x_profile_id             => l_profile_id
            ,x_return_status          => g_return_status
            ,x_msg_count              => g_msg_count
            ,x_msg_data               => g_msg_data
          );
          BEGIN
            SELECT cust_account_profile_id INTO
              l_cust_account_profile_id
            FROM hz_customer_profiles
            WHERE cust_account_id = l_cust_account_id;
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'l_cust_account_id: '
              || l_cust_account_id
            );
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'l_cust_account_profile_id: '
              || l_cust_account_profile_id
            );
          EXCEPTION
            WHEN OTHERS THEN
              l_error_flag   := 'Y';
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'Error: Unable to fetch Customer account profile id'
              );
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'Error: '
                || sqlerrm
              );
          END;
          IF
            g_return_status = fnd_api.g_ret_sts_success AND l_error_flag = 'N'
          THEN
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Party Id : '
              || l_party_id
            );
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Party Number : '
              || l_party_number
            );
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Customer Account Created Sucessfully'
            );

--Create Profile Amount
            l_cust_profile_amt_rec.cust_account_profile_id      := l_cust_account_profile_id;
            l_cust_profile_amt_rec.cust_account_id              := l_cust_account_id;
            l_cust_profile_amt_rec.currency_code                := rec_data_file.currency_code;
            l_cust_profile_amt_rec.overall_credit_limit         := rec_data_file.overall_credit_limit;
            l_cust_profile_amt_rec.min_dunning_amount           := rec_data_file.min_dunning_amount;
            l_cust_profile_amt_rec.min_statement_amount         := rec_data_file.min_statement_amount;
            l_cust_profile_amt_rec.min_dunning_invoice_amount   := rec_data_file.min_dunning_invoice_amount;
            l_cust_profile_amt_rec.created_by_module            := rec_data_file.created_by_module;
            hz_customer_profile_v2pub.create_cust_profile_amt(
              p_init_msg_list              => 'T'
              ,p_check_foreign_key          => fnd_api.g_true
              ,p_cust_profile_amt_rec       => l_cust_profile_amt_rec
              ,x_cust_acct_profile_amt_id   => l_cust_act_prof_amt_id
              ,x_return_status              => l_status
              ,x_msg_count                  => l_msg_count
              ,x_msg_data                   => l_msg_data
            );
            IF
              l_status = fnd_api.g_ret_sts_success
            THEN
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'Customer Profile Amount Created Sucessfully'
              );
            ELSE
              l_error_flag     := 'Y';
              l_error_status   := 'Y';
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'ERROR: Customer Profile Amount not created'
              );
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'ERROR: '
                || l_msg_data
              );
            END IF;
          ELSE
            l_error_flag     := 'Y';
            l_error_status   := 'Y';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error: Unable to create Customer '
              || rec_data_file.party_name
            );
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error: '
              || g_msg_data
            );
            IF
              g_msg_count > 1
            THEN
              FOR i IN 1..g_msg_count LOOP
                apps.fnd_file.put_line(
                  apps.fnd_file.log
                  ,i
                  || '.'
                  || substr(
                    fnd_msg_pub.get(p_encoded   => fnd_api.g_false)
                    ,1
                    ,255
                  )
                );
              END LOOP;
            END IF;
          END IF;
        EXCEPTION
          WHEN OTHERS THEN
            l_error_flag     := 'Y';
            l_error_status   := 'Y';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error in Creating Customer: '
              || sqlerrm
            );
        END;
      END IF;
      IF
        g_return_status = fnd_api.g_ret_sts_success AND l_error_flag = 'N'
      THEN
        FOR rec_address_data IN cur_address_data(rec_data_file.party_name) LOOP
          EXIT WHEN cur_address_data%notfound;
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Calling the procedure to create location'
          );
          create_location(
            rec_address_data.country
            ,rec_address_data.address1
            ,rec_address_data.address2
            ,rec_address_data.address3
            ,rec_address_data.city
            ,rec_address_data.postal_code
            ,rec_data_file.created_by_module
            ,l_child_status
            ,l_location_id
          );
          IF
            l_child_status != 'ERROR' AND l_error_flag = 'N'
          THEN
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Calling the procedure to create party site'
            );
            create_party_site(
              l_party_id
              ,l_location_id
              ,rec_data_file.identifying_address_flag
              ,rec_data_file.created_by_module
              ,l_application_id
              ,l_child_status
              ,l_party_site_id
            );
            IF
              l_child_status != 'ERROR' AND l_error_flag = 'N'
            THEN
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'Calling the procedure to create customer account site'
              );
              create_cust_acct_site(
                l_cust_account_id
                ,l_party_site_id
                ,rec_data_file.created_by_module
                ,l_child_status
                ,l_cust_acc_site_id
              );
              IF
                l_child_status != 'ERROR' AND l_error_flag = 'N'
              THEN
                apps.fnd_file.put_line(
                  apps.fnd_file.log
                  ,'Calling the procedure to create customer account site use'
                );
                create_cust_site_use(
                  l_cust_acc_site_id
                  ,'BILL_TO'
                  ,rec_data_file.created_by_module
                  ,l_child_status
                  ,l_site_use_id
                );
                create_cust_site_use(
                  l_cust_acc_site_id
                  ,'INV'
                  ,rec_data_file.created_by_module
                  ,l_child_status
                  ,l_site_use_id
                );
                IF
                  l_child_status = 'ERROR' AND l_error_flag = 'N'
                THEN
                  l_error_status   := 'Y';
                  l_error_flag     := 'Y';
                  apps.fnd_file.put_line(
                    apps.fnd_file.log
                    ,'Error: Unable to create Customer Site Use'
                  );
                END IF;
              ELSE
                l_error_status   := 'Y';
                l_error_flag     := 'Y';
                apps.fnd_file.put_line(
                  apps.fnd_file.log
                  ,'Error: Unable to create Customer Account Site'
                );
              END IF;
            ELSE
              l_error_status   := 'Y';
              l_error_flag     := 'Y';
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'Error: Unable to create Party Site'
              );
            END IF;
          ELSE
            l_error_status   := 'Y';
            l_error_flag     := 'Y';
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Error: Unable to create Location'
            );
          END IF;
        END LOOP;
      END IF;
--create person
      IF
        l_child_status != 'ERROR' AND l_error_flag = 'N'
      THEN
        FOR rec_create_contact IN cur_create_contact(rec_data_file.party_name) LOOP
          EXIT WHEN cur_create_contact%notfound;
          IF
            rec_create_contact.first_name IS NOT NULL OR rec_create_contact.last_name IS NOT NULL
          THEN
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Calling procedure to create customer contact details'
            );
            create_person(
              rec_create_contact.first_name
              ,rec_create_contact.last_name
              ,rec_data_file.created_by_module
              ,l_party_id
              ,l_cust_account_id
              ,l_child_status
            );
            IF
              l_child_status = 'ERROR'
            THEN
              l_error_status   := 'Y';
              l_error_flag     := 'Y';
              apps.fnd_file.put_line(
                apps.fnd_file.log
                ,'Error: Unable to create customer contact'
              );
            END IF;
          END IF;
        END LOOP;
      ELSE
        l_error_status   := 'Y';
      END IF;
      IF
        l_error_flag = 'Y'
      THEN
        ROLLBACK;
      ELSE
        COMMIT;
      END IF;
    END LOOP;
    apps.fnd_file.put_line(
      apps.fnd_file.log
      ,'*********************************************************************'
    );
    IF
      l_error_status = 'Y'
    THEN
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'ERROR: One or more customer has not been created due to errors'
      );
    ELSE
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'SUCCESS: All Customers have been created successfully'
      );
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Error: '
        || sqlerrm
      );
  END create_cust_account;
----------------------------
-- * Procedure Name : CREATE_LOCATION
-- * Description : This Procedure creates the Location
----------------------------
  PROCEDURE create_location (
    p_country             IN VARCHAR2
    ,p_address1            IN VARCHAR2
    ,p_address2            IN VARCHAR2
    ,p_address3            IN VARCHAR2
    ,p_city                IN VARCHAR2
    ,p_postal_code         IN VARCHAR2
    ,p_created_by_module   IN VARCHAR2
    ,p_return              OUT VARCHAR2
    ,p_location_id         OUT VARCHAR2
  ) IS
    l_location_rec   hz_location_v2pub.location_rec_type;
    l_location_id    hz_locations.location_id%TYPE;
  BEGIN
    l_location_rec.country             := p_country;
    l_location_rec.address1            := p_address1;
    l_location_rec.address2            := p_address2;
    l_location_rec.address3            := p_address3;
    l_location_rec.city                := p_city;
    l_location_rec.postal_code         := p_postal_code;
    l_location_rec.created_by_module   := p_created_by_module;
    apps.fnd_file.put_line(
      apps.fnd_file.log
      ,'Calling the API hz_location_v2pub.create_location'
    );
    BEGIN
      hz_location_v2pub.create_location(
        p_init_msg_list   => fnd_api.g_true
        ,p_location_rec    => l_location_rec
        ,x_location_id     => p_location_id
        ,x_return_status   => g_return_status
        ,x_msg_count       => g_msg_count
        ,x_msg_data        => g_msg_data
      );
      IF
        g_return_status = fnd_api.g_ret_sts_success
      THEN
        p_return   := 'SUCCESS';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Creation of Location is Successful'
        );
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Location Id: '
          || p_location_id
        );
      ELSE
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error: Creation of Location failed: '
          || g_msg_data
        );
        p_return     := 'ERROR';
        FOR i IN 1..g_msg_count LOOP
          g_msg_data   := oe_msg_pub.get(
            p_msg_index   => i
            ,p_encoded     => 'F'
          );
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,i
            || ') '
            || g_msg_data
          );
        END LOOP;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        p_return   := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error in location: '
          || sqlerrm
        );
    END;
  END create_location;
----------------------------------------
-- * Procedure Name : CREATE_PARTY_SITE
-- * Description : This Procedure creates the party sites for the customer
----------------------------------------
  PROCEDURE create_party_site (
    p_party_id                   IN VARCHAR2
    ,p_location_id                IN VARCHAR2
    ,p_identifying_address_flag   IN VARCHAR2
    ,p_created_by_module          IN VARCHAR2
    ,p_application_id             IN VARCHAR2
    ,p_return                     OUT VARCHAR2
    ,p_party_site_id              OUT VARCHAR2
  ) IS
    l_party_site_rec      hz_party_site_v2pub.party_site_rec_type;
    l_party_site_id       hz_party_sites.party_site_id%TYPE;
    l_party_site_number   hz_party_sites.party_site_number%TYPE;
  BEGIN
    l_party_site_rec.party_id                   := p_party_id;
    l_party_site_rec.location_id                := p_location_id;
    l_party_site_rec.identifying_address_flag   := p_identifying_address_flag;
    l_party_site_rec.created_by_module          := p_created_by_module;
    l_party_site_rec.status                     := 'A';
    l_party_site_rec.application_id             := p_application_id;
    apps.fnd_file.put_line(
      apps.fnd_file.log
      ,'Calling the API hz_party_site_v2pub.create_party_site'
    );
    BEGIN
      hz_party_site_v2pub.create_party_site(
        p_init_msg_list       => fnd_api.g_true
        ,p_party_site_rec      => l_party_site_rec
        ,x_party_site_id       => p_party_site_id
        ,x_party_site_number   => l_party_site_number
        ,x_return_status       => g_return_status
        ,x_msg_count           => g_msg_count
        ,x_msg_data            => g_msg_data
      );
      IF
        g_return_status = fnd_api.g_ret_sts_success
      THEN
        p_return   := 'SUCCESS';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Creation of Party Site is Successful'
        );
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Party Site Id: '
          || p_party_site_id
        );
      ELSE
        p_return     := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'ERROR: Creation of Party Site failed: '
          || g_msg_data
        );
        FOR i IN 1..g_msg_count LOOP
          g_msg_data   := fnd_msg_pub.get(
            p_msg_index   => i
            ,p_encoded     => 'F'
          );
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,i
            || ') '
            || g_msg_data
          );
        END LOOP;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        p_return   := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error: '
          || sqlerrm
        );
    END;
  END create_party_site;
--------------------------------
-- * Procedure Name : CREATE_CUST_ACCT_SITE
-- * Description : This Procedure creates the customer site account
--------------------------------
  PROCEDURE create_cust_acct_site (
    p_cust_account_id     IN VARCHAR2
    ,p_party_site_id       IN VARCHAR2
    ,p_created_by_module   IN VARCHAR2
    ,p_return              OUT VARCHAR2
    ,p_cust_acc_site_id    OUT VARCHAR2
  ) IS
    l_cust_acct_site_rec   hz_cust_account_site_v2pub.cust_acct_site_rec_type;
  BEGIN
    l_cust_acct_site_rec.cust_account_id     := p_cust_account_id;
    l_cust_acct_site_rec.party_site_id       := p_party_site_id;
    l_cust_acct_site_rec.created_by_module   := p_created_by_module;
    l_cust_acct_site_rec.territory           := 'UK Default';
    l_cust_acct_site_rec.territory_id        := '1001';
    l_cust_acct_site_rec.status              := 'A';
    apps.fnd_file.put_line(
      apps.fnd_file.log
      ,'Calling the API hz_cust_account_site_v2pub.create_cust_acct_site'
    );
    BEGIN
      hz_cust_account_site_v2pub.create_cust_acct_site(
        'T'
        ,l_cust_acct_site_rec
        ,p_cust_acc_site_id
        ,g_return_status
        ,g_msg_count
        ,g_msg_data
      );
      IF
        g_return_status = fnd_api.g_ret_sts_success
      THEN
        p_return   := 'SUCCESS';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Creation of Customer Account Site is Successful'
        );
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Customer Account Site Id is = '
          || TO_CHAR(p_cust_acc_site_id)
        );
      ELSE
        p_return   := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'ERROR: Creation of Customer Account Site: '
          || g_msg_data
        );
        IF
          g_msg_count > 1
        THEN
          FOR i IN 1..g_msg_count LOOP
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,i
              || '.'
              || substr(
                fnd_msg_pub.get(p_encoded   => fnd_api.g_false)
                ,1
                ,255
              )
            );
          END LOOP;
        END IF;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        p_return   := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error in Creating Customer Account Site: '
          || sqlerrm
        );
    END;
  END create_cust_acct_site;
--------------------------------
-- * Procedure Name : CREATE_CUST_SITE_USE
-- * Description : This Procedure creates the customer site uses
--------------------------------
  PROCEDURE create_cust_site_use (
    p_cust_acct_site_id   IN VARCHAR2
    ,p_site_use_code       IN VARCHAR2
    ,p_created_by_module   IN VARCHAR2
    ,p_return              OUT VARCHAR2
    ,p_site_use_id         OUT VARCHAR2
  ) IS
    l_cust_site_use_rec      hz_cust_account_site_v2pub.cust_site_use_rec_type;
    l_customer_profile_rec   hz_customer_profile_v2pub.customer_profile_rec_type;
    l_site_use_id            hz_cust_site_uses_all.site_use_id%TYPE;
  BEGIN
    l_cust_site_use_rec.cust_acct_site_id   := p_cust_acct_site_id;
    l_cust_site_use_rec.site_use_code       := p_site_use_code;
    l_cust_site_use_rec.created_by_module   := p_created_by_module;
    l_cust_site_use_rec.primary_flag        := 'Y';
    apps.fnd_file.put_line(
      apps.fnd_file.log
      ,'Calling the API hz_cust_account_site_v2pub.create_cust_site_use'
    );
    BEGIN
      hz_cust_account_site_v2pub.create_cust_site_use(
        p_init_msg_list          => 'T'
        ,p_cust_site_use_rec      => l_cust_site_use_rec
        ,p_customer_profile_rec   => l_customer_profile_rec
        ,p_create_profile         => ”
        ,p_create_profile_amt     => ”
        ,x_site_use_id            => p_site_use_id
        ,x_return_status          => g_return_status
        ,x_msg_count              => g_msg_count
        ,x_msg_data               => g_msg_data
      );
      IF
        g_return_status = fnd_api.g_ret_sts_success
      THEN
        p_return   := 'SUCCESS';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Creation of Customer Account Site Use is Successful'
        );
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Site Use Id = '
          || TO_CHAR(p_site_use_id)
        );
      ELSE
        p_return   := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'ERROR: Creation of Customer Account Site Use: '
          || g_msg_data
        );
        IF
          g_msg_count > 1
        THEN
          FOR i IN 1..g_msg_count LOOP
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,i
              || '.'
              || substr(
                fnd_msg_pub.get(p_encoded   => fnd_api.g_false)
                ,1
                ,255
              )
            );
          END LOOP;
        END IF;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        p_return   := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error: '
          || sqlerrm
        );
    END;
  END create_cust_site_use;
--------------------------------
-- * Procedure Name : create_person
-- * Description : This Procedure creates the contact person and party relation
--------------------------------
  PROCEDURE create_person (
    p_person_first_name   IN VARCHAR2
    ,p_person_last_name    IN VARCHAR2
    ,p_created_by_module   IN VARCHAR2
    ,p_party_id            IN VARCHAR2
    ,p_cust_acc_id         IN VARCHAR2
    ,p_return              OUT VARCHAR2
  ) IS
    l_person_rec               hz_party_v2pub.person_rec_type;
    l_contact_point_rec        hz_contact_point_v2pub.contact_point_rec_type;
    l_phone_rec                hz_contact_point_v2pub.phone_rec_type;
    l_party_id                 hz_parties.party_id%TYPE;
    l_party_number             hz_parties.party_number%TYPE;
    l_profile_id               hz_customer_profiles.cust_account_profile_id%TYPE;
    l_org_contact_rec          hz_party_contact_v2pub.org_contact_rec_type;
    l_org_contact_id           NUMBER;
    l_party_rel_id             NUMBER;
    l_rel_party_id             NUMBER;
    l_rel_party_number         VARCHAR2(2000);
    l_cr_cust_acc_role_rec     hz_cust_account_role_v2pub.cust_account_role_rec_type;
    l_cust_account_role_id     VARCHAR2(2000);
    l_contact_point_party_id   hz_contact_points.contact_point_id%TYPE;
    l_status                   VARCHAR2(2000);
    l_msg_count                VARCHAR2(2000);
    l_msg_data                 VARCHAR2(2000);
  BEGIN
    l_person_rec.person_first_name                       := p_person_first_name;
    l_person_rec.person_last_name                        := p_person_last_name;
    l_person_rec.created_by_module                       := p_created_by_module;
    apps.fnd_file.put_line(
      apps.fnd_file.log
      ,'Calling the API HZ_PARTY_V2PUB.CREATE_PERSON'
    );
    hz_party_v2pub.create_person(
      p_init_msg_list   => 'T'
      ,p_person_rec      => l_person_rec
      ,x_party_id        => l_party_id
      ,x_party_number    => l_party_number
      ,x_profile_id      => l_profile_id
      ,x_return_status   => g_return_status
      ,x_msg_count       => g_msg_count
      ,x_msg_data        => g_msg_data
    );
    IF
      g_return_status = fnd_api.g_ret_sts_success
    THEN
      p_return                                             := 'SUCCESS';
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Creation of Customer Contact Person is Successful'
      );
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Person Party Id = '
        || TO_CHAR(l_party_id)
      );
--Call create org contact
      l_org_contact_rec.created_by_module                  := p_created_by_module;
      l_org_contact_rec.party_rel_rec.subject_id           := l_party_id; --Person party id
      l_org_contact_rec.party_rel_rec.subject_type         := ( 'PERSON' );
      l_org_contact_rec.party_rel_rec.subject_table_name   := 'HZ_PARTIES';
      l_org_contact_rec.party_rel_rec.object_table_name    := 'HZ_PARTIES';
      l_org_contact_rec.party_rel_rec.object_id            := p_party_id; --Organization Party Id
      l_org_contact_rec.party_rel_rec.object_type          := ( 'ORGANIZATION' );
      l_org_contact_rec.party_rel_rec.relationship_code    := ( 'CONTACT_OF' ); --EMPLOYEE_OF
      l_org_contact_rec.party_rel_rec.relationship_type    := ( 'CONTACT' ); --EMPLOYEE
      l_org_contact_rec.party_rel_rec.relationship_type    := ( 'CONTACT' );
      l_org_contact_rec.party_rel_rec.start_date           := SYSDATE;
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Calling the API hz_party_contact_v2pub.create_org_contact'
      );
      hz_party_contact_v2pub.create_org_contact(
        p_init_msg_list     => 'T'
        ,p_org_contact_rec   => l_org_contact_rec
        ,x_org_contact_id    => l_org_contact_id
        ,x_party_rel_id      => l_party_rel_id
        ,x_party_id          => l_rel_party_id
        ,x_party_number      => l_rel_party_number
        ,x_return_status     => g_return_status
        ,x_msg_count         => g_msg_count
        ,x_msg_data          => g_msg_data
      );
      IF
        g_return_status = fnd_api.g_ret_sts_success
      THEN
        p_return                                   := 'SUCCESS';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Creation of Customer party relation is Successful'
        );
        l_cr_cust_acc_role_rec.party_id            := l_rel_party_id;
        l_cr_cust_acc_role_rec.cust_account_id     := p_cust_acc_id;
        l_cr_cust_acc_role_rec.role_type           := 'CONTACT';
        l_cr_cust_acc_role_rec.created_by_module   := p_created_by_module;
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Calling the API hz_cust_account_role_v2pub.create_cust_account_role'
        );
        hz_cust_account_role_v2pub.create_cust_account_role(
          'T'
          ,l_cr_cust_acc_role_rec
          ,l_cust_account_role_id
          ,g_return_status
          ,g_msg_count
          ,g_msg_data
        );
      ELSE
        p_return   := 'ERROR';
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Error: Creation of Customer party relation: '
          || substr(
            g_msg_data
            ,1
            ,255
          )
        );
        IF
          g_msg_count > 1
        THEN
          FOR i IN 1..g_msg_count LOOP
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,i
              || '.'
              || substr(
                fnd_msg_pub.get(p_encoded   => fnd_api.g_false)
                ,1
                ,255
              )
            );
          END LOOP;
        END IF;
      END IF;
    ELSE
      p_return   := 'ERROR';
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'ERROR: Creation of Customer Contact'
        || g_msg_data
      );
      IF
        g_msg_count > 1
      THEN
        FOR i IN 1..g_msg_count LOOP
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,i
            || '.'
            || substr(
              fnd_msg_pub.get(p_encoded   => fnd_api.g_false)
              ,1
              ,255
            )
          );
        END LOOP;
      END IF;
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
      p_return   := 'ERROR';
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Error in Creating Customer Contact: '
        || sqlerrm
      );
  END create_person;
END xxar_xx_create_customer;

 


5. HRMS API’s for data anonymization/ masking/ scrambling

CREATE OR REPLACE PACKAGE BODY xxab_hrms_data_anonymization AS
/***********************************************************************************
* TYPE : Package Body *
* NAME : xxab_hrms_data_anonymization *
* PURPOSE : HRMS Data Anonymization *
* Author Date Ver Description *
* --------- ----------------- ---- --------------------------------- *
* ABC 27-May-2019 1.0 Initial *
**********************************************************************************/
-------------------------------------------------------------------------------------------------------
-- * Procedure Name : xxab_hrms_data_scrambling
-- * INPUT Parameters : p_from_address, p_to_address
-- * OUTPUT Parametrs : p_errbuf, p_retcode
-- * Description : This Procedure anonymize the fields of Employees
-- * Address, Phone numbers, Payment Method and
-- * Elements Entry Values
-------------------------------------------------------------------------------------------------------
  PROCEDURE xxab_hrms_data_scrambling (
    p_errbuf            OUT NOCOPY VARCHAR2
    ,p_retcode           OUT NOCOPY VARCHAR2
    ,p_from_date         IN VARCHAR2
    ,p_to_date           IN VARCHAR2
    ,p_employee_number   IN VARCHAR2
  ) IS
    CURSOR cur_emp IS SELECT /*+ PARALLEL */ person_id
                            ,employee_number
                      FROM per_all_people_f papf
                      WHERE trunc(
      papf.creation_date
    ) BETWEEN trunc(
      TO_DATE(
        p_from_date
        ,'DD-MON-RRRR HH24:MI:SS'
      )
    ) AND trunc(
      TO_DATE(
        p_to_date
        ,'DD-MON-RRRR HH24:MI:SS'
      )
    )
                            AND   papf.employee_number IN ( SELECT TRIM(regexp_substr(
      upper(
        nvl(
          p_employee_number
          ,papf.employee_number
        )
      )
      ,'[^,]+'
      ,1
      ,level
    ) ) employee_number
                                                          FROM dual CONNECT BY
      regexp_substr(
        upper(
          nvl(
            p_employee_number
            ,papf.employee_number
          )
        )
        ,'[^,]+'
        ,1
        ,level
      ) IS NOT NULL
    )
                      GROUP BY person_id
                              ,employee_number;
    TYPE lv_emp_typ IS
      TABLE OF cur_emp%rowtype;
    l_emp_tab                       lv_emp_typ := lv_emp_typ ();
    lb_update_warning               BOOLEAN;
    ln_start_time                   NUMBER;
    ln_comment_id                   NUMBER;
    ln_api_error                    NUMBER;
    ld_effective_start_date         DATE;
    ld_effective_end_date           DATE;
    lv_full_name                    per_all_people_f.full_name%TYPE;
    lb_name_combination_warning     BOOLEAN;
    lb_assign_payroll_warning       BOOLEAN;
    lb_orig_hire_warning            BOOLEAN;
    ln_cagr_grade_def_id            NUMBER;
    lv_cagr_concatenated_segments   VARCHAR2(240);
    lv_concatenated_segments        VARCHAR2(240);
    ln_soft_coding_keyflex_id       NUMBER;
    lb_no_managers_warning          BOOLEAN;
    lb_other_manager_warning        BOOLEAN;
    lb_hourly_salaried_warning      BOOLEAN;
    lv_gsp_post_process_warning     VARCHAR2(240);
    lv_group_name                   VARCHAR2(240);
    ln_people_group_id              NUMBER;
    ln_rowcount                     NUMBER;
    lv_error EXCEPTION;
    lv_phone_type                   VARCHAR2(10);
  BEGIN
    ln_start_time                   := dbms_utility.get_time;
    ln_api_error                    := 0;
    ln_rowcount                     := 0;
    OPEN cur_emp;
    LOOP
      FETCH cur_emp BULK COLLECT INTO l_emp_tab LIMIT 1000;
      EXIT WHEN l_emp_tab.count = 0;
      FOR j IN 1..l_emp_tab.count LOOP
        BEGIN
          BEGIN
            FOR i IN ( SELECT papf.employee_number
                             ,papf.object_version_number
                             ,papf.effective_start_date
                       FROM per_all_people_f papf
                       WHERE papf.person_id = l_emp_tab(j).person_id
                       GROUP BY papf.employee_number
                               ,papf.object_version_number
                               ,papf.effective_start_date
            ) LOOP
              ln_rowcount                   := ln_rowcount + 1;
              hr_person_api.update_gb_person(
                p_effective_date             => TO_DATE(
                  i.effective_start_date
                  ,'DD-MON-RRRR HH24:MI:SS'
                )
                ,p_datetrack_update_mode      => 'CORRECTION'
                ,p_person_id                  => l_emp_tab(j).person_id
                ,p_object_version_number      => i.object_version_number
                ,p_date_of_birth              => '01-JAN-1980'
                ,p_ethnic_origin              => NULL
                ,p_ni_number                  => NULL
                ,p_marital_status             => NULL
                ,p_attribute1                 => NULL
                ,p_attribute2                 => NULL
                ,p_attribute15                => NULL
                ,p_nationality                => NULL
                ,p_registered_disabled_flag   => NULL
                ,p_known_as                   => NULL
                ,p_attribute16                => NULL
                ,p_attribute10                => NULL
                ,p_employee_number            => i.employee_number
                ,p_effective_start_date       => i.effective_start_date
                ,p_effective_end_date         => ld_effective_end_date
                ,p_full_name                  => lv_full_name
                ,p_comment_id                 => ln_comment_id
                ,p_name_combination_warning   => lb_name_combination_warning
                ,p_assign_payroll_warning     => lb_assign_payroll_warning
                ,p_orig_hire_warning          => lb_orig_hire_warning
              );
              ld_effective_start_date       := NULL;
              ld_effective_end_date         := NULL;
              lv_full_name                  := NULL;
              ln_comment_id                 := NULL;
              lb_name_combination_warning   := NULL;
              lb_assign_payroll_warning     := NULL;
              lb_orig_hire_warning          := NULL;
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_person_api.update_gb_person for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          BEGIN
            FOR i IN ( SELECT paaf.assignment_id
                             ,paaf.object_version_number
                             ,paaf.effective_start_date
                       FROM per_all_assignments_f paaf
                       WHERE 1 = 1
                             AND   paaf.person_id = l_emp_tab(j).person_id
                             AND   paaf.assignment_type = 'E'
                             AND   paaf.primary_flag = 'Y'
                             AND   paaf.assignment_status_type_id = 1
                       GROUP BY paaf.assignment_id
                               ,paaf.object_version_number
                               ,paaf.effective_start_date
            ) LOOP
              ln_rowcount   := ln_rowcount + 1;
              hr_assignment_api.update_gb_emp_asg(
                p_validate                     => false
                ,p_effective_date               => TO_DATE(
                  i.effective_start_date
                  ,'DD-MON-RRRR HH24:MI:SS'
                )
                ,p_datetrack_update_mode        => 'CORRECTION'
                ,p_assignment_id                => i.assignment_id
                ,p_object_version_number        => i.object_version_number
                ,p_normal_hours                 => 0
                ,p_frequency                    => 'W'
                ,p_ass_attribute6               => NULL
                ,p_ass_attribute28              => NULL
                ,p_ass_attribute1               => NULL
                ,p_ass_attribute4               => NULL
                ,p_ass_attribute5               => NULL
                ,p_ass_attribute7               => NULL
                ,p_ass_attribute14              => NULL
                ,p_ass_attribute18              => NULL
                ,p_ass_attribute19              => NULL
                ,p_ass_attribute23              => NULL
                ,p_ass_attribute24              => NULL
                ,p_ass_attribute2               => NULL
                ,p_ass_attribute17              => NULL
                ,p_ass_attribute25              => NULL
                ,p_ass_attribute26              => NULL
                ,p_ass_attribute27              => NULL
                ,p_ass_attribute29              => NULL
                ,p_ass_attribute11              => NULL
                ,p_cagr_grade_def_id            => ln_cagr_grade_def_id
                ,p_cagr_concatenated_segments   => lv_cagr_concatenated_segments
                ,p_concatenated_segments        => lv_concatenated_segments
                ,p_soft_coding_keyflex_id       => ln_soft_coding_keyflex_id
                ,p_comment_id                   => ln_comment_id
                ,p_effective_start_date         => ld_effective_start_date
                ,p_effective_end_date           => ld_effective_end_date
                ,p_no_managers_warning          => lb_no_managers_warning
                ,p_other_manager_warning        => lb_other_manager_warning
                ,p_hourly_salaried_warning      => lb_hourly_salaried_warning
              );
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_assignment_api.update_gb_emp_asg for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          BEGIN
            FOR i IN ( SELECT paaf.assignment_id
                             ,paaf.object_version_number
                             ,paaf.effective_start_date
                             ,paaf.effective_end_date
                       FROM per_all_assignments_f paaf
                       WHERE 1 = 1
                             AND   paaf.person_id = l_emp_tab(j).person_id
                             AND   paaf.assignment_type = 'A'
                       GROUP BY paaf.assignment_id
                               ,paaf.object_version_number
                               ,paaf.effective_start_date
                               ,paaf.effective_end_date
            ) LOOP
              ln_rowcount                     := ln_rowcount + 1;
              hr_assignment_api.update_apl_asg(
                p_validate                     => false
                ,p_effective_date               => TO_DATE(
                  i.effective_start_date
                  ,'DD-MON-RRRR HH24:MI:SS'
                )
                ,p_datetrack_update_mode        => 'CORRECTION'
                ,p_assignment_id                => i.assignment_id
                ,p_object_version_number        => i.object_version_number
                ,p_normal_hours                 => 0
                ,p_frequency                    => 'W'
                ,p_ass_attribute6               => NULL
                ,p_ass_attribute28              => NULL
                ,p_ass_attribute1               => NULL
                ,p_ass_attribute4               => NULL
                ,p_ass_attribute5               => NULL
                ,p_ass_attribute7               => NULL
                ,p_ass_attribute14              => NULL
                ,p_ass_attribute18              => NULL
                ,p_ass_attribute19              => NULL
                ,p_ass_attribute23              => NULL
                ,p_ass_attribute24              => NULL
                ,p_ass_attribute2               => NULL
                ,p_ass_attribute17              => NULL
                ,p_ass_attribute25              => NULL
                ,p_ass_attribute26              => NULL
                ,p_ass_attribute27              => NULL
                ,p_ass_attribute29              => NULL
                ,p_ass_attribute11              => NULL
                ,p_cagr_grade_def_id            => ln_cagr_grade_def_id
                ,p_cagr_concatenated_segments   => lv_cagr_concatenated_segments
                ,p_concatenated_segments        => lv_concatenated_segments
                ,p_group_name                   => lv_group_name
                ,p_comment_id                   => ln_comment_id
                ,p_people_group_id              => ln_people_group_id
                ,p_soft_coding_keyflex_id       => ln_soft_coding_keyflex_id
                ,p_effective_start_date         => ld_effective_start_date
                ,p_effective_end_date           => ld_effective_end_date
              );
              ln_cagr_grade_def_id            := NULL;
              lv_cagr_concatenated_segments   := NULL;
              lv_concatenated_segments        := NULL;
              ln_soft_coding_keyflex_id       := NULL;
              lv_group_name                   := NULL;
              ln_comment_id                   := NULL;
              ln_people_group_id              := NULL;
              ld_effective_start_date         := NULL;
              ld_effective_end_date           := NULL;
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_assignment_api.update_apl_asg for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          BEGIN
            FOR i IN ( SELECT pa.address_id
                             ,pa.object_version_number
                       FROM per_addresses pa
                       WHERE pa.person_id = l_emp_tab(j).person_id
                       GROUP BY pa.address_id
                               ,pa.object_version_number
            ) LOOP
              ln_rowcount   := ln_rowcount + 1;
              hr_person_address_api.update_person_address(
                p_effective_date          => SYSDATE
                ,p_address_id              => i.address_id
                ,p_object_version_number   => i.object_version_number
                ,p_address_line1           => 'AAAAAA'
                ,p_address_line2           => 'BBBBBB'
                ,p_address_line3           => 'CCCCCC'
                ,p_postal_code             => 'EC2N 1GJ'
              );
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_person_address_api.update_person_address for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
          END;
          BEGIN
            FOR i IN ( SELECT pp.phone_id
                             ,pp.object_version_number
                             ,pp.phone_type
                       FROM per_phones pp
                       WHERE 1 = 1
                             AND   pp.parent_table = 'PER_ALL_PEOPLE_F'
                             AND   pp.parent_id = l_emp_tab(j).person_id
                       GROUP BY pp.phone_id
                               ,pp.object_version_number
                               ,pp.phone_type
            ) LOOP
              ln_rowcount     := ln_rowcount + 1;
              IF
                i.phone_type = 'M'
              THEN
                lv_phone_type   := 'M';
              ELSIF i.phone_type = 'H1' THEN
                lv_phone_type   := 'H1';
              ELSE
                lv_phone_type   := 'W1';
              END IF;
              hr_phone_api.update_phone(
                p_phone_id                => i.phone_id
                ,p_phone_type              => lv_phone_type
                ,p_phone_number            => 9999999999
                ,p_object_version_number   => i.object_version_number
                ,p_effective_date          => SYSDATE
              );
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_phone_api.update_phone for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
          END;
          BEGIN
            FOR i IN ( SELECT pppmf.personal_payment_method_id
                             ,pppmf.object_version_number
                             ,pppmf.external_account_id
                             ,pppmf.percentage
                             ,pppmf.priority
                             ,pppmf.effective_start_date
                             ,pppmf.effective_end_date
                             ,pea.territory_code
                       FROM pay_personal_payment_methods_f pppmf
                           ,pay_external_accounts pea
                           ,per_all_assignments_f paaf
                       WHERE paaf.assignment_id = pppmf.assignment_id
                             AND   pppmf.external_account_id = pea.external_account_id
                             AND   paaf.person_id = l_emp_tab(j).person_id
                       GROUP BY pppmf.personal_payment_method_id
            ,pppmf.object_version_number
            ,pppmf.external_account_id
            ,pppmf.percentage
            ,pppmf.priority
            ,pppmf.effective_start_date
            ,pppmf.effective_end_date
            ,pea.territory_code
            ) LOOP
              ln_rowcount     := ln_rowcount + 1;
              hr_personal_pay_method_api.update_gb_personal_pay_method(
                p_effective_date                => TO_DATE(
                  i.effective_start_date
                  ,'DD-MON-RRRR HH24:MI:SS'
                )
                ,p_datetrack_update_mode         => 'CORRECTION'
                ,p_personal_payment_method_id    => i.personal_payment_method_id
                ,p_object_version_number         => i.object_version_number
                ,p_account_name                  => 'BANK_ACC_ANON'
                ,p_account_number                => 11111111
                ,p_sort_code                     => 999999
                ,p_bank_name                     => 'BANK_DATA_ANON'
                ,p_account_type                  => NULL
                ,p_bank_branch                   => 'BRANCH_DATA_ANON'
                ,p_bank_branch_location          => NULL
                ,p_bldg_society_account_number   => 'ABCD1234'
                ,p_segment10                     => 'BANK_DATA_ANON'
                ,p_percentage                    => i.percentage
                ,p_priority                      => i.priority
                ,p_territory_code                => i.territory_code
                ,p_comment_id                    => ln_comment_id
                ,p_external_account_id           => i.external_account_id
                ,p_effective_start_date          => i.effective_start_date
                ,p_effective_end_date            => i.effective_start_date
              );
              ln_comment_id   := NULL;
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_personal_pay_method_api.update_gb_personal_pay_method for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          BEGIN
            FOR i IN ( SELECT petf.element_name
                             ,peef.element_entry_id
                             ,peef.object_version_number
                             ,peef.effective_start_date
                             ,peef.effective_end_date
                             ,pivf.input_value_id
                             ,pivf.name
                       FROM pay_element_types_f petf
                           ,pay_element_links_f pelf
                           ,pay_input_values_f pivf
                           ,pay_element_entries_f peef
                           ,per_all_assignments_f paaf
                       WHERE 1 = 1
                             AND   pelf.element_type_id = petf.element_type_id
                             AND   pivf.element_type_id = petf.element_type_id
                             AND   peef.element_type_id = petf.element_type_id
                             AND   peef.element_link_id = pelf.element_link_id
                             AND   paaf.assignment_id = peef.assignment_id
                             AND   pivf.name IN (
              'Annual Amount'
              ,'Annual Pay Value'
              ,'Hourly Amount'
              ,'Hourly Rate'
              ,'Pay Value'
              ,'Periodic Amount'
              ,'Weekly Rate'
            )
                             AND   paaf.person_id = l_emp_tab(j).person_id
                       GROUP BY petf.element_name
            ,peef.element_entry_id
            ,peef.object_version_number
            ,peef.effective_start_date
            ,peef.effective_end_date
            ,pivf.input_value_id
            ,pivf.name
            ORDER BY 4 ) LOOP
              ln_rowcount               := ln_rowcount + 1;
              pay_element_entry_api.update_element_entry(
                p_validate                => false
                ,p_datetrack_update_mode   => 'CORRECTION'
                ,p_effective_date          => TO_DATE(
                  i.effective_start_date
                  ,'DD-MON-RRRR HH24:MI:SS'
                )
                ,p_business_group_id       => fnd_profile.value('PER_BUSINESS_GROUP_ID')
                ,p_element_entry_id        => i.element_entry_id
                ,p_object_version_number   => i.object_version_number
                ,p_input_value_id1         => i.input_value_id
                ,p_entry_value1            => 9999
                ,p_effective_start_date    => ld_effective_start_date
                ,p_effective_end_date      => ld_effective_end_date
                ,p_update_warning          => lb_update_warning
              );
              ld_effective_start_date   := NULL;
              ld_effective_end_date     := NULL;
              lb_update_warning         := NULL;
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in pay_element_entry_api.update_element_entry for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          BEGIN
            FOR i IN ( SELECT petf.element_name
                             ,peef.element_entry_id
                             ,peef.object_version_number
                             ,peef.effective_start_date
                             ,peef.effective_end_date
                             ,pivf.input_value_id
                             ,pivf.name
                       FROM pay_element_types_f petf
                           ,pay_element_links_f pelf
                           ,pay_input_values_f pivf
                           ,pay_element_entries_f peef
                           ,per_all_assignments_f paaf
                       WHERE 1 = 1
                             AND   pelf.element_type_id = petf.element_type_id
                             AND   pivf.element_type_id = petf.element_type_id
                             AND   peef.element_type_id = petf.element_type_id
                             AND   peef.element_link_id = pelf.element_link_id
                             AND   paaf.assignment_id = peef.assignment_id
                             AND   pivf.name = 'Weekly Amount'
                             AND   paaf.person_id = l_emp_tab(j).person_id
                       GROUP BY petf.element_name
            ,peef.element_entry_id
            ,peef.object_version_number
            ,peef.effective_start_date
            ,peef.effective_end_date
            ,pivf.input_value_id
            ,pivf.name
            ORDER BY 4 ) LOOP
              ln_rowcount               := ln_rowcount + 1;
              pay_element_entry_api.update_element_entry(
                p_validate                => false
                ,p_datetrack_update_mode   => 'CORRECTION'
                ,p_effective_date          => TO_DATE(
                  i.effective_start_date
                  ,'DD-MON-RRRR HH24:MI:SS'
                )
                ,p_business_group_id       => fnd_profile.value('PER_BUSINESS_GROUP_ID')
                ,p_element_entry_id        => i.element_entry_id
                ,p_object_version_number   => i.object_version_number
                ,p_input_value_id1         => i.input_value_id
                ,p_entry_value1            => 9999
                ,p_effective_start_date    => ld_effective_start_date
                ,p_effective_end_date      => ld_effective_end_date
                ,p_update_warning          => lb_update_warning
              );
              ld_effective_start_date   := NULL;
              ld_effective_end_date     := NULL;
              lb_update_warning         := NULL;
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in pay_element_entry_api.update_element_entry Weekly Amount for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          BEGIN
            FOR i IN ( SELECT ppos.object_version_number
                             ,ppos.period_of_service_id
                       FROM per_periods_of_service ppos
                       WHERE ppos.actual_termination_date IS NOT NULL
                             AND   ppos.person_id = l_emp_tab(j).person_id
                       GROUP BY ppos.object_version_number
                               ,ppos.period_of_service_id
            ) LOOP
              ln_rowcount   := ln_rowcount + 1;
              hr_ex_employee_api.update_term_details_emp(
                p_effective_date          => SYSDATE
                ,p_period_of_service_id    => i.period_of_service_id
                ,p_object_version_number   => i.object_version_number
                ,p_leaving_reason          => 50
              );
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_ex_employee_api.update_term_details_emp for employee '
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          BEGIN
            FOR i IN ( SELECT papf.employee_number
                             ,papf.object_version_number
                             ,papf.effective_start_date
                       FROM per_all_people_f papf
                           ,per_periods_of_service ppos
                       WHERE papf.person_id = ppos.person_id
                             AND   ppos.actual_termination_date IS NOT NULL
                             AND   papf.person_id = l_emp_tab(j).person_id
                       GROUP BY papf.employee_number
                               ,papf.object_version_number
                               ,papf.effective_start_date
            ) LOOP
              ln_rowcount                   := ln_rowcount + 1;
              hr_person_api.update_gb_person(
                p_effective_date             => TO_DATE(
                  i.effective_start_date
                  ,'DD-MON-RRRR HH24:MI:SS'
                )
                ,p_datetrack_update_mode      => 'CORRECTION'
                ,p_person_id                  => l_emp_tab(j).person_id
                ,p_object_version_number      => i.object_version_number
                ,p_email_address              => NULL
                ,p_employee_number            => i.employee_number
                ,p_effective_start_date       => i.effective_start_date
                ,p_effective_end_date         => ld_effective_end_date
                ,p_full_name                  => lv_full_name
                ,p_comment_id                 => ln_comment_id
                ,p_name_combination_warning   => lb_name_combination_warning
                ,p_assign_payroll_warning     => lb_assign_payroll_warning
                ,p_orig_hire_warning          => lb_orig_hire_warning
              );
              ld_effective_start_date       := NULL;
              ld_effective_end_date         := NULL;
              lv_full_name                  := NULL;
              ln_comment_id                 := NULL;
              lb_name_combination_warning   := NULL;
              lb_assign_payroll_warning     := NULL;
              lb_orig_hire_warning          := NULL;
            END LOOP;
          EXCEPTION
            WHEN OTHERS THEN
              ln_api_error   := ln_api_error + 1;
              apps.fnd_file.put_line(
                apps.fnd_file.output
                ,'Error in hr_person_api.update_gb_person to update email address for terminated employee'
                || l_emp_tab(j).employee_number
                || '. The error is '
                || sqlerrm
              );
              RAISE lv_error;
          END;
          COMMIT;
        EXCEPTION
          WHEN lv_error THEN
            ROLLBACK;
        END;
      END LOOP;
    END LOOP;
    IF
      ln_api_error <> 0
    THEN
      apps.fnd_file.put_line(
        apps.fnd_file.output
        ,'Total number of records for '
        || cur_emp%rowcount
        || ' employees are '
        || ln_rowcount
      );
      apps.fnd_file.put_line(
        apps.fnd_file.output
        ,'Total number of processed records are '
        || (ln_rowcount - ln_api_error)
      );
      apps.fnd_file.put_line(
        apps.fnd_file.output
        ,'Total number of error records are '
        || ln_api_error
      );
    ELSE
      apps.fnd_file.put_line(
        apps.fnd_file.output
        ,'All records are anonymized successfully..!!'
      );
      apps.fnd_file.put_line(
        apps.fnd_file.output
        ,'Total number of records for '
        || cur_emp%rowcount
        || ' employees are '
        || ln_rowcount
      );
    END IF;
    CLOSE cur_emp;
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      apps.fnd_file.put_line(
        apps.fnd_file.output
        ,'Error in xxab_hrms_data_scrambling procedure '
        || sqlerrm
      );
  END xxab_hrms_data_scrambling;
END xxab_hrms_data_anonymization;

6. Send output of Standard PO Concurrent program via Email

SET SERVEROUTPUT ON;
CLEAR SCREEN;
CREATE OR REPLACE PACKAGE BODY xxaa_po_output_email AS
/************************************************************************
* TYPE : Package *
* NAME : xxaa_po_output_email *
* INPUT Parameters : p_from_address, p_to_address *
* OUTPUT Parametrs : p_errbuf, p_retcode *
* PURPOSE : PO Output for Communication *
************************************************************************/
------------------------------------------
-- * Procedure Name : xxaa_po_output
-- * Description : This Procedure fetches approved POs
-- * and sends PDF output through email to
-- * supplier site email address
------------------------------------------
  PROCEDURE xxaa_po_output (
    p_errbuf         OUT NOCOPY VARCHAR2
    ,p_retcode        OUT NOCOPY VARCHAR2
    ,p_from_address   IN VARCHAR2
    ,p_to_address     IN VARCHAR2
  ) IS
    l_request_id           NUMBER;
    l_bol_delivery         BOOLEAN;
    l_last_run_date        DATE;
    l_curr_run_date        DATE;
    l_creation_date        DATE;
    ln_responsibility_id   NUMBER;
    ln_application_id      NUMBER;
    lv_db_name             VARCHAR2(50);
    l_to_address           VARCHAR2(200);
    l_rowcount             NUMBER;
    lv_resp_name           VARCHAR2(100);
    ln_org_id              NUMBER;
    lv_org_name            VARCHAR2(100);
    ln_resp_id             NUMBER;
  BEGIN
    lv_org_name            := upper(fnd_profile.value('ORG_NAME') );
    IF
      lv_org_name = 'ABC'
    THEN
      lv_resp_name           := fnd_profile.value('RESP_NAME');
      ln_resp_id             := fnd_profile.value('RESP_ID');
      ln_org_id              := fnd_profile.value('ORG_ID');
      l_to_address           := p_to_address;
      ln_responsibility_id   := NULL;
      ln_application_id      := NULL;
      BEGIN
        SELECT frt.responsibility_id
              ,frt.application_id INTO
          ln_responsibility_id,ln_application_id
        FROM fnd_responsibility_tl frt
        WHERE 1 = 1
              AND   frt.responsibility_name = lv_resp_name;
      EXCEPTION
        WHEN OTHERS THEN
          ln_responsibility_id   := NULL;
          ln_application_id      := NULL;
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error while fetching Responsibility ID and Application ID: ' || sqlerrm
          );
      END;
      fnd_global.apps_initialize(
        user_id        => fnd_profile.value('USER_ID')
        ,resp_id        => ln_responsibility_id
        ,resp_appl_id   => ln_application_id
      );
  /*Query to fetch concurrent program last run date*/
      BEGIN
        SELECT actual_completion_date INTO
          l_last_run_date
        FROM fnd_concurrent_requests fcr
        WHERE fcr.request_id = ( SELECT MAX(request_id)
                                 FROM fnd_concurrent_requests fcr1
                                     ,fnd_concurrent_programs_tl fcpt
                                 WHERE 1 = 1
                                       AND   fcpt.concurrent_program_id = fcr1.concurrent_program_id
                                       AND   fcr1.responsibility_id = ln_resp_id
                                       AND   fcpt.user_concurrent_program_name = 'ABC PO Output for Communication'
                                       AND   fcr1.status_code = 'C'
        );
      EXCEPTION
        WHEN OTHERS THEN
          l_last_run_date   := NULL;
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error while fetching Concurrent program last run date: ' || sqlerrm
          );
      END;
  /*Query to fetch concurrent program current run date*/
      BEGIN
        SELECT actual_start_date INTO
          l_curr_run_date
        FROM fnd_concurrent_requests fcr
        WHERE fcr.request_id = ( SELECT MAX(request_id)
                                 FROM fnd_concurrent_requests fcr1
                                     ,fnd_concurrent_programs_tl fcpt
                                 WHERE 1 = 1
                                       AND   fcpt.concurrent_program_id = fcr1.concurrent_program_id
                                       AND   fcr1.responsibility_id = ln_resp_id
                                       AND   fcpt.user_concurrent_program_name = 'ABC PO Output for Communication'
                                       AND   fcr1.status_code = 'R'
                                       AND   fcr1.phase_code = 'R'
        );
      EXCEPTION
        WHEN OTHERS THEN
          l_curr_run_date   := NULL;
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error while fetching Concurrent program current run date: ' || sqlerrm
          );
      END;
      BEGIN
        SELECT name INTO
          lv_db_name
        FROM v$database;
      EXCEPTION
        WHEN OTHERS THEN
          lv_db_name   := NULL;
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error while fetching Database Name: ' || sqlerrm
          );
      END;
      BEGIN
        SELECT creation_date INTO
          l_creation_date
        FROM fnd_concurrent_programs_tl
        WHERE user_concurrent_program_name = 'ABC PO Output for Communication';
      EXCEPTION
        WHEN OTHERS THEN
          l_creation_date   := NULL;
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Error while fetching Concurrent program creation date: ' || sqlerrm
          );
      END;
      FOR i IN ( SELECT a.segment1
                       ,b.email_address
                       ,c.vendor_name
                       ,ROWNUM
                 FROM po_headers_all a
                     ,ap_supplier_sites_all b
                     ,ap_suppliers c
                 WHERE 1 = 1
                       AND   a.vendor_site_id = b.vendor_site_id
                       AND   c.vendor_id = b.vendor_id
                       AND   b.supplier_notif_method = 'PRINT'
                       AND   a.authorization_status = 'APPROVED'
                       AND   a.type_lookup_code = 'STANDARD'
                       AND   a.org_id = ln_org_id
                       AND   a.last_update_date BETWEEN ( nvl(
        l_last_run_date
        ,l_creation_date
      ) ) AND ( l_curr_run_date )
      ORDER BY a.segment1 ) LOOP
        l_rowcount       := i.rownum;
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'Fetching PO: ' || i.segment1 || ' for Supplier: ' || i.vendor_name || ' having email ' || i.email_address
        );
        IF
          lv_db_name = 'PROD'
        THEN
          l_to_address   := i.email_address;
        ELSIF lv_db_name != 'PROD' AND upper(
          i.email_address
        ) LIKE upper(
          '%@test.com'
        ) THEN
          l_to_address   := i.email_address;
        ELSIF upper(p_to_address) LIKE upper(
          '%@test.com'
        ) THEN
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Please Change the email address at Supplier site as @test.com for Supplier: ' || i.segment1 || ' in NON-PROD instance'
          );
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Purchase Order sent to Email Address: ' || p_to_address
          );
          l_to_address   := p_to_address;
        ELSE
          apps.fnd_file.put_line(
            apps.fnd_file.log
            ,'Please change the Email address at Supplier site or Input Parameter as @test.com for NON-PROD instance'
          );
          l_to_address   := NULL;
        END IF;
        IF
          i.segment1 IS NOT NULL AND l_to_address IS NOT NULL
        THEN
          l_bol_delivery   := fnd_request.add_delivery_option(
            type          => 'E'
            , -- EMAIL
            p_argument1   => 'FYI: For Your Review -- Standard Purchase Order ' || i.segment1
            , -- Email Subject
            p_argument2   => p_from_address
            , -- From Address
            p_argument3   => l_to_address
            , -- To Address
            p_argument4   => NULL -- CC
          );
          l_request_id     := fnd_request.submit_request(
            application   => 'PO'
            , --v_conc_prog_appl_short_name,
            program       => 'POXPOPDF'
            , --v_conc_prog_short_name,
            description   => NULL
            , --Description
            start_time    => NULL
            , --Time to start the program
            sub_request   => false
            , -- sub program
            argument1     => 'R'
            ,argument2     => NULL
            ,argument3     => i.segment1
            ,argument4     => i.segment1
            ,argument5     => NULL
            ,argument6     => NULL
            ,argument7     => NULL
            ,argument8     => NULL
            ,argument9     => NULL
            ,argument10    => 'N'
            ,argument11    => 'Y'
            ,argument12    => NULL
            ,argument13    => NULL
            ,argument14    => NULL
            ,argument15    => NULL
            ,argument16    => NULL
            ,argument17    => 'Communicate'
            ,argument18    => 'T'
            ,argument19    => 'N'
            ,argument20    => 'Y'
            ,argument21    => NULL
            ,argument22    => NULL
            ,argument23    => NULL
            ,argument24    => NULL
            ,argument25    => NULL
            ,argument26    => NULL
            ,argument27    => NULL
            ,argument28    => NULL
            ,argument29    => 'N'
          );
          COMMIT;
          IF
            l_request_id = 0
          THEN
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Request not submitted error ' || fnd_message.get
            );
          ELSE
            apps.fnd_file.put_line(
              apps.fnd_file.log
              ,'Request submitted successfully request id ' || l_request_id
            );
          END IF;
        END IF;
      END LOOP;
      IF
        l_rowcount IS NULL
      THEN
        apps.fnd_file.put_line(
          apps.fnd_file.log
          ,'No Approved Purchase Orders found between previous run and current run..!'
        );
      END IF;
    ELSE
      p_retcode   := 2;
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Please select valid responsibility to execute Supplier conversion'
      );
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
      apps.fnd_file.put_line(
        apps.fnd_file.log
        ,'Unexpected error in ABC PO Output for Communication' || sqlerrm
      );
  END xxaa_po_output;
END xxaa_po_output_email;
/
SHOW ERROR

7. Creation of Value Set Values Anonymous Block

SET SERVEROUTPUT ON;
CLEAR SCREEN;
DECLARE
    x                       VARCHAR2(200);
    v_msg                   VARCHAR2(2000);
    lv_flex_value_meaning   VARCHAR2(2000);
BEGIN
    FOR i IN ( SELECT
                   *
                 FROM
                   sample_coa
             ) LOOP
        BEGIN
            SELECT
                ffvv.flex_value_meaning
              INTO lv_flex_value_meaning
              FROM
                fnd_flex_values_vl ffvv,
                fnd_flex_value_sets ffvs
             WHERE
                ffvv.flex_value_set_id     = ffvs.flex_value_set_id
                   AND ffvv.enabled_flag          = 'Y'
                   AND ffvv.flex_value_meaning    = i.as_is
                   AND ffvs.flex_value_set_name   = 'XXCOA_COMPANY_MAPPING';

            dbms_output.put_line('Value already exists ' || lv_flex_value_meaning);
        EXCEPTION
            WHEN OTHERS THEN
                fnd_flex_val_api.create_independent_vset_value(
                    'XXCOA_COMPANY_MAPPING',
                    i.as_is,
                    i.to_be,
                    'Y',
                    SYSDATE,
                    NULL,
                    'N',
                    NULL,
                    NULL,
                    x
                );

                dbms_output.put_line('Value created ' || x);
        END;
    END LOOP;

    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        v_msg   := fnd_flex_val_api.message;
        dbms_output.put_line('Error is: ' || sqlerrm);
END;
/

8. Insert data into table using FORALL

CREATE TABLE xxap_vendor_master_stg_tab (
    vendornumber   VARCHAR2(500),
    vendorname     VARCHAR2(500)
);
SELECT* FROM xxap_vendor_master_stg_tab;--No records

------------------
--Anonymous Block
------------------
DECLARE
    l_rec_count               NUMBER;
    CURSOR cur_vendor_master IS
    SELECT /*+ PARALLEL */ aps.segment1      vendornumber,
           aps.vendor_name   vendorname
      FROM ap_suppliers aps
     WHERE ROWNUM<5;
    TYPE vendor_master_tbl_type IS TABLE OF cur_vendor_master%rowtype;
    l_vendor_master_tab       vendor_master_tbl_type:=vendor_master_tbl_type();
    TYPE vendor_master_stg_tbl_type IS TABLE OF xxap_vendor_master_stg_tab%rowtype;
    l_vendor_master_stg_tab   vendor_master_stg_tbl_type:=vendor_master_stg_tbl_type();
BEGIN
    OPEN cur_vendor_master;
    LOOP
        l_vendor_master_tab.DELETE;
        l_vendor_master_stg_tab.DELETE;
        l_rec_count   :=0;
        FETCH cur_vendor_master BULK COLLECT INTO l_vendor_master_tab;
        FOR i IN 1..l_vendor_master_tab.count LOOP
            l_vendor_master_stg_tab.extend;
            l_rec_count                                         :=l_rec_count+1;
            l_vendor_master_stg_tab(l_rec_count).vendornumber   :=l_vendor_master_tab(i).vendornumber;
            l_vendor_master_stg_tab(l_rec_count).vendorname     :=l_vendor_master_tab(i).vendorname;
        END LOOP;
        FORALL i IN 1..l_vendor_master_stg_tab.count
            INSERT INTO xxap_vendor_master_stg_tab VALUES l_vendor_master_stg_tab ( i );
        COMMIT;
        EXIT WHEN l_vendor_master_tab.count=0;
    END LOOP;
    CLOSE cur_vendor_master;
END;

------------------------------------------------------------
SELECT*
  FROM xxap_vendor_master_stg_tab; --4 records appear

9. UTL_FILE – Outbound

CREATE OR REPLACE PROCEDURE outbound_extract (
    p_out_errbuf    OUT             VARCHAR2,
    p_out_retcode   OUT             VARCHAR2
) AS
------------------------------------------------------------------------------------------------------------------------------------------
    v_utlfile          utl_file.file_type;
    v_directory_name   dba_directories.directory_path%TYPE:='HR_OUTPUT'; --'/u01/oraout/instance_name/outbound';
    l_column_name      VARCHAR2(20000);
    l_column_values    VARCHAR2(20000);
    v_count            NUMBER;
BEGIN
    --------------------------------------------------------------------------------------------------------------
    --PO_LINE_TYPES_TL TABLE
    --------------------------------------------------------------------------------------------------------------
    BEGIN
        v_count         :=0;
        v_utlfile       :=utl_file.fopen(
            v_directory_name,
            'PO_LINE_TYPES_TL.csv',
            'W',
            32767
        );
        l_column_name   :='LINE_TYPE_ID,LANGUAGE,SOURCE_LANG,DESCRIPTION,LINE_TYPE,LAST_UPDATE_DATE,LAST_UPDATED_BY,LAST_UPDATE_LOGIN,CREATION_DATE,CREATED_BY';
        utl_file.put_line(
            v_utlfile,
            l_column_name
        );
        FOR i IN ( SELECT*
                     FROM po_line_types_tl
                    WHERE trunc(creation_date) BETWEEN TO_DATE('01-JUL-21 00:00:00','DD-MON-YY HH24:MI:SS') AND TO_DATE('09-OCT-21 00:00:00','DD-MON-YY HH24:MI:SS')
                 ) LOOP
            v_count           :=v_count+1;
            l_column_values   :=i.line_type_id
                             ||','
                             ||i.language
                             ||','
                             ||i.source_lang
                             ||','
                             ||i.description
                             ||','
                             ||i.line_type
                             ||','
                             ||i.last_update_date
                             ||','
                             ||i.last_updated_by
                             ||','
                             ||i.last_update_login
                             ||','
                             ||i.creation_date
                             ||','
                             ||i.created_by;
            utl_file.put_line(
                v_utlfile,
                l_column_values
            );
        END LOOP;
        utl_file.fclose(v_utlfile);
        fnd_file.put_line(
            fnd_file.log,
            'Total records fetched PO_LINE_TYPES_TL '||v_count
        );
    END;
END;

 


10. API to create table type value set, delete concurrent program, executable and create new executable, program, parameters and attach to request group

DECLARE
       v_conc_program_id         NUMBER;
       v_conc_program_name       VARCHAR2 (200);
       v_conc_prog_short_name    VARCHAR2 (200);
       v_ccp_application_id      NUMBER;
       v_ccp_application_name    VARCHAR2 (200);
       v_conc_program_count      NUMBER;
       v_conc_executable_id      NUMBER;
       v_conc_executable_name    VARCHAR2 (200);
       v_conc_exec_short_name    VARCHAR2 (200);
       v_cce_application_id      NUMBER;
       v_cce_application_name    VARCHAR2 (200);
       v_conc_executable_count   NUMBER;

       TYPE tab_ccp_name IS TABLE OF VARCHAR2 (200)
              INDEX BY BINARY_INTEGER;

       vtab_ccp_name             tab_ccp_name;
BEGIN
       --API to create table type value set
       BEGIN
              FND_FLEX_VAL_API.SET_SESSION_MODE ('customer_data'); /*Mandatory*/
              FND_FLEX_VAL_API.CREATE_VALUESET_TABLE (
                     value_set_name            => 'XX_ORG_NAME_VS',
                     description               => 'Inventory Organization Value Set',
                     security_available        => 'N',
                     enable_longlist           => 'N',
                     format_type               => 'Char',
                     maximum_size              => 20,
                     PRECISION                 => NULL,
                     numbers_only              => 'N',
                     uppercase_only            => 'N',
                     right_justify_zero_fill   => 'N',
                     min_value                 => NULL,
                     max_value                 => NULL,
                     table_application         => NULL,
                     table_appl_short_name     => NULL,
                     table_name                => 'org_organization_definitions',
                     allow_parent_values       => 'N',
                     value_column_name         => 'organization_name',
                     value_column_type         => 'Char',
                     value_column_size         => 240,
                     meaning_column_name       => 'organization_code',
                     meaning_column_type       => Char,
                     meaning_column_size       => 3,
                     id_column_name            => 'organization_id',
                     id_column_type            => 'Number',
                     id_column_size            => 15,
                     where_order_by            => 'operating_unit = NVL(fnd_profile.value(''ORG_ID''),operating_unit)',
                     additional_columns        => NULL);
              COMMIT;
       EXCEPTION
              WHEN OTHERS
              THEN
                     DBMS_OUTPUT.put_line (SQLERRM);
       END;

       --API to delete concurrent program and executable
       BEGIN
              vtab_ccp_name (1) := 'Concurrent Program Full Name';
              --vtab_ccp_name(2) := 'Program Name';
              --vtab_ccp_name(3) := 'Program Name';
              --vtab_ccp_name(4) := 'Program Name';
              v_conc_program_count := 0;
              v_conc_executable_count := 0;

              FOR i IN 1 .. vtab_ccp_name.COUNT
              LOOP
                     BEGIN
                            SELECT concurrent_program_id,
                                   concurrent_program_name,
                                   application_id,
                                   executable_id
                              INTO v_conc_program_id,
                                   v_conc_prog_short_name,
                                   v_ccp_application_id,
                                   v_conc_executable_id
                              FROM apps.fnd_concurrent_programs_vl
                             WHERE user_concurrent_program_name =
                                          vtab_ccp_name (i);

                            SELECT application_name
                              INTO v_ccp_application_name
                              FROM apps.fnd_application_vl
                             WHERE application_id = v_ccp_application_id;
                     EXCEPTION
                            WHEN OTHERS
                            THEN
                                   DBMS_OUTPUT.put_line (
                                             'Caught in Exception while fetching the details of concurrent program : '
                                          || vtab_ccp_name (i)
                                          || ' : '
                                          || SQLERRM);
                     END;

                     IF v_conc_executable_id IS NOT NULL
                     THEN
                            BEGIN
                                   SELECT executable_name, application_id
                                     INTO v_conc_exec_short_name,
                                          v_cce_application_id
                                     FROM apps.fnd_executables
                                    WHERE executable_id =
                                                 v_conc_executable_id;

                                   SELECT application_name
                                     INTO v_cce_application_name
                                     FROM apps.fnd_application_vl
                                    WHERE application_id =
                                                 v_cce_application_id;
                            EXCEPTION
                                   WHEN OTHERS
                                   THEN
                                          DBMS_OUTPUT.put_line (
                                                    'Caught in Exception while fetching the details of concurrent program Executable : '
                                                 || SQLERRM);
                            END;
                     ELSE
                            DBMS_OUTPUT.put_line (
                                      'Executable not existing for concurrent program : '
                                   || vtab_ccp_name (i));
                     END IF;

                     IF v_conc_program_id > 0
                     THEN
                            /*-- API to Delete Concurrent Program ---- */
                            BEGIN
                                   apps.fnd_program.delete_program (
                                          program_short_name   => v_conc_prog_short_name,
                                          application          => v_ccp_application_name);
                                   COMMIT;
                                   DBMS_OUTPUT.put_line (
                                             'Concurrent Program has been deleted : '
                                          || vtab_ccp_name (i));
                                   v_conc_program_count :=
                                          v_conc_program_count + 1;
                            EXCEPTION
                                   WHEN OTHERS
                                   THEN
                                          DBMS_OUTPUT.put_line (
                                                    'Caught in Exception while deleting the Concurrent Program : '
                                                 || vtab_ccp_name (i)
                                                 || ' : '
                                                 || SQLERRM);
                            END;

                            /*-- API to Delete Concurrent Program Executable ---- */
                            BEGIN
                                   apps.fnd_program.delete_executable (
                                          executable_short_name   => v_conc_exec_short_name,
                                          application             => v_cce_application_name);
                                   COMMIT;
                                   DBMS_OUTPUT.put_line (
                                             'Concurrent Program Executable has been deleted : '
                                          || v_conc_exec_short_name);
                                   v_conc_executable_count :=
                                          v_conc_executable_count + 1;
                            EXCEPTION
                                   WHEN OTHERS
                                   THEN
                                          DBMS_OUTPUT.put_line (
                                                    'Caught in Exception while deleting the Concurrent Program Executable : '
                                                 || v_conc_exec_short_name
                                                 || ' : '
                                                 || SQLERRM);
                            END;
                     ELSE
                            DBMS_OUTPUT.put_line (
                                      'Concurrent program Not Existing, Please create  : '
                                   || vtab_ccp_name (i));
                     END IF;

                     DBMS_OUTPUT.put_line (
                               'Total Count of deleted Concurrent Program/s  : '
                            || v_conc_program_count);
                     DBMS_OUTPUT.put_line (
                               'Total Count of deleted Concurrent Program Executable  : '
                            || v_conc_executable_count);
              END LOOP;
       EXCEPTION
              WHEN OTHERS
              THEN
                     DBMS_OUTPUT.put_line (
                            'Caught in Main Exception :' || SQLERRM);
       END;


       --API to create new executable
       BEGIN
              fnd_program.executable (
                     executable            => 'Executable Full Name', -- Executable Name
                     application           => 'XX',  -- Application Short Name
                     short_name            => 'XX_EXECUTABLE', -- Executable Short Name
                     description           => 'Executable Description', -- Description,DEFAULT NULL
                     execution_method      => 'PL/SQL Stored Procedure', -- Execution Method
                     execution_file_name   => 'pkg_name.prc_name', -- Execution File Name,DEFAULT NULL
                     subroutine_name       => NULL, -- Subroutine Name,DEFAULT NULL
                     icon_name             => NULL,  -- Icon Name,DEFAULT NULL
                     language_code         => 'US', -- Language Code,DEFAULT 'US'
                     execution_file_path   => NULL -- Execution File Path, DEFAULT NULL
                                                  );
       END;

       --API to create new concurrent program
       BEGIN
              fnd_program.register (
                     program                    => 'Concurrent Program Full Name', -- CP Name
                     application                => 'XX', -- Application Short Name
                     enabled                    => 'Y', -- Flag to Enable/Disable a CP
                     short_name                 => 'XX_CP_SHORT_NAME', -- CP Short Name
                     description                => 'Program Description', -- Description,DEFAULT NULL
                     executable_short_name      => 'XX_EXECUTABLE', -- Executable Short Name
                     executable_application     => 'XX', -- Executable Application Short Name
                     execution_options          => NULL, -- Execution Options,DEFAULT NULL,
                     priority                   => NULL, -- Priority,DEFAULT NULL,
                     save_output                => 'Y', -- Save Output,DEFAULT 'Y',
                     PRINT                      => 'Y',  -- Print,DEFAULT 'Y',
                     cols                       => NULL,      -- DEFAULT NULL,
                     rows                       => NULL,      -- DEFAULT NULL,
                     style                      => NULL,      -- DEFAULT NULL,
                     style_required             => 'N',        -- DEFAULT 'N',
                     printer                    => NULL,      -- DEFAULT NULL,
                     request_type               => NULL,      -- DEFAULT NULL,
                     request_type_application   => NULL,      -- DEFAULT NULL,
                     use_in_srs                 => 'Y',        -- DEFAULT 'N',
                     allow_disabled_values      => 'N',        -- DEFAULT 'N',
                     run_alone                  => 'N',        -- DEFAULT 'N',
                     output_type                => 'TEXT',   -- DEFAULT 'TEXT'
                     enable_trace               => 'N',        -- DEFAULT 'N',
                     restart                    => 'Y',        -- DEFAULT 'Y',
                     nls_compliant              => 'Y',        -- DEFAULT 'Y',
                     icon_name                  => NULL,      -- DEFAULT NULL,
                     language_code              => 'US',      -- DEFAULT 'US',
                     mls_function_short_name    => NULL,      -- DEFAULT NULL,
                     mls_function_application   => NULL,      -- DEFAULT NULL,
                     incrementor                => NULL,      -- DEFAULT NULL,
                     refresh_portlet            => NULL       -- DEFAULT NULL,
                                                       );
       END;

       --API to attach progrm to request group
       BEGIN
              fnd_program.add_to_group ('XX_CP_SHORT_NAME', -- Concurrent Program Short Name
                                        'XX',        -- Application Short Name
                                        'All Inclusive GUI', -- Report Group Name
                                        'INV');    -- Report Group Application
       END;

       --API to attach parameters to concurrrent program. Only new parameters will be added. Existing cant be amended and throw error
       BEGIN
              fnd_program.parameter (
                     program_short_name              => 'XX_CP_SHORT_NAME', --l_program_short_name,
                     application                     => 'XX',
                     sequence                        => 10,
                     parameter                       => 'P_ORGANIZATION_CODE',
                     description                     => NULL,
                     enabled                         => 'Y',
                     value_set                       => 'INV_SRS_NUMBER',
                     default_type                    => 'Profile',
                     DEFAULT_VALUE                   => 'mfg_organization_id',
                     required                        => 'Y',
                     enable_security                 => 'N',
                     range                           => NULL,
                     display                         => 'N',
                     display_size                    => 22,
                     description_size                => 50,
                     concatenated_description_size   => 25,
                     prompt                          => 'Organization Code',
                     token                           => NULL,
                     cd_parameter                    => NULL);

              fnd_program.parameter (
                     program_short_name              => 'XX_CP_SHORT_NAME', --l_program_short_name,
                     application                     => 'XX',
                     sequence                        => 20,
                     parameter                       => 'P_CYCLE_COUNT_HEADER',
                     description                     => NULL,
                     enabled                         => 'Y',
                     value_set                       => 'INV_SRS_CYCLE_COUNT_HDR',
                     default_type                    => NULL,
                     DEFAULT_VALUE                   => NULL,
                     required                        => 'N',
                     enable_security                 => 'N',
                     range                           => NULL,
                     display                         => 'Y',
                     display_size                    => 30,
                     description_size                => 50,
                     concatenated_description_size   => 25,
                     prompt                          => 'Cycle Count Name',
                     token                           => NULL,
                     cd_parameter                    => NULL);

              fnd_program.parameter (
                     program_short_name              => 'XX_CP_SHORT_NAME', --l_program_short_name,
                     application                     => 'XX',
                     sequence                        => 30,
                     parameter                       => 'P_COUNT_LIST_SEQUENCE',
                     description                     => NULL,
                     enabled                         => 'Y',
                     value_set                       => '20 Characters',
                     default_type                    => NULL,
                     DEFAULT_VALUE                   => NULL,
                     required                        => 'N',
                     enable_security                 => 'N',
                     range                           => NULL,
                     display                         => 'Y',
                     display_size                    => 10,
                     description_size                => 50,
                     concatenated_description_size   => 25,
                     prompt                          => 'Count List Sequence',
                     token                           => NULL,
                     cd_parameter                    => NULL);

              fnd_program.parameter (
                     program_short_name              => 'XX_CP_SHORT_NAME', --l_program_short_name,
                     application                     => 'XX',
                     sequence                        => 40,
                     parameter                       => 'REPROCESS_FLAG',
                     description                     => NULL,
                     enabled                         => 'Y',
                     value_set                       => 'INV_SRS_YES_NO',
                     default_type                    => 'Constant',
                     DEFAULT_VALUE                   => 'No',
                     required                        => 'N',
                     enable_security                 => 'N',
                     range                           => NULL,
                     display                         => 'Y',
                     display_size                    => 10,
                     description_size                => 50,
                     concatenated_description_size   => 25,
                     prompt                          => 'Reprocess Flag',
                     token                           => NULL,
                     cd_parameter                    => NULL);
       END;

       COMMIT;
END;