| DECLARE
x_bank_rec iby_ext_bankacct_pub.extbank_rec_type; x_bank_id NUMBER; x_return_status VARCHAR2 (10); x_msg_count NUMBER; x_msg_data VARCHAR2 (256); x_response_rec iby_fndcpt_common_pub.result_rec_type; x_bank_branch_rec iby_ext_bankacct_pub.extbankbranch_rec_type; x_branch_id NUMBER; x_acct_id NUMBER; x_bank_acct_rec iby_ext_bankacct_pub.extbankacct_rec_type; p_ext_payee_tab iby_disbursement_setup_pub.external_payee_tab_type; x_ext_payee_id_tab iby_disbursement_setup_pub.ext_payee_id_tab_type; x_ext_payee_status_tab iby_disbursement_setup_pub.ext_payee_create_tab_type; l_ext_payee_rec iby_disbursement_setup_pub.external_payee_rec_type; l_ext_payee_id_rec_type iby_disbursement_setup_pub.ext_payee_id_rec_type; p_payee iby_disbursement_setup_pub.payeecontext_rec_type; p_assignment_attribs iby_fndcpt_setup_pub.pmtinstrassignment_rec_type; p_instrument iby_fndcpt_setup_pub.pmtinstrument_rec_type; x_assign_id NUMBER; v_bank_party_id NUMBER; v_branch_party_id NUMBER; v_vendor_id NUMBER; v_vendor_site_id NUMBER; v_party_site_id NUMBER; V_EXT_BANK_ACCOUNT_ID NUMBER; v_bank_creation_flag VARCHAR2 (40); v_error_flag VARCHAR2 (40); v_error_message VARCHAR2 (4000); v_party_id number; v_TERRITORY_CODE VARCHAR2(400); x_joint_owner_id number;
CURSOR supplier_bank
IS
SELECT ROWID, xrs.* FROM XXAP_SUPP_BANK_ACCOUNT_STG xrs WHERE processed_flag = 'N';
BEGIN
DBMS_OUTPUT.put_line ('Start of procedure.');
fnd_global.apps_initialize (fnd_global.user_id, fnd_global.resp_id, fnd_global.resp_appl_id);
DBMS_OUTPUT.put_line ('Procedure initializad.');
FOR i IN supplier_bank LOOP
v_bank_creation_flag := 'N'; v_error_flag := 'N'; v_error_message := NULL; v_bank_party_id:=NULL; V_branch_party_id:=NULL; v_ext_bank_account_id:=NULL; v_vendor_id:=NULL; v_party_id:=NULL; v_vendor_site_id:=NULL; v_party_site_id:=NULL; v_TERRITORY_CODE:=NULL;
begin select TERRITORY_CODE into v_TERRITORY_CODE from fnd_territories where UPPER(TERRITORY_CODE)=UPPER(i.COUNTRY);
exception when others then
V_ERROR_FLAG:='Y'; V_ERROR_MESSAGE:=V_ERROR_MESSAGE||'Bank country not exsist';
end;
BEGIN
SELECT bank_party_id INTO v_bank_party_id FROM ce_banks_v WHERE UPPER(bank_name)= UPPER(i.bank_name) and upper(HOME_COUNTRY)=UPPER(I.COUNTRY) AND ROWNUM=1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_error_flag := 'Y'; v_error_message := 'BANK IS NOT EXIST IN THE SYSTEM'; END;
BEGIN
SELECT branch_party_id INTO v_branch_party_id FROM ce_bank_branches_v where UPPER(BANK_BRANCH_NAME)=UPPER(I.BRANCH_NAME) AND UPPER(bank_name)=UPPER(I.BANK_NAME) AND UPPER(BANK_HOME_COUNTRY)=UPPER(I.COUNTRY) AND ROWNUM=1;
EXCEPTION
WHEN OTHERS THEN
v_error_flag := 'Y'; v_error_message := v_error_message || 'BRANCH IS NOT EXIST IN THE SYSTEM'; END;
BEGIN
SELECT ext_bank_account_id INTO v_ext_bank_account_id FROM iby_ext_bank_accounts WHERE bank_id = v_bank_party_id AND branch_id = v_branch_party_id AND bank_account_num = i.bank_account_number AND UPPER(bank_account_name) = UPPER(i.bank_account_name);
EXCEPTION
WHEN no_data_found THEN
v_ext_bank_account_id:=null;
when others then
v_error_flag := 'Y'; v_error_message := v_error_message || 'ERROR IN THE SYSTEM BANK ACCOUNT NUMBER FETCH';
END;
BEGIN
SELECT vendor_id INTO v_vendor_id FROM po_vendors WHERE upper(vendor_name) = upper(i.vendor_name) and segment1=I.ATTRIBUTE1;
EXCEPTION
WHEN OTHERS THEN
v_error_flag := 'Y'; v_error_message := v_error_message || 'VENDOR NOT EXIST IN THE SYSTEM'; END;
BEGIN
SELECT party_id INTO v_party_id FROM po_vendors WHERE upper(vendor_name) =upper(i.vendor_name) and segment1=I.ATTRIBUTE1;
EXCEPTION
WHEN OTHERS THEN
v_error_flag := 'Y'; v_error_message := v_error_message || 'VENDOR NOT EXIST IN THE SYSTEM';
END;
IF i.vendor_site_code IS NOT NULL THEN
BEGIN
SELECT vendor_site_id,party_site_id INTO v_vendor_site_id,v_party_site_id FROM ap_supplier_sites_all WHERE UPPER(vendor_site_code) = UPPER(i.vendor_site_code) AND ORG_ID=p_operating_unit AND vendor_id = v_vendor_id;
EXCEPTION
WHEN OTHERS THEN
v_error_flag := 'Y'; v_error_message :=v_error_message || 'VENDOR SITE NOT EXIST IN THE SYSTEM';
END;
END IF; IF v_error_flag = 'N' AND v_ext_bank_account_id IS NULL THEN
x_bank_acct_rec.country_code := I.COUNTRY ; x_bank_acct_rec.branch_id := v_branch_party_id; x_bank_acct_rec.bank_id := v_bank_party_id; x_bank_acct_rec.acct_owner_party_id := v_party_id;
--supplier party id
x_bank_acct_rec.iban := i.iban; x_bank_acct_rec.currency := i.currency; x_bank_acct_rec.bank_account_name := i.bank_account_name; x_bank_acct_rec.bank_account_num := i.bank_account_number; x_msg_count := 0; x_msg_data := NULL; x_return_status := NULL;
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 => x_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_rec
);
IF x_return_status = fnd_api.g_ret_sts_success
THEN
DBMS_OUTPUT.put_line ('External bank account created.');
DBMS_OUTPUT.put_line ('x_acct_id' || x_acct_id);
DBMS_OUTPUT.put_line ('x_return_status' || x_return_status);
DBMS_OUTPUT.put_line ('x_msg_count.' || x_msg_count);
DBMS_OUTPUT.put_line ('x_msg_data.' || x_msg_data);
ELSE
DBMS_OUTPUT.put_line ( 'Creation of BANK ACCCOUNT failed:'
|| x_msg_data );
ROLLBACK;
v_error_flag := 'Y';
v_error_message :=
v_error_message || 'Creation of BANK ACCCOUNT failed:'
|| x_msg_data;
END IF;
l_ext_payee_rec.payee_party_site_id := v_party_site_id;
l_ext_payee_rec.payee_party_id := v_party_id;
l_ext_payee_rec.payment_function := 'PAYABLES_DISB';
IF i.vendor_site_code IS NOT NULL THEN
l_ext_payee_rec.payer_org_id := p_operating_unit;
l_ext_payee_rec.payer_org_type := 'OPERATING_UNIT';
ELSE
l_ext_payee_rec.payer_org_id := NULL;
l_ext_payee_rec.payer_org_type := NULL;
END IF;
l_ext_payee_rec.exclusive_pay_flag := 'N';
l_ext_payee_rec.default_pmt_method :=
NVL ('CHECK', i.payment_method);
l_ext_payee_rec.supplier_site_id := v_vendor_site_id;
x_msg_count := 0;
x_msg_data := NULL;
x_return_status := NULL;
p_ext_payee_tab (0) := l_ext_payee_rec;
iby_disbursement_setup_pub.create_external_payee
(p_api_version => 1.0,
p_init_msg_list => fnd_api.g_true,
p_ext_payee_tab => p_ext_payee_tab,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data,
x_ext_payee_id_tab => x_ext_payee_id_tab,
x_ext_payee_status_tab => x_ext_payee_status_tab
);
IF x_return_status = fnd_api.g_ret_sts_success
THEN
DBMS_OUTPUT.put_line ('External Payee created.');
DBMS_OUTPUT.put_line ('x_return_status: ' || x_return_status
);
DBMS_OUTPUT.put_line ('x_msg_count. ' || x_msg_count);
DBMS_OUTPUT.put_line ('x_msg_data. ' || x_msg_data);
ELSE
DBMS_OUTPUT.put_line ( 'Creation of payee failed:'
|| x_msg_data );
v_error_message :=
v_error_message || 'Creation of payee failed:'
|| x_msg_data;
ROLLBACK;
v_error_flag := 'Y';
END IF;
p_payee.supplier_site_id := v_vendor_site_id;
p_payee.party_id :=v_party_id;
p_payee.party_site_id := v_party_site_id;
p_payee.payment_function := 'PAYABLES_DISB';
IF i.vendor_site_code IS NOT NULL THEN
p_payee.org_id := p_operating_unit;
p_payee.org_type := 'OPERATING_UNIT';
ELSE
p_payee.org_id := NULL;
p_payee.org_type := NULL;
END IF;
l_ext_payee_id_rec_type := x_ext_payee_id_tab (0);
p_instrument.instrument_id := x_acct_id;
p_instrument.instrument_type := 'BANKACCOUNT';
p_assignment_attribs.priority := 1;
p_assignment_attribs.instrument := p_instrument;
x_msg_count := 0;
x_msg_data := NULL;
x_return_status := NULL;
x_response_rec := 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 => 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_rec
);
IF x_return_status = fnd_api.g_ret_sts_success
THEN
DBMS_OUTPUT.put_line ('Payee_Instr_Assignment.');
DBMS_OUTPUT.put_line ('x_assign_id' || x_assign_id);
DBMS_OUTPUT.put_line ('x_return_status' || x_return_status);
DBMS_OUTPUT.put_line ('x_msg_count.' || x_msg_count);
DBMS_OUTPUT.put_line ('x_msg_data.' || x_msg_data);
ELSE
DBMS_OUTPUT.put_line ( 'Creation of Payee_Instr_Assignment failed:'
|| x_msg_data );
v_error_message:=
v_error_message||'Creation of Payee_Instr_Assignment failed:'
|| x_msg_data;
ROLLBACK;
v_error_flag := 'Y';
END IF;
END IF;
IF v_error_flag = 'N' AND v_ext_bank_account_id IS NOT NULL
THEN
DBMS_OUTPUT.put_line ('CHECKING THAT VENDOR IS THE OWNER OF THIS ACCOUNT'||x_return_status);
BEGIN x_msg_count := 0;
x_msg_data := NULL;
x_return_status := NULL;
x_response_rec := NULL;
IBY_EXT_BANKACCT_PUB.check_bank_acct_owner
(p_api_version => 1.0,
p_init_msg_list => FND_API.G_FALSE,
p_bank_acct_id => v_ext_bank_account_id,
p_acct_owner_party_id =>v_party_id,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data,
x_response => x_response_rec
); EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.put_line ('ERROR IN CHECKING VENDOR IS THE OWNER OF THIS ACCOUNT'||x_return_status);
END; IF x_return_status = fnd_api.g_ret_sts_success
THEN
DBMS_OUTPUT.put_line ('already owner');
p_payee.supplier_site_id := v_vendor_site_id;
p_payee.party_id :=v_party_id;
p_payee.party_site_id := v_party_site_id;
p_payee.payment_function := 'PAYABLES_DISB';
IF i.vendor_site_code IS NOT NULL THEN
p_payee.org_id := p_operating_unit;
p_payee.org_type := 'OPERATING_UNIT';
ELSE
p_payee.org_id := NULL;
p_payee.org_type := NULL;
END IF;
p_assignment_attribs.Instrument.instrument_id := v_ext_bank_account_id;
p_assignment_attribs.Instrument.instrument_type := 'BANKACCOUNT';
p_assignment_attribs.priority := 1;
-- p_assignment_attribs.instrument := p_instrument;
x_msg_count := 0;
x_msg_data := NULL;
x_return_status := NULL;
x_response_rec := 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 => 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_rec
);
IF x_return_status = fnd_api.g_ret_sts_success
THEN
DBMS_OUTPUT.put_line ('Payee_Instr_Assignment.');
DBMS_OUTPUT.put_line ('x_assign_id' || x_assign_id);
DBMS_OUTPUT.put_line ('x_return_status' || x_return_status);
else
DBMS_OUTPUT.put_line ( 'Creation of Payee_Instr_Assignment failed:'
|| x_msg_data );
v_error_message:=
v_error_message||'Creation of Payee_Instr_Assignment failed:'
|| x_msg_data;
ROLLBACK;
v_error_flag := 'Y';
end if;
ELSE
DBMS_OUTPUT.put_line ( 'Creation of joint bank acct owner'
);
x_msg_count := 0;
x_msg_data := NULL;
x_return_status := NULL;
x_response_rec := NULL;
IBY_EXT_BANKACCT_PUB.add_joint_account_owner
( p_api_version => 1.0,
p_init_msg_list => fnd_api.g_true,
p_bank_account_id => v_ext_bank_account_id,
p_acct_owner_party_id => v_party_id,
x_joint_acct_owner_id =>x_joint_owner_id,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data =>x_msg_data,
x_response=> x_response_rec);
IF x_return_status = fnd_api.g_ret_sts_success
THEN
DBMS_OUTPUT.put_line ('joint acct created');
p_payee.supplier_site_id := v_vendor_site_id;
p_payee.party_id :=v_party_id;
p_payee.party_site_id := v_party_site_id;
p_payee.payment_function := 'PAYABLES_DISB';
IF i.vendor_site_code IS NOT NULL THEN
p_payee.org_id := p_operating_unit;
p_payee.org_type := 'OPERATING_UNIT';
ELSE
p_payee.org_id := NULL;
p_payee.org_type := NULL;
END IF;
p_assignment_attribs.Instrument.instrument_id := v_ext_bank_account_id;
p_assignment_attribs.Instrument.instrument_type := 'BANKACCOUNT';
p_assignment_attribs.priority := 1;
x_msg_count := 0;
x_msg_data := NULL;
x_return_status := NULL;
x_response_rec := 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 => 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_rec
);
IF x_return_status = fnd_api.g_ret_sts_success
THEN
DBMS_OUTPUT.put_line ('Payee_Instr_Assignment.');
DBMS_OUTPUT.put_line ('x_assign_id' || x_assign_id);
DBMS_OUTPUT.put_line ('x_return_status' || x_return_status);
else
DBMS_OUTPUT.put_line ( 'Creation of Payee_Instr_Assignment failed:'
|| x_msg_data );
v_error_message:=
v_error_message||'Creation of Payee_Instr_Assignment failed:'
|| x_msg_data;
ROLLBACK;
v_error_flag := 'Y';
end if;
else
DBMS_OUTPUT.put_line ( 'Creation of joint account owner failed'
|| x_msg_data );
v_error_message:=
v_error_message||'Creation of joint account owner failed'
|| x_msg_data;
ROLLBACK;
v_error_flag := 'Y';
end if;
end if;
end if;
IF v_error_flag = 'Y'
THEN
ROLLBACK;
UPDATE XXAP_SUPP_BANK_ACCOUNT_STG
SET processed_flag = 'N',
error_description = v_error_message
WHERE ROWID = i.ROWID;
COMMIT;
ELSE
UPDATE XXAP_SUPP_BANK_ACCOUNT_STG
SET processed_flag = 'Y'
WHERE ROWID = i.ROWID;
COMMIT;
END IF;
END LOOP;
END;
|