DBA Data[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;