DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMI_OM_UTILITIES_PKG

Source


1 PACKAGE BODY GMI_OM_UTILITIES_PKG AS
2 /*  $Header: GMIUTOMB.pls 120.0 2005/05/25 16:19:12 appldev noship $    */
3 /* ===========================================================================
4  |                Copyright (c) 2000 Oracle Corporation                    |
5  |                        TVP, Reading, England                            |
6  |                         All rights reserved                             |
7  ===========================================================================
8  |  FILENAME                                                               |
9  |      GMIUTOMB.pls                                                       |
10  |                                                                         |
11  |  DESCRIPTION                                                            |
12  |                                                                         |
13  |      Body of package   GMI_OM_UTILITIES_PKG                             |
14  |                                                                         |
15  |  NOTES                                                                  |
16  |                                                                         |
17  |  HISTORY                                                                |
18  |                                                                         |
19  |  17-NOV-04 Created                                                      |
20  |  17-NOV-04 parkumar Added Functionality for BackOrder and Delete        |
21  |                     Allocations for a Move Order Line                   |
22  |                           - Delete_Alloc_BackOrder_MO_Line              |
23  ===========================================================================
24 */
25 
26 /*   Global constant holding the package name   */
27 
28 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'GMI_OM_UTILITIES_PKG';
29 
30   -- Delete_Alloc_BackOrder_MO_Line
31   -- Bug 3874270
32   -- This Function deletes Allocations for a Move Order Line if called with
33   -- p_mode = 'DA' and Backorders a Move Order Line if called with
34   -- p_mode = 'BO'.
35   -- If any allocations exist for the move order line, then they are deleted
36   -- All the Delivery Detail Lines are backordered and screen refreshed.
37   -- The move order line is closed
38   -- The order line status remains unchanged
39 
40 
41 FUNCTION  Delete_Alloc_BackOrder_MO_Line(
42          p_txn_source_line_id        IN    NUMBER,
43          p_line_id                   IN    NUMBER,
44          p_mode                      IN    VARCHAR2)
45  RETURN  BOOLEAN IS
46 
47  -- p_mode : 'DA' For Delete Allocations, 'BO' For BackOrdering
48 
49    l_IC$DEFAULT_LOCT 	VARCHAR2(255) DEFAULT NVL(FND_PROFILE.VALUE('IC$DEFAULT_LOCT'),' ') ;
50    l_tran_rec        	GMI_TRANS_ENGINE_PUB.ictran_rec;
51    l_txn_source_line_id	NUMBER	:= p_txn_source_line_id;
52    l_line_id		NUMBER	:= p_line_id;
53 
54    CURSOR  Wdd_Cur IS
55    SELECT  move_order_line_id
56  	  ,delivery_detail_id
57 	  ,source_header_id
58 	  ,source_line_id
59 	  ,released_status
60     FROM  wsh_delivery_details
61    WHERE  source_line_id     = l_txn_source_line_id
62      AND  move_order_line_id = l_line_id
63      AND  released_status    = 'S'
64      AND  source_code	     = 'OE';
65 
66 
67   CURSOR  Get_Trans_Id_Cur(p_delivery_detail_id IN NUMBER) IS
68   SELECT  trans_id ,line_id, trans_qty, trans_qty2
69     FROM  ic_tran_pnd
70    WHERE  line_id = l_txn_source_line_id
71      AND  line_detail_id = p_delivery_detail_id
72      AND  doc_type	 = 'OMSO'
73      AND  completed_ind	 = 0
74      AND  delete_mark    = 0
75      AND  staged_ind	<> 1
76      AND  ( lot_id <> 0 OR location <> l_IC$DEFAULT_LOCT);
77 
78   CURSOR Get_Default_Trans(p_line_id ic_tran_pnd.line_id%TYPE) IS
79   SELECT trans_id
80     FROM ic_tran_pnd
81    WHERE line_id        = p_line_id
82      AND line_detail_id IS NULL
83      AND doc_type       = 'OMSO'
84      AND delete_mark    = 0
85      AND completed_ind  = 0
86      AND staged_ind     = 0
87      AND ( lot_id = 0 AND location = l_IC$DEFAULT_LOCT);
88 
89    l_in_tran_rec             gmi_trans_engine_pub.ictran_rec;
90    l_out_tran_rec            gmi_trans_engine_pub.ictran_rec;
91    l_default_trans_id        NUMBER;
92    wdd_row		     wdd_cur%ROWTYPE;
93    get_trans_id_row	     get_trans_id_cur%ROWTYPE;
94    l_return_status  	     VARCHAR2(1);
95    l_tran_row        	     IC_TRAN_PND%ROWTYPE;
96    l_msg_count	             NUMBER  :=0;
97    l_msg_data		     VARCHAR2(2000) := '';
98    l_mode	             VARCHAR2(2);
99    l_api_return_status       VARCHAR2(10);
100    l_shipping_attr	     WSH_INTERFACE.ChangedAttributeTabType;
101    l_mo_line	             GMI_Move_Order_Global.mo_line_rec;
102    l_organization_id	     IC_TXN_REQUEST_LINES.organization_id%TYPE ;
103    l_quantity		     NUMBER := 0;
104    l_transaction_quantity    NUMBER := 0;
105    l_secondary_quantity	     NUMBER := 0;
106    l_transaction_quantity2   NUMBER := 0;
107    l_allocations_Not_exists  NUMBER := 0;
108 
109    l_trans_qty  NUMBER := 0;
110    l_trans_qty2 NUMBER := 0;
111 
112 
113 BEGIN
114    gmi_reservation_util.println('In Function Delete_Alloc_BackOrder_MO_Line');
115 
116     /* Standard begin of API savepoint
117    ===========================================*/
118    SAVEPOINT Delete_Alloc_BackOrder_MO_Line;
119 
120    l_mode    := p_mode;
121    l_return_status := FND_API.G_RET_STS_SUCCESS;
122 
123    OPEN	wdd_cur;
124    LOOP
125       FETCH wdd_cur INTO wdd_row;
126       EXIT WHEN wdd_cur%NOTFOUND;
127       l_trans_qty  := 0;
128       l_trans_qty2 := 0;
129 
130       OPEN get_trans_id_cur(wdd_row.delivery_detail_id);
131       LOOP
132             FETCH  get_trans_id_cur INTO get_trans_id_row;
133             EXIT WHEN get_trans_id_cur%NOTFOUND;
134 
135             l_tran_rec.trans_id  := get_trans_id_row.trans_id;
136 	    gmi_reservation_util.println('In Function Delete_Alloc_BackOrder_MO_Line Before delete_pending_transaction');
137             GMI_TRANS_ENGINE_PUB.delete_pending_transaction (
138 	                1
139                 	, FND_API.G_FALSE
140                 	, FND_API.G_FALSE
141                 	, FND_API.G_VALID_LEVEL_FULL
142                 	, l_tran_rec
143                 	, l_tran_row
144                 	, l_return_status
145                 	, l_msg_count
146                 	, l_msg_data);
147 
148 	    gmi_reservation_util.println('Return Status from  delete_pending_transaction'|| l_return_status);
149 
150 	    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
151 	       gmi_reservation_util.println('Error Status from  delete_pending_transaction');
152 	       raise FND_API.G_EXC_ERROR;
153 	    END IF;
154 
155 	    l_trans_qty  := nvl(l_trans_qty,0)  + nvl(abs(get_trans_id_row.trans_qty),0);
156             l_trans_qty2 := nvl(l_trans_qty2,0) + nvl(abs(get_trans_id_row.trans_qty2),0);
157 
158       END LOOP;
159       CLOSE get_trans_id_cur;
160 
161       IF  l_mode = 'BO' THEN
162          SELECT organization_id
163  	   INTO l_organization_id
164 	   FROM IC_TXN_REQUEST_LINES
165           WHERE  LINE_ID = l_line_id;
166 
167          l_shipping_attr(1).source_header_id    := wdd_row.source_header_id;
168          l_shipping_attr(1).source_line_id      := wdd_row.source_line_id;
169          l_shipping_attr(1).ship_from_org_id    := l_organization_id;
170          l_shipping_attr(1).released_status     := wdd_row.released_status;
171          l_shipping_attr(1).delivery_detail_id	:= wdd_row.delivery_detail_id;
172          l_shipping_attr(1).action_flag		      := 'B';
173 
174          WSH_INTERFACE.Update_Shipping_Attributes (
175 			                  p_source_code		      => 'INV'
176                        ,p_changed_attributes	=> l_shipping_attr
177                        ,x_return_status		    => l_api_return_status
178                      );
179           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
180              gmi_reservation_util.println('Error Status from  WSH_INTERFACE.Update_Shipping_Attributes');
181              raise FND_API.G_EXC_ERROR;
182           END IF;
183 
184       END IF; /*  IF ( l_mode = 'BO') THEN */
185 
186     END LOOP; /* wdd_cur */
187 
188     CLOSE wdd_cur;
189 
190     IF (l_mode = 'BO')  THEN
191 	UPDATE 	IC_TXN_REQUEST_LINES
192 	   SET  LINE_STATUS = 5,
193                 quantity_detailed = quantity_detailed  - nvl(l_trans_qty,0),
194                 secondary_quantity_detailed = secondary_quantity_detailed  - nvl(l_trans_qty2,0)
195  	 WHERE 	LINE_ID	= l_line_id;--:TOLINES_BLK.LINE_ID;
196     ELSE
197        UPDATE  IC_TXN_REQUEST_LINES
198           SET  quantity_detailed = quantity_detailed  - nvl(l_trans_qty,0),
199                secondary_quantity_detailed = secondary_quantity_detailed  - nvl(l_trans_qty2,0)
200         WHERE  LINE_ID = l_line_id;--:TOLINES_BLK.LINE_ID;
201     END IF;
202 
203 
204     OPEN Get_Default_Trans(l_txn_source_line_id) ;
205     FETCH Get_Default_Trans INTO l_default_trans_id;
206     IF( Get_Default_Trans%NOTFOUND) THEN
207        CLOSE  Get_Default_Trans;
208        gmi_reservation_util.println('Get_Default_Trans%NOTFOUND in Delete_Alloc_BackOrder_MO_Line');
209        RETURN   FALSE;
210     END IF ;
211 
212     CLOSE Get_Default_Trans;
213 
214     IF NVL(l_default_trans_id,0)  <>  0 THEN
215        l_in_tran_rec.trans_id := l_default_trans_id ;
216 
217        IF GMI_TRAN_PND_DB_PVT.FETCH_IC_TRAN_PND (l_in_tran_rec, l_out_tran_rec)  THEN
218           gmi_reservation_util.println('In Delete_Alloc_BackOrder_MO_Line before call to GMI_Reservation_Util.balance_default_lot');
219           GMI_Reservation_Util.balance_default_lot(
220                        p_ic_default_rec            => l_out_tran_rec
221                      , p_opm_item_id               => l_out_tran_rec.item_id
222                      , x_return_status             => l_return_status
223                      , x_msg_count                 => l_msg_count
224                      , x_msg_data                  => l_msg_data
225                      );
226 
227           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)  THEN
228              gmi_reservation_util.println('Error Status from  GMI_Reservation_Util.balance_default_lot');
229              raise FND_API.G_EXC_ERROR;
230           END IF;
231         END IF;
232      END IF; /*  IF NVL(l_default_trans_id,0)  <>  0 THEN */
233 
234     IF wdd_cur%ISOPEN THEN
235       CLOSE wdd_cur;
236     END IF;
237     IF get_default_trans%ISOPEN THEN
238       CLOSE get_default_trans;
239     END IF;
240     IF get_trans_id_cur%ISOPEN THEN
241       CLOSE get_trans_id_cur;
242     END IF;
243 
244     gmi_reservation_util.println('Successfully Returning from Delete_Alloc_BackOrder_MO_Line');
245 
246 RETURN TRUE;
247 EXCEPTION
248 
249 WHEN fnd_api.g_exc_error THEN
250 
251     ROLLBACK TO SAVEPOINT Delete_Alloc_BackOrder_MO_Line;
252 
253     GMI_Reservation_Util.PrintLn('Exception fnd_api.g_exc_error Delete_Alloc_BackOrder_MO_Line');
254     IF wdd_cur%ISOPEN THEN
255       CLOSE wdd_cur;
256     END IF;
257     IF get_default_trans%ISOPEN THEN
258       CLOSE get_default_trans;
259     END IF;
260     IF get_trans_id_cur%ISOPEN THEN
261       CLOSE get_trans_id_cur;
262     END IF;
263 
264     RETURN FALSE;
265  WHEN fnd_api.g_exc_unexpected_error THEN
266      ROLLBACK TO SAVEPOINT Delete_Alloc_BackOrder_MO_Line;
267 
268     GMI_Reservation_Util.PrintLn('Exception fnd_api.g_exc_error Delete_Alloc_BackOrder_MO_Line');
269     IF wdd_cur%ISOPEN THEN
270       CLOSE wdd_cur;
271     END IF;
272     IF get_default_trans%ISOPEN THEN
273       CLOSE get_default_trans;
274     END IF;
275     IF get_trans_id_cur%ISOPEN THEN
276       CLOSE get_trans_id_cur;
277     END IF;
278 
279 WHEN Others THEN
280 
281     ROLLBACK TO SAVEPOINT Delete_Alloc_BackOrder_MO_Line;
282 
283     GMI_Reservation_Util.PrintLn('Others Exception Delete_Alloc_BackOrder_MO_Line');
284     IF wdd_cur%ISOPEN THEN
285       CLOSE wdd_cur;
286     END IF;
287     IF get_default_trans%ISOPEN THEN
288       CLOSE get_default_trans;
289     END IF;
290     IF get_trans_id_cur%ISOPEN THEN
291       CLOSE get_trans_id_cur;
292     END IF;
293 
294     RETURN FALSE;
295 
296 
297  END   Delete_Alloc_BackOrder_MO_Line;
298 
299 END GMI_OM_UTILITIES_PKG;
300