IS
–=================
— Global Variables
–=================
gn_request_id NUMBER := apps.fnd_global.conc_request_id;
gn_prog_appl_id NUMBER := apps.fnd_global.prog_appl_id;
gn_responsibility_id NUMBER := apps.fnd_global.resp_id;
gn_respappl_id NUMBER := apps.fnd_global.resp_appl_id;
gn_program_id NUMBER := apps.fnd_global.conc_program_id;
gn_user_id NUMBER := apps.fnd_global.user_id;
gn_login_id NUMBER := apps.fnd_global.login_id;
gn_business_group_id NUMBER := apps.fnd_global.per_business_group_id;
gd_sysdate DATE := SYSDATE;
p_api_version NUMBER := 1.0;
PROCEDURE main(x_errbuf OUT VARCHAR2, x_retcode OUT VARCHAR2);
PROCEDURE trim_data;
PROCEDURE prevalidation;
PROCEDURE load_bsa;
PROCEDURE record_status;
FUNCTION validate_line_dates(l_item VARCHAR2,l_source_contract VARCHAR2) RETURN VARCHAR2;
END XX_BSA_LOAD_PKG;
/
CREATE OR REPLACE PACKAGE BODY XX_BSA_LOAD_PKG
IS
gc_status VARCHAR2 (1);
g_org_id NUMBER := fnd_profile.VALUE (‘ORG_ID’);
gn_bulk_limit NUMBER;
gc_ret_status VARCHAR2 (1);
gn_bulk_err NUMBER;
gn_conc_req_id CONSTANT VARCHAR2 (10) := fnd_global.conc_request_id;
— +====================================================================================+
— |
— |
— +====================================================================================+
— | |
— | $Id: XX_BSA_LOAD_PKG 12/06/2018 |
— | |
— | |
— |Description : Program to create blanket sales agreement |
— | |
— | |
— | |
— |Change History: |
— |————— |
— |Version Date Author Remarks |
— |——- ———- ———— ——————- |
— | 1.0 12/06/2018 Mohan G Program to create Blanket Sales Agreement
— +====================================================================================+
—
PROCEDURE main (x_errbuf OUT VARCHAR2, x_retcode OUT VARCHAR2)
IS
BEGIN
fnd_file.put_line
(apps.fnd_file.LOG,
‘###########################################################################################’
);
fnd_file.put_line (apps.fnd_file.LOG, ‘ ‘);
fnd_file.put_line (apps.fnd_file.LOG,
‘ —– Main Program Started —–‘
);
fnd_file.put_line (apps.fnd_file.LOG, ‘ ‘);
XX_BSA_LOAD_PKG.trim_data;
XX_BSA_LOAD_PKG.prevalidation;
XX_BSA_LOAD_PKG.load_bsa;
fnd_file.put_line (apps.fnd_file.LOG, ‘ ‘);
fnd_file.put_line (apps.fnd_file.LOG,
‘ —– Main Program Completed —–‘
);
fnd_file.put_line (apps.fnd_file.LOG, ‘ ‘);
INSERT INTO xx_om_bsa_stg_a select * from xx_om_bsa_stg
WHERE NVL(PROCESS_FLAG,’~’) <> ‘N’;
DELETE FROM xx_om_bsa_stg WHERE NVL(PROCESS_FLAG,’~’) <> ‘N’;
COMMIT;
XX_BSA_LOAD_PKG.record_status;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, ‘Exception Main Program ‘);
fnd_file.put_line (fnd_file.LOG,’Error info for main program: ‘ || SQLERRM);
END main;
——————————————————————-
— Procedure to Validate and Create Blanket Sales agreement Records
——————————————————————-
PROCEDURE load_bsa
AS
p_init_msg_list VARCHAR2 (200) := NULL;
p_commit VARCHAR2 (200) := NULL;
p_validation_level NUMBER := 0;
l_msg VARCHAR2 (200) := NULL;
lc_count NUMBER := 0;
l_sold_to_org_id NUMBER;
l_order_type_id NUMBER := 0;
l_hdr_rec oe_blanket_pub.header_rec_type;
l_hdr_val_rec oe_blanket_pub.header_val_rec_type;
l_line_tbl oe_blanket_pub.line_tbl_type;
l_line_val_tbl oe_blanket_pub.line_val_tbl_type;
l_line_rec oe_blanket_pub.line_rec_type;
l_line_val_rec oe_blanket_pub.line_val_rec_type;
l_control_rec oe_blanket_pub.control_rec_type;
n_line_counter NUMBER := 0;
l_ship_from_org_id NUMBER := 0;
l_inv_to_org_id NUMBER := 0;
l_ship_to_orgid NUMBER := 0;
l_inv_item_id NUMBER := 0;
l_line_ship_to_orgid NUMBER := 0;
l_line_inv_to_org_id NUMBER := 0;
l_uom VARCHAR2 (200) := NULL;
l_line_ship_from_org_id NUMBER := 0;
l_invo_rule_id NUMBER := 0;
l_acct_rule_id NUMBER := 0;
— output variables
x_line_tbl oe_blanket_pub.line_tbl_type;
x_header_rec oe_blanket_pub.header_rec_type;
x_msg_count NUMBER;
x_msg_data VARCHAR2 (4000);
x_return_status VARCHAR2 (30);
CURSOR lcu_bsa_stg_hdr
IS
SELECT customer_number, customer_po, commencement_date,
expiration_date, month_processed, contract_end_date,
ship_to_location, data_centre, bill_to_location,
source_contract_no
FROM xx_om_bsa_stg
WHERE process_flag = ‘V’
GROUP BY customer_number,
customer_po,
commencement_date,
expiration_date,
month_processed,
contract_end_date,
ship_to_location,
data_centre,
bill_to_location,
source_contract_no
ORDER BY source_contract_no;
CURSOR lcu_bsa_stg_lns (
pcust_no VARCHAR2,
pcust_po VARCHAR2,
p_cdate VARCHAR2,
p_expdate VARCHAR2,
p_mproc VARCHAR2,
p_cend_date VARCHAR2,
p_shiptoloc VARCHAR2,
p_datacen VARCHAR2,
p_bill_to_loc VARCHAR2,
p_s_cont_no VARCHAR2
)
IS
SELECT item, line_number, line_activ_date, line_exp_date,
line_shipto, line_data_centre, line_bill_to_loc, pue,
product_code, start_date, termination_date, dsp_flag,
quantity, price, min_order_qty, account_rule,
invoicing_rule, record_id,source_contract_no
FROM xx_om_bsa_stg
WHERE process_flag = ‘V’
AND customer_number = pcust_no
AND NVL (customer_po, ‘~’) = NVL (pcust_po, ‘~’)
AND commencement_date = p_cdate
AND NVL (expiration_date, TRUNC(SYSDATE)) = NVL (p_expdate, TRUNC(SYSDATE))
AND month_processed = p_mproc
AND contract_end_date = p_cend_date
AND ship_to_location = p_shiptoloc
AND data_centre = p_datacen
AND bill_to_location = p_bill_to_loc
AND source_contract_no = p_s_cont_no
ORDER BY source_contract_no,line_number;
BEGIN
fnd_file.put_line (fnd_file.LOG,
‘Blanket Sales Order Loader Started’
);
fnd_file.put_line
(fnd_file.LOG,
‘===============================================================================’
);
fnd_file.put_line
(fnd_file.LOG,
‘———————–Apps Initialize Started————————-‘
);
fnd_global.apps_initialize (gn_user_id,
gn_responsibility_id,
gn_respappl_id
);
mo_global.init (‘ONT’);
fnd_file.put_line
(fnd_file.LOG,
‘———————–Apps Initialize Completed————————-‘
);
fnd_file.put_line
(fnd_file.LOG,
‘===============================================================================’
);
—————————————
— Header Loop Started
—————————————
FOR lc_rec IN lcu_bsa_stg_hdr
LOOP
n_line_counter := 0;
l_ship_from_org_id := 0;
l_order_type_id := 0;
l_inv_to_org_id := 0;
l_ship_to_orgid := 0;
l_sold_to_org_id := 0;
fnd_file.put_line
(fnd_file.LOG,
‘———————–Header Part Started for the source contract number————————-‘
|| lc_rec.source_contract_no
);
BEGIN
SELECT organization_id
INTO l_ship_from_org_id
FROM org_organization_definitions
WHERE organization_code = lc_rec.data_centre;
EXCEPTION
WHEN OTHERS
THEN
l_ship_from_org_id := -1;
fnd_file.put_line (fnd_file.LOG,
‘Invalid data centre or ware house.’
|| lc_rec.data_centre
);
END;
BEGIN
SELECT transaction_type_id
INTO l_order_type_id
FROM oe_transaction_types_tl
WHERE 1 = 1 AND UPPER (NAME) = ‘AGREEMENT’
AND LANGUAGE = ‘US’;
EXCEPTION
WHEN OTHERS
THEN
l_order_type_id := -1;
fnd_file.put_line (fnd_file.LOG, ‘Invalid Order type.’);
END;
BEGIN
SELECT csu.site_use_id
INTO l_inv_to_org_id
FROM apps.hz_cust_accounts_all cus,
apps.hz_cust_acct_sites_all cussite,
apps.hz_cust_site_uses_all csu
WHERE cus.cust_account_id = cussite.cust_account_id
AND csu.cust_acct_site_id = cussite.cust_acct_site_id
AND account_number = lc_rec.customer_number
AND csu.LOCATION = lc_rec.bill_to_location
AND csu.site_use_code = ‘BILL_TO’;
EXCEPTION
WHEN OTHERS
THEN
l_inv_to_org_id := -1;
fnd_file.put_line (fnd_file.LOG,
‘Invalid invoice to org id.’
|| lc_rec.customer_number
);
END;
BEGIN
SELECT csu.site_use_id
INTO l_ship_to_orgid
FROM apps.hz_cust_accounts_all cus,
apps.hz_cust_acct_sites_all cussite,
apps.hz_cust_site_uses_all csu
WHERE cus.cust_account_id = cussite.cust_account_id
AND csu.cust_acct_site_id = cussite.cust_acct_site_id
AND account_number = lc_rec.customer_number
AND csu.LOCATION = lc_rec.ship_to_location
AND csu.site_use_code = ‘SHIP_TO’;
EXCEPTION
WHEN OTHERS
THEN
l_ship_to_orgid := -1;
fnd_file.put_line (fnd_file.LOG,
‘Invalid ship to org id.’
|| lc_rec.customer_number
);
END;
BEGIN
SELECT cust_account_id
INTO l_sold_to_org_id
FROM hz_cust_accounts
WHERE account_number = lc_rec.customer_number AND status = ‘A’;
EXCEPTION
WHEN OTHERS
THEN
l_sold_to_org_id := -1;
fnd_file.put_line (fnd_file.LOG,
‘Invalid sold to org id.’
|| lc_rec.customer_number
);
END;
fnd_file.put_line (fnd_file.LOG,
‘ l_ship_from_org_id–>’
|| l_ship_from_org_id
|| ‘ l_order_type_id–>’
|| l_order_type_id
|| ‘ l_inv_to_org_id–>’
|| l_inv_to_org_id
|| ‘ l_ship_to_orgid–>’
|| l_ship_to_orgid
|| ‘ l_sold_to_org_id–>’
|| l_sold_to_org_id
);
l_hdr_rec := oe_blanket_pub.g_miss_header_rec;
l_hdr_val_rec := oe_blanket_pub.g_miss_header_val_rec;
l_hdr_rec.operation := oe_globals.g_opr_create;
l_hdr_rec.sold_to_org_id := l_sold_to_org_id;
l_hdr_rec.order_type_id := l_order_type_id;
l_hdr_rec.ship_from_org_id := l_ship_from_org_id;
l_hdr_rec.cust_po_number := lc_rec.customer_po;
l_hdr_rec.invoice_to_org_id := l_inv_to_org_id;
l_hdr_rec.ship_to_org_id := l_ship_to_orgid;
l_hdr_rec.CONTEXT := ‘XXXX’;
l_hdr_rec.attribute1 := to_char(to_date(lc_rec.month_processed,’MON-YY’),’MON-YY’);
l_hdr_rec.attribute2 :=
TO_CHAR (lc_rec.contract_end_date, ‘YYYY/MM/DD HH24:MI:SS’);
l_hdr_rec.start_date_active := lc_rec.commencement_date;
l_hdr_rec.end_date_active := lc_rec.expiration_date;
l_hdr_rec.attribute3 :=lc_rec.source_contract_no;
—————————————
— Line Loop Started
—————————————
l_line_rec := oe_blanket_pub.g_miss_blanket_line_rec;
l_line_val_rec := oe_blanket_pub.g_miss_blanket_line_val_rec;
l_line_tbl.delete;
/* fnd_file.put_line (fnd_file.LOG,
‘ l_line_rec Count is –> ‘ || l_line_rec.COUNT
);
fnd_file.put_line (fnd_file.LOG,
‘ l_line_val_rec Count is –> ‘ || l_line_val_rec.COUNT
);*/
fnd_file.put_line (fnd_file.LOG,
‘ l_line_tbl Count is –> ‘ || l_line_tbl.COUNT
);
FOR lc_rec_lines IN lcu_bsa_stg_lns (lc_rec.customer_number,
lc_rec.customer_po,
lc_rec.commencement_date,
lc_rec.expiration_date,
lc_rec.month_processed,
lc_rec.contract_end_date,
lc_rec.ship_to_location,
lc_rec.data_centre,
lc_rec.bill_to_location,
lc_rec.source_contract_no
)
LOOP
fnd_file.put_line
(fnd_file.LOG,
‘———————–Line Started————————-‘
);
———————————
— Getting the inventory item idlc
———————————
BEGIN
SELECT msib.inventory_item_id
INTO l_inv_item_id
FROM mtl_system_items_b msib,
org_organization_definitions ood
WHERE msib.organization_id = ood.organization_id
AND segment1 = lc_rec_lines.item
AND ood.operating_unit = 82
AND ood.ORGANIZATION_CODE = lc_rec_lines.line_data_centre
AND msib.enabled_flag = ‘Y’;
EXCEPTION
WHEN OTHERS
THEN
l_inv_item_id := -1;
fnd_file.put_line (fnd_file.LOG, ‘Invalid inventory Item ‘);
END;
fnd_file.put_line (fnd_file.LOG,
‘ inventory Item –> ‘ || l_inv_item_id
);
———————————
— Getting the Item UOM
———————————
BEGIN
SELECT msib.primary_uom_code
INTO l_uom
FROM mtl_system_items_b msib,
org_organization_definitions ood
WHERE msib.organization_id = ood.organization_id
AND segment1 = lc_rec_lines.item
AND ood.operating_unit = 82
AND ood.ORGANIZATION_CODE = lc_rec_lines.line_data_centre
AND msib.enabled_flag = ‘Y’;
EXCEPTION
WHEN OTHERS
THEN
l_uom := NULL;
fnd_file.put_line (fnd_file.LOG,
‘Invalid inventory Item UOM ‘
);
END;
—————————————
— Line level data centre
—————————————
BEGIN
SELECT organization_id
INTO l_line_ship_from_org_id
FROM org_organization_definitions
WHERE organization_code = lc_rec_lines.line_data_centre;
EXCEPTION
WHEN OTHERS
THEN
l_line_ship_from_org_id := -1;
fnd_file.put_line (fnd_file.LOG,
‘Invalid data centre or ware house.’
);
END;
———————————————–
— Line level ship to
———————————————
BEGIN
SELECT csu.site_use_id
INTO l_line_ship_to_orgid
FROM apps.hz_cust_accounts_all cus,
apps.hz_cust_acct_sites_all cussite,
apps.hz_cust_site_uses_all csu
WHERE cus.cust_account_id = cussite.cust_account_id
AND csu.cust_acct_site_id = cussite.cust_acct_site_id
AND account_number = lc_rec.customer_number
AND csu.LOCATION = lc_rec_lines.line_shipto
AND csu.site_use_code = ‘SHIP_TO’;
EXCEPTION
WHEN OTHERS
THEN
l_line_ship_to_orgid := -1;
fnd_file.put_line (fnd_file.LOG, ‘Invalid ship to org id.’);
END;
—————————————————————-
— Line level Bill To
—————————————————————-
BEGIN
SELECT csu.site_use_id
INTO l_line_inv_to_org_id
FROM apps.hz_cust_accounts_all cus,
apps.hz_cust_acct_sites_all cussite,
apps.hz_cust_site_uses_all csu
WHERE cus.cust_account_id = cussite.cust_account_id
AND csu.cust_acct_site_id = cussite.cust_acct_site_id
AND account_number = lc_rec.customer_number
AND csu.LOCATION = lc_rec_lines.line_bill_to_loc
AND csu.site_use_code = ‘BILL_TO’;
EXCEPTION
WHEN OTHERS
THEN
l_line_inv_to_org_id := -1;
fnd_file.put_line (fnd_file.LOG,
‘Invalid invoice to org id.’
);
END;
fnd_file.put_line (fnd_file.LOG,
‘ l_inv_item_id –> ‘
|| l_inv_item_id
|| ‘ l_line_ship_from_org_id –> ‘
|| l_line_ship_from_org_id
|| ‘ l_line_ship_to_orgid –> ‘
|| l_line_ship_to_orgid
|| ‘ l_line_inv_to_org_id –> ‘
|| l_line_inv_to_org_id
);
n_line_counter := n_line_counter + 1;
l_line_tbl (n_line_counter) :=
oe_blanket_pub.g_miss_blanket_line_rec;
l_line_tbl (n_line_counter).operation := oe_globals.g_opr_create;
l_line_tbl (n_line_counter).sold_to_org_id := l_sold_to_org_id;
l_line_tbl (n_line_counter).inventory_item_id := l_inv_item_id;
l_line_tbl (n_line_counter).ship_from_org_id :=
l_line_ship_from_org_id;
l_line_tbl (n_line_counter).invoice_to_org_id :=
l_line_inv_to_org_id;
l_line_tbl (n_line_counter).ship_to_org_id := l_line_ship_to_orgid;
l_line_tbl (n_line_counter).item_identifier_type := ‘INT’;
l_line_tbl (n_line_counter).order_quantity_uom := l_uom;
l_line_tbl (n_line_counter).CONTEXT := ‘XXXX’;
l_line_tbl (n_line_counter).start_date_active :=
lc_rec_lines.line_activ_date;
l_line_tbl (n_line_counter).end_date_active :=
lc_rec_lines.line_exp_date;
— l_line_tbl (n_line_counter).accounting_rule_id := l_acct_rule_id;
— l_line_tbl (n_line_counter).invoicing_rule_id := l_invo_rule_id;
l_line_tbl (n_line_counter).attribute1 := lc_rec_lines.pue;
l_line_tbl (n_line_counter).attribute2 :=
TO_CHAR (lc_rec_lines.start_date, ‘YYYY/MM/DD HH24:MI:SS’);
l_line_tbl (n_line_counter).attribute3 :=
TO_CHAR (lc_rec_lines.termination_date,
‘YYYY/MM/DD HH24:MI:SS’);
l_line_tbl (n_line_counter).attribute4 := lc_rec_lines.dsp_flag;
l_line_tbl (n_line_counter).attribute5 := lc_rec_lines.quantity;
l_line_tbl (n_line_counter).attribute6 := TO_NUMBER(lc_rec_lines.price,’99999999999.999999′);
l_line_tbl (n_line_counter).attribute7 :=
lc_rec_lines.min_order_qty;
l_line_tbl (n_line_counter).attribute8 :=
lc_rec_lines.product_code;
l_line_tbl (n_line_counter).attribute9 :=
lc_rec_lines.account_rule;
l_line_val_tbl (n_line_counter) := l_line_val_rec;
END LOOP;
fnd_file.put_line (fnd_file.LOG,
‘l_line_tbl Count is –> ‘ || l_line_tbl.COUNT
);
–DBMS_OUTPUT.put_line (‘Before calling Process Blanket API’);
oe_msg_pub.initialize;
fnd_file.put_line (fnd_file.LOG,
‘Line Counter is –> ‘ || n_line_counter
);
IF n_line_counter > 0
THEN
fnd_file.put_line
(fnd_file.LOG,
‘———————–API Calling————————-‘
);
BEGIN
oe_blanket_pub.process_blanket
(p_org_id => 82,
p_operating_unit => NULL,
p_api_version_number => p_api_version,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data,
p_header_rec => l_hdr_rec,
p_header_val_rec => l_hdr_val_rec,
p_line_tbl => l_line_tbl,
p_line_val_tbl => l_line_val_tbl,
p_control_rec => l_control_rec,
x_header_rec => x_header_rec,
x_line_tbl => x_line_tbl
);
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, ‘API Error :’ || SQLERRM);
END;
END IF;
fnd_file.put_line (fnd_file.LOG, ‘API Completed -> ‘);
IF NVL (x_return_status, ‘~’) <> ‘S’
THEN
fnd_file.put_line (fnd_file.LOG,
‘Return status –> ‘ || x_return_status
);
FOR lc_err IN 1 .. oe_msg_pub.count_msg
LOOP
l_msg :=
oe_msg_pub.get (p_msg_index => lc_err,
p_encoded => fnd_api.g_false
);
fnd_file.put_line (fnd_file.LOG,
‘Error Message in Loop–> ‘ || l_msg
);
END LOOP;
BEGIN
UPDATE xx_om_bsa_stg
SET error_message = l_msg,
process_flag = x_return_status
WHERE process_flag = ‘V’
AND source_contract_no = lc_rec.source_contract_no;
END;
END IF;
IF NVL (x_return_status, ‘~’) = ‘S’
THEN
BEGIN
UPDATE xx_om_bsa_stg
SET order_number = x_header_rec.order_number,
process_flag = x_return_status
WHERE process_flag = ‘V’
AND source_contract_no = lc_rec.source_contract_no;
END;
fnd_file.put_line (fnd_file.LOG,
‘Header ID :’ || x_header_rec.header_id
);
fnd_file.put_line (fnd_file.LOG,
‘Order number :’ || x_header_rec.order_number
);
END IF;
COMMIT;
fnd_file.put_line (fnd_file.LOG,
‘Exit In Header Loop for ->’
|| lc_rec.source_contract_no
);
END LOOP;
END load_bsa;
——————————————-
— Procedure to do the total Validation
——————————————-
PROCEDURE prevalidation
IS
lc_verify_flag VARCHAR2 (1) := NULL;
l_error_message VARCHAR2 (4000) := NULL;
l_cnt NUMBER := 0;
ln_cust_acct_id NUMBER := 0;
ln_party_id NUMBER := 0;
lc_item_cnt VARCHAR2 (20) := NULL;
l_ship_from_orgid NUMBER := 0;
l_inv_to_orgid NUMBER := 0;
l_ship_to_orgid NUMBER := 0;
l_dspflag VARCHAR2(20) := NULL;
l_inv_rule_id NUMBER := 0;
l_acc_rule_id NUMBER := 0;
l_mth_processed VARCHAR2(20) := NULL;
l_dc VARCHAR2(100) := NULL;
l_sl VARCHAR2(200) := NULL;
l_bl VARCHAR2(200) := NULL;
l_hdr_cnt NUMBER := 0;
CURSOR lcu_bsa_stg
IS
SELECT customer_number, customer_po, commencement_date,
expiration_date, month_processed, contract_end_date,
ship_to_location, data_centre, bill_to_location, item,
line_number, line_activ_date, line_exp_date, line_shipto,
line_data_centre, line_bill_to_loc, pue, product_code,
start_date, termination_date, dsp_flag, quantity, price,
min_order_qty, account_rule, invoicing_rule, record_id,
source_contract_no
FROM xx_om_bsa_stg
WHERE process_flag = ‘N’
ORDER BY source_contract_no;– record_id;
BEGIN
fnd_file.put_line
(fnd_file.LOG,
‘###################################################################################’
);
fnd_file.put_line
(fnd_file.LOG,
‘————— Entering into Prevalidation ———–‘
);
—————————
–Validating the Customer details
—————————
FOR lc_rec IN lcu_bsa_stg
LOOP
lc_verify_flag := ‘Y’;
l_error_message := NULL;
BEGIN
SELECT cust_account_id, party_id
INTO ln_cust_acct_id, ln_party_id
FROM hz_cust_accounts
WHERE account_number = lc_rec.customer_number AND status = ‘A’;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
ln_cust_acct_id := 0;
l_error_message :=
l_error_message
|| ‘ ~ Customer is not exist ‘
|| ‘~’
|| SQLERRM;
lc_verify_flag := ‘N’;
WHEN OTHERS
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Customer error’ || ‘~’ || SQLERRM;
END;
—————————————-
— Data centre count validation
—————————————
BEGIN
l_dc := NULL;
select distinct data_centre into l_dc
FROM xx_om_bsa_stg
WHERE process_flag = ‘N’
AND customer_number = lc_rec.customer_number
AND source_contract_no = lc_rec.source_contract_no;
EXCEPTION WHEN TOO_MANY_ROWS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Multiple header level data centre for same customer ‘ || ‘~’ || lc_rec.customer_number;
WHEN OTHERS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ data centre validation error ‘ || ‘~’ || lc_rec.customer_number|| ‘ ~ ‘||SQLERRM;
END;
—————————————-
— ship to location count validation
—————————————
BEGIN
l_sl := NULL;
select distinct ship_to_location into l_sl
FROM xx_om_bsa_stg
WHERE process_flag = ‘N’
AND customer_number = lc_rec.customer_number
AND source_contract_no = lc_rec.source_contract_no;
EXCEPTION WHEN TOO_MANY_ROWS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Multiple header level ship to location for same customer ‘ || ‘~’ || lc_rec.customer_number;
WHEN OTHERS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ ship to location validation error ‘ || ‘~’ || lc_rec.customer_number|| ‘ ~ ‘||SQLERRM;
END;
—————————————-
— bill to location count validation
—————————————
BEGIN
l_bl := NULL;
select distinct bill_to_location into l_bl
FROM xx_om_bsa_stg
WHERE process_flag = ‘N’
AND customer_number = lc_rec.customer_number
AND source_contract_no = lc_rec.source_contract_no;
EXCEPTION WHEN TOO_MANY_ROWS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Multiple header level bill to location for same customer ‘ || ‘~’ || lc_rec.customer_number;
WHEN OTHERS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ bill to location validation error ‘ || ‘~’ || lc_rec.customer_number|| ‘ ~ ‘||SQLERRM;
END;
—————————————-
— Header data count validation
—————————————
BEGIN
l_hdr_cnt := 0;
SELECT COUNT(*) INTO l_hdr_cnt
FROM (
SELECT DISTINCT customer_number, customer_po, commencement_date,
expiration_date, month_processed, contract_end_date,
ship_to_location, data_centre, bill_to_location,
source_contract_no
FROM xx_om_bsa_stg
WHERE process_flag = ‘N’
AND customer_number = lc_rec.customer_number
AND source_contract_no = lc_rec.source_contract_no);
IF l_hdr_cnt > 1 THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Multiple header level data for same customer ‘ || ‘~’ || lc_rec.customer_number;
END IF;
EXCEPTION WHEN OTHERS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ header level data validation error ‘ || ‘~’ || lc_rec.customer_number|| ‘ ~ ‘||SQLERRM;
END;
—————————–
–Validating the Activation Date
—————————–
IF lc_rec.commencement_date IS NULL
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ Activation date is null – ‘
|| ‘-‘
|| lc_rec.customer_number;
fnd_file.put_line (fnd_file.LOG,
‘ Activation date is null – ‘
|| ‘-‘
|| lc_rec.customer_number
);
END IF;
———————————
–Validating the Month Processed
———————————
IF lc_rec.month_processed IS NULL
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Month Processed value is null – ‘
|| ‘-‘
|| lc_rec.customer_number;
fnd_file.put_line (fnd_file.LOG,
‘ ~ Month Processed value is null – ‘
|| ‘-‘
|| lc_rec.customer_number
);
END IF;
———————————
–Validating the Month Processed
———————————
BEGIN
SELECT to_char(to_date(lc_rec.MONTH_PROCESSED,’MON-YY’),’MON-YY’)
INTO l_mth_processed
FROM DUAL;
EXCEPTION WHEN OTHERS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Month Processed value is Invalid – ‘
|| ‘-‘
|| lc_rec.customer_number
|| ‘-‘
||lc_rec.MONTH_PROCESSED;
fnd_file.put_line (fnd_file.LOG,
‘ ~ Month Processed value is Invalid – ‘
|| ‘-‘
|| lc_rec.customer_number
|| ‘-‘
||lc_rec.MONTH_PROCESSED
);
END;
———————————–
–Validating the Contract End Date
———————————–
IF lc_rec.contract_end_date IS NULL
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Contract End Date is null – ‘
|| ‘-‘
|| lc_rec.customer_number;
fnd_file.put_line (fnd_file.LOG,
‘ ~ Contract End Date is null – ‘
|| ‘-‘
|| lc_rec.customer_number
);
END IF;
———————————–
–Validating the Ship to
———————————–
IF lc_rec.ship_to_location IS NULL
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Ship To Location is null – ‘
|| ‘-‘
|| lc_rec.customer_number;
fnd_file.put_line (fnd_file.LOG,
‘ ~ Ship To Location is null – ‘
|| ‘-‘
|| lc_rec.customer_number
);
END IF;
———————————–
–Validating the Bill to
———————————–
IF lc_rec.bill_to_location IS NULL
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Bill To Location is null – ‘
|| ‘-‘
|| lc_rec.customer_number;
fnd_file.put_line (fnd_file.LOG,
‘ ~ Bill To Location is null – ‘
|| ‘-‘
|| lc_rec.customer_number
);
END IF;
————————————
— Inventory Item Validation
————————————
BEGIN
SELECT DISTINCT ‘1’
INTO lc_item_cnt
FROM mtl_system_items_b msib,
org_organization_definitions ood
WHERE msib.organization_id = ood.organization_id
AND segment1 = lc_rec.item
AND ood.operating_unit = 82
AND ood.ORGANIZATION_CODE = lc_rec.data_centre
AND msib.enabled_flag = ‘Y’;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Inventory item is not available ‘;
END;
—————————–
–Validating the Activation date and expiration date
—————————–
/* IF lc_rec.line_activ_date IS NOT NULL
AND lc_rec.line_exp_date IS NOT NULL
THEN
IF TO_DATE (lc_rec.line_activ_date, ‘DD-MON-YYYY’) >
TO_DATE (lc_rec.line_exp_date, ‘DD-MON-YYYY’)
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Expiration date should be greater than Activation date ‘;
END IF;
END IF;
*/
—————————–
–Validating the expiration date
—————————–
IF lc_rec.line_exp_date IS NOT NULL
THEN
IF TO_DATE (lc_rec.line_exp_date, ‘DD-MON-YYYY’) > trunc(sysdate)
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Expiration date should be greater than current date ‘;
END IF;
END IF;
—————————–
–Validating the Start Date
—————————–
IF lc_rec.start_date IS NULL
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Start Date is mandatory’;
END IF;
—————————–
–Validating the Start Date and Termination date
—————————–
IF lc_rec.start_date IS NOT NULL
AND lc_rec.termination_date IS NOT NULL
THEN
IF TO_DATE (lc_rec.start_date, ‘DD-MON-YYYY’) >
TO_DATE (lc_rec.termination_date, ‘DD-MON-YYYY’)
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Start date should be lesser than termination date’;
END IF;
END IF;
——————————————–
–Validating for PUE to accept only numeric
———————————————
IF lc_rec.pue IS NOT NULL
THEN
IF NVL (LENGTH (TRIM (TRANSLATE (lc_rec.pue, ‘ +-.0123456789’,
‘ ‘)
)
),
0
) > 0
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ PUE value should be in numeric ‘;
END IF;
END IF;
——————————————–
— Validation for ware house / data centre
——————————————–
IF lc_rec.data_centre IS NOT NULL
THEN
BEGIN
SELECT organization_id
INTO l_ship_from_orgid
FROM org_organization_definitions
WHERE organization_code = lc_rec.data_centre;
EXCEPTION
WHEN OTHERS
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ data center is invalid ‘;
fnd_file.put_line (fnd_file.LOG,
‘data centre –> ‘ || lc_rec.data_centre
);
END;
END IF;
——————————————–
— Validation for Dynamic Static Flag
——————————————–
IF lc_rec.dsp_flag IS NULL
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Dynamic Static Pro service Flag is null ‘;
fnd_file.put_line
(fnd_file.LOG,
‘Dynamic Static Pro service Flag is null –> ‘
|| lc_rec.dsp_flag
);
END IF;
——————————————–
— Validation for Dynamic Static Flag
———————————————-
IF lc_rec.dsp_flag IS NOT NULL THEN
BEGIN
select CATEGORY_CONCAT_SEGS
into l_dspflag
from MTL_ITEM_CATEGORIES_V micv, mtl_system_items_b msib,
org_organization_definitions ood
WHERE micv.inventory_item_id = msib.inventory_item_id
and msib.organization_id = micv.organization_id
and msib.organization_id = ood.organization_id
and ood.ORGANIZATION_CODE = lc_rec.data_centre
and micv.CATEGORY_SET_NAME = ‘Type Category Set’
and msib.SEGMENT1 = lc_rec.item;
EXCEPTION WHEN OTHERS THEN
l_dspflag := ‘~’;
END;
IF lc_rec.dsp_flag <> l_dspflag
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Dynamic Static Pro service Flag is Invalid ‘;
fnd_file.put_line
(fnd_file.LOG,
‘Dynamic Static Pro service Flag is Invalid –> ‘
|| lc_rec.dsp_flag||’ ~ ‘||lc_rec.item
);
END IF;
END IF;
——————————————–
— Validation for Quantity
———————————————-
/*IF lc_rec.dsp_flag = ‘D’ AND lc_rec.quantity > 0 THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ For Dynamic, Quantity should be null ‘;
fnd_file.put_line
(fnd_file.LOG,
‘For Dynamic, Quantity should be null –> ‘
|| lc_rec.dsp_flag||’ ~ ‘||lc_rec.quantity||’ ~ ‘||lc_rec.item
);
END IF;*/
——————————————————————-
— Validation for line Item level active date and expiration date
——————————————————————-
IF validate_line_dates(lc_rec.item,lc_rec.source_contract_no) = ‘INVALID’ THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Line Item level activation and expiration date is not in order ‘;
fnd_file.put_line
(fnd_file.LOG,
‘Line Item level activation and expiration date is not in order –> ‘
|| lc_rec.customer_number||’ ~ ‘||lc_rec.item
);
END IF;
————————————————
— Validation for Price and minimum order qty
————————————————
/*IF lc_rec.price is not null AND lc_rec.min_order_qty IS NOT NULL THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Value should not given for Both price and minimum order qty ‘;
fnd_file.put_line
(fnd_file.LOG,
‘Value should not given for Both price and minimum order qty –> ‘
|| lc_rec.customer_number||’ ~ ‘||lc_rec.min_order_qty||’ ~ ‘||lc_rec.price
);
END IF;*/
————————————-
— Validation for Invoicing rules
————————————-
/*
IF lc_rec.invoicing_rule IS NOT NULL THEN
BEGIN
SELECT rule_id
INTO l_inv_rule_id
FROM ra_rules
WHERE type = ‘I’
AND NAME = lc_rec.invoicing_rule;
EXCEPTION WHEN OTHERS THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Invoicing rule name is invalid ‘;
fnd_file.put_line
(fnd_file.LOG,
‘Invoicing rule name is invalid –> ‘
|| lc_rec.customer_number||’ ~ ‘||lc_rec.invoicing_rule
);
END;
END IF;
*/
————————————-
— Validation for Accounting rules
————————————-
IF lc_rec.account_rule IS NULL THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message
|| ‘ ~ Accounting rule is null ‘;
fnd_file.put_line
(fnd_file.LOG,
‘Accounting rule is null –> ‘
|| lc_rec.customer_number||’ ~ ‘||lc_rec.account_rule
);
END IF;
——————————————–
— Validation for Bill to Location
——————————————–
IF lc_rec.bill_to_location IS NOT NULL
THEN
BEGIN
SELECT csu.site_use_id
INTO l_inv_to_orgid
FROM apps.hz_cust_accounts_all cus,
apps.hz_cust_acct_sites_all cussite,
apps.hz_cust_site_uses_all csu
WHERE cus.cust_account_id = cussite.cust_account_id
AND csu.cust_acct_site_id = cussite.cust_acct_site_id
AND account_number = lc_rec.customer_number
AND csu.LOCATION = lc_rec.bill_to_location
AND csu.site_use_code = ‘BILL_TO’;
EXCEPTION
WHEN OTHERS
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Bill to location is invalid. ‘;
fnd_file.put_line (fnd_file.LOG,
‘Bill to Location –> ‘
|| lc_rec.bill_to_location
);
END;
END IF;
——————————————–
— Validation for ship to Location
——————————————–
IF lc_rec.ship_to_location IS NOT NULL
THEN
BEGIN
SELECT csu.site_use_id
INTO l_ship_to_orgid
FROM apps.hz_cust_accounts_all cus,
apps.hz_cust_acct_sites_all cussite,
apps.hz_cust_site_uses_all csu
WHERE cus.cust_account_id = cussite.cust_account_id
AND csu.cust_acct_site_id = cussite.cust_acct_site_id
AND account_number = lc_rec.customer_number
AND csu.LOCATION = lc_rec.ship_to_location
AND csu.site_use_code = ‘SHIP_TO’;
EXCEPTION
WHEN OTHERS
THEN
lc_verify_flag := ‘N’;
l_error_message :=
l_error_message || ‘ ~ Ship to location is invalid. ‘;
fnd_file.put_line (fnd_file.LOG,
‘Ship to Location –> ‘
|| lc_rec.ship_to_location
);
END;
END IF;
IF lc_verify_flag = ‘N’
THEN
UPDATE xx_om_bsa_stg
SET error_message = l_error_message,
process_flag = ‘VE’ — Validation Error
WHERE record_id = lc_rec.record_id
AND process_flag = ‘N’
AND request_id = gn_conc_req_id
AND source_contract_no = lc_rec.source_contract_no;
fnd_file.put_line (fnd_file.LOG,
‘ Validation error records –> ‘
|| ‘~’
|| lc_rec.customer_number
);
ELSE
UPDATE xx_om_bsa_stg
SET error_message = l_error_message,
process_flag = ‘V’ — Validated
WHERE record_id = lc_rec.record_id
AND process_flag = ‘N’
AND request_id = gn_conc_req_id
AND source_contract_no = lc_rec.source_contract_no;
fnd_file.put_line
(fnd_file.LOG,
‘Validation Success records customer number –> ‘
|| lc_rec.customer_number
);
END IF;
END LOOP;
fnd_file.put_line (fnd_file.LOG,
‘————— Prevalidation ended ———–‘
);
fnd_file.put_line
(fnd_file.LOG,
‘###################################################################################’
);
————————————————-
— Updating the Dependent Supplier Records
— if any 1 record has Validation error Mark all
— depedent records as Error
————————————————-
UPDATE xx_om_bsa_stg stg
SET error_message =
‘DEPENDENCY ERROR: Blanket Sales Agreement Validations Failed ‘,
process_flag = ‘VE’ — Validation Error
WHERE NVL (process_flag, ‘X’) <> ‘VE’
AND request_id = gn_conc_req_id
AND EXISTS (
SELECT ‘1’
FROM xx_om_bsa_stg stg1
WHERE 1 = 1
AND stg1.request_id = stg.request_id
AND NVL (stg1.process_flag, ‘X’) = ‘VE’
AND stg.source_contract_no = stg1.source_contract_no);
COMMIT;
END prevalidation;
PROCEDURE trim_data
IS
BEGIN
————————————–
— Update to remove unwanted spaces
————————————-
fnd_file.put_line
(fnd_file.LOG,
‘###################################################################################’
);
fnd_file.put_line (fnd_file.LOG,
‘————— Entering Trim Data———–‘
);
UPDATE xx_om_bsa_stg
SET customer_number = LTRIM (RTRIM (customer_number)),
customer_po = LTRIM (RTRIM (customer_po)),
commencement_date = LTRIM (RTRIM (commencement_date)),
expiration_date = LTRIM (RTRIM (expiration_date)),
month_processed = UPPER(LTRIM (RTRIM (month_processed))),
contract_end_date = LTRIM (RTRIM (contract_end_date)),
ship_to_location = LTRIM (RTRIM (ship_to_location)),
data_centre = LTRIM (RTRIM (data_centre)),
bill_to_location = LTRIM (RTRIM (bill_to_location)),
item = LTRIM (RTRIM (item)),
line_number = LTRIM (RTRIM (line_number)),
line_activ_date = LTRIM (RTRIM (line_activ_date)),
line_exp_date = LTRIM (RTRIM (line_exp_date)),
line_shipto = LTRIM (RTRIM (line_shipto)),
line_data_centre = LTRIM (RTRIM (line_data_centre)),
line_bill_to_loc = LTRIM (RTRIM (line_bill_to_loc)),
pue = LTRIM (RTRIM (pue)),
product_code = LTRIM (RTRIM (product_code)),
start_date = LTRIM (RTRIM (start_date)),
termination_date = LTRIM (RTRIM (termination_date)),
dsp_flag = LTRIM (RTRIM (dsp_flag)),
quantity = LTRIM (RTRIM (quantity)),
price = LTRIM (RTRIM (replace(price,’-‘,NULL))),
min_order_qty = LTRIM (RTRIM (min_order_qty)),
account_rule = LTRIM (RTRIM (account_rule)),
invoicing_rule = ltrim(rtrim(replace(INVOICING_RULE,chr(13),”))),
request_id = gn_conc_req_id,
created_by = gn_user_id,
last_updated_by = gn_user_id
WHERE NVL (process_flag, ‘N’) = ‘N’;
fnd_file.put_line (fnd_file.LOG,
‘————— Trim Data Completed ———–‘
);
fnd_file.put_line
(fnd_file.LOG,
‘###################################################################################’
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line
(fnd_file.LOG,
‘Error Updating the NEW RECORDS – TRIM DATA : ‘
|| SQLCODE
|| ‘ – ‘
|| SQLERRM
);
END trim_data;
PROCEDURE record_status
AS
l_total_cnt NUMBER;
l_bsa_success_cnt NUMBER;
l_bsa_error_cnt NUMBER;
l_order_num VARCHAR2(20);
lc_hdr_message VARCHAR2(255) := NULL;
lc_err_cnt NUMBER := 0;
CURSOR lcu_err_rec
IS
SELECT DISTINCT source_contract_no,customer_number, error_message, request_id
FROM xx_om_bsa_stg_a
WHERE request_id = gn_conc_req_id
AND PROCESS_FLAG LIKE ‘%E%’;
CURSOR lcu_succ_rec
IS
SELECT DISTINCT REQUEST_ID, RPAD(Substr(source_contract_no,1,38),40)||
RPAD(Substr(customer_number,1,38),40)||
RPAD(Substr(order_number,1,38),40)||
RPAD(Decode(NVL(PROCESS_FLAG,’X’),’S’,’Success ‘,’NA’,’NA’,’No’),8) Succ_Message
FROM xx_om_bsa_stg_a
WHERE request_id = gn_conc_req_id
AND PROCESS_FLAG in (‘S’,’IE’);
BEGIN
————————————————————-
— UPdating All the Success Records with Process Flag = ‘S’
————————————————————-
UPDATE xx_om_bsa_stg_a
SET PROCESS_FLAG = ‘S’
WHERE REQUEST_ID = GN_CONC_REQ_ID
AND PROCESS_FLAG like ‘S%’;
COMMIT;
SELECT COUNT(DISTINCT customer_number)
INTO l_total_cnt
FROM xx_om_bsa_stg_a
WHERE request_id = gn_conc_req_id;
SELECT COUNT(DISTINCT customer_number)
INTO l_bsa_success_cnt
FROM xx_om_bsa_stg_a
WHERE request_id = gn_conc_req_id
AND process_flag = ‘S’;
SELECT COUNT(DISTINCT customer_number)
INTO l_bsa_error_cnt
FROM xx_om_bsa_stg_a
WHERE request_id = gn_conc_req_id
AND process_flag LIKE ‘%E%’;
fnd_file.put_line(fnd_file.output,’Total Number of records ‘ || l_total_cnt);
fnd_file.put_line(fnd_file.output,’====================================================================’);
fnd_file.put_line(fnd_file.output,’================ Success Records ===================================’);
fnd_file.put_line(fnd_file.output,’====================================================================’);
fnd_file.put_line(fnd_file.output,’Total Number of BSA success records ‘ || l_bsa_success_cnt);
fnd_file.put_line(fnd_file.output,’====================================================================’);
fnd_file.put_line(fnd_file.output,’================ Error Records ===================================’);
fnd_file.put_line(fnd_file.output,’====================================================================’);
fnd_file.put_line(fnd_file.output,’Total Number of BSA error records ‘ || l_bsa_error_cnt);
fnd_file.put_line(fnd_file.output,’====================================================================’);
fnd_file.put_line(fnd_file.output,’ ‘);
fnd_file.put_line(fnd_file.output,’ ‘);
fnd_file.put_line(fnd_file.output,’ ‘);
fnd_file.put_line(fnd_file.output,’================ Error output =======================================’);
fnd_file.put_line(fnd_file.output,’====================================================================’);
—————————–
— Printing Error Records
—————————–
lc_err_cnt := 0;
FOR lcu_rec IN lcu_err_rec
LOOP
lc_err_cnt := lc_err_cnt + 1;
IF lc_err_cnt = 1
THEN
fnd_file.put_line(fnd_file.output,’ source_contract_no ‘ || ‘ customer_number ‘ ||’ Error Message ‘);
fnd_file.put_line(fnd_file.output,’====================================================================’);
END IF;
fnd_file.put_line(fnd_file.output,lcu_rec.source_contract_no||’ ‘ || SUBSTR(lcu_rec.customer_number,1,18)||’ ‘ ||Substr(lcu_rec.error_message,1,200) );
END LOOP;
lc_hdr_message := RPAD(‘Source Contract Number’,40)||RPAD(‘ Customer Number ‘,25)||
RPAD(‘ Order Number ‘,25);
—————————–
— Printing Success Records
—————————–
fnd_file.put_line(fnd_file.output,’ ‘);
fnd_file.put_line(fnd_file.output,’ ‘);
fnd_file.put_line(fnd_file.output,’………Printing Success / Partial Success Records……..’);
fnd_file.put_line(fnd_file.output,’ ‘);
fnd_file.put_line(fnd_file.output,lc_hdr_message);
fnd_file.put_line(fnd_file.output,RPAD(‘ ‘,200,’=’) );
— fnd_file.put_line(fnd_file.output,’========================================================================================================’);
FOR lcu_succ in lcu_succ_rec
LOOP
fnd_file.put_line(fnd_file.output,lcu_succ.Succ_message);
END LOOP;
fnd_file.put_line(fnd_file.output,RPAD(‘ ‘,200,’=’) );
— fnd_file.put_line(fnd_file.output,’========================================================================================================’);
END;
FUNCTION validate_line_dates(l_item VARCHAR2,l_source_contract VARCHAR2 ) RETURN VARCHAR2
IS
l_flag NUMBER := 0;
BEGIN
select NVL(SUM(DISTINCT fla),0) into l_flag from (
select T.*,CASE WHEN ran = 1 AND LINE_ACTIV_DATE <= NVL(LINE_EXP_DATE,SYSDATE) THEN 1
WHEN RAN >1 AND LINE_ACTIV_DATE <= NVL(LINE_EXP_DATE,SYSDATE) AND LINE_ACTIV_DATE > LAG_EXP_DATE AND NVL(LINE_EXP_DATE,LINE_ACTIV_DATE+1) > NVL(lag_ac_date,SYSDATE) THEN 1
ELSE 2 END AS FLA from (
select item,LINE_ACTIV_DATE,LINE_EXP_DATE,lead(item,1) OVER (ORDER BY item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))) lead_item,
lag(item,1) OVER (ORDER BY item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))) lag_item,
lead(LINE_ACTIV_DATE,1) OVER (ORDER BY item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))) lead_ac_date,
lag(LINE_ACTIV_DATE,1) OVER (ORDER BY item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))) lag_ac_date,
lead(LINE_EXP_DATE,1) OVER (ORDER BY item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))) lead_exp_date,
lag(LINE_EXP_DATE,1) OVER (ORDER BY item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))) lag_exp_date,
ROW_NUMBER() OVER (PARTITION BY item ORDER BY item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))) ran
from xx_om_bsa_stg
where (SOURCE_CONTRACT_NO, CUSTOMER_NUMBER,item) in (
select SOURCE_CONTRACT_NO, CUSTOMER_NUMBER,item from xx_om_bsa_stg
WHERE ITEM = l_item
and SOURCE_CONTRACT_NO=l_source_contract
group by SOURCE_CONTRACT_NO, CUSTOMER_NUMBER,item
having count(*) > 1)
order by item,LINE_ACTIV_DATE,NVL(LINE_EXP_DATE,TRUNC(SYSDATE))
) T);
IF l_flag <= 1 THEN
RETURN ‘VALID’;
ELSE
RETURN ‘INVALID’;
END IF;
END;
END XX_BSA_LOAD_PKG;
/