DECLARE
p_line_tbl QP_PREQ_GRP.LINE_TBL_TYPE;
p_qual_tbl QP_PREQ_GRP.QUAL_TBL_TYPE;
p_line_attr_tbl QP_PREQ_GRP.LINE_ATTR_TBL_TYPE;
p_LINE_DETAIL_tbl QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
p_LINE_DETAIL_qual_tbl QP_PREQ_GRP.LINE_DETAIL_QUAL_TBL_TYPE;
p_LINE_DETAIL_attr_tbl QP_PREQ_GRP.LINE_DETAIL_ATTR_TBL_TYPE;
p_related_lines_tbl QP_PREQ_GRP.RELATED_LINES_TBL_TYPE;
p_control_rec QP_PREQ_GRP.CONTROL_RECORD_TYPE;
x_line_tbl QP_PREQ_GRP.LINE_TBL_TYPE;
x_line_qual QP_PREQ_GRP.QUAL_TBL_TYPE;
x_line_attr_tbl QP_PREQ_GRP.LINE_ATTR_TBL_TYPE;
x_line_detail_tbl QP_PREQ_GRP.LINE_DETAIL_TBL_TYPE;
x_line_detail_qual_tbl QP_PREQ_GRP.LINE_DETAIL_QUAL_TBL_TYPE;
x_line_detail_attr_tbl QP_PREQ_GRP.LINE_DETAIL_ATTR_TBL_TYPE;
x_related_lines_tbl QP_PREQ_GRP.RELATED_LINES_TBL_TYPE;
x_return_status VARCHAR2(240);
x_return_status_text VARCHAR2(240);
qual_rec QP_PREQ_GRP.QUAL_REC_TYPE;
line_attr_rec QP_PREQ_GRP.LINE_ATTR_REC_TYPE;
line_rec QP_PREQ_GRP.LINE_REC_TYPE;
detail_rec QP_PREQ_GRP.LINE_DETAIL_REC_TYPE;
ldet_rec QP_PREQ_GRP.LINE_DETAIL_REC_TYPE;
rltd_rec QP_PREQ_GRP.RELATED_LINES_REC_TYPE;
x_price_contexts_result_tbl QP_Attr_Mapping_PUB.Contexts_Result_Tbl_Type;
x_qual_contexts_result_tbl QP_Attr_Mapping_PUB.Contexts_Result_Tbl_Type;
v_line_tbl_cnt integer;
I BINARY_INTEGER;
l_version VARCHAR2(240);
l_file_val VARCHAR2(60);
L_MODIFIER VARCHAR2(4000);
L_ADJUSTMENT_AMOUNT VARCHAR2(300);
L_MOD_NAME VARCHAR2(240);
l_unit_price number;
l_selling_price number;
BEGIN
MO_GLOBAL.INIT('ONT');
MO_GLOBAL.SET_POLICY_CONTEXT('S',89);
--FND_GLOBAL.APPS_INITIALIZE(1130,21623,660);
DBMS_OUTPUT.PUT_LINE('1');
v_line_tbl_cnt := 1;
---- Control Record
p_control_rec.pricing_event := 'BATCH';
p_control_rec.calculate_flag := QP_PREQ_GRP.G_SEARCH_N_CALCULATE;
p_control_rec.simulation_flag := 'Y';
p_control_rec.source_order_amount_flag := 'Y';
p_control_rec.PUBLIC_API_CALL_FLAG := 'N';
p_control_rec.rounding_flag := 'Q';
p_control_Rec.manual_discount_flag := 'N';
--p_control_rec.MANUAL_ADJUSTMENTS_CALL_FLAG := 'Y';
p_control_rec.request_type_code := 'ONT';
p_control_rec.TEMP_TABLE_INSERT_FLAG := 'Y';
DBMS_OUTPUT.PUT_LINE('2');
line_rec.request_type_code :='ONT';
--line_rec.PRICE_LIST_HEADER_ID := 8007;
line_rec.line_id :=2125125; -- Order Line Id. This can be any thing for this script
line_rec.line_Index :=1; -- Request Line Index
line_rec.line_type_code := 'LINE'; -- LINE or ORDER(Summary Line)
line_rec.pricing_effective_date := TRUNC(sysdate); -- Pricing as of what date ?
line_rec.active_date_first := TRUNC(sysdate); -- Can be Ordered Date or Ship Date
line_rec.active_date_second := TRUNC(sysdate); -- Can be Ordered Date or Ship Date
line_rec.active_date_first_type := 'ORD'; -- ORD/SHIP
line_rec.active_date_second_type :='SHIP'; -- ORD/SHIP
line_rec.line_quantity := 1; -- Ordered Quantity
line_rec.line_uom_code := 'EA'; -- Ordered UOM Code
line_rec.currency_code := 'USD'; -- Currency Code
line_rec.price_flag := 'Y'; -- Price Flag can have 'Y' , 'N'(No pricing) , 'P'(Phase)
p_line_tbl(1) := line_rec;
DBMS_OUTPUT.PUT_LINE('3');
---- Line Attribute Record
line_attr_rec.LINE_INDEX := 1;
line_attr_rec.PRICING_CONTEXT :='ITEM'; --
line_attr_rec.PRICING_ATTRIBUTE :='PRICING_ATTRIBUTE3';
line_attr_rec.PRICING_ATTR_VALUE_FROM :='ALL';
line_attr_rec.VALIDATED_FLAG :='Y';
p_line_attr_tbl(1) := line_attr_rec;
line_attr_rec.LINE_INDEX := 1;
line_attr_rec.PRICING_CONTEXT :='ITEM'; --
line_attr_rec.PRICING_ATTRIBUTE :='PRICING_ATTRIBUTE1';
--line_attr_rec.COMPARISON_OPERATOR_CODE := 'BETWEEN';
line_attr_rec.PRICING_ATTR_VALUE_FROM := '4466'; -- INVENTORY ITEM ID
line_attr_rec.VALIDATED_FLAG :='Y';
p_line_attr_tbl(2) := line_attr_rec;
line_attr_rec.LINE_INDEX := 1;
line_attr_rec.PRICING_CONTEXT :='ITEM'; --
line_attr_rec.PRICING_ATTRIBUTE :='PRICING_ATTRIBUTE1';
--line_attr_rec.COMPARISON_OPERATOR_CODE := 'BETWEEN';
line_attr_rec.PRICING_ATTR_VALUE_FROM := '2395'; -- INVENTORY ITEM ID
line_attr_rec.VALIDATED_FLAG :='Y';
p_line_attr_tbl(3) := line_attr_rec;
line_attr_rec.LINE_INDEX := 1;
line_attr_rec.PRICING_CONTEXT :='ITEM'; --
line_attr_rec.PRICING_ATTRIBUTE :='PRICING_ATTRIBUTE30';
--line_attr_rec.COMPARISON_OPERATOR_CODE := 'BETWEEN';
line_attr_rec.PRICING_ATTR_VALUE_FROM := 'Yes'; -- INVENTORY ITEM ID
line_attr_rec.VALIDATED_FLAG :='Y';
p_line_attr_tbl(3) := line_attr_rec;
DBMS_OUTPUT.PUT_LINE('4');
---- Qualifier Attribute Record
qual_rec.LINE_INDEX := 1; -- Attributes for the above line. Attributes are attached with the line index
qual_rec.QUALIFIER_CONTEXT :='MODLIST';
qual_rec.QUALIFIER_ATTRIBUTE :='QUALIFIER_ATTRIBUTE4';
qual_rec.QUALIFIER_ATTR_VALUE_FROM :='8007'; -- PRICE LIST ID
qual_rec.COMPARISON_OPERATOR_CODE := '=';
qual_rec.VALIDATED_FLAG :='Y';
p_qual_tbl(1) := qual_rec;
DBMS_OUTPUT.PUT_LINE('5');
qual_rec.line_index := 1;
qual_rec.qualifier_context := 'ITEM';
qual_rec.qualifier_attribute := 'QUALIFIER_ATTRIBUTE31';
qual_rec.qualifier_attr_value_from := 'Yes';
qual_rec.comparison_operator_code := '=';
qual_rec.validated_flag := 'Y';
p_qual_tbl (2) := qual_rec;
DBMS_OUTPUT.PUT_LINE('6');
OE_ORDER_PUB.G_LINE.inventory_item_id := 4466;
DBMS_OUTPUT.PUT_LINE(Fnd_Profile.VALUE('QP_CUSTOM_SOURCED') );
--QP_Attr_Mapping_PUB.Build_Contexts
--( p_request_type_code => 'ONT',
-- p_line_index => 1,
-- p_pricing_type_code => 'L'
--);
QP_Attr_Mapping_PUB.Build_Contexts(
p_request_type_code => 'ONT',
p_pricing_type => 'L',
--p_org_id => 89,
x_price_contexts_result_tbl => x_price_contexts_result_tbl,
x_qual_contexts_result_tbl => x_qual_contexts_result_tbl );
I := x_qual_contexts_result_tbl.FIRST;
IF I IS NOT NULL THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Context: '||x_qual_contexts_result_tbl(I).context_name);
DBMS_OUTPUT.PUT_LINE('attribute_name: '||x_qual_contexts_result_tbl(I).attribute_name);
DBMS_OUTPUT.PUT_LINE('attribute_value: '||x_qual_contexts_result_tbl(I).attribute_value);
EXIT WHEN I = x_qual_contexts_result_tbl.LAST;
I := x_qual_contexts_result_tbl.NEXT(I);
END LOOP;
END IF;
I := x_price_contexts_result_tbl.FIRST;
IF I IS NOT NULL THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Context: '||x_price_contexts_result_tbl(I).context_name);
DBMS_OUTPUT.PUT_LINE('attribute_name: '||x_price_contexts_result_tbl(I).attribute_name);
DBMS_OUTPUT.PUT_LINE('attribute_value: '||x_price_contexts_result_tbl(I).attribute_value);
EXIT WHEN I = x_price_contexts_result_tbl.LAST;
I := x_price_contexts_result_tbl.NEXT(I);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE(Fnd_Profile.VALUE('QP_CUSTOM_SOURCED') );
DBMS_OUTPUT.PUT_LINE('7');
l_version := QP_PREQ_GRP.GET_VERSION;
dbms_output.put_line(OE_ORDER_PUB.G_LINE.price_list_id);
dbms_output.put_line(OE_ORDER_PUB.G_LINE.inventory_item_id);
QP_PREQ_PUB.PRICE_REQUEST
(p_line_tbl,
p_qual_tbl,
p_line_attr_tbl,
p_line_detail_tbl,
p_line_detail_qual_tbl,
p_line_detail_attr_tbl,
p_related_lines_tbl,
p_control_rec,
x_line_tbl,
x_line_qual,
x_line_attr_tbl,
x_line_detail_tbl,
x_line_detail_qual_tbl,
x_line_detail_attr_tbl,
x_related_lines_tbl,
x_return_status,
x_return_status_text);
-- Return Status Information ..
DBMS_OUTPUT.PUT_LINE('8');
DBMS_OUTPUT.PUT_LINE('Return Status text '|| x_return_status_text);
DBMS_OUTPUT.PUT_LINE('Return Status '|| x_return_status);
DBMS_OUTPUT.PUT_LINE('+---------Information Returned to Caller---------------------+ ');
DBMS_OUTPUT.PUT_LINE('-------------Request Line Information-------------------');
I := x_line_tbl.FIRST;
IF I IS NOT NULL THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Line Index: '||x_line_tbl(I).line_index);
DBMS_OUTPUT.PUT_LINE('Unit_price: '||x_line_tbl(I).unit_price);
DBMS_OUTPUT.PUT_LINE('Percent price: '||x_line_tbl(I).percent_price);
DBMS_OUTPUT.PUT_LINE('Adjusted Unit Price: '||x_line_tbl(I).adjusted_unit_price);
DBMS_OUTPUT.PUT_LINE('Pricing status code: '||x_line_tbl(I).status_code);
DBMS_OUTPUT.PUT_LINE('Pricing status text: '||x_line_tbl(I).status_text);
EXIT WHEN I = x_line_tbl.LAST;
I := x_line_tbl.NEXT(I);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('-----------Pricing Attributes Information-------------');
I := x_line_detail_attr_tbl.FIRST;
IF I IS NOT NULL THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Line detail Index '||x_line_detail_attr_tbl(I).line_detail_index);
DBMS_OUTPUT.PUT_LINE('Context '||x_line_detail_attr_tbl(I).pricing_context);
DBMS_OUTPUT.PUT_LINE('Attribute '||x_line_detail_attr_tbl(I).pricing_attribute);
DBMS_OUTPUT.PUT_LINE('Value '||x_line_detail_attr_tbl(I).pricing_attr_value_from);
DBMS_OUTPUT.PUT_LINE('Status Code '||x_line_detail_attr_tbl(I).status_code);
DBMS_OUTPUT.PUT_LINE('---------------------------------------------------');
EXIT WHEN I = x_line_detail_attr_tbl.last;
I:=x_line_detail_attr_tbl.NEXT(I);
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE('-----------Qualifier Attributes Information-------------');
I := x_line_detail_qual_tbl.FIRST;
IF I IS NOT NULL THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Line Detail Index '||x_line_detail_qual_tbl(I).line_detail_index);
DBMS_OUTPUT.PUT_LINE('Context '||x_line_detail_qual_tbl(I).qualifier_context);
DBMS_OUTPUT.PUT_LINE('Attribute '||x_line_detail_qual_tbl(I).qualifier_attribute);
DBMS_OUTPUT.PUT_LINE('Value '||x_line_detail_qual_tbl(I).qualifier_attr_value_from);
DBMS_OUTPUT.PUT_LINE('Status Code '||x_line_detail_qual_tbl(I).status_code);
DBMS_OUTPUT.PUT_LINE('---------------------------------------------------');
EXIT WHEN I = x_line_detail_qual_tbl.last;
I:=x_line_detail_qual_tbl.NEXT(I);
END LOOP;
END IF;
I := x_line_detail_tbl.FIRST;
DBMS_OUTPUT.PUT_LINE('------------Price List/Discount Information------------');
IF I IS NOT NULL THEN
LOOP
L_MOD_NAME := '';
DBMS_OUTPUT.PUT_LINE('Line Index: '||x_line_detail_tbl(I).line_index);
DBMS_OUTPUT.PUT_LINE('Line Detail Index: '||x_line_detail_tbl(I).line_detail_index);
DBMS_OUTPUT.PUT_LINE('Line Detail Type:'||x_line_detail_tbl(I).line_detail_type_code);
DBMS_OUTPUT.PUT_LINE('List Header Id: '||x_line_detail_tbl(I).list_header_id);
DBMS_OUTPUT.PUT_LINE('List Line Id: '||x_line_detail_tbl(I).list_line_id);
DBMS_OUTPUT.PUT_LINE('List Line Type Code: '||x_line_detail_tbl(I).list_line_type_code);
DBMS_OUTPUT.PUT_LINE('Adjustment Amount : '||x_line_detail_tbl(I).adjustment_amount);
DBMS_OUTPUT.PUT_LINE('Line Quantity : '||x_line_detail_tbl(I).line_quantity);
DBMS_OUTPUT.PUT_LINE('Operand Calculation Code: '||x_line_detail_tbl(I).Operand_calculation_code);
DBMS_OUTPUT.PUT_LINE('Operand value: '||x_line_detail_tbl(I).operand_value);
DBMS_OUTPUT.PUT_LINE('Automatic Flag: '||x_line_detail_tbl(I).automatic_flag);
DBMS_OUTPUT.PUT_LINE('Override Flag: '||x_line_detail_tbl(I).override_flag);
DBMS_OUTPUT.PUT_LINE('status_code: '||x_line_detail_tbl(I).status_code);
DBMS_OUTPUT.PUT_LINE('status text: '||x_line_detail_tbl(I).status_text);
DBMS_OUTPUT.PUT_LINE('-------------------------------------------');
EXIT WHEN I = x_line_detail_tbl.LAST;
BEGIN
SELECT NAME INTO L_MOD_NAME
FROM QP_LIST_HEADERS_ALL
WHERE LIST_HEADER_ID=x_line_detail_tbl(I).list_header_id
AND x_line_detail_tbl(I).list_line_type_code 'PLL'
AND x_line_detail_tbl(I).adjustment_amount IS NOT NULL;
L_MODIFIER := L_MODIFIER||'~'||L_MOD_NAME;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
IF x_line_detail_tbl(I).list_line_type_code 'PLL' AND x_line_detail_tbl(I).adjustment_amount IS NOT NULL THEN
L_ADJUSTMENT_AMOUNT := L_ADJUSTMENT_AMOUNT||'~'||x_line_detail_tbl(I).adjustment_amount;
END IF;
I := x_line_detail_tbl.NEXT(I);
END LOOP;
END IF;
SELECT line_unit_price , order_uom_selling_price
INTO l_unit_price , l_selling_price
FROM qp_preq_lines_tmp
WHERE pricing_status_code = Qp_Preq_Pub.g_status_updated
ORDER BY line_id;
DBMS_OUTPUT.PUT_LINE('Unit Price := '||l_unit_price);--x_line_tbl(1).UNIT_PRICE );
DBMS_OUTPUT.PUT_LINE('Selling Price := '||l_selling_price);---x_line_tbl(1).LINE_UNIT_PRICE );
DBMS_OUTPUT.PUT_LINE('L_MODIFIER: '||L_MODIFIER);
DBMS_OUTPUT.PUT_LINE('L_ADJUSTMENT_AMOUNT: '||L_ADJUSTMENT_AMOUNT);
DBMS_OUTPUT.PUT_LINE('--------------Related Lines Information for Price Breaks/Service Items---------------');
I := x_related_lines_tbl.FIRST;
IF I IS NOT NULL THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Line Index :'||x_related_lines_tbl(I).line_index);
DBMS_OUTPUT.PUT_LINE('Line Detail Index: '||x_related_lines_tbl(I).LINE_DETAIL_INDEX);
DBMS_OUTPUT.PUT_LINE('Relationship Type Code: '||x_related_lines_tbl(I).relationship_type_code);
DBMS_OUTPUT.PUT_LINE('Related Line Index: '||x_related_lines_tbl(I).RELATED_LINE_INDEX);
DBMS_OUTPUT.PUT_LINE('Related Line Detail Index: '||x_related_lines_tbl(I).related_line_detail_index);
DBMS_OUTPUT.PUT_LINE('Status Code: '|| x_related_lines_tbl(I).STATUS_CODE);
EXIT WHEN I = x_related_lines_tbl.LAST;
I := x_related_lines_tbl.NEXT(I);
END LOOP;
END IF;
END; -- procedure --;