EBS开发_供应商地点联系人银行等导入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013711561/article/details/79274907

--定义接口表字段

create table CUX_INV_VENDOR_8MIMPORT

(
  group_id           NUMBER not null,
  vendor_name        VARCHAR2(360),
  vendor_type        VARCHAR2(30),
  tax_reference      VARCHAR2(30),
  vendor_site_code   VARCHAR2(80),
  city               VARCHAR2(80),
  address            VARCHAR2(360),
  person_name        VARCHAR2(240),
  phone_number       VARCHAR2(240),
  email_address      VARCHAR2(240),
  bank_name          VARCHAR2(240),
  bank_branch_name   VARCHAR2(240),
  bank_account_num   VARCHAR2(240),
  bank_account_name  VARCHAR2(240),
  status_code        VARCHAR2(1) default 'N' not null,
  return_msg         VARCHAR2(2400),
  creation_date      DATE,
  attribute_category VARCHAR2(30),
  attribute1         VARCHAR2(240),
  attribute2         VARCHAR2(240),
  attribute3         VARCHAR2(240),
  attribute4         VARCHAR2(240),
  attribute5         VARCHAR2(240),
  attribute6         VARCHAR2(240),
  attribute7         VARCHAR2(240),
  attribute8         VARCHAR2(240),
  attribute9         VARCHAR2(240),
  attribute10        VARCHAR2(240),
  attribute11        VARCHAR2(240),
  attribute12        VARCHAR2(240),
  attribute13        VARCHAR2(240),
  attribute14        VARCHAR2(240),
  attribute15        VARCHAR2(240)

)

CREATE OR REPLACE PACKAGE cux_inv_vendor_8mimport_pkg IS


    /*===============================================
      
    
     
    /*==================================================
    *   PROCEDURE NAME
    *       main
    *   DESCRIPTION:
    *
    *   HISTORY:
    *      1.00 2018-01-24 jin.he Creation
    * ==================================================*/
    PROCEDURE main(errbuf  OUT VARCHAR2
                  ,retcode OUT VARCHAR2);
END cux_inv_vendor_8mimport_pkg;
/
CREATE OR REPLACE PACKAGE BODY cux_inv_vendor_8mimport_pkg IS


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


    --GLOBAL VARIABLES
    g_pkg_name CONSTANT VARCHAR2(30) := 'CUX_INV_VENDOR_8MIMPORT_PKG';
    g_debug VARCHAR2(1) := nvl(fnd_profile.value('AFLOG_ENABLED')
                              ,'N');


    ------------------------------------------------ 
    --LOG
    ------------------------------------------------ 
    PROCEDURE log(p_msg VARCHAR2) IS
    BEGIN
        -- IF g_debug = 'Y' THEN
        cux_conc_utl.log_msg(p_msg);
        --  END IF;
    END log;


    ------------------------------------------------  
    --update_status                                   
    ------------------------------------------------ 
    PROCEDURE update_status(p_group_id    IN NUMBER
                           ,p_status_code IN VARCHAR2
                           ,p_return_msg  IN VARCHAR2) IS
        --PRAGMA AUTONOMOUS_TRANSACTION;
        l_count NUMBER;
    BEGIN
        SELECT COUNT(1)
        INTO   l_count
        FROM   cux_inv_vendor_8mimport t
        WHERE  t.return_msg LIKE ('%' || p_return_msg || '%')
        AND    t.group_id = p_group_id;
    
        IF l_count = 0 THEN
            UPDATE cux_inv_vendor_8mimport
            SET    status_code = p_status_code
                  ,return_msg  = substr(return_msg || ',' || p_return_msg
                                       ,2)
            WHERE  group_id = p_group_id;
            --COMMIT;
        END IF;
    EXCEPTION
        WHEN OTHERS THEN
            log(dbms_utility.format_error_stack || ' ' || dbms_utility.format_error_backtrace);
    END update_status;
    FUNCTION get_category_id(p_structure_id NUMBER
                            ,p_categ_name   VARCHAR2) RETURN NUMBER IS
        v_cate_id NUMBER;
    BEGIN
    
        SELECT mck.category_id
        INTO   v_cate_id
        FROM   mtl_categories_kfv mck
        WHERE  mck.concatenated_segments = p_categ_name
        AND    mck.structure_id = p_structure_id;
        RETURN v_cate_id;
    EXCEPTION
        WHEN OTHERS THEN
            RETURN - 1;
    END get_category_id;
    ------------------------------------------------ 
    --GET_LOOKUP_MEANING
    ------------------------------------------------ 
    FUNCTION get_lookup_meaning(p_lookup_type IN VARCHAR2
                               ,p_lookup_code IN VARCHAR2) RETURN VARCHAR2 IS
        l_meaning VARCHAR2(240);
    BEGIN
        SELECT flv.meaning
        INTO   l_meaning
        FROM   fnd_lookup_values_vl flv
        WHERE  flv.lookup_type = p_lookup_type
        AND    flv.lookup_code = p_lookup_code
        AND    flv.enabled_flag = 'Y';
        RETURN l_meaning;
    EXCEPTION
        WHEN no_data_found THEN
            RETURN NULL;
        WHEN OTHERS THEN
            fnd_msg_pub.add_exc_msg(p_pkg_name => g_pkg_name
                                   ,p_procedure_name => 'GET_LOOKUP_MEANING'
                                   ,p_error_text => p_lookup_code || substrb(SQLERRM
                                                                            ,1
                                                                            ,240));
            RAISE fnd_api.g_exc_error;
    END get_lookup_meaning;


    PROCEDURE create_vendor(p_group_id      IN NUMBER
                           ,p_vendor_name   IN VARCHAR2
                           ,p_vendor_type   IN VARCHAR2
                           ,p_tax_reference IN VARCHAR2
                           ,x_vendor_id     OUT NUMBER
                           ,x_party_id      OUT NUMBER) IS
        l_vendor_rec              ap_vendor_pub_pkg.r_vendor_rec_type;
        l_return_status           VARCHAR2(10);
        l_msg_count               NUMBER;
        l_msg_data                VARCHAR2(1000);
        l_vendor_id               NUMBER;
        l_party_id                NUMBER;
        l_vendor_type_lookup_code VARCHAR2(30);
    BEGIN
        BEGIN
            SELECT pov.vendor_id
                  ,pov.party_id
            INTO   l_vendor_id
                  ,l_party_id
            FROM   po_vendors pov
            WHERE  pov.vendor_name = p_vendor_name;
        EXCEPTION
            WHEN OTHERS THEN
                l_vendor_id := NULL;
                l_party_id  := NULL;
        END;
        BEGIN
            SELECT flv.lookup_code
            INTO   l_vendor_type_lookup_code
            FROM   fnd_lookup_values flv
            WHERE  flv.lookup_type = 'VENDOR TYPE'
            AND    flv.meaning = p_vendor_type
            AND    flv.language = 'ZHS'
            AND    flv.enabled_flag = 'Y';
        EXCEPTION
            WHEN OTHERS THEN
                l_vendor_type_lookup_code := NULL;
        END;
        IF l_vendor_id IS NULL THEN
            IF l_vendor_type_lookup_code IS NULL THEN
                update_status(p_group_id => p_group_id
                             ,p_status_code => 'E'
                             ,p_return_msg => '供应商类型无效');
            ELSE
                l_vendor_rec.vendor_name             := p_vendor_name;
                l_vendor_rec.vendor_name_alt         := p_vendor_name;
                l_vendor_rec.tax_reference           := p_tax_reference;
                l_vendor_rec.vendor_type_lookup_code := l_vendor_type_lookup_code;
                l_vendor_rec.start_date_active       := SYSDATE - 1;
            
                pos_vendor_pub_pkg.create_vendor(p_vendor_rec => l_vendor_rec
                                                ,x_return_status => l_return_status
                                                ,x_msg_count => l_msg_count
                                                ,x_msg_data => l_msg_data
                                                ,x_vendor_id => l_vendor_id
                                                ,x_party_id => l_party_id);
                x_vendor_id := l_vendor_id;
                x_party_id  := l_party_id;
                COMMIT;
            END IF;
        ELSE
            x_vendor_id := l_vendor_id;
            x_party_id  := l_party_id;
        END IF;
    END create_vendor;
    /* ---------------------------------------------------------------------------------
    create_vendor_site
    ------------------------------------------------------------------*/
    PROCEDURE create_vendor_site(p_vendor_id        IN NUMBER
                                ,p_vendor_site_code IN VARCHAR2
                                ,p_address          IN VARCHAR2
                                ,x_vendor_site_id   OUT NUMBER) IS
        l_vendor_site_rec ap_vendor_pub_pkg.r_vendor_site_rec_type;
        l_return_status   VARCHAR2(10);
        l_msg_count       NUMBER;
        l_msg_data        VARCHAR2(1000);
        l_party_site_id   NUMBER;
        l_location_id     NUMBER;
        CURSOR cur_main IS
            SELECT hr.organization_id
            FROM   hr_operating_units hr;
    BEGIN
        FOR rec IN cur_main LOOP
            l_vendor_site_rec.vendor_id            := p_vendor_id;
            l_vendor_site_rec.vendor_site_code     := p_vendor_site_code;
            l_vendor_site_rec.address_line1        := p_address;
            l_vendor_site_rec.purchasing_site_flag := 'Y';
            l_vendor_site_rec.pay_site_flag        := 'Y';
            l_vendor_site_rec.country              := 'CN';
            l_vendor_site_rec.org_id               := rec.organization_id; --是否所有 
            pos_vendor_pub_pkg.create_vendor_site(p_vendor_site_rec => l_vendor_site_rec
                                                 ,x_return_status => l_return_status
                                                 ,x_msg_count => l_msg_count
                                                 ,x_msg_data => l_msg_data
                                                 ,x_vendor_site_id => x_vendor_site_id
                                                 ,x_party_site_id => l_party_site_id
                                                 ,x_location_id => l_location_id);
        END LOOP;
        COMMIT;
    END create_vendor_site;


    /* --------------------------------------------------------------------------------
    create_vendor_contact
     ------------------------------------------------------------------*/
    PROCEDURE create_vendor_contact(p_vendor_id      IN NUMBER
                                   ,p_person_name    IN VARCHAR2
                                   ,p_phone_number   IN VARCHAR2
                                   ,p_email_address  IN VARCHAR2
                                   ,x_org_contact_id OUT NUMBER) IS
        l_vendor_contact_rec ap_vendor_pub_pkg.r_vendor_contact_rec_type;
        l_return_status      VARCHAR2(10);
        l_msg_count          NUMBER;
        l_msg_data           VARCHAR2(1000);
        l_vendor_contact_id  NUMBER;
        l_per_party_id       NUMBER;
        l_rel_party_id       NUMBER;
        l_rel_id             NUMBER;
        l_party_site_id      NUMBER;
    BEGIN
        l_vendor_contact_rec.vendor_id        := p_vendor_id;
        l_vendor_contact_rec.person_last_name := p_person_name;
        l_vendor_contact_rec.phone            := p_phone_number;
        l_vendor_contact_rec.email_address    := p_email_address;
        pos_vendor_pub_pkg.create_vendor_contact(p_vendor_contact_rec => l_vendor_contact_rec
                                                ,x_return_status => l_return_status
                                                ,x_msg_count => l_msg_count
                                                ,x_msg_data => l_msg_data
                                                ,x_vendor_contact_id => l_vendor_contact_id
                                                ,x_per_party_id => l_per_party_id
                                                ,x_rel_party_id => l_rel_party_id
                                                ,x_rel_id => l_rel_id
                                                ,x_org_contact_id => x_org_contact_id
                                                ,x_party_site_id => l_party_site_id);
    END create_vendor_contact;


    PROCEDURE create_ext_bank(p_bank_name IN VARCHAR2
                             ,x_bank_id   OUT NUMBER) IS
        v_error_reason     VARCHAR2(2000);
        v_msg_data         VARCHAR2(1000);
        v_msg_count        NUMBER;
        v_return_status    VARCHAR2(100);
        v_extbank_rec_type iby_ext_bankacct_pub.extbank_rec_type;
        x_response         iby_fndcpt_common_pub.result_rec_type;
    BEGIN
        BEGIN
            SELECT iv.bank_party_id
            INTO   x_bank_id
            FROM   iby_ext_banks_v iv
            WHERE  iv.bank_name = p_bank_name;
        EXCEPTION
            WHEN OTHERS THEN
                x_bank_id := NULL;
            
        END;
        IF x_bank_id IS NULL THEN
            v_error_reason                           := NULL;
            v_return_status                          := NULL;
            v_msg_count                              := NULL;
            v_msg_data                               := NULL;
            v_extbank_rec_type.object_version_number := 1.0;
            v_extbank_rec_type.bank_name             := p_bank_name;
            v_extbank_rec_type.institution_type      := 'BANK';
            v_extbank_rec_type.country_code          := 'CN';
            iby_ext_bankacct_pub.create_ext_bank(p_api_version => 1.0
                                                ,p_init_msg_list => fnd_api.g_true
                                                ,p_ext_bank_rec => v_extbank_rec_type
                                                ,x_bank_id => x_bank_id
                                                ,x_return_status => v_return_status
                                                ,x_msg_count => v_msg_count
                                                ,x_msg_data => v_msg_data
                                                ,x_response => x_response);
        
            IF v_return_status <> fnd_api.g_ret_sts_success THEN
                IF v_msg_count >= 1 THEN
                    FOR i IN 1 .. v_msg_count LOOP
                        IF v_error_reason IS NULL THEN
                            v_error_reason := substr(fnd_msg_pub.get(p_encoded => fnd_api.g_false)
                                                    ,1
                                                    ,255);
                        ELSE
                            v_error_reason := v_error_reason || ' ,' || substr(fnd_msg_pub.get(p_encoded => fnd_api.g_false)
                                                                              ,1
                                                                              ,255);
                        END IF;
                    
                        log('BANK API ERROR-' || v_error_reason);
                    END LOOP;
                END IF;
            END IF;
        END IF;
    END create_ext_bank;
    PROCEDURE create_ext_bank_branch(p_branch_name IN VARCHAR2
                                    ,p_bank_id     IN NUMBER
                                    ,x_branch_id   OUT NUMBER) IS
        p_api_version         NUMBER := 1.0;
        p_init_msg_list       VARCHAR2(1) := 'F';
        x_return_status       VARCHAR2(2000);
        x_msg_count           NUMBER(5);
        x_msg_data            VARCHAR2(2000);
        x_response            iby_fndcpt_common_pub.result_rec_type;
        p_ext_bank_branch_rec iby_ext_bankacct_pub.extbankbranch_rec_type;
        p_count               NUMBER;
    BEGIN
        BEGIN
            SELECT iv.branch_party_id
            INTO   x_branch_id
            FROM   iby_ext_bank_branches_v iv
            WHERE  iv.bank_branch_name = p_branch_name
            AND    iv.bank_party_id = p_bank_id;
        EXCEPTION
            WHEN OTHERS THEN
                x_branch_id := NULL;
        END;
        IF x_branch_id IS NULL THEN
            p_ext_bank_branch_rec.bch_object_version_number := 1.0;
            p_ext_bank_branch_rec.branch_name               := p_branch_name;
            p_ext_bank_branch_rec.branch_type               := 'ABA';
            p_ext_bank_branch_rec.bank_party_id             := p_bank_id;
            iby_ext_bankacct_pub.create_ext_bank_branch(p_api_version => p_api_version
                                                       ,p_init_msg_list => p_init_msg_list
                                                       ,p_ext_bank_branch_rec => p_ext_bank_branch_rec
                                                       ,x_branch_id => x_branch_id
                                                       ,x_return_status => x_return_status
                                                       ,x_msg_count => x_msg_count
                                                       ,x_msg_data => x_msg_data
                                                       ,x_response => x_response);
        
            IF x_msg_count = 1 THEN
                log('x_msg_data ' || x_msg_data);
            ELSIF x_msg_count > 1 THEN
                LOOP
                    p_count    := p_count + 1;
                    x_msg_data := fnd_msg_pub.get(fnd_msg_pub.g_next
                                                 ,fnd_api.g_false);
                
                    IF x_msg_data IS NULL THEN
                        EXIT;
                    END IF;
                
                    log('Message' || p_count || ' ---' || x_msg_data);
                END LOOP;
            END IF;
        END IF;
    END create_ext_bank_branch;
    PROCEDURE create_ext_bank_acct(p_bank_account_name IN VARCHAR2
                                  ,p_bank_account_num  IN VARCHAR2
                                  ,p_party_id          IN NUMBER
                                  ,p_bank_id           IN NUMBER
                                  ,p_bank_branch_id    IN NUMBER
                                  ,x_acct_id           OUT NUMBER) IS
        p_api_version       NUMBER := 1.0;
        p_init_msg_list     VARCHAR2(1) := 'F';
        x_return_status     VARCHAR2(2000);
        x_msg_count         NUMBER(5);
        x_msg_data          VARCHAR2(2000);
        x_response          iby_fndcpt_common_pub.result_rec_type;
        p_ext_bank_acct_rec iby_ext_bankacct_pub.extbankacct_rec_type;
        p_count             NUMBER;
    BEGIN
    
        p_ext_bank_acct_rec.object_version_number    := 1.0;
        p_ext_bank_acct_rec.acct_owner_party_id      := p_party_id;
        p_ext_bank_acct_rec.bank_account_name        := p_bank_account_name;
        p_ext_bank_acct_rec.bank_account_num         := p_bank_account_num;
        p_ext_bank_acct_rec.alternate_acct_name      := p_bank_account_name;
        p_ext_bank_acct_rec.bank_id                  := p_bank_id;
        p_ext_bank_acct_rec.branch_id                := p_bank_branch_id;
        p_ext_bank_acct_rec.start_date               := SYSDATE;
        p_ext_bank_acct_rec.country_code             := 'CN';
        p_ext_bank_acct_rec.currency                 := 'CNY';
        p_ext_bank_acct_rec.foreign_payment_use_flag := 'Y';
        p_ext_bank_acct_rec.payment_factor_flag      := 'N';
        iby_ext_bankacct_pub.create_ext_bank_acct(p_api_version => p_api_version
                                                 ,p_init_msg_list => p_init_msg_list
                                                 ,p_ext_bank_acct_rec => p_ext_bank_acct_rec
                                                 ,x_acct_id => x_acct_id
                                                 ,x_return_status => x_return_status
                                                 ,x_msg_count => x_msg_count
                                                 ,x_msg_data => x_msg_data
                                                 ,x_response => x_response);
    
        IF x_msg_count = 1 THEN
            log('x_msg_data ' || x_msg_data);
        ELSIF x_msg_count > 1 THEN
            LOOP
                p_count    := p_count + 1;
                x_msg_data := fnd_msg_pub.get(fnd_msg_pub.g_next
                                             ,fnd_api.g_false);
            
                IF x_msg_data IS NULL THEN
                    EXIT;
                END IF;
            
                log('Message' || p_count || ' ---' || x_msg_data);
            END LOOP;
        END IF;
    END create_ext_bank_acct;


    PROCEDURE set_payee_instr_assignment(p_bank_account_id IN NUMBER
                                        ,p_party_id        IN NUMBER) IS
        p_payee              iby_disbursement_setup_pub.payeecontext_rec_type;
        p_assignment_attribs iby_fndcpt_setup_pub.pmtinstrassignment_rec_type;
        x_response           iby_fndcpt_common_pub.result_rec_type;
        x_return_status      VARCHAR2(10);
        x_msg_count          NUMBER;
        x_assign_id          NUMBER;
        x_msg_data           VARCHAR2(2000);
    BEGIN
        p_assignment_attribs.instrument.instrument_type := 'BANKACCOUNT';
        p_assignment_attribs.instrument.instrument_id   := p_bank_account_id;
        p_payee.party_id                                := p_party_id;
        p_payee.payment_function                        := 'PAYABLES_DISB';
        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_false
                                                             ,x_return_status => x_return_status
                                                             ,x_msg_count => x_msg_count
                                                             ,x_msg_data => x_msg_data
                                                             ,p_payee => p_payee
                                                             ,p_assignment_attribs => p_assignment_attribs
                                                             ,x_assign_id => x_assign_id
                                                             ,x_response => x_response);
    
        IF x_return_status <> fnd_api.g_ret_sts_success THEN
            IF x_msg_count >= 1 THEN
                FOR i IN 1 .. x_msg_count LOOP
                    IF x_msg_data IS NULL THEN
                        x_msg_data := substr(fnd_msg_pub.get(p_encoded => fnd_api.g_false)
                                            ,1
                                            ,255);
                    ELSE
                        x_msg_data := x_msg_data || ' ,' || substr(fnd_msg_pub.get(p_encoded => fnd_api.g_false)
                                                                  ,1
                                                                  ,255);
                    END IF;
                
                    log('BANK API ERROR-' || x_msg_data);
                END LOOP;
            END IF;
        END IF;
    END set_payee_instr_assignment;
    ------------------------------------------------ 
    --PROCESS_REQUEST
    ------------------------------------------------ 
    PROCEDURE process_request(p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false
                             ,p_commit        IN VARCHAR2 DEFAULT fnd_api.g_false
                             ,x_return_status OUT NOCOPY VARCHAR2
                             ,x_msg_count     OUT NOCOPY NUMBER
                             ,x_msg_data      OUT NOCOPY VARCHAR2) IS
        l_api_version       NUMBER := 1;
        l_api_name          VARCHAR2(30) := 'PROCESS_REQUEST';
        l_savepoint_name    VARCHAR2(50) := NULL;
        l_party_id          NUMBER;
        l_vendor_id         NUMBER;
        l_bank_id           NUMBER;
        l_branch_id         NUMBER;
        l_acct_id           NUMBER;
        l_vendor_site_id    NUMBER;
        l_vendor_site_count NUMBER;
        l_org_contact_id    NUMBER;
        l_count             NUMBER;
        l_org_contact_count NUMBER;
        CURSOR cur_main IS
            SELECT group_id
                  ,vendor_name
                  ,vendor_type
                  ,tax_reference
                  ,vendor_site_code
                  ,city
                  ,address
                  ,person_name
                  ,phone_number
                  ,email_address
                  ,bank_name
                  ,bank_branch_name
                  ,bank_account_num
                  ,bank_account_name
                  ,status_code
                  ,return_msg
                  ,creation_date
            FROM   cux_inv_vendor_8mimport
            WHERE  status_code = 'N';
    BEGIN
        x_return_status := cux_api.start_activity(p_pkg_name => g_pkg_name
                                                 ,p_api_name => l_api_name
                                                 ,p_savepoint_name => l_savepoint_name
                                                 ,p_init_msg_list => p_init_msg_list
                                                 ,p_api_version => l_api_version);
        IF (x_return_status = fnd_api.g_ret_sts_unexp_error) THEN
            RAISE fnd_api.g_exc_unexpected_error;
        ELSIF (x_return_status = fnd_api.g_ret_sts_error) THEN
            RAISE fnd_api.g_exc_error;
        END IF;
        FOR rec IN cur_main LOOP
            --创建供应商 
            create_vendor(p_group_id => rec.group_id
                         ,p_vendor_name => rec.vendor_name
                         ,p_vendor_type => rec.vendor_type
                         ,p_tax_reference => rec.tax_reference
                         ,x_vendor_id => l_vendor_id
                         ,x_party_id => l_party_id);
            IF l_vendor_id IS NOT NULL THEN
                log('创建供应商成功');
            ELSE
                log('创建供应商失败');
            END IF;
            IF l_vendor_id IS NOT NULL THEN
                --创建供应商地点
                create_vendor_site(p_vendor_id => l_vendor_id
                                  ,p_vendor_site_code => rec.vendor_site_code
                                  ,p_address => rec.address
                                  ,x_vendor_site_id => l_vendor_site_id);
                SELECT COUNT(pvs.vendor_site_id)
                INTO   l_vendor_site_count
                FROM   po_vendor_sites_all pvs
                      ,hr_operating_units  hr
                WHERE  pvs.vendor_id = l_vendor_id
                AND    pvs.org_id = hr.organization_id;
            
                IF l_vendor_site_count > 0 THEN
                    log('创建供应商地点成功');
                ELSE
                    log('创建供应商地点失败');
                    update_status(p_group_id => rec.group_id
                                 ,p_status_code => 'E'
                                 ,p_return_msg => '创建供应商地点失败');
                END IF;
                IF l_vendor_site_count > 0 THEN
                    --创建地点联系人 
                    create_vendor_contact(p_vendor_id => l_vendor_id
                                         ,p_person_name => rec.person_name
                                         ,p_phone_number => rec.phone_number
                                         ,p_email_address => rec.email_address
                                         ,x_org_contact_id => l_org_contact_id);
                    BEGIN
                        SELECT COUNT(1)
                        INTO   l_org_contact_count
                        FROM   hz_relationships hzr
                        WHERE  hzr.relationship_type = 'CONTACT'
                        AND    hzr.relationship_code = 'CONTACT_OF'
                        AND    hzr.subject_type = 'PERSON'
                        AND    hzr.object_type = 'ORGANIZATION'
                        AND    hzr.object_id = l_party_id;
                    END;
                    IF l_org_contact_count > 0 THEN
                        log('创建创建地点联系人成功');
                    ELSE
                        log('创建创建地点联系人失败');
                        update_status(p_group_id => rec.group_id
                                     ,p_status_code => 'E'
                                     ,p_return_msg => '创建创建地点联系人失败');
                    END IF;
                    IF l_org_contact_count > 0 THEN
                        --创建银行
                        create_ext_bank(p_bank_name => rec.bank_name
                                       ,x_bank_id => l_bank_id);
                        IF l_bank_id IS NOT NULL THEN
                            log('创建银行成功');
                        ELSE
                            log('创建银行失败');
                            update_status(p_group_id => rec.group_id
                                         ,p_status_code => 'E'
                                         ,p_return_msg => '创建银行失败');
                        END IF;
                        IF l_bank_id IS NOT NULL THEN
                            --创建支行
                            create_ext_bank_branch(p_branch_name => rec.bank_branch_name
                                                  ,p_bank_id => l_bank_id
                                                  ,x_branch_id => l_branch_id);
                            IF l_branch_id IS NOT NULL THEN
                                log('创建支行成功');
                            ELSE
                                log('创建支行失败');
                                update_status(p_group_id => rec.group_id
                                             ,p_status_code => 'E'
                                             ,p_return_msg => '创建支行失败');
                            END IF;
                            IF l_branch_id IS NOT NULL THEN
                                --创建银行账户
                                create_ext_bank_acct(p_bank_account_name => rec.bank_account_name
                                                    ,p_bank_account_num => rec.bank_account_num
                                                    ,p_party_id => l_party_id
                                                    ,p_bank_id => l_bank_id
                                                    ,p_bank_branch_id => l_branch_id
                                                    ,x_acct_id => l_acct_id);
                                IF l_acct_id IS NOT NULL THEN
                                    log('创建银行账户成功');
                                ELSE
                                    log('创建银行账户失败');
                                    update_status(p_group_id => rec.group_id
                                                 ,p_status_code => 'E'
                                                 ,p_return_msg => '创建银行账户失败');
                                END IF;
                                IF l_acct_id IS NOT NULL THEN
                                    --分配账户到供应商
                                    set_payee_instr_assignment(p_bank_account_id => l_acct_id
                                                              ,p_party_id => l_party_id);
                                    SELECT COUNT(1)
                                    INTO   l_count
                                    FROM   iby_pmt_instr_uses_all t
                                    WHERE  t.instrument_id = l_acct_id;
                                    IF l_count > 0 THEN
                                        log('分配账户到供应商成功');
                                        update_status(p_group_id => rec.group_id
                                                     ,p_status_code => 'Y'
                                                     ,p_return_msg => '成功');
                                    ELSE
                                        log('分配账户到供应商失败');
                                        update_status(p_group_id => rec.group_id
                                                     ,p_status_code => 'E'
                                                     ,p_return_msg => '分配账户到供应商失败');
                                    END IF;
                                END IF;
                            END IF;
                        END IF;
                    END IF;
                END IF;
            END IF;
        END LOOP;
        x_return_status := cux_api.end_activity(p_pkg_name => g_pkg_name
                                               ,p_api_name => l_api_name
                                               ,p_commit => p_commit
                                               ,x_msg_count => x_msg_count
                                               ,x_msg_data => x_msg_data);
    EXCEPTION
        WHEN fnd_api.g_exc_error THEN
            cux_conc_utl.log_msg(dbms_utility.format_error_stack || ' ' || dbms_utility.format_error_backtrace);
            x_return_status := cux_api.handle_exceptions(p_pkg_name => g_pkg_name
                                                        ,p_api_name => l_api_name
                                                        ,p_exc_name => cux_api.g_exc_name_error
                                                        ,x_msg_count => x_msg_count
                                                        ,x_msg_data => x_msg_data);
        WHEN fnd_api.g_exc_unexpected_error THEN
            cux_conc_utl.log_msg(dbms_utility.format_error_stack || ' ' || dbms_utility.format_error_backtrace);
            x_return_status := cux_api.handle_exceptions(p_pkg_name => g_pkg_name
                                                        ,p_api_name => l_api_name
                                                        ,p_exc_name => cux_api.g_exc_name_unexp
                                                        ,x_msg_count => x_msg_count
                                                        ,x_msg_data => x_msg_data);
        WHEN OTHERS THEN
            cux_conc_utl.log_msg(dbms_utility.format_error_stack || ' ' || dbms_utility.format_error_backtrace);
            x_return_status := cux_api.handle_exceptions(p_pkg_name => g_pkg_name
                                                        ,p_api_name => l_api_name
                                                        ,p_exc_name => cux_api.g_exc_name_others
                                                        ,x_msg_count => x_msg_count
                                                        ,x_msg_data => x_msg_data);
    END process_request;
    ------------------------------------------------
    --MAIN
    ------------------------------------------------
    PROCEDURE main(errbuf  OUT VARCHAR2
                  ,retcode OUT VARCHAR2) IS
        l_return_status VARCHAR2(30);
        l_msg_data      VARCHAR2(2000);
        l_msg_count     NUMBER;
    BEGIN
        retcode := '0';
        -- concurrent header log
        cux_conc_utl.log_header;
        --Call process_request
        process_request(p_init_msg_list => fnd_api.g_true
                       ,p_commit => fnd_api.g_false
                       ,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 THEN
            RAISE fnd_api.g_exc_error;
        ELSIF l_return_status = fnd_api.g_ret_sts_unexp_error THEN
            RAISE fnd_api.g_exc_unexpected_error;
        END IF;
        cux_conc_utl.log_footer;
    
    EXCEPTION
        WHEN fnd_api.g_exc_error THEN
            cux_conc_utl.log_message_list;
            retcode := '1';
            fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false
                                     ,p_count => l_msg_count
                                     ,p_data => l_msg_data);
            IF l_msg_count > 1 THEN
                l_msg_data := fnd_msg_pub.get_detail(p_msg_index => fnd_msg_pub.g_first
                                                    ,p_encoded => fnd_api.g_false);
            END IF;
            errbuf := l_msg_data;
        WHEN fnd_api.g_exc_unexpected_error THEN
            cux_conc_utl.log_message_list;
            retcode := '2';
            fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false
                                     ,p_count => l_msg_count
                                     ,p_data => l_msg_data);
            IF l_msg_count > 1 THEN
                l_msg_data := fnd_msg_pub.get_detail(p_msg_index => fnd_msg_pub.g_first
                                                    ,p_encoded => fnd_api.g_false);
            END IF;
            errbuf := l_msg_data;
        WHEN OTHERS THEN
            fnd_msg_pub.add_exc_msg(p_pkg_name => g_pkg_name
                                   ,p_procedure_name => 'MAIN'
                                   ,p_error_text => substrb(SQLERRM
                                                           ,1
                                                           ,240));
            cux_conc_utl.log_message_list;
            retcode := '2';
            errbuf  := SQLERRM;
    END main;


END cux_inv_vendor_8mimport_pkg;
/

猜你喜欢

转载自blog.csdn.net/u013711561/article/details/79274907