procedure xxvem_serial_reseravation(p_order_number in number
,p_serial_number in varchar2
,p_so_line_item in varchar2
,p_return_status out varchar2)
is
-- Common Declarations
l_api_version NUMBER := 1.0;
l_init_msg_list VARCHAR2(2) := FND_API.G_TRUE;
x_return_status VARCHAR2(2);
x_msg_count NUMBER := 0;
x_msg_data VARCHAR2(255);
L_ROW_CNT number := 1;
l_org NUMBER := fnd_profile.value('org_id');
l_user_id NUMBER := fnd_global.user_id;
l_organization_id NUMBER;
-- API specific declarations
l_rsv_rec INV_RESERVATION_GLOBAL.MTL_RESERVATION_REC_TYPE;
l_serial_number INV_RESERVATION_GLOBAL.SERIAL_NUMBER_TBL_TYPE;
x_serial_number INV_RESERVATION_GLOBAL.SERIAL_NUMBER_TBL_TYPE;
l_partial_reservation_flag VARCHAR2(2) := FND_API.G_FALSE;
l_force_reservation_flag VARCHAR2(2) := FND_API.G_FALSE;
l_validation_flag VARCHAR2(2) := FND_API.G_TRUE;
l_partial_reservation_exists BOOLEAN := FALSE;
x_quantity_reserved NUMBER := 0;
x_reservation_id NUMBER := 0;
l_primary_reservation_qty NUMBER := 0; -- total qty
l_subinventory_code VARCHAR2(40) :='MAIN'; -- will create a hard reservation
l_locator_id NUMBER := NULL ;
ln_sales_order_id NUMBER;
ln_order_line_id NUMBER;
-- Load required data into cursor, the present cursor will load serial numbers for given item
CURSOR c_items (p_organization_id NUMBER) IS
SELECT msi.organization_id, msi.inventory_item_id, msi.segment1, msi.primary_uom_code
FROM mtl_system_items_b msi, mtl_parameters mp
WHERE msi.organization_id = mp.organization_id
AND msi.segment1 = p_so_line_item
AND mp.organization_id = p_organization_id; -- need to pass parameter ship_from_org_id
-- Load required serial numbers to be reserved
CURSOR c_serials (p_organization_id NUMBER) IS
SELECT msn.inventory_item_id, msn.serial_number
FROM mtl_system_items_b msi, mtl_serial_numbers msn, mtl_parameters mp
WHERE msi.organization_id = mp.organization_id
AND msi.organization_id = msn.current_organization_id
AND msi.inventory_item_id = msn.inventory_item_id
AND msi.segment1 = p_so_line_item
AND mp.organization_id = p_organization_id ; -- need to pass parameter ship_from_org_id
AND msi.serial_number_control_code not in (1, 6) -- item is not serial controlled / controlled at sales order issue
AND msn.serial_number BETWEEN p_serial_number AND p_serial_number -- can leave this NULL if item is not serial controlled
;
BEGIN
mo_global.set_policy_context ('S', l_org);
mo_global.init ('INV');
fnd_global.apps_initialize(l_user_id,50641,660);
BEGIN
select mso.sales_order_id
, oola.line_id
, oola.ordered_quantity
, oola.ship_from_org_id
INTO ln_sales_order_id
, ln_order_line_id
, l_primary_reservation_qty
, l_organization_id
from mtl_sales_orders mso
, oe_order_headers_all ooha
, oe_order_lines_all oola
where mso.segment1 = to_char(ooha.order_number)
and ooha.header_id = oola.header_id
and oola.flow_status_code = 'AWAITING_SHIPPING'
and oola.ORDERED_ITEM = p_so_line_item
and segment1 = to_char(p_order_number);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error occured while getting ln_sales_order_id and ln_order_line_id');
END;
l_serial_number.delete;
--l_rsv_rec := NULL;
-- Initialize Serials to be reserved (if Item is serial controlled)
BEGIN
FOR ser IN c_serials(l_organization_id) LOOP
dbms_output.put_line('before loop l_row_cnt : '||l_row_cnt);
l_serial_number(l_row_cnt).inventory_item_id := ser.inventory_item_id;
l_serial_number(l_row_cnt).serial_number := ser.serial_number;
l_row_cnt := l_row_cnt + 1;
dbms_output.put_line(' after loop l_row_cnt : '||l_row_cnt);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Item not serial controlled / serials not provided');
END;
-- Initialize Reservations Record
FOR itm IN c_items(l_organization_id) LOOP
-- Initialize the variables
l_rsv_rec.organization_id := itm.organization_id;
l_rsv_rec.inventory_item_id := itm.inventory_item_id;
l_rsv_rec.requirement_date := sysdate ;
-- l_rsv_rec.demand_source_type_id := INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_INV;
l_rsv_rec.supply_source_type_id := INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_INV;
l_rsv_rec.demand_source_name := NULL;
l_rsv_rec.demand_source_type_id := INV_RESERVATION_GLOBAL.g_source_type_oe;
l_rsv_rec.primary_reservation_quantity := 1;-- l_primary_reservation_qty;
l_rsv_rec.primary_uom_code := itm.primary_uom_code;
l_rsv_rec.subinventory_code := l_subinventory_code;
l_rsv_rec.demand_source_header_id := ln_sales_order_id ;
l_rsv_rec.demand_source_line_id := ln_order_line_id ;
l_rsv_rec.reservation_uom_code := itm.primary_uom_code ;
l_rsv_rec.reservation_quantity := l_primary_reservation_qty ;
l_rsv_rec.supply_source_header_id := NULL ;
l_rsv_rec.supply_source_line_id := NULL ;
l_rsv_rec.supply_source_name := NULL ;
l_rsv_rec.supply_source_line_detail := NULL ;
l_rsv_rec.lot_number := NULL ; -- optional 'EXPLOT200' ;
l_rsv_rec.serial_number := NULL ;
l_rsv_rec.ship_ready_flag := NULL ;
l_rsv_rec.attribute15 := NULL ;
l_rsv_rec.attribute14 := NULL ;
l_rsv_rec.attribute13 := NULL ;
l_rsv_rec.attribute12 := NULL ;
l_rsv_rec.attribute11 := NULL ;
l_rsv_rec.attribute10 := NULL ;
l_rsv_rec.attribute9 := NULL ;
l_rsv_rec.attribute8 := NULL ;
l_rsv_rec.attribute7 := NULL ;
l_rsv_rec.attribute6 := NULL ;
l_rsv_rec.attribute5 := NULL ;
l_rsv_rec.attribute4 := NULL ;
l_rsv_rec.attribute3 := NULL ;
l_rsv_rec.attribute2 := NULL ;
l_rsv_rec.attribute1 := NULL ;
l_rsv_rec.attribute_category := NULL ;
l_rsv_rec.lpn_id := NULL ;
l_rsv_rec.pick_slip_number := NULL ;
l_rsv_rec.lot_number_id := NULL ;
l_rsv_rec.locator_id := l_locator_id ;
l_rsv_rec.subinventory_id := NULL ;
l_rsv_rec.revision := NULL ;
l_rsv_rec.external_source_line_id := NULL ;
l_rsv_rec.external_source_code := NULL ;
l_rsv_rec.autodetail_group_id := NULL ;
l_rsv_rec.reservation_uom_id := NULL ;
l_rsv_rec.primary_uom_id := NULL ;
l_rsv_rec.demand_source_delivery := NULL ;
-- call API to create reservation
DBMS_OUTPUT.PUT_LINE('=======================================================');
DBMS_OUTPUT.PUT_LINE('Calling INV_RESERVATION_PUB.Create_Reservation API');
INV_RESERVATION_PUB.Create_Reservation(
P_API_VERSION_NUMBER => l_api_version
, P_INIT_MSG_LST => l_init_msg_list
, P_RSV_REC => l_rsv_rec
, P_SERIAL_NUMBER => l_serial_number
, P_PARTIAL_RESERVATION_FLAG => l_partial_reservation_flag
, P_FORCE_RESERVATION_FLAG => l_force_reservation_flag
, P_PARTIAL_RSV_EXISTS => l_partial_reservation_exists
, P_VALIDATION_FLAG => l_validation_flag
--, P_OVER_RESERVATION_FLAG => 1
, X_SERIAL_NUMBER => x_serial_number
, X_RETURN_STATUS => p_return_status
, X_MSG_COUNT => x_msg_count
, X_MSG_DATA => x_msg_data
, X_QUANTITY_RESERVED => x_quantity_reserved
, X_RESERVATION_ID => x_reservation_id);
COMMIT;
DBMS_OUTPUT.PUT_LINE('=======================================================');
DBMS_OUTPUT.PUT_LINE('Return Status: '||p_return_status);
IF (p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
DBMS_OUTPUT.PUT_LINE('Error Message :'||x_msg_data);
END IF;
IF (p_return_status = FND_API.G_RET_STS_SUCCESS) THEN
DBMS_OUTPUT.PUT_LINE('Reservation ID :'||x_reservation_id||' Quantity Reserved:'||x_quantity_reserved);
FOR srl IN 1..x_serial_number.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Serial Reserved:'||x_serial_number(srl).serial_number);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('=======================================================');
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception Occured :');
DBMS_OUTPUT.PUT_LINE(SQLCODE ||':'||SQLERRM);
DBMS_OUTPUT.PUT_LINE('=======================================================');
END ;
,p_serial_number in varchar2
,p_so_line_item in varchar2
,p_return_status out varchar2)
is
-- Common Declarations
l_api_version NUMBER := 1.0;
l_init_msg_list VARCHAR2(2) := FND_API.G_TRUE;
x_return_status VARCHAR2(2);
x_msg_count NUMBER := 0;
x_msg_data VARCHAR2(255);
L_ROW_CNT number := 1;
l_org NUMBER := fnd_profile.value('org_id');
l_user_id NUMBER := fnd_global.user_id;
l_organization_id NUMBER;
-- API specific declarations
l_rsv_rec INV_RESERVATION_GLOBAL.MTL_RESERVATION_REC_TYPE;
l_serial_number INV_RESERVATION_GLOBAL.SERIAL_NUMBER_TBL_TYPE;
x_serial_number INV_RESERVATION_GLOBAL.SERIAL_NUMBER_TBL_TYPE;
l_partial_reservation_flag VARCHAR2(2) := FND_API.G_FALSE;
l_force_reservation_flag VARCHAR2(2) := FND_API.G_FALSE;
l_validation_flag VARCHAR2(2) := FND_API.G_TRUE;
l_partial_reservation_exists BOOLEAN := FALSE;
x_quantity_reserved NUMBER := 0;
x_reservation_id NUMBER := 0;
l_primary_reservation_qty NUMBER := 0; -- total qty
l_subinventory_code VARCHAR2(40) :='MAIN'; -- will create a hard reservation
l_locator_id NUMBER := NULL ;
ln_sales_order_id NUMBER;
ln_order_line_id NUMBER;
-- Load required data into cursor, the present cursor will load serial numbers for given item
CURSOR c_items (p_organization_id NUMBER) IS
SELECT msi.organization_id, msi.inventory_item_id, msi.segment1, msi.primary_uom_code
FROM mtl_system_items_b msi, mtl_parameters mp
WHERE msi.organization_id = mp.organization_id
AND msi.segment1 = p_so_line_item
AND mp.organization_id = p_organization_id; -- need to pass parameter ship_from_org_id
-- Load required serial numbers to be reserved
CURSOR c_serials (p_organization_id NUMBER) IS
SELECT msn.inventory_item_id, msn.serial_number
FROM mtl_system_items_b msi, mtl_serial_numbers msn, mtl_parameters mp
WHERE msi.organization_id = mp.organization_id
AND msi.organization_id = msn.current_organization_id
AND msi.inventory_item_id = msn.inventory_item_id
AND msi.segment1 = p_so_line_item
AND mp.organization_id = p_organization_id ; -- need to pass parameter ship_from_org_id
AND msi.serial_number_control_code not in (1, 6) -- item is not serial controlled / controlled at sales order issue
AND msn.serial_number BETWEEN p_serial_number AND p_serial_number -- can leave this NULL if item is not serial controlled
;
BEGIN
mo_global.set_policy_context ('S', l_org);
mo_global.init ('INV');
fnd_global.apps_initialize(l_user_id,50641,660);
BEGIN
select mso.sales_order_id
, oola.line_id
, oola.ordered_quantity
, oola.ship_from_org_id
INTO ln_sales_order_id
, ln_order_line_id
, l_primary_reservation_qty
, l_organization_id
from mtl_sales_orders mso
, oe_order_headers_all ooha
, oe_order_lines_all oola
where mso.segment1 = to_char(ooha.order_number)
and ooha.header_id = oola.header_id
and oola.flow_status_code = 'AWAITING_SHIPPING'
and oola.ORDERED_ITEM = p_so_line_item
and segment1 = to_char(p_order_number);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error occured while getting ln_sales_order_id and ln_order_line_id');
END;
l_serial_number.delete;
--l_rsv_rec := NULL;
-- Initialize Serials to be reserved (if Item is serial controlled)
BEGIN
FOR ser IN c_serials(l_organization_id) LOOP
dbms_output.put_line('before loop l_row_cnt : '||l_row_cnt);
l_serial_number(l_row_cnt).inventory_item_id := ser.inventory_item_id;
l_serial_number(l_row_cnt).serial_number := ser.serial_number;
l_row_cnt := l_row_cnt + 1;
dbms_output.put_line(' after loop l_row_cnt : '||l_row_cnt);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Item not serial controlled / serials not provided');
END;
-- Initialize Reservations Record
FOR itm IN c_items(l_organization_id) LOOP
-- Initialize the variables
l_rsv_rec.organization_id := itm.organization_id;
l_rsv_rec.inventory_item_id := itm.inventory_item_id;
l_rsv_rec.requirement_date := sysdate ;
-- l_rsv_rec.demand_source_type_id := INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_INV;
l_rsv_rec.supply_source_type_id := INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_INV;
l_rsv_rec.demand_source_name := NULL;
l_rsv_rec.demand_source_type_id := INV_RESERVATION_GLOBAL.g_source_type_oe;
l_rsv_rec.primary_reservation_quantity := 1;-- l_primary_reservation_qty;
l_rsv_rec.primary_uom_code := itm.primary_uom_code;
l_rsv_rec.subinventory_code := l_subinventory_code;
l_rsv_rec.demand_source_header_id := ln_sales_order_id ;
l_rsv_rec.demand_source_line_id := ln_order_line_id ;
l_rsv_rec.reservation_uom_code := itm.primary_uom_code ;
l_rsv_rec.reservation_quantity := l_primary_reservation_qty ;
l_rsv_rec.supply_source_header_id := NULL ;
l_rsv_rec.supply_source_line_id := NULL ;
l_rsv_rec.supply_source_name := NULL ;
l_rsv_rec.supply_source_line_detail := NULL ;
l_rsv_rec.lot_number := NULL ; -- optional 'EXPLOT200' ;
l_rsv_rec.serial_number := NULL ;
l_rsv_rec.ship_ready_flag := NULL ;
l_rsv_rec.attribute15 := NULL ;
l_rsv_rec.attribute14 := NULL ;
l_rsv_rec.attribute13 := NULL ;
l_rsv_rec.attribute12 := NULL ;
l_rsv_rec.attribute11 := NULL ;
l_rsv_rec.attribute10 := NULL ;
l_rsv_rec.attribute9 := NULL ;
l_rsv_rec.attribute8 := NULL ;
l_rsv_rec.attribute7 := NULL ;
l_rsv_rec.attribute6 := NULL ;
l_rsv_rec.attribute5 := NULL ;
l_rsv_rec.attribute4 := NULL ;
l_rsv_rec.attribute3 := NULL ;
l_rsv_rec.attribute2 := NULL ;
l_rsv_rec.attribute1 := NULL ;
l_rsv_rec.attribute_category := NULL ;
l_rsv_rec.lpn_id := NULL ;
l_rsv_rec.pick_slip_number := NULL ;
l_rsv_rec.lot_number_id := NULL ;
l_rsv_rec.locator_id := l_locator_id ;
l_rsv_rec.subinventory_id := NULL ;
l_rsv_rec.revision := NULL ;
l_rsv_rec.external_source_line_id := NULL ;
l_rsv_rec.external_source_code := NULL ;
l_rsv_rec.autodetail_group_id := NULL ;
l_rsv_rec.reservation_uom_id := NULL ;
l_rsv_rec.primary_uom_id := NULL ;
l_rsv_rec.demand_source_delivery := NULL ;
-- call API to create reservation
DBMS_OUTPUT.PUT_LINE('=======================================================');
DBMS_OUTPUT.PUT_LINE('Calling INV_RESERVATION_PUB.Create_Reservation API');
INV_RESERVATION_PUB.Create_Reservation(
P_API_VERSION_NUMBER => l_api_version
, P_INIT_MSG_LST => l_init_msg_list
, P_RSV_REC => l_rsv_rec
, P_SERIAL_NUMBER => l_serial_number
, P_PARTIAL_RESERVATION_FLAG => l_partial_reservation_flag
, P_FORCE_RESERVATION_FLAG => l_force_reservation_flag
, P_PARTIAL_RSV_EXISTS => l_partial_reservation_exists
, P_VALIDATION_FLAG => l_validation_flag
--, P_OVER_RESERVATION_FLAG => 1
, X_SERIAL_NUMBER => x_serial_number
, X_RETURN_STATUS => p_return_status
, X_MSG_COUNT => x_msg_count
, X_MSG_DATA => x_msg_data
, X_QUANTITY_RESERVED => x_quantity_reserved
, X_RESERVATION_ID => x_reservation_id);
COMMIT;
DBMS_OUTPUT.PUT_LINE('=======================================================');
DBMS_OUTPUT.PUT_LINE('Return Status: '||p_return_status);
IF (p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
DBMS_OUTPUT.PUT_LINE('Error Message :'||x_msg_data);
END IF;
IF (p_return_status = FND_API.G_RET_STS_SUCCESS) THEN
DBMS_OUTPUT.PUT_LINE('Reservation ID :'||x_reservation_id||' Quantity Reserved:'||x_quantity_reserved);
FOR srl IN 1..x_serial_number.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Serial Reserved:'||x_serial_number(srl).serial_number);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('=======================================================');
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception Occured :');
DBMS_OUTPUT.PUT_LINE(SQLCODE ||':'||SQLERRM);
DBMS_OUTPUT.PUT_LINE('=======================================================');
END ;
No comments:
Post a Comment