create or replace package comms_om_new is -- Author : Horis -- Created : 11/11/2004 9:22:32 AM -- Purpose : Deal with order management process PROCEDURE main( itemtype in varchar2, itemkey in varchar2, actid in number, funcmode in varchar2, resultout in out varchar2); PROCEDURE book(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2); PROCEDURE auto_full(errbuf OUT VARCHAR2, retcode OUT VARCHAR2, p_line_id IN NUMBER, p_user_id IN NUMBER ); PROCEDURE pick_release(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2); PROCEDURE ship_confirm(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2, p_delivery_id IN NUMBER); PROCEDURE submit_req; PROCEDURE create_install_base(p_line_id IN NUMBER, x_return_status OUT VARCHAR2, x_msg_count OUT VARCHAR2, x_msg_data OUT VARCHAR2); PROCEDURE create_install_base_rel(p_line_id IN NUMBER, x_return_status OUT VARCHAR2, x_msg_count OUT VARCHAR2, x_msg_data OUT VARCHAR2); PROCEDURE expire_install_base(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2); PROCEDURE deal_install_base(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2); end comms_om_new; / create or replace package body comms_om_new is g_header_id NUMBER; g_order_number NUMBER; g_line_id NUMBER; g_line_ordered_quantity NUMBER; g_line_schedule_date DATE; g_user_id NUMBER := fnd_profile.value('USER_ID'); g_delivery_id NUMBER; g_cur_party_id NUMBER; g_cur_party_account_id NUMBER; --for WF calling PROCEDURE main( itemtype in varchar2, itemkey in varchar2, actid in number, funcmode in varchar2, resultout in out varchar2) AS l_return_status VARCHAR2(1000); l_msg_count NUMBER; l_msg_data VARCHAR2(1000); l_book_flag VARCHAR2(1); l_picked_flag VARCHAR2(1); l_line_type NUMBER; req_id NUMBER; l_link_to_line_id NUMBER; BEGIN g_line_id := to_number(itemkey); g_user_id := wf_engine.GetItemAttrNumber(itemtype,itemkey, 'USER_ID'); g_user_id := 1050; IF (funcmode = 'RUN') THEN SELECT ooha.header_id, ooha.order_number, oola.line_type_id, oola.link_to_line_id INTO g_header_id, g_order_number, l_line_type, l_link_to_line_id FROM oe_order_headers_all ooha, oe_order_lines_all oola WHERE ooha.header_id = oola.header_id AND oola.line_id = g_line_id AND ROWNUM = 1; --1033 STRORDER, 1034 ChangePlan, 1036 Suspension --for child item no need to deal IF l_line_type IN (1033, 1034, 1036) AND l_link_to_line_id IS NULL THEN req_id := fnd_request.submit_request('ONT', --application 'TBFAFL', --program NULL, --description NULL, --start_time FALSE, --sub_request g_line_id,g_user_id,chr(0),'','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','',''); END IF; --for transation_type resultout := 'COMPELTE:COMPLETE'; RETURN; END IF; IF (funcmode = 'CANCEL') THEN resultout := 'COMPELTE'; RETURN; END IF; resultout := 'COMPLETE:COMPLETE'; OE_STANDARD_WF.Clear_Msg_Context; return; EXCEPTION WHEN OTHERS THEN WF_CORE.CONTEXT('comms_om_new', 'main', itemtype, itemkey, to_char(actid), funcmode ); RAISE; END; PROCEDURE book(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2) AS CURSOR cur_line IS SELECT line_id, ordered_quantity, schedule_ship_date FROM oe_order_lines_all WHERE line_id = g_line_id; i NUMBER:=0; X_DEBUG_FILE VARCHAR2(100); --IN Parameters l_header_rec OE_ORDER_PUB.Header_Rec_Type; l_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type; l_line_tbl OE_ORDER_PUB.Line_Tbl_Type; --OUT Parameters x_header_rec OE_ORDER_PUB.Header_Rec_Type; x_header_val_rec OE_ORDER_PUB.Header_Val_Rec_Type; x_Header_Adj_tbl OE_ORDER_PUB.Header_Adj_Tbl_Type; x_Header_Adj_val_tbl OE_ORDER_PUB.Header_Adj_Val_Tbl_Type; x_Header_price_Att_tbl OE_ORDER_PUB.Header_Price_Att_Tbl_Type; x_Header_Adj_Att_tbl OE_ORDER_PUB.Header_Adj_Att_Tbl_Type; x_Header_Adj_Assoc_tbl OE_ORDER_PUB.Header_Adj_Assoc_Tbl_Type; x_Header_Scredit_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type; x_Header_Scredit_val_tbl OE_ORDER_PUB.Header_Scredit_Val_Tbl_Type; x_line_tbl OE_ORDER_PUB.Line_Tbl_Type; x_line_val_tbl OE_ORDER_PUB.Line_Val_Tbl_Type; x_Line_Adj_tbl OE_ORDER_PUB.Line_Adj_Tbl_Type; x_Line_Adj_val_tbl OE_ORDER_PUB.Line_Adj_Val_Tbl_Type; x_Line_price_Att_tbl OE_ORDER_PUB.Line_Price_Att_Tbl_Type; x_Line_Adj_Att_tbl OE_ORDER_PUB.Line_Adj_Att_Tbl_Type; x_Line_Adj_Assoc_tbl OE_ORDER_PUB.Line_Adj_Assoc_Tbl_Type; x_Line_Scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type; x_Line_Scredit_val_tbl OE_ORDER_PUB.Line_Scredit_Val_Tbl_Type; x_Lot_Serial_tbl OE_ORDER_PUB.Lot_Serial_Tbl_Type; x_Lot_Serial_val_tbl OE_ORDER_PUB.Lot_Serial_Val_Tbl_Type; x_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type; BEGIN oe_debug_pub.initialize; X_DEBUG_FILE := OE_DEBUG_PUB.Set_Debug_Mode('TABLE'); oe_debug_pub.SetDebugLevel(1); oe_msg_pub.initialize; fnd_file.put_line(fnd_file.log, 'g_header_id!' || g_header_id); fnd_global.apps_initialize( g_user_id, 21623, 660,NULL); --(user_id, resp_id, app_id, NULL) l_header_rec := Oe_Order_Pub.G_Miss_Header_Rec; l_header_rec.header_id := g_header_id; l_header_rec.operation := OE_GLOBALS.G_OPR_UPDATE; l_action_request_tbl(1).request_type := oe_globals.g_book_order; l_action_request_tbl(1).entity_code := oe_globals.g_entity_header; l_action_request_tbl(1).entity_id := g_header_id; i := 0; FOR row_line IN cur_line LOOP i := i+1; l_line_tbl(i) := oe_order_pub.g_miss_line_rec; l_line_tbl(i).line_id := row_line.line_id; l_line_tbl(i).shipped_quantity := row_line.ordered_quantity; l_line_tbl(i).schedule_ship_date := g_line_schedule_date; l_line_tbl(i).operation := oe_globals.g_opr_update; END LOOP; Oe_Order_Pub.Process_Order ( 1 , Fnd_Api.G_FALSE , Fnd_Api.G_FALSE , Fnd_Api.G_FALSE , x_return_status , x_msg_count , x_msg_data --IN PARAMETERS , p_header_rec => l_header_rec , p_line_tbl => l_line_tbl , p_action_request_tbl => l_action_request_tbl --OUT PARAMETERS , x_header_rec => x_header_rec , x_header_val_rec => x_header_val_rec , x_Header_Adj_tbl => x_Header_Adj_tbl , x_Header_Adj_val_tbl => x_Header_Adj_val_tbl , x_Header_price_Att_tbl => x_Header_price_Att_tbl , x_Header_Adj_Att_tbl => x_Header_Adj_Att_tbl , x_Header_Adj_Assoc_tbl => x_Header_Adj_Assoc_tbl , x_Header_Scredit_tbl => x_Header_Scredit_tbl , x_Header_Scredit_val_tbl => x_Header_Scredit_val_tbl , x_line_tbl => x_line_tbl , x_line_val_tbl => x_line_val_tbl , x_Line_Adj_tbl => x_Line_Adj_tbl , x_Line_Adj_val_tbl => x_Line_Adj_val_tbl , x_Line_price_Att_tbl => x_Line_price_Att_tbl , x_Line_Adj_Att_tbl => x_Line_Adj_Att_tbl , x_Line_Adj_Assoc_tbl => x_Line_Adj_Assoc_tbl , x_Line_Scredit_tbl => x_Line_Scredit_tbl , x_Line_Scredit_val_tbl => x_Line_Scredit_val_tbl , x_Lot_Serial_tbl => x_Lot_Serial_tbl , x_Lot_Serial_val_tbl => x_Lot_Serial_val_tbl , x_action_request_tbl => x_action_request_tbl ); fnd_file.put_line(fnd_file.log, 'Success: Booked'); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; fnd_file.put_line(fnd_file.log, 'Failed: Booked'); x_return_status := SQLERRM; END book; PROCEDURE auto_full(errbuf OUT VARCHAR2, retcode OUT VARCHAR2, p_line_id IN NUMBER, p_user_id IN NUMBER ) AS l_return_status VARCHAR2(1000); l_msg_count NUMBER; l_msg_data VARCHAR2(1000); l_picked_flag VARCHAR2(1); l_line_type NUMBER; l_cfg_start_date DATE; l_bom_item_type_id NUMBER; l_child_count NUMBER; BEGIN g_line_id := p_line_id; g_user_id := p_user_id; BEGIN SELECT msib.bom_item_type, oola.header_id, oola.schedule_ship_date INTO l_bom_item_type_id, g_header_id, g_line_schedule_date FROM mtl_system_items_b msib, oe_order_lines_all oola WHERE msib.inventory_item_id = oola.inventory_item_id AND oola.line_id = g_line_id AND ROWNUM = 1; EXCEPTION WHEN OTHERS THEN l_bom_item_type_id := 1; END; l_cfg_start_date := sysdate; IF l_bom_item_type_id=1 THEN <> SELECT COUNT(*) INTO l_child_count FROM oe_order_lines_all oola WHERE oola.link_to_line_id = g_line_id; IF l_child_count=0 AND (sysdate-l_cfg_start_date)<1/24/6 THEN --DBMS_LOCK.SLEEP(3); GOTO wait_for_config; INSERT INTO comms_log values('waiting'); commit; END IF; END IF; --for bom module book(l_return_status, l_msg_count, l_msg_data ); pick_release(l_return_status, l_msg_count, l_msg_data); submit_req; deal_install_base(l_return_status, l_msg_count, l_msg_data) ; END; PROCEDURE pick_release(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2) AS CURSOR cur_delivery_details IS SELECT delivery_detail_id FROM wsh_delivery_details WHERE source_line_id = g_line_id OR top_model_line_id = g_line_id; p_api_version_number NUMBER :=1.0; init_msg_list VARCHAR2(200); x_msg_details VARCHAR2(3000); x_msg_summary VARCHAR2(3000); p_line_rows WSH_UTIL_CORE.ID_TAB_TYPE; x_del_rows WSH_UTIL_CORE.ID_TAB_TYPE; l_ship_method_code VARCHAR2(100); i NUMBER; l_commit VARCHAR2(30); p_delivery_id NUMBER; p_delivery_name VARCHAR2(30); x_trip_id VARCHAR2(30); x_trip_name VARCHAR2(30); fail_api EXCEPTION; l_picked_flag VARCHAR2(10); l_return_status VARCHAR2(1000); l_msg_count NUMBER; l_msg_data VARCHAR2(1000); BEGIN --Initialize (user_id, resp_id, app_id, NULL) fnd_global.apps_initialize( g_user_id, 21623, 660, NULL); -- Initialize return status x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS; i := 0; FOR row_delivery_details IN cur_delivery_details LOOP p_line_rows(1) := row_delivery_details.delivery_detail_id; WSH_DELIVERY_DETAILS_PUB.AUTOCREATE_DELIVERIES( p_api_version_number => 1.0, p_init_msg_list => APPS.FND_API.G_TRUE, p_commit => l_commit, x_return_status => x_return_status, x_msg_count => x_msg_count, x_msg_data => x_msg_data, p_line_rows => p_line_rows, x_del_rows => x_del_rows ); IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN RAISE fail_api; ELSE fnd_file.put_line(fnd_file.log, 'Success: Auto create delivery'); END IF; -- Pick release. p_delivery_id := x_del_rows(1); p_delivery_name := TO_CHAR( x_del_rows(1) ); g_delivery_id := p_delivery_id; wsh_deliveries_pub.delivery_action( p_api_version_number => 1.0 , p_init_msg_list => null, -- IN VARCHAR2, x_return_status => x_return_status, -- OUT VARCHAR2, x_msg_count => x_msg_count, -- OUT NUMBER, x_msg_data => x_msg_data, -- OUT VARCHAR2, p_action_code => 'PICK-RELEASE', -- IN VARCHAR2, p_delivery_id => p_delivery_id, -- IN NUMBER DEFAULT NULL, p_delivery_name => p_delivery_name, -- IN VARCHAR2 DEFAULT NULL, x_trip_id => x_trip_id, -- OUT VARCHAR2, x_trip_name => x_trip_name -- OUT VARCHAR2 ); IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN RAISE fail_api; ELSE fnd_file.put_line(fnd_file.log, 'Success: Pick release'); END IF; --for pick confirm COMMIT; < > BEGIN SELECT wdd.released_status INTO l_picked_flag FROM wsh_delivery_details wdd WHERE wdd.delivery_detail_id = row_delivery_details.delivery_detail_id; EXCEPTION WHEN OTHERS THEN l_picked_flag := 'Y'; END; IF l_picked_flag<>'Y' THEN GOTO wait_for_pick2; END IF; ship_confirm(l_return_status, l_msg_count, l_msg_data, p_delivery_id); END LOOP; --row_delivery_details EXCEPTION WHEN fail_api THEN WSH_UTIL_CORE.get_messages('Y', x_msg_summary, x_msg_details, x_msg_count); IF x_msg_count > 1 THEN x_msg_data := x_msg_summary || x_msg_details; ELSE x_msg_data := x_msg_summary || x_msg_details; END IF; END pick_release; PROCEDURE ship_confirm(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2, p_delivery_id IN NUMBER) IS -- Standard Parameters. p_api_version_number NUMBER :=1.0; init_msg_list VARCHAR2(200); x_msg_details VARCHAR2(3000); x_msg_summary VARCHAR2(3000); p_validation_level NUMBER; -- Parameters for WSH_DELIVERIES_PUB.Delivery_Action. p_delivery_name VARCHAR2(30); p_action_code VARCHAR2(15); p_asg_trip_id NUMBER; p_asg_trip_name VARCHAR2(30); p_asg_pickup_stop_id NUMBER; p_asg_pickup_loc_id NUMBER; p_asg_pickup_loc_code VARCHAR2(30); p_asg_pickup_arr_date DATE; p_asg_pickup_dep_date DATE; p_asg_dropoff_stop_id NUMBER; p_asg_dropoff_loc_id NUMBER; p_asg_dropoff_loc_code VARCHAR2(30); p_asg_dropoff_arr_date DATE; p_asg_dropoff_dep_date DATE; p_sc_action_flag VARCHAR2(10); p_sc_intransit_flag VARCHAR2(10); p_sc_close_trip_flag VARCHAR2(10); p_sc_create_bol_flag VARCHAR2(10); p_sc_stage_del_flag VARCHAR2(10); p_sc_trip_ship_method VARCHAR2(30); p_sc_actual_dep_date VARCHAR2(30); p_sc_report_set_id NUMBER; p_sc_report_set_name VARCHAR2(60); p_wv_override_flag VARCHAR2(10); x_trip_id VARCHAR2(30); x_trip_name VARCHAR2(30); /*Handle exceptions*/ fail_api EXCEPTION; X_DEBUG_FILE VARCHAR2(100); l_ship_method_code VARCHAR2(100); BEGIN --Initialize (user_id, resp_id, app_id, NULL) fnd_global.apps_initialize( g_user_id, 21623, 660, NULL); -- Initialize return status x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS; -- Ship Confirming p_delivery_name := TO_CHAR(p_delivery_id); BEGIN SELECT shipping_method_code INTO l_ship_method_code FROM oe_order_headers_all WHERE header_id = g_header_id; EXCEPTION WHEN OTHERS THEN l_ship_method_code := NULL; END; p_action_code := 'CONFIRM'; -- The action code for ship confirm p_sc_action_flag := 'S'; -- Ship entered quantity. p_sc_intransit_flag := 'Y'; -- In transit flag is set to 'Y' closes the pickup stop and sets the delivery in transit. p_sc_close_trip_flag := 'Y'; -- Close the trip after ship confirm p_sc_trip_ship_method := l_ship_method_code; -- The ship method code WSH_DELIVERIES_PUB.Delivery_Action( p_api_version_number => 1.0, p_init_msg_list => init_msg_list, x_return_status => x_return_status, x_msg_count => x_msg_count, x_msg_data => x_msg_data, p_action_code => p_action_code, p_delivery_id => p_delivery_id, p_delivery_name => p_delivery_name, p_asg_trip_id => p_asg_trip_id, p_asg_trip_name => p_asg_trip_name, p_asg_pickup_stop_id => p_asg_pickup_stop_id, p_asg_pickup_loc_id => p_asg_pickup_loc_id, p_asg_pickup_loc_code => p_asg_pickup_loc_code, p_asg_pickup_arr_date => p_asg_pickup_arr_date, p_asg_pickup_dep_date => p_asg_pickup_dep_date, p_asg_dropoff_stop_id => p_asg_dropoff_stop_id, p_asg_dropoff_loc_id => p_asg_dropoff_loc_id, p_asg_dropoff_loc_code => p_asg_dropoff_loc_code, p_asg_dropoff_arr_date => p_asg_dropoff_arr_date, p_asg_dropoff_dep_date => p_asg_dropoff_dep_date, p_sc_action_flag => p_sc_action_flag, p_sc_intransit_flag => p_sc_intransit_flag, p_sc_close_trip_flag => p_sc_close_trip_flag, p_sc_create_bol_flag => p_sc_create_bol_flag, p_sc_stage_del_flag => p_sc_stage_del_flag, p_sc_trip_ship_method => p_sc_trip_ship_method, p_sc_actual_dep_date => p_sc_actual_dep_date, p_sc_report_set_id => p_sc_report_set_id, p_sc_report_set_name => p_sc_report_set_name, p_wv_override_flag => p_wv_override_flag, x_trip_id => x_trip_id, x_trip_name => x_trip_name); IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN RAISE fail_api; ELSE fnd_file.put_line(fnd_file.log, 'Success: Ship confirm'); END IF; COMMIT; EXCEPTION WHEN fail_api THEN WSH_UTIL_CORE.get_messages('Y', x_msg_summary, x_msg_details, x_msg_count); IF x_msg_count > 1 THEN x_msg_data := x_msg_summary || x_msg_details; ELSE x_msg_data := x_msg_summary || x_msg_details; END IF; END SHIP_CONFIRM; PROCEDURE submit_req AS req_id NUMBER; BEGIN --submit Process transaction interface req_id := fnd_request.submit_request('INV', --application 'INCTCM', --program NULL, --description NULL, --start_time FALSE, --sub_request chr(0), '','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','',''); fnd_file.put_line(fnd_file.log, 'Submit request: Process transaction interface'); --submit WIP Move Transaction Manager req_id := fnd_request.submit_request('WIP', --application 'WICTMS', --program NULL, --description NULL, --start_time FALSE, --sub_request chr(0), '','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','',''); fnd_file.put_line(fnd_file.log, 'Submit request: WIP Move Transaction Manager'); END submit_req; PROCEDURE create_install_base(p_line_id IN NUMBER, x_return_status OUT VARCHAR2, x_msg_count OUT VARCHAR2, x_msg_data OUT VARCHAR2) AS l_instance_rec csi_datastructures_pub.instance_rec; l_ext_attrib_values_tbl csi_datastructures_pub.extend_attrib_values_tbl; l_party_tbl csi_datastructures_pub.party_tbl; l_account_tbl csi_datastructures_pub.party_account_tbl; l_pricing_attrib_tbl csi_datastructures_pub.pricing_attribs_tbl; l_org_assignments_tbl csi_datastructures_pub.organization_units_tbl; l_asset_assignment_tbl csi_datastructures_pub.instance_asset_tbl; l_txn_rec csi_datastructures_pub.transaction_rec; l_inventory_item_id NUMBER; l_org_id NUMBER; l_ordered_quantity NUMBER; l_uom VARCHAR2(10); l_instance_id NUMBER; l_instance_party_id NUMBER; l_ip_account_id NUMBER; l_order_number NUMBER; l_sold_to_org_id NUMBER; l_ship_to_org_id NUMBER; l_invoice_to_org_id NUMBER; l_cur_party_id NUMBER; l_cust_account_id NUMBER; l_ship_to_site_id NUMBER; l_invoice_to_site_id NUMBER; l_user_party_id NUMBER; cursor cur_user(p_party_id IN NUMBER) is select hr.object_id party_id FROM hz_relationships hr where hr.subject_id = p_party_id AND hr.relationship_code = 'DOCUMENT_USER' AND hr.relationship_type = 'USERS'; BEGIN SELECT oola.inventory_item_id, oola.org_id, oola.ordered_quantity, oola.order_quantity_uom, oola.ship_to_org_id, oola.invoice_to_org_id, ooha.order_number, ooha.sold_to_org_id INTO l_inventory_item_id, l_org_id, l_ordered_quantity, l_uom, l_ship_to_org_id, l_invoice_to_org_id, l_order_number, l_sold_to_org_id FROM oe_order_lines_all oola, oe_order_headers_all ooha WHERE oola.line_id = p_line_id AND oola.header_id = ooha.header_id; SELECT hpsu.party_site_id INTO l_ship_to_site_id FROM hz_party_site_uses hpsu WHERE hpsu.party_site_use_id = l_ship_to_org_id; SELECT hpsu.party_site_id INTO l_invoice_to_site_id FROM hz_party_site_uses hpsu WHERE hpsu.party_site_use_id = l_invoice_to_org_id; SELECT csi_item_instances_s.nextval INTO l_instance_id FROM dual; l_instance_rec.instance_id := l_instance_id; l_instance_rec.instance_number := l_instance_id; l_instance_rec.external_reference := l_order_number; l_instance_rec.inventory_item_id := l_inventory_item_id; l_instance_rec.inv_master_organization_id := 86; l_instance_rec.mfg_serial_number_flag := 'N'; l_instance_rec.quantity := l_ordered_quantity; l_instance_rec.unit_of_measure := l_uom; l_instance_rec.accounting_class_code := 'CUST_PROD'; l_instance_rec.instance_status_id := 10000; l_instance_rec.customer_view_flag := NULL; l_instance_rec.merchant_view_flag := NULL; l_instance_rec.sellable_flag := NULL; l_instance_rec.active_start_date := TRUNC(SYSDATE); l_instance_rec.location_type_code := 'HZ_PARTY_SITES'; l_instance_rec.location_id := 249; l_instance_rec.install_date := TRUNC(SYSDATE); l_instance_rec.creation_complete_flag := 'Y'; l_instance_rec.version_label := 'AS_CREATED'; l_instance_rec.object_version_number := 1; --get the user account id SELECT hca.party_id, hca.cust_account_id INTO l_cur_party_id, l_cust_account_id FROM hz_cust_accounts hca WHERE hca.cust_account_id = l_sold_to_org_id; insert into comms_log values ('cur_party_id ' || l_cur_party_id); FOR row_user IN cur_user(l_cur_party_id) LOOP --get user's account id BEGIN SELECT hca.cust_account_id INTO l_cust_account_id FROM hz_cust_accounts hca WHERE hca.party_id = row_user.party_id AND ROWNUM=1; EXCEPTION WHEN OTHERS THEN l_cust_account_id := NULL; END; insert into comms_log values ('user_party_id ' || row_user.party_id ); insert into comms_log values ('user_party_cunt_id ' || l_cust_account_id); SELECT csi_i_parties_s.nextval INTO l_instance_party_id FROM dual; l_party_tbl(1).instance_party_id := l_instance_party_id; l_party_tbl(1).instance_id := l_instance_id; l_party_tbl(1).party_source_table := 'HZ_PARTIES'; l_party_tbl(1).party_id := row_user.party_id; l_party_tbl(1).relationship_type_code := 'DOCUMENT_USER'; l_party_tbl(1).contact_flag := 'N'; l_party_tbl(1).active_start_date := SYSDATE; l_party_tbl(1).object_version_number := 1; SELECT csi_ip_accounts_s.nextval INTO l_ip_account_id FROM dual; l_account_tbl(1).ip_account_id := l_ip_account_id; l_account_tbl(1).instance_party_id := l_instance_party_id; l_account_tbl(1).party_account_id := l_cust_account_id; l_account_tbl(1).relationship_type_code := 'DOCUMENT_USER'; l_account_tbl(1).active_start_date := sysdate; l_account_tbl(1).BILL_TO_ADDRESS := 1170; l_account_tbl(1).SHIP_TO_ADDRESS := 1170; l_account_tbl(1).object_version_number := 1; l_account_tbl(1).parent_tbl_index := 1; l_account_tbl(1).call_contracts := 'Y'; l_txn_rec.transaction_date := TRUNC(SYSDATE); l_txn_rec.SOURCE_TRANSACTION_DATE := TRUNC(SYSDATE); l_txn_rec.TRANSACTION_TYPE_ID := 1; l_txn_rec.OBJECT_VERSION_NUMBER := 1; csi_item_instance_pub.create_item_instance( p_api_version => 1.0 --IN NUMBER ,p_instance_rec => l_instance_rec -- IN OUT NOCOPY csi_datastructures_pub.instance_rec ,p_ext_attrib_values_tbl => l_ext_attrib_values_tbl -- IN OUT NOCOPY csi_datastructures_pub.extend_attrib_values_tbl ,p_party_tbl => l_party_tbl --IN OUT NOCOPY csi_datastructures_pub.party_tbl ,p_account_tbl => l_account_tbl --IN OUT NOCOPY csi_datastructures_pub.party_account_tbl ,p_pricing_attrib_tbl => l_pricing_attrib_tbl --IN OUT NOCOPY csi_datastructures_pub.pricing_attribs_tbl ,p_org_assignments_tbl => l_org_assignments_tbl --IN OUT NOCOPY csi_datastructures_pub.organization_units_tbl ,p_asset_assignment_tbl => l_asset_assignment_tbl --IN OUT NOCOPY csi_datastructures_pub.instance_asset_tbl ,p_txn_rec => l_txn_rec --IN OUT NOCOPY csi_datastructures_pub.transaction_rec ,x_return_status => x_return_status --OUT NOCOPY VARCHAR2 ,x_msg_count => x_msg_count --OUT NOCOPY NUMBER ,x_msg_data => x_msg_data); --OUT NOCOPY VARCH insert into comms_log values('create install base '); END LOOP; COMMIT; END; PROCEDURE create_install_base_rel(p_line_id IN NUMBER, x_return_status OUT VARCHAR2, x_msg_count OUT VARCHAR2, x_msg_data OUT VARCHAR2) AS l_instance_id NUMBER; p_party_tbl csi_datastructures_pub.party_tbl; p_txn_rec csi_datastructures_pub.transaction_rec; l_i_parties_id NUMBER; l_owner_party_id NUMBER; cursor cur_user(p_party_id IN NUMBER) is select hr.object_id party_id FROM hz_relationships hr where hr.subject_id = p_party_id AND hr.relationship_code = 'DOCUMENT_USER' AND hr.relationship_type = 'USERS'; BEGIN SELECT cii.instance_id, cii.owner_party_id INTO l_instance_id, l_owner_party_id FROM csi_item_instances cii WHERE cii.last_oe_order_line_id = p_line_id; FOR row_user IN cur_user(l_owner_party_id) LOOP SELECT csi_i_parties_s.nextval INTO l_i_parties_id FROM DUAL; /*p_relationship_tbl(1).RELATIONSHIP_ID := l_ii_rel_id; p_relationship_tbl(1).RELATIONSHIP_TYPE_CODE := 'USED BY'; p_relationship_tbl(1).OBJECT_ID := row_user.party_id; p_relationship_tbl(1).SUBJECT_ID := l_instance_id; p_relationship_tbl(1).SUBJECT_HAS_CHILD := 'N'; p_relationship_tbl(1).POSITION_REFERENCE := NULL; p_relationship_tbl(1).ACTIVE_START_DATE := SYSDATE; p_relationship_tbl(1).ACTIVE_END_DATE := SYSDATE; p_relationship_tbl(1).DISPLAY_ORDER := NULL; p_relationship_tbl(1).MANDATORY_FLAG := 'N'; p_relationship_tbl(1).OBJECT_VERSION_NUMBER := 1; p_txn_rec.TRANSACTION_DATE := TRUNC(SYSDATE); p_txn_rec.SOURCE_TRANSACTION_DATE := TRUNC(SYSDATE); p_txn_rec.TRANSACTION_TYPE_ID :=1; p_txn_rec.OBJECT_VERSION_NUMBER :=1; */ insert into csi_i_parties ( instance_party_id, instance_id, party_source_table, party_id, relationship_type_code, contact_flag, active_start_date, created_by, creation_date, last_updated_by, last_update_date, last_update_login, object_version_number) values( l_i_parties_id, l_instance_id, 'HZ_PARTIES', row_user.party_id, 'USED BY', 'N', sysdate, '-1', sysdate, '-1', sysdate, '-1', 1 ); /* csi_party_relationships_pub.create_inst_party_relationship ( p_api_version => 1.0 ,-- IN NUMBER p_commit => 'Y' ,-- IN VARCHAR2 p_init_msg_list => 'N' ,-- IN VARCHAR2 p_validation_level => 0, -- IN NUMBER p_party_tbl => p_party_tbl ,-- IN OUT NOCOPY csi_datastructures_pub.party_tbl p_party_account_tbl=> p_party_account_tbl ,-- IN OUT NOCOPY csi_datastructures_pub.party_account_tbl p_txn_rec => p_txn_rec ,-- IN OUT NOCOPY csi_datastructures_pub.transaction_rec x_return_status => x_return_status ,-- OUT NOCOPY VARCHAR2 x_msg_count => x_msg_count ,-- OUT NOCOPY NUMBER x_msg_data => x_msg_data -- OUT NOCOPY VARCHAR2 ) ;*/ END LOOP; COMMIT; END; --expire earily install base records PROCEDURE expire_install_base(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2) AS l_instance_rec csi_datastructures_pub.instance_rec; l_txn_rec csi_datastructures_pub.transaction_rec; l_instance_id_lst csi_datastructures_pub.id_tbl; l_cust_account_id NUMBER; l_party_id NUMBER; l_line_type_id NUMBER; --all install base records of earliy subscripiton CURSOR cur_instance(p_party_id IN NUMBER, p_party_account_id IN NUMBER) IS SELECT cii.instance_id, cii.instance_number, cii.inventory_item_id, cii.inv_master_organization_id, cii.active_start_date, cii.active_end_date FROM csi_item_instances cii WHERE cii.owner_party_id = p_party_id AND cii.owner_party_account_id = p_party_account_id AND cii.last_oe_order_line_id <> g_line_id; no_need_expire EXCEPTION; BEGIN SELECT oola.line_type_id, hca.cust_account_id, hca.party_id INTO l_line_type_id, l_cust_account_id, l_party_id FROM oe_order_lines_all oola, oe_order_headers_all ooha, hz_cust_accounts hca WHERE oola.line_id = g_line_id AND oola.header_id = ooha.header_id AND hca.cust_account_id = ooha.sold_to_org_id AND ROWNUM = 1; --for Changeplan, expire existing item install base IF l_line_type_id <> 1034 THEN RAISE no_need_expire; END IF; FOR row_instance IN cur_instance(l_party_id, l_cust_account_id) LOOP l_instance_rec.instance_id := row_instance.instance_id; l_instance_rec.instance_number := row_instance.instance_number; l_instance_rec.external_reference := NULL; l_instance_rec.inventory_item_id := row_instance.inventory_item_id; l_instance_rec.inv_master_organization_id := row_instance.inv_master_organization_id; l_instance_rec.active_end_date := TRUNC(SYSDATE); l_txn_rec.transaction_date := TRUNC(SYSDATE); l_txn_rec.SOURCE_TRANSACTION_DATE := TRUNC(SYSDATE); l_txn_rec.TRANSACTION_TYPE_ID := 1; l_txn_rec.OBJECT_VERSION_NUMBER := 1; csi_item_instance_pub.expire_item_instance( p_api_version => 1.0 -- IN NUMBER ,p_instance_rec => l_instance_rec -- IN csi_datastructures_pub.instance_rec ,p_txn_rec => l_txn_rec -- IN OUT NOCOPY csi_datastructures_pub.transaction_rec ,x_instance_id_lst => l_instance_id_lst-- OUT NOCOPY csi_datastructures_pub.id_tbl ,x_return_status => x_return_status-- OUT NOCOPY VARCHAR2 ,x_msg_count => x_msg_count-- OUT NOCOPY NUMBER ,x_msg_data => x_msg_data-- OUT NOCOPY VARCHAR2 ); END LOOP; COMMIT; EXCEPTION WHEN no_need_expire THEN NULL; WHEN OTHERS THEN NULL; END; PROCEDURE deal_install_base(x_return_status OUT VARCHAR2, x_msg_count OUT NUMBER, x_msg_data OUT VARCHAR2) AS l_cust_account_id NUMBER; l_party_id NUMBER; l_line_type_id NUMBER; no_need_expire EXCEPTION; l_inventory_item_id NUMBER; l_product_type VARCHAR2(20); l_item_number mtl_system_items_b.segment1%TYPE; l_count NUMBER; l_telephone_num VARCHAR2(20); l_sim_num VARCHAR2(20); l_return_status VARCHAR2(1000); l_msg_count NUMBER; l_msg_data VARCHAR2(1000); --product subscribled earlier CURSOR cur_prod IS SELECT cii.instance_id, cii.last_oe_order_line_id line_id FROM csi_item_instances cii WHERE cii.last_oe_order_line_id <> g_line_id AND NVL(cii.attribute10,'E') = l_product_type AND cii.owner_party_id = l_party_id AND cii.owner_party_account_id = l_cust_account_id; BEGIN SELECT oola.line_type_id, hca.cust_account_id, hca.party_id, oola.inventory_item_id INTO l_line_type_id, l_cust_account_id, l_party_id, l_inventory_item_id FROM oe_order_lines_all oola, oe_order_headers_all ooha, hz_cust_accounts hca WHERE oola.line_id = g_line_id AND oola.header_id = ooha.header_id AND hca.cust_account_id = ooha.sold_to_org_id AND ROWNUM = 1; SELECT msib.segment1 INTO l_item_number FROM mtl_system_items_b msib WHERE msib.organization_id = 86 AND msib.inventory_item_id = l_inventory_item_id AND ROWNUM = 1; IF l_item_number IN ('MOBILEPROD','MOBILECHANGEPLAN') THEN l_product_type := 'M'; ELSIF l_item_number='BRODBAND' THEN l_product_type := 'B'; ELSIF l_item_number='DIGITAL_LEASED_LINE_NATL' THEN l_product_type := 'D'; END IF; --get service number --Get customer serial number and SIM attribute in quator BEGIN SELECT cn.service_num, cn.sim_num INTO l_telephone_num, l_sim_num FROM comms_numbers cn, aso_quote_headers_all aqh, aso_quote_lines_all aql, oe_order_lines_all oola WHERE oola.line_id = g_line_id AND oola.header_id = aqh.order_id AND aql.quote_header_id = aqh.quote_header_id AND cn.quote_line_id = aql.quote_line_id AND cn.app_id = 521 AND ROWNUM = 1; EXCEPTION WHEN OTHERS THEN l_sim_num := NULL; l_telephone_num := NULL; END; IF l_sim_num IS NULL THEN BEGIN SELECT cn.service_num, cn.sim_num INTO l_telephone_num, l_sim_num FROM comms_numbers cn WHERE cn.quote_line_id = g_line_id AND cn.app_id = 660 AND ROWNUM = 1; EXCEPTION WHEN OTHERS THEN l_sim_num := NULL; l_telephone_num := NULL; END; END IF; --for change plan, get service number from old subscription IF l_line_type_id=1034 AND l_sim_num IS NULL THEN SELECT MAX(cii.serial_number), MAX(cii.attribute11) INTO l_telephone_num, l_sim_num FROM csi_item_instances cii WHERE cii.owner_party_id = l_party_id AND cii.instance_status_id = 10000; END IF; --1033, Staprodline2 --1034, ChangePlan2, --1036, Suspension --for Changeplan, expire existing item install base --attribute10, 'M' Mobile, 'C' Cable, 'D' Degital, 'E' Expire IF l_line_type_id IN (1034, 1036) THEN FOR row_prod IN cur_prod LOOP --update product subscribled earliy UPDATE csi_item_instances cii SET cii.active_end_date = TRUNC(sysdate), cii.instance_status_id = 1, cii.attribute10 = 'E' WHERE cii.instance_id = row_prod.instance_id; --update product lines at the same order UPDATE csi_item_instances cii SET cii.active_end_date = TRUNC(sysdate), cii.instance_status_id = 1, cii.attribute10 = 'E' WHERE cii.last_oe_order_line_id IN ( SELECT oola.line_id FROM oe_order_lines_all oola WHERE oola.top_model_line_id = row_prod.line_id ); END LOOP; END IF; --make product type for new install base < > SELECT COUNT(*) INTO l_count FROM csi_item_instances cii WHERE cii.last_oe_order_line_id = g_line_id; IF l_count=0 THEN GOTO wait_for_install_base; END IF; UPDATE csi_item_instances cii SET cii.attribute10 = l_product_type, cii.serial_number = l_telephone_num, cii.attribute11 = l_sim_num WHERE cii.last_oe_order_line_id = g_line_id; --update comms_number for the lastest order line_id IF l_line_type_id=1034 THEN UPDATE comms_numbers cn SET cn.quote_line_id = g_line_id, cn.app_id = 660 WHERE cn.service_num = l_telephone_num; END IF; --for suspension order, update status IF l_line_type_id=1036 THEN --update product lines at the same order < > SELECT COUNT(*) INTO l_count FROM oe_order_lines_all oola, oe_order_lines_all oola2 WHERE oola.header_id = oola2.header_id AND oola2.line_id = g_line_id; IF l_count<2 THEN GOTO wait_for_all_install_base; END IF; UPDATE csi_item_instances cii SET cii.instance_status_id = 10021 WHERE cii.last_oe_order_line_id IN ( SELECT oola.line_id FROM oe_order_lines_all oola, oe_order_lines_all oola2 WHERE oola.header_id = oola2.header_id AND oola2.line_id = g_line_id ); END IF; --for starprod, create a child intall base for user IF l_line_type_id=1033 THEN create_install_base_rel(g_line_id, l_return_status, l_msg_count, l_msg_data) ; END IF; COMMIT; EXCEPTION WHEN no_need_expire THEN NULL; WHEN OTHERS THEN NULL; END; END comms_om_new; /
Objective of this blog is to share my oracle knowledge with the people who are working in oracle.
Labels
Accrual
(1)
Advanced Pricing
(1)
Alert in OAF
(1)
Alter Session in PLSQL
(3)
AME
(1)
AP
(8)
APEX
(6)
API
(2)
AR
(5)
AR Receipts
(1)
ASCP
(1)
Auto Invoice
(1)
BOM
(6)
Bulk Operations
(1)
Conversion Util PKG
(1)
Cost Management
(4)
Costing
(4)
CST
(1)
Customer
(1)
DBA
(1)
DFF
(1)
Discoverer
(6)
FND
(3)
FNDLOADER
(1)
Forms
(3)
General issues
(1)
GL
(6)
HCM
(1)
Hints
(1)
HRMS
(10)
Indexes
(1)
Install Base Conversion
(1)
Interview Questions
(2)
Inventory
(3)
Inverntory
(11)
iProcurement
(4)
Javascript
(1)
MOAC
(1)
OAF
(9)
OBIEE
(1)
Oracle Alerts
(2)
Oracle DB
(4)
Oracle DBA
(1)
Oracle EBS
(1)
Oracle Installation
(1)
Oracle Reports
(4)
Order Management
(7)
Payables
(14)
Payments
(2)
PLSQL
(45)
PLSQL Tunning
(6)
PO
(11)
Queries
(1)
Receivables
(7)
Service Contracts
(1)
Service Requests
(2)
SESSION
(1)
Shell Scripts in Oracle apps
(1)
SLA
(2)
SQL
(31)
SQL LOADER
(4)
SQl TUNNING
(4)
Supplier
(1)
System Administrator
(46)
TCA
(5)
Unix
(4)
UTL_FILE
(1)
WIP
(4)
WORKFLOW
(4)
XLA
(3)
XML/BI Publisher
(11)
Saturday, August 7, 2010
Supply Chain Management APIS
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment