[Home] [Help]
PACKAGE BODY: APPS.IBE_CANCEL_ORDER_PVT
Source
1 PACKAGE BODY IBE_CANCEL_ORDER_PVT AS
2 /* $Header: IBECORDB.pls 120.3 2005/08/10 04:46:55 appldev ship $ */
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'IBE_CANCEL_ORDER_PVT';
5 G_FILE_NAME CONSTANT VARCHAR2(12) := 'IBECORDB.pls';
6 l_true VARCHAR2(1) := FND_API.G_TRUE;
7
8 PROCEDURE CANCEL_ORDER (
9 p_api_version IN NUMBER := 1 ,
10 p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE ,
11 p_commit IN VARCHAR2 := FND_API.G_FALSE ,
12 p_order_header_id IN NUMBER ,
13 p_comments IN VARCHAR2,
14 p_reason_code IN VARCHAR2,
15 P_Last_Updated_By IN NUMBER,
16 P_Last_Update_Date IN DATE,
17 P_Last_Update_Login IN NUMBER,
18 X_Return_Status OUT NOCOPY VARCHAR2,
19 X_Msg_Count OUT NOCOPY NUMBER,
20 X_Msg_Data OUT NOCOPY VARCHAR2
21 )
22 IS
23 l_api_version NUMBER := 1.0;
24 l_api_name VARCHAR2(50) := 'CANCEL_ORDER';
25
26 l_request_tbl OE_Order_PUB.Request_Tbl_Type :=
27 OE_Order_PUB.G_MISS_REQUEST_TBL;
28 l_control_rec OE_GLOBALS.Control_Rec_Type;
29 l_return_status VARCHAR2(1);
30 l_header_rec OE_Order_PUB.Header_Rec_Type
31 := OE_ORDER_PUB.G_MISS_HEADER_REC;
32 x_header_rec OE_Order_PUB.Header_Rec_Type
33 := OE_ORDER_PUB.G_MISS_HEADER_REC;
34 l_Header_Adj_tbl OE_Order_PUB.Header_Adj_Tbl_Type;
35 l_Header_price_Att_tbl OE_Order_PUB.Header_Price_Att_Tbl_Type ;
36 l_Header_Adj_Att_tbl OE_Order_PUB.Header_Adj_Att_Tbl_Type ;
37 l_Header_Adj_Assoc_tbl OE_Order_PUB.Header_Adj_Assoc_Tbl_Type ;
38 l_Header_Scredit_tbl OE_Order_PUB.Header_Scredit_Tbl_Type;
39 l_line_tbl OE_Order_PUB.Line_Tbl_Type;
40 l_Line_Adj_tbl OE_Order_PUB.Line_Adj_Tbl_Type;
41 l_Line_price_Att_tbl OE_Order_PUB.Line_Price_Att_Tbl_Type ;
42 l_Line_Adj_Att_tbl OE_Order_PUB.Line_Adj_Att_Tbl_Type ;
43 l_Line_Adj_Assoc_tbl OE_Order_PUB.Line_Adj_Assoc_Tbl_Type ;
44 l_Line_Scredit_tbl OE_Order_PUB.Line_Scredit_Tbl_Type;
45 l_Lot_Serial_tbl OE_Order_PUB.Lot_Serial_Tbl_Type;
46 l_old_header_rec OE_Order_PUB.Header_Rec_Type;
47 l_old_Header_Adj_tbl OE_Order_PUB.Header_Adj_Tbl_Type;
48 l_old_Header_price_Att_tbl OE_Order_PUB.Header_Price_Att_Tbl_Type ;
49 l_old_Header_Adj_Att_tbl OE_Order_PUB.Header_Adj_Att_Tbl_Type ;
50 l_old_Header_Adj_Assoc_tbl OE_Order_PUB.Header_Adj_Assoc_Tbl_Type ;
51 l_old_Header_Scredit_tbl OE_Order_PUB.Header_Scredit_Tbl_Type;
52 l_old_line_tbl OE_Order_PUB.Line_Tbl_Type;
53 l_old_Line_Adj_tbl OE_Order_PUB.Line_Adj_Tbl_Type;
54 l_old_Line_price_Att_tbl OE_Order_PUB.Line_Price_Att_Tbl_Type ;
55 l_old_Line_Adj_Att_tbl OE_Order_PUB.Line_Adj_Att_Tbl_Type ;
56 l_old_Line_Adj_Assoc_tbl OE_Order_PUB.Line_Adj_Assoc_Tbl_Type ;
57 l_old_Line_Scredit_tbl OE_Order_PUB.Line_Scredit_Tbl_Type;
58 l_old_Lot_Serial_tbl OE_Order_PUB.Lot_Serial_Tbl_Type;
59 l_action_request_tbl OE_Order_PUB.Request_Tbl_Type;
60 l_return_values varchar2(50);
61 l_header_val_rec OE_Order_PUB.Header_Val_Rec_Type;
62 l_old_header_val_rec OE_Order_PUB.Header_Val_Rec_Type;
63 l_header_adj_val_tbl OE_Order_PUB.Header_Adj_Val_Tbl_Type;
64 l_old_header_adj_val_tbl OE_Order_PUB.Header_Adj_Val_Tbl_Type;
65 l_header_scredit_val_tbl OE_Order_PUB.Header_Scredit_Val_Tbl_Type;
66 l_old_header_scredit_val_tbl OE_Order_PUB.Header_Scredit_Val_Tbl_Type;
67 l_line_val_tbl OE_Order_PUB.Line_Val_Tbl_Type;
68 l_old_line_val_tbl OE_Order_PUB.Line_Val_Tbl_Type;
69 l_line_adj_val_tbl OE_Order_PUB.Line_Adj_Val_Tbl_Type;
70 l_old_line_adj_val_tbl OE_Order_PUB.Line_Adj_Val_Tbl_Type;
71 l_line_scredit_val_tbl OE_Order_PUB.Line_Scredit_Val_Tbl_Type;
72 l_old_line_scredit_val_tbl OE_Order_PUB.Line_Scredit_Val_Tbl_Type;
73 l_lot_serial_val_tbl OE_Order_PUB.Lot_Serial_Val_Tbl_Type;
74 l_old_lot_serial_val_tbl OE_Order_PUB.Lot_Serial_Val_Tbl_Type;
75 l_commit VARCHAR2(10) := FND_API.G_FALSE;
76 l_msg_count NUMBER;
77 l_msg_data VARCHAR2(2000);
78 l_userid VARCHAR2(30);
79 l_rownums NUMBER;
80 l_colname VARCHAR2(240);
81
82
83 -- Variable needed for Cancelling Orders across difft orgs.
84 l_user_orgid NUMBER;
85 l_order_orgid NUMBER;
86
87 x_ont_return_status VARCHAR2(30);
88 x_ont_msg_count NUMBER;
89 x_ont_msg_data VARCHAR2(2000);
90
91 CURSOR c_ord(l_header_id NUMBER) IS
92 SELECT org_id FROM oe_order_headers_all
93 WHERE header_id = l_header_id;
94
95 BEGIN
96
97 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
98 IBE_Util.Debug('Begin IBE_CANCEL_ORDER_PVT.CANCEL_ORDER()');
99 END IF;
100
101 -- Standard Start of API savepoint
102 SAVEPOINT CANCEL_Order_PUB;
103
104 -- Standard call to check for call compatibility.
105 IF NOT FND_API.Compatible_API_Call(L_API_VERSION,
106 p_api_version,
107 L_API_NAME ,
108 G_PKG_NAME )
109 THEN
110 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
111 END IF;
112
113 -- Initialize message list if p_init_msg_list is set to TRUE.
114
115 IF FND_API.To_Boolean(p_init_msg_list) THEN
116 FND_Msg_Pub.initialize;
117 END IF;
118
119 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
120 IBE_UTIL.DEBUG('IBE_CANCEL_ORDER_PVT.CANCEL_ORDER:START');
121 END IF;
122
123
124
125 -- ******************************************************************
126 -- cancel order across multi-org
127 -- If the User-Context-OrgId is different from the Order's OrgId,
128 -- Then
129 -- Switch the Context to the Order-Creator's Context
130 -- and then call the process-order api
131 -- Else
132 -- Call the process-order api directly
133 -- ******************************************************************
134
135
136 -- Get the User's Session ORG_ID
137 l_user_orgid := mo_global.GET_CURRENT_ORG_ID();
138
139 -- Get the Order's ORG_ID
140 OPEN c_ord(p_order_header_id);
141 FETCH c_ord into l_order_orgid;
142 CLOSE c_ord;
143
144 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
145 IBE_UTIL.DEBUG('User Context - ORG_ID : '||TO_CHAR(l_user_orgid));
146 IBE_UTIL.DEBUG('OrderContext - ORG_ID : '||TO_CHAR(l_order_orgid));
147 END IF;
148
149 IF l_order_orgid <> l_user_orgid THEN
150
151 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
152 IBE_UTIL.DEBUG('Before ORG_ID Switch to Orders ORG_ID');
153 END IF;
154
155 -- Set the Session's ORGID to the Order's ORG_ID, before calling the Process_Order() API
156 -- i.e Set the Global Security Context to that of the original Order Creator's ORG_ID
157 mo_global.set_policy_context('S', l_order_orgid);
158
159 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
160 IBE_UTIL.DEBUG('After ORG_ID Switch to Orders ORG_ID : '|| mo_global.GET_CURRENT_ORG_ID());
161 END IF;
162
163 END IF; -- End of (l_order_orgid <> l_user_orgid) condition
164
165
166
167 -- ******************************************************************
168 -- Initialize the local variable
169 -- ******************************************************************
170 l_msg_data := x_msg_data;
171 l_msg_count := x_msg_count;
172 x_return_status := FND_API.G_RET_STS_SUCCESS;
173
174 --******************************************************************
175 -- Initialize the Order Header information
176 -- ******************************************************************
177 l_header_rec.header_id := p_order_header_id;
178 l_header_rec.cancelled_flag := 'Y';
179 l_header_rec.change_reason := p_reason_code;
180 l_header_rec.change_comments := p_comments;
181 l_header_rec.operation := OE_Globals.G_OPR_UPDATE;
182 --
183 -- API body
184 --
185 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
186 IBE_UTIL.DEBUG('OE_Order_GRP.Process_Order:START');
187 END IF;
188 OE_Order_GRP.Process_Order
189 (p_api_version_number => 1.0,
190 p_init_msg_list => FND_API.G_TRUE,
191 p_return_values => l_return_values,
192 p_commit => FND_API.G_FALSE,
193 x_return_status => x_return_status,
194 x_msg_count => x_msg_count,
195 x_msg_data => x_msg_data,
196 p_header_rec => l_header_rec,
197 x_header_rec => x_header_rec,
198 x_header_val_rec => l_header_val_rec,
199 x_Header_Adj_tbl => l_header_adj_tbl,
200 x_Header_Adj_val_tbl => l_header_adj_val_tbl,
201 x_Header_price_Att_tbl => l_header_price_att_tbl,
202 x_Header_Adj_Att_tbl => l_header_adj_att_tbl,
203 x_Header_Adj_Assoc_tbl => l_header_adj_assoc_tbl,
204 x_Header_Scredit_tbl => l_header_scredit_tbl,
205 x_Header_Scredit_val_tbl => l_header_scredit_val_tbl,
206 x_line_tbl => l_line_tbl,
207 x_line_val_tbl => l_line_val_tbl,
208 x_Line_Adj_tbl => l_line_adj_tbl,
209 x_Line_Adj_val_tbl => l_line_adj_val_tbl,
210 x_Line_price_Att_tbl => l_line_price_att_tbl,
211 x_Line_Adj_Att_tbl => l_line_adj_att_tbl,
212 x_Line_Adj_Assoc_tbl => l_line_adj_assoc_tbl,
213 x_Line_Scredit_tbl => l_line_scredit_tbl,
214 x_Line_Scredit_val_tbl => l_line_scredit_val_tbl,
215 x_Lot_Serial_tbl => l_lot_serial_tbl,
216 x_Lot_Serial_val_tbl => l_lot_serial_val_tbl,
217 x_action_request_tbl => l_action_request_tbl
218 );
219 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
220 IBE_UTIL.DEBUG('OE_Order_GRP.Process_Order:Finishes');
221 END IF;
222
223 -- Check return status from the above procedure call
224
225 IF x_return_status = FND_API.G_RET_STS_ERROR then
226 raise FND_API.G_EXC_ERROR;
227 elsif x_return_status = FND_API.G_RET_STS_UNEXP_ERROR then
228 raise FND_API.G_EXC_UNEXPECTED_ERROR;
229 END IF;
230 if x_return_status = FND_API.G_RET_STS_SUCCESS then
231 -- call Notification api.
232 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
233 IBE_UTIL.DEBUG('Ready to call Notification API:IBE_WORKFLOW_PVT.Notify_cancel_order');
234 IBE_UTIL.DEBUG('Input order id to notification API is: '||p_order_header_id);
235 END IF;
236 IBE_WORKFLOW_PVT.Notify_cancel_order(
237 p_api_version => 1.0,
238 p_init_msg_list => FND_API.G_FALSE,
239 p_order_id => p_order_header_id,
240 x_return_status => x_return_status,
241 x_msg_count => x_msg_count,
242 x_msg_data => x_msg_data
243 );
244 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
245 IBE_UTIL.DEBUG('Done Notification API:IBE_WORKFLOW_PVT.Notify_cancel_order');
246 END IF;
247 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
248 RAISE FND_API.G_EXC_ERROR;
249 END IF;
250 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
251 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
252 END IF;
253
254 end if;
255
256
257 -- Restore the Logged-In User's Security Context, if switched
258 IF l_order_orgid <> l_user_orgid THEN
259
260 mo_global.set_policy_context('S', l_user_orgid);
261
262 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
263 IBE_UTIL.DEBUG('Restored the ORG_ID to the Users ORG_ID: '|| mo_global.GET_CURRENT_ORG_ID());
264 END IF;
265
266 END IF;
267
268
269 --
270 -- End of API body.
271 --
272 -- Standard check for l_commit
273 IF FND_API.to_Boolean( l_commit ) THEN
274 COMMIT WORK;
275 END IF;
276
277 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
278 IBE_UTIL.DEBUG('IBE_CANCEL_ORDER_PVT.CANCEL_ORDER:DONE');
279 END IF;
280
281 -- Standard call to get message count and if count is 1, get message info.
282 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
283 p_data => x_msg_data);
284
285
286 EXCEPTION
287 WHEN FND_API.G_EXC_ERROR THEN
288 ROLLBACK TO CANCEL_Order_PUB;
289 x_return_status := FND_API.G_RET_STS_ERROR;
290 FND_Msg_Pub.Count_And_Get(p_encoded => FND_API.G_FALSE,
291 p_count => x_msg_count ,
292 p_data => x_msg_data);
293
294 -- Restore the Logged-In User's Security Context, if switched
295 IF l_order_orgid <> l_user_orgid THEN
296
297 mo_global.set_policy_context('S', l_user_orgid);
298
299 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
300 IBE_UTIL.DEBUG('Restored the ORG_ID to the Users ORG_ID: '|| mo_global.GET_CURRENT_ORG_ID());
301 END IF;
302
303 END IF;
304
305 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
306 IBE_Util.Debug('End IBE_CANCEL_ORDER_PVT.CANCEL_ORDER()');
307 END IF;
308
309 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
310 ROLLBACK TO CANCEL_Order_PUB;
311 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
312 FND_Msg_Pub.Count_And_Get(p_encoded => FND_API.G_FALSE,
313 p_count => x_msg_count ,
314 p_data => x_msg_data);
315 -- Restore the Logged-In User's Security Context, if switched
316 IF l_order_orgid <> l_user_orgid THEN
317
318 mo_global.set_policy_context('S', l_user_orgid);
319
320 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
321 IBE_UTIL.DEBUG('Restored the ORG_ID to the Users ORG_ID: '|| mo_global.GET_CURRENT_ORG_ID());
322 END IF;
323
324 END IF;
325
326 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
327 IBE_Util.Debug('End IBE_CANCEL_ORDER_PVT.CANCEL_ORDER()');
328 END IF;
329
330 WHEN OTHERS THEN
331 -- changes for retrieving OM messages
332 ibe_order_save_pvt.retrieve_oe_messages;
333 ROLLBACK TO CANCEL_Order_PUB;
334 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
335
336 IF FND_Msg_Pub.Check_Msg_Level( FND_Msg_Pub.G_MSG_LVL_UNEXP_ERROR ) THEN
337 FND_Msg_Pub.Add_Exc_Msg(G_PKG_NAME,
338 L_API_NAME);
339 END IF;
340 FND_Msg_Pub.Count_And_Get(p_encoded => FND_API.G_FALSE,
341 p_count => x_ont_msg_count ,
342 p_data => x_ont_msg_data);
343
344 -- Restore the Logged-In User's Security Context, if switched
345 IF l_order_orgid <> l_user_orgid THEN
346
347 mo_global.set_policy_context('S', l_user_orgid);
348
349 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
350 IBE_UTIL.DEBUG('Restored the ORG_ID to the Users ORG_ID: '|| mo_global.GET_CURRENT_ORG_ID());
351 END IF;
352
353 END IF;
354
355 IF (IBE_UTIL.G_DEBUGON = l_true) THEN
356 IBE_Util.Debug('End IBE_CANCEL_ORDER_PVT.CANCEL_ORDER()');
357 END IF;
358
359
360 END CANCEL_ORDER;
361
362 END IBE_CANCEL_ORDER_PVT;