DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMIGAPI

Source


1 PACKAGE BODY GMIGAPI AS
2 /* $Header: GMIGAPIB.pls 115.23 2004/03/15 20:07:41 jsrivast ship $ */
3 
4 /*  Global variables */
5 G_PKG_NAME     CONSTANT VARCHAR2(30):='GMIGAPI';
6 
7 /* +==========================================================================+
8  | PROCEDURE NAME                                                           |
9  |    Create_Item                                                           |
10  |                                                                          |
11  | TYPE                                                                     |
12  |    Public                                                                |
13  |                                                                          |
14  | USAGE                                                                    |
15  |    Create a new Item.                                                    |
16  |                                                                          |
17  | DESCRIPTION                                                              |
18  |    This procedure creates a new item using the raw data supplied         |
19  |                                                                          |
20  | PARAMETERS                                                               |
21  |    p_api_version      IN  NUMBER       - Api Version                     |
22  |    p_init_msg_list    IN  VARCHAR2     - Message Initialization Ind.     |
23  |    p_commit           IN  VARCHAR2     - Commit Indicator                |
24  |    p_validation_level IN  VARCHAR2     - Validation Level Indicator      |
25  |    p_item_rec         IN  item_rec_typ - Item details                    |
26  |    x_ic_item_mst_row  OUT ic_item_mst%ROWTYPE - The ic_item_mst row      |
27  |    x_ic_item_cpg_row  OUT ic_item_cpg%ROWTYPE - The ic_item_cpg row      |
28  |    x_return_status    OUT VARCHAR2     - Return Status                   |
29  |    x_msg_count        OUT NUMBER       - Number of messages              |
30  |    x_msg_data         OUT VARCHAR2     - Messages in encoded format      |
31  |                                                                          |
32  | RETURNS                                                                  |
33  |    Via x_ OUT parameters                                                 |
34  |                                                                          |
35  | HISTORY                                                                  |
36  | 13-May-00     P.J.Schofield Major restructuring for performance reasons  |
37  |               B1294915.                                                  |
38  | 18-Oct-02     A. Cataldo - Bug 2513463 - Need to handle problems with    |
39  |               ic_item_mst_insert and Create_Lot if they occur            |
40  +==========================================================================+
41 */
42 
43 PROCEDURE Create_Item
44 ( p_api_version      IN  NUMBER
45 , p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE
46 , p_commit           IN  VARCHAR2 := FND_API.G_FALSE
47 , p_validation_level IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL
48 , p_item_rec         IN  GMIGAPI.item_rec_typ
49 , x_ic_item_mst_row  OUT NOCOPY ic_item_mst%ROWTYPE
50 , x_ic_item_cpg_row  OUT NOCOPY ic_item_cpg%ROWTYPE
51 , x_return_status    OUT NOCOPY VARCHAR2
52 , x_msg_count        OUT NOCOPY NUMBER
53 , x_msg_data         OUT NOCOPY VARCHAR2
54 )
55 IS
56   l_api_name         VARCHAR2(30) := 'G_Create_Item';
57   l_lot_rec          GMIGAPI.lot_rec_typ;
58   l_return_status    NUMBER;
59   l_ic_lots_mst_row  ic_lots_mst%ROWTYPE;
60   l_ic_lots_cpg_row  ic_lots_cpg%ROWTYPE;
61 BEGIN
62 
63   /*  Standard call to check for call compatibility. */
64 
65   IF NOT FND_API.Compatible_API_CALL
66     (GMIGUTL.api_version, p_api_version, l_api_name, G_PKG_NAME)
67   THEN
68     Raise FND_API.G_EXC_UNEXPECTED_ERROR;
69   END IF;
70 
71   /*  Initialize message list if p_int_msg_list is set TRUE.  */
72   IF FND_API.to_boolean(p_init_msg_list)
73   THEN
74     FND_MSG_PUB.Initialize;
75   END IF;
76 
77   x_return_status :=FND_API.G_RET_STS_SUCCESS;
78 
79   GMIVITM.Validate_Item
80                         (  p_api_version      => p_api_version
81                          , p_validation_level => p_validation_level
82                          , p_item_rec         => p_item_rec
83        			 , x_ic_item_mst_row  => x_ic_item_mst_row
84                          , x_ic_item_cpg_row  => x_ic_item_cpg_row
85                          , x_return_status    => x_return_status
86                          , x_msg_count        => x_msg_count
87                          , x_msg_data         => x_msg_data
88                         );
89 
90   SAVEPOINT Create_Item;
91 
92   IF x_return_status = FND_API.G_RET_STS_SUCCESS
93   THEN
94     /*  If no errors were found then proceed with the database inserts */
95     IF GMIVDBL.ic_item_mst_insert(x_ic_item_mst_row, x_ic_item_mst_row)
96     THEN
97 	-- TKW 9/11/2003 B2378017
98  	-- Moved call to gmi_item_categories from ic_item_mst_insert to here.
99 	-- It is now called with new signature.
100 	GMIVDBL.gmi_item_categories(p_item_rec, x_ic_item_mst_row);
101 
102       -- Jatinder - B3158806 - removed the check for the CPG install and
103       -- added check for lot_ctl instead
104       IF x_ic_item_mst_row.lot_ctl = 1
105       THEN
106         /*  ic_item_mst created OK. Copy the allocated item_id. */
107         x_ic_item_cpg_row.item_id := x_ic_item_mst_row.item_id;
108         IF GMIVDBL.ic_item_cpg_insert(x_ic_item_cpg_row, x_ic_item_cpg_row)
109         THEN
110           NULL;
111         ELSE
112           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
113         END IF;
114       END IF;
115 
116       /*  Item Master row(s) created ok, so now we must create */
117       /*  the Lot Master row(s). Set up the input lot record */
118       /*  and call the gmigapi.create_lot procedure with the validation level */
119       /*  set to NONE. This will bypass the validation in the procedure, but */
120       /*  still set up the row(s) ready for insertion into the database. */
121 
122       l_lot_rec.lot_no := GMIGUTL.IC$DEFAULT_LOT;
123 
124       Create_Lot (  p_api_version     => p_api_version
125                     , p_init_msg_list   => FND_API.G_FALSE
126                     , p_commit          => FND_API.G_FALSE
127                     , p_validation_level=> FND_API.G_VALID_LEVEL_NONE
128                     , p_lot_rec         => l_lot_rec
129                     , p_ic_item_mst_row => x_ic_item_mst_row
130                     , p_ic_item_cpg_row => x_ic_item_cpg_row
131                     , x_ic_lots_mst_row => l_ic_lots_mst_row
132                     , x_ic_lots_cpg_row => l_ic_lots_cpg_row
133                     , x_return_status   => x_return_status
134                     , x_msg_count       => x_msg_count
135                     , x_msg_data        => x_msg_data
136                    );
137 
138       IF x_return_status = FND_API.G_RET_STS_SUCCESS
139       THEN
140         FND_MESSAGE.SET_NAME('GMI','IC_API_ITEM_CREATED');
141         FND_MESSAGE.SET_TOKEN('ITEM_NO', l_lot_rec.item_no);
142         FND_MSG_PUB.Add;
143 
144         IF FND_API.to_boolean(p_commit)
145         THEN
146           COMMIT;
147         END IF;
148       ELSE /* Bug 2513463 - Handle possbile errors with Create_Lot */
149          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
150       END IF;
151     ELSE  /* Bug 2513463 - Handle possbile errors with ic_item_insert */
152       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
153     END IF;
154   ELSE
155     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
156   END IF;
157 
158   FND_MSG_PUB.Count_AND_GET
159         (p_count => x_msg_count, p_data => x_msg_data);
160 
161   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
162   THEN
163     ROLLBACK TO Create_Item;
164   END IF;
165 
166   EXCEPTION
167    WHEN OTHERS THEN
168     ROLLBACK TO Create_Item;
169     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
170 
171     FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
172     FND_MSG_PUB.Count_AND_GET
173       (p_count => x_msg_count, p_data => x_msg_data);
174 END Create_Item;
175 
176 
177 /* +==========================================================================+
178  | PROCEDURE NAME                                                           |
179  |    Create_Lot                                                            |
180  |                                                                          |
181  | TYPE                                                                     |
182  |    Group                                                                 |
183  |                                                                          |
184  | USAGE                                                                    |
185  |    Create a new Inventory Lot.                                           |
186  |                                                                          |
187  | DESCRIPTION                                                              |
188  |    This procedure creates a new inventory Lot using the raw data and     |
189  |    datbase rows passed in.                                               |
190  |                                                                          |
191  | PARAMETERS                                                               |
192  |    p_api_version      IN  NUMBER       - Api Version                     |
193  |    p_init_msg_list    IN  VARCHAR2     - Message Initialization Ind.     |
194  |    p_commit           IN  VARCHAR2     - Commit Indicator                |
195  |    p_validation_level IN  VARCHAR2     - Validation Level Indicator      |
196  |    p_lot_rec          IN  lot_rec_typ  - Lot Master details              |
197  |    x_return_status    OUT VARCHAR2     - Return Status                   |
198  |    x_msg_count        OUT NUMBER       - Number of messages              |
199  |    x_msg_data         OUT VARCHAR2     - Messages in encoded format      |
200  |                                                                          |
201  | RETURNS                                                                  |
202  |    None                                                                  |
203  |                                                                          |
204  | HISTORY                                                                  |
205  | 13-May-00     P.J.Schofield Major restructuring for performance reasons  |
206  |               B1294915.                                                  |
207  +==========================================================================+
208 */
209 
210 PROCEDURE Create_Lot
211 ( p_api_version      IN  NUMBER
212 , p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE
213 , p_commit           IN  VARCHAR2 := FND_API.G_FALSE
214 , p_validation_level IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL
215 , p_lot_rec          IN  lot_rec_typ
216 , p_ic_item_mst_row  IN  ic_item_mst%ROWTYPE
217 , p_ic_item_cpg_row  IN  ic_item_cpg%ROWTYPE
218 , x_ic_lots_mst_row  OUT NOCOPY ic_lots_mst%ROWTYPE
219 , x_ic_lots_cpg_row  OUT NOCOPY ic_lots_cpg%ROWTYPE
220 , x_return_status    OUT NOCOPY VARCHAR2
221 , x_msg_count        OUT NOCOPY NUMBER
222 , x_msg_data         OUT NOCOPY VARCHAR2
223 )
224 IS
225   l_api_name         VARCHAR2(30) := 'G_Create_Lot';
226 BEGIN
227 
228   /*  Standard call to check for call compatibility. */
229 
230   IF NOT FND_API.Compatible_API_CALL
231     (GMIGUTL.api_version, p_api_version, l_api_name, G_PKG_NAME)
232   THEN
233     Raise FND_API.G_EXC_UNEXPECTED_ERROR;
234   END IF;
235 
236   /*  Initialize message list if p_int_msg_list is set TRUE.  */
237   IF FND_API.to_boolean(p_init_msg_list)
238   THEN
239     FND_MSG_PUB.Initialize;
240   END IF;
241 
242   x_return_status :=FND_API.G_RET_STS_SUCCESS;
243 
244   GMIVLOT.Validate_Lot
245                         (  p_api_version      => p_api_version
246                          , p_validation_level => p_validation_level
247                          , p_lot_rec          => p_lot_rec
248                          , p_ic_item_mst_row  => p_ic_item_mst_row
249 			 , p_ic_item_cpg_row  => p_ic_item_cpg_row
250 			 , x_ic_lots_mst_row  => x_ic_lots_mst_row
251                          , x_ic_lots_cpg_row  => x_ic_lots_cpg_row
252                          , x_return_status    => x_return_status
253                          , x_msg_count        => x_msg_count
254                          , x_msg_data         => x_msg_data
255                         );
256 
257   SAVEPOINT Create_Lot;
258   IF x_return_status = FND_API.G_RET_STS_SUCCESS
259   THEN
260     /*  If no errors were found then proceed with the database inserts */
261 
262     IF GMIVDBL.ic_lots_mst_insert(x_ic_lots_mst_row, x_ic_lots_mst_row)
263     THEN
264       -- Jatinder - B3158806 - Removed SY$CPG_INSTALL check
265       x_ic_lots_cpg_row.lot_id := x_ic_lots_mst_row.lot_id;
266       IF GMIVDBL.ic_lots_cpg_insert(x_ic_lots_cpg_row, x_ic_lots_cpg_row)
267       THEN
268         NULL;
269       ELSE
270         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
271       END IF;
272 
273       FND_MESSAGE.SET_NAME('GMI','IC_API_LOT_CREATED');
274       FND_MESSAGE.SET_TOKEN('ITEM_NO', p_lot_rec.item_no);
275       FND_MESSAGE.SET_TOKEN('LOT_NO', p_lot_rec.lot_no);
276       FND_MESSAGE.SET_TOKEN('SUBLOT_NO', p_lot_rec.sublot_no);
277       FND_MSG_PUB.Add;
278 
279       IF FND_API.to_boolean(p_commit)
280       THEN
281         COMMIT WORK;
282       END IF;
283     ELSE
284       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
285     END IF;
286   --Jalaj Srivastava Bug 2485879
287   --Added else for assigning return status
288   ELSE
289     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
290   END IF;
291 
292   FND_MSG_PUB.Count_AND_GET
293         (p_count => x_msg_count, p_data => x_msg_data);
294 
295   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
296   THEN
297     ROLLBACK TO Create_Lot;
298   END IF;
299 
300   EXCEPTION
301    WHEN OTHERS THEN
302     ROLLBACK TO Create_Lot;
303     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
304 
305     FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
306     FND_MSG_PUB.Count_AND_GET
307       (p_count => x_msg_count, p_data => x_msg_data);
308 END Create_Lot;
309 
310 
311 
312 /* +==========================================================================+
313  | PROCEDURE NAME                                                           |
314  |    Create_Item_lot_Conv                                                  |
315  |                                                                          |
316  | TYPE                                                                     |
317  |    Group                                                                 |
318  |                                                                          |
319  | USAGE                                                                    |
320  |    Create a new Item/Lot/Sublot conversion using the data and database   |
321  |    rows supplied                                                         |
322  |                                                                          |
323  | PARAMETERS                                                               |
324  |    p_api_version      IN  NUMBER       - Api Version                     |
325  |    p_init_msg_list    IN  VARCHAR2     - Message Initialization Ind.     |
326  |    p_commit           IN  VARCHAR2     - Commit Indicator                |
327  |    p_validation_level IN  VARCHAR2     - Validation Level Indicator      |
328  |    p_conv_rec         IN  GMIGAPI.lot_rec_typ  - Conversion details      |
329  |    x_ic_item_cnv_row  OUT ic_item_cnv%ROWTYPE                            |
330  |    x_return_status    OUT VARCHAR2     - Return Status                   |
331  |    x_msg_count        OUT NUMBER       - Number of messages              |
332  |    x_msg_data         OUT VARCHAR2     - Messages in encoded format      |
333  |                                                                          |
334  | RETURNS                                                                  |
335  |    Via x_ OUT parameters                                                 |
336  |                                                                          |
337  | HISTORY                                                                  |
338  | 13-May-00     P.J.Schofield Major restructuring for performance reasons  |
339  |               B1294915.                                                  |
340  |																									 |
341  | 17-Apr-2001	A. Mundhe	Bug 1741321- Added code so that uom type is      |
342  |                         displayed in the success message.                |
343  |																									 |
344  | 02-May-2001 A. Mundhe   Bug 1741321- Display message if conversion       |
345  |                         already exists.                                  |
346  +==========================================================================+
347 */
348 PROCEDURE Create_Item_Lot_Conv
349 ( p_api_version      IN  NUMBER
350 , p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE
351 , p_commit           IN  VARCHAR2 := FND_API.G_FALSE
352 , p_validation_level IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL
353 , p_conv_rec         IN  GMIGAPI.conv_rec_typ
354 , p_ic_item_mst_row  IN  ic_item_mst%ROWTYPE
355 , p_ic_lots_mst_row  IN  ic_lots_mst%ROWTYPE
356 , x_ic_item_cnv_row  OUT NOCOPY ic_item_cnv%ROWTYPE
357 , x_return_status    OUT NOCOPY VARCHAR2
358 , x_msg_count        OUT NOCOPY NUMBER
359 , x_msg_data         OUT NOCOPY VARCHAR2
360 )
361 IS
362   l_api_name         VARCHAR2(30) := 'G_Create_Conv';
363 BEGIN
364 
365   /*  Standard call to check for call compatibility. */
366 
367   IF NOT FND_API.Compatible_API_CALL
368     (GMIGUTL.api_version, p_api_version, l_api_name, G_PKG_NAME)
369   THEN
370     Raise FND_API.G_EXC_UNEXPECTED_ERROR;
371   END IF;
372 
373   /*  Initialize message list if p_int_msg_list is set TRUE.  */
374   IF FND_API.to_boolean(p_init_msg_list)
375   THEN
376     FND_MSG_PUB.Initialize;
377   END IF;
378 
379   x_return_status :=FND_API.G_RET_STS_SUCCESS;
380 
381   GMIVILC.Validate_Lot_Conversion
382                         (  p_api_version      => p_api_version
383                          , p_validation_level => p_validation_level
384                          , p_item_cnv_rec    => p_conv_rec
385                          , p_ic_item_mst_row  => p_ic_item_mst_row
386                          , p_ic_lots_mst_row  => p_ic_lots_mst_row
387                          , x_ic_item_cnv_row  => x_ic_item_cnv_row
388                          , x_return_status    => x_return_status
389                          , x_msg_count        => x_msg_count
390                          , x_msg_data         => x_msg_data
391                         );
392 
393   SAVEPOINT Create_Conv;
394   IF x_return_status = FND_API.G_RET_STS_SUCCESS
395   THEN
396     /*  If no errors were found then proceed with the database insert */
397     /* Bug 1741321 */
398     /* Set token for uom type to be displayed in the success message */
399     IF GMIVDBL.ic_item_cnv_insert(x_ic_item_cnv_row, x_ic_item_cnv_row)
400     THEN
401 
402       FND_MESSAGE.SET_NAME('GMI','IC_API_ILC_CREATED');
403       FND_MESSAGE.SET_TOKEN('ITEM_NO', p_conv_rec.item_no);
404       FND_MESSAGE.SET_TOKEN('LOT_NO', p_conv_rec.lot_no);
405       FND_MESSAGE.SET_TOKEN('SUBLOT_NO', p_conv_rec.sublot_no);
406       FND_MESSAGE.SET_TOKEN('UM_TYPE', x_ic_item_cnv_row.um_type);
407       FND_MSG_PUB.Add;
408 
409       IF FND_API.to_boolean(p_commit)
410       THEN
411         COMMIT WORK;
412       END IF;
413     /* Bug 1741321 */
414     /* Display message if conversion already exists. */
415 	 ELSE
416       IF GMIGUTL.DB_ERRNUM = -1
417       THEN
418         FND_MESSAGE.SET_NAME('GMI','IC_API_ITEM_CNV_ALREADY_EXISTS');
419         FND_MESSAGE.SET_TOKEN('ITEM_NO', p_conv_rec.item_no);
420         FND_MESSAGE.SET_TOKEN('LOT_NO', p_conv_rec.lot_no);
421         FND_MESSAGE.SET_TOKEN('SUBLOT_NO', p_conv_rec.sublot_no);
422         FND_MESSAGE.SET_TOKEN('UM_TYPE', x_ic_item_cnv_row.um_type);
423         FND_MSG_PUB.Add;
424     ELSE
425         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
426     END IF;
427       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
428     END IF;
429   END IF;
430 
431   FND_MSG_PUB.Count_AND_GET
432         (p_count => x_msg_count, p_data => x_msg_data);
433 
434   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
435   THEN
436     ROLLBACK TO Create_Conv;
437   END IF;
438 
439   EXCEPTION
440    WHEN OTHERS THEN
441     ROLLBACK TO Create_Conv;
442     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
443 
444     FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
445     FND_MSG_PUB.Count_AND_GET
446       (p_count => x_msg_count, p_data => x_msg_data);
447 END Create_Item_lot_Conv;
448 
449 
450 /* +==========================================================================+
451  | PROCEDURE NAME                                                           |
452  |    Inventory_posting                                                     |
453  |                                                                          |
454  | TYPE                                                                     |
455  |    Group                                                                 |
456  |                                                                          |
457  | USAGE                                                                    |
458  |    Sets up and posts and inventory journal from raw data and database    |
459  |    rows supplied.                                                        |
460  |                                                                          |
461  | PARAMETERS                                                               |
462  |    p_api_version      IN  NUMBER       - Api Version                     |
463  |    p_init_msg_list    IN  VARCHAR2     - Message Initialization Ind.     |
464  |    p_commit           IN  VARCHAR2     - Commit Indicator                |
465  |    p_validation_level IN  VARCHAR2     - Validation Level Indicator      |
466  |    p_qty_rec          IN  GMIGAPI.qty_rec_typ  - Quantity details        |
467  |    p_ic_item_mst_row  IN  ic_item_mst%ROWTYPE                            |
468  |    p_ic_item_cpg_row  IN  ic_item_cpg%ROWTYPE                            |
469  |    p_ic_lots_mst_row  IN  ic_lots_mst%ROWTYPE                            |
470  |    p_ic_lots_cpg_row  IN  ic_lots_cpg%ROWTYPE                            |
471  |    x_ic_jrnl_mst_row  OUT ic_jrnl_mst%ROWTYPE                            |
472  |    x_ic_adjs_jnl_row1 OUT ic_adjs_jnl%ROWTYPE                            |
473  |    x_ic_adjs_jnl_row2 OUT ic_adjs_jnl%ROWTYPE                            |
474  |    x_return_status    OUT VARCHAR2     - Return Status                   |
475  |    x_msg_count        OUT NUMBER       - Number of messages              |
476  |    x_msg_data         OUT VARCHAR2     - Messages in encoded format      |
477  |                                                                          |
478  | RETURNS                                                                  |
479  |    Via x_ OUT parameters                                                 |
480  |                                                                          |
481  | HISTORY                                                                  |
482  | 13-May-00     P.J.Schofield Major restructuring for performance reasons  |
483  |               B1294915.                                                  |
484  |																									 |
485  | 16/Mar/2001    A. Mundhe   Bug 1655794 - Generate the output log file    |
486  |                            with proper messages upon sucessful run of    |
487  |                            the API.							    					 |
488  |																									 |
489  | 11/NOV/2001		A. Mundhe	Bug 2033879 - Added code so that inventory    |
490  |                            summary is updated correctly for status       |
491  |                            immediate.                                    |
492  | 01/Nov/2001    Ajay Kumar  Bug 1834743 - For manual document ordering,   |
493  |                            insert the journal number which is passed     |
494  |                            from the flat file.                           |
495  |                                                                          |
496  | 14-Mar-2002 Ajay Kumar     BUG#1834743 - Added code to validate the      |
497  |                            journal number entered, when manual document  |
498  |                            ordering is done.                             |
499  | 07/24/02    Jalaj Srivastava Bug 2483656                                 |
500  |                         Modified inventory_posting to let users create   |
501  |                         journals through APIs.                           |
502  |                         Backed out fix for bug 2033879 as the correct    |
503  |                         place for the fix would be GMIVTXN package
504  |                         'coz the call to APIs from the form does not     |
505  |                         go through this procedure.
506  | 10-Mar-04   Jalaj Srivastava Bug 3282770                                 |
507  |             Move allocations while doing   |
508  |             a move immediate if all the criterion are satisfied.         |
509  +==========================================================================+
510  */
511 
512 PROCEDURE Inventory_Posting
513 ( p_api_version      IN  NUMBER
514 , p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE
515 , p_commit           IN  VARCHAR2 := FND_API.G_FALSE
516 , p_validation_level IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL
517 , p_qty_rec          IN  GMIGAPI.qty_rec_typ
518 , p_ic_item_mst_row  IN  ic_item_mst%ROWTYPE
519 , p_ic_item_cpg_row  IN  ic_item_cpg%ROWTYPE
520 , p_ic_lots_mst_row  IN  ic_lots_mst%ROWTYPE
521 , p_ic_lots_cpg_row  IN  ic_lots_cpg%ROWTYPE
522 , x_ic_jrnl_mst_row  OUT NOCOPY ic_jrnl_mst%ROWTYPE
523 , x_ic_adjs_jnl_row1 OUT NOCOPY ic_adjs_jnl%ROWTYPE
524 , x_ic_adjs_jnl_row2 OUT NOCOPY ic_adjs_jnl%ROWTYPE
525 , x_return_status    OUT NOCOPY VARCHAR2
526 , x_msg_count        OUT NOCOPY NUMBER
527 , x_msg_data         OUT NOCOPY VARCHAR2
528 )
529 IS
530   l_ic_lots_mst_row  ic_lots_mst%ROWTYPE;
531   l_ic_lots_cpg_row  ic_lots_cpg%ROWTYPE;
532   l_lot_rec          GMIGAPI.lot_rec_typ;
533   l_tran_row1        ic_tran_cmp%ROWTYPE;
534   l_tran_row2        ic_tran_cmp%ROWTYPE;
535   l_tran_rec         GMI_TRANS_ENGINE_PUB.ictran_rec;
536   l_qty_rec          GMIGAPI.qty_rec_typ;
537   l_api_name         VARCHAR2(30) := 'G_Inventory_Post';
538   l_return_status    NUMBER;
539   l_trans_qty		   NUMBER;
540   l_trans_qty2		   NUMBER;
541   x_move_allocations VARCHAR2(1);
542 
543   -- BEGIN BUG#1834743 V. Ajay Kumar
544   l_assign_type      NUMBER;
545   CURSOR Check_Assignment_Type IS
546     SELECT assignment_type
547     FROM   sy_docs_seq
548     WHERE  orgn_code = p_qty_rec.orgn_code
549     AND    doc_type = 'JRNL';
550   -- END BUG#1834743
551 
552   -- BEGIN BUG#1834743 V. Ajay Kumar
553   --Cursor added to fetch the number of records for a journal no.
554   l_record_count NUMBER;
555   CURSOR Check_Record_Count IS
556   SELECT count(*)
557   FROM   ic_jrnl_mst
558   WHERE  journal_no = l_qty_rec.journal_no
559   AND    orgn_code = l_qty_rec.orgn_code;
560   --END BUG#1834743
561 
562   Cursor check_journal_no IS
563     SELECT count(1)
564     FROM   ic_jrnl_mst j, ic_adjs_jnl a
565     where  j.journal_no  = l_qty_rec.journal_no
566     AND    j.orgn_code   = l_qty_rec.orgn_code
567     AND    j.delete_mark = 0
568     AND    j.posted_ind  = 0
569     AND    a.orgn_code   = j.orgn_code
570     AND    a.journal_id  = j.journal_id
571     AND    a.trans_type  = x_ic_adjs_jnl_row1.trans_type;
572 
573   CURSOR get_doc_line IS
574     SELECT nvl(max(doc_line),0) + 1
575     FROM ic_adjs_jnl
576     WHERE orgn_code  = x_ic_adjs_jnl_row1.orgn_code AND
577           journal_id = x_ic_adjs_jnl_row1.journal_id;
578 
579 
580 BEGIN
581 
582   /*  Standard call to check for call compatibility. */
583 
584   IF NOT FND_API.Compatible_API_CALL
585     (GMIGUTL.api_version, p_api_version, l_api_name, G_PKG_NAME)
586   THEN
587     Raise FND_API.G_EXC_UNEXPECTED_ERROR;
588   END IF;
589 
590   /*  Initialize message list if p_int_msg_list is set TRUE.  */
591   IF FND_API.to_boolean(p_init_msg_list)
592   THEN
593     FND_MSG_PUB.Initialize;
594   END IF;
595 
596   x_return_status :=FND_API.G_RET_STS_SUCCESS;
597   --Jalaj Srivastava Bug 2483656
598   l_qty_rec := p_qty_rec;
599   GMIVQTY.Validate_Inventory_Posting
600                         (  p_api_version      => p_api_version
601                          , p_validation_level => p_validation_level
602                          , p_qty_rec          => p_qty_rec
603                          , p_ic_item_mst_row  => p_ic_item_mst_row
604                          , p_ic_item_cpg_row  => p_ic_item_cpg_row
605 			 , p_ic_lots_mst_row  => p_ic_lots_mst_row
606                          , p_ic_lots_cpg_row  => p_ic_lots_cpg_row
607                          , x_ic_jrnl_mst_row  => x_ic_jrnl_mst_row
608                          , x_ic_adjs_jnl_row1 => x_ic_adjs_jnl_row1
609                          , x_ic_adjs_jnl_row2 => x_ic_adjs_jnl_row2
610                          , x_return_status    => x_return_status
611                          , x_msg_count        => x_msg_count
612                          , x_msg_data         => x_msg_data
613                         );
614 
615   SAVEPOINT Create_Posting;
616   IF x_return_status = FND_API.G_RET_STS_SUCCESS
617   THEN
618     /*  If this is a 'CREI' transaction and the item is lot controlled */
619     /*  then we must create the lot first as we'll need the ID in what  */
620     /*  follows. */
621 
622     IF x_ic_adjs_jnl_row1.trans_type IN ('CREI','CRER')
623     THEN
624       IF p_ic_item_mst_row.lot_ctl = 0
625       THEN
626         l_ic_lots_mst_row.lot_id := 0;
627         l_ic_lots_mst_row.lot_no := GMIGUTL.IC$DEFAULT_LOT;
628         x_ic_adjs_jnl_row1.lot_id := l_ic_lots_mst_row.lot_id;
629       ELSE
630         l_lot_rec.lot_no := p_qty_rec.lot_no;
631         IF p_ic_item_mst_row.sublot_ctl = 1
632         THEN
633           l_lot_rec.sublot_no := p_qty_rec.sublot_no;
634         END IF;
635 
636         /*  Make sure we aren't trying to create a lot which exists already. */
637 
638         GMIGUTL.get_lot
639                    (  p_ic_item_mst_row.item_id
640                    ,  p_qty_rec.lot_no
641                    ,  p_qty_rec.sublot_no
642                    ,  l_ic_lots_mst_row
643                    ,  l_ic_lots_cpg_row
644                    );
645 
646         IF l_ic_lots_mst_row.lot_id IS NULL
647         THEN
648           Create_Lot (  p_api_version     => p_api_version
649                       , p_init_msg_list   => FND_API.G_FALSE
650                       , p_commit          => FND_API.G_FALSE
651                       , p_validation_level=> FND_API.G_VALID_LEVEL_FULL
652                       , p_lot_rec         => l_lot_rec
653                       , p_ic_item_mst_row => p_ic_item_mst_row
654                       , p_ic_item_cpg_row => p_ic_item_cpg_row
655                       , x_ic_lots_mst_row => l_ic_lots_mst_row
656                       , x_ic_lots_cpg_row => l_ic_lots_cpg_row
657                       , x_return_status   => x_return_status
658                       , x_msg_count       => x_msg_count
659                       , x_msg_data        => x_msg_data
660                      );
661         END IF;
662 
663         IF x_return_status = FND_API.G_RET_STS_SUCCESS
664         THEN
665           x_ic_adjs_jnl_row1.lot_id := l_ic_lots_mst_row.lot_id;
666         ELSE
667           Raise FND_API.G_EXC_UNEXPECTED_ERROR;
668         END IF;
669       END IF;
670     ELSE
671       IF p_ic_item_mst_row.lot_ctl = 0
672       THEN
673         l_ic_lots_mst_row.lot_id := 0;
674         l_ic_lots_mst_row.lot_no := GMIGUTL.IC$DEFAULT_LOT;
675         x_ic_adjs_jnl_row1.lot_id := l_ic_lots_mst_row.lot_id;
676       END IF;
677     END IF;
678 
679     /* *********************************************************************
680        Jalaj Srivastava Bug 3282770
681        If it is a move immediate, check if moving allocations is
682        required/permitted. It is applicable only for lot controlled items.
683        ********************************************************************* */
684      --{
685      IF (     (p_ic_item_mst_row.lot_ctl  = 1)
686           AND (    (p_ic_item_mst_row.status_ctl = 0)
687                 OR (fnd_profile.value('IC$MOVEDIFFSTAT') IN (0,2))
688               )
689           AND (x_ic_adjs_jnl_row1.trans_type = 'TRNI')
690           AND (fnd_profile.value('IC$MOVEALLOC') = 1)
691         ) THEN
692 
693             GMIALLOC.CHECK_ALLOC_QTY
694               ( p_api_version          => 1.0
695                ,p_init_msg_list        => fnd_api.g_false
696                ,p_commit               => fnd_api.g_false
697                ,p_validation_level     => fnd_api.g_valid_level_full
698                ,x_return_status        => x_return_status
699                ,x_msg_count            => x_msg_count
700                ,x_msg_data             => x_msg_data
701                ,pfrom_whse_code        => x_ic_adjs_jnl_row1.whse_code
702                ,pfrom_location         => nvl(x_ic_adjs_jnl_row1.location,fnd_profile.value('IC$DEFAULT_LOCT'))
703                ,plot_id                => x_ic_adjs_jnl_row1.lot_id
704                ,pitem_id               => x_ic_adjs_jnl_row1.item_id
705                ,pmove_qty              => x_ic_adjs_jnl_row2.qty
706                ,pto_whse_code          => x_ic_adjs_jnl_row2.whse_code
707                ,x_move_allocations     => x_move_allocations
708               );
709 
710             IF x_return_status = FND_API.G_RET_STS_ERROR THEN
711               RAISE FND_API.G_EXC_ERROR;
712             ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
713               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
714             END IF;
715      END IF;--}
716 
717 
718     /*  If manual document sequencing is in force we need a journal
719         number. If it's automatic we will generate one. If we're
720         given one and the sequencing is automatic, use the one we've
721         generated. */
722     -- BEGIN BUG#1834743 V. Ajay Kumar
723     -- Check for document ordering and assign the journal number.
724 	 OPEN Check_Assignment_Type;
725     FETCH Check_Assignment_Type into l_assign_type;
726 	 CLOSE Check_Assignment_Type;
727 
728 --Jalaj Srivastava Bug 2483656
729     IF (l_assign_type = 2) THEN
730        IF (p_qty_rec.trans_type <= 5) THEN
731           x_ic_jrnl_mst_row.journal_no :=GMA_GLOBAL_GRP.Get_doc_no ( 'JRNL', p_qty_rec.orgn_code);
732        ELSIF (p_qty_rec.trans_type >= 6) THEN
733          IF (p_qty_rec.journal_no IS NULL) THEN
734            x_ic_jrnl_mst_row.journal_no :=GMA_GLOBAL_GRP.Get_doc_no ( 'JRNL' , p_qty_rec.orgn_code);
735          ELSE
736 	   IF (      (upper(p_qty_rec.journal_no) = 'PREVIOUS')
737                  AND (p_qty_rec.orgn_code = prev_orgn_code)
738               ) THEN
739                  l_qty_rec.journal_no := prev_journal_no;
740            END IF;
741            OPEN check_journal_no;
742 	   FETCH check_journal_no INTO l_record_count;
743 	   CLOSE check_journal_no;
744 	   IF (l_record_count = 0) THEN
745 	     FND_MESSAGE.SET_NAME ('GMI', 'IC_API_INVALID_JOURNAL_NO');
746 	     FND_MESSAGE.SET_TOKEN('JOURNAL_NO',p_qty_rec.journal_no);
747 	     FND_MSG_PUB.Add;
748              RAISE FND_API.G_EXC_ERROR;
749 	   ELSE
750 	     x_ic_jrnl_mst_row.journal_no := l_qty_rec.journal_no;
751            END IF;
752          END IF;
753        END IF;
754     ELSE
755          OPEN Check_Record_Count;
756          FETCH Check_Record_Count INTO l_record_count;
757          CLOSE Check_Record_Count;
758 
759          --Validation of the journal number takes place here.
760          --If there are no records retreived, then a journal is created sucessfully,
761          --else an error message is displayed.
762 
763 	   IF l_record_count = 0 THEN
764 	     x_ic_jrnl_mst_row.journal_no := l_qty_rec.journal_no;
765            ELSIF (p_qty_rec.trans_type <= 5) THEN
766 	     FND_MESSAGE.SET_NAME ('GMI', 'GMI_JOURNALNOEXISTS');
767 	     FND_MSG_PUB.Add;
768              RAISE FND_API.G_EXC_ERROR;
769            ELSIF (p_qty_rec.trans_type >=6) THEN
770              OPEN check_journal_no;
771 	     FETCH check_journal_no INTO l_record_count;
772 	     CLOSE check_journal_no;
773 	     IF (l_record_count = 0) THEN
774 	       FND_MESSAGE.SET_NAME ('GMI', 'IC_API_INVALID_JOURNAL_NO');
775 	       FND_MESSAGE.SET_TOKEN('JOURNAL_NO',l_qty_rec.journal_no);
776 	       FND_MSG_PUB.Add;
777                RAISE FND_API.G_EXC_ERROR;
778              ELSE
779 	       x_ic_jrnl_mst_row.journal_no := l_qty_rec.journal_no;
780              END IF;
781 	   END IF;
782     END IF;
783     IF (upper(l_qty_rec.journal_no) = 'PREVIOUS') THEN
784       FND_MESSAGE.SET_NAME ('GMI', 'IC_API_INVALID_JOURNAL_NO');
785       FND_MESSAGE.SET_TOKEN('JOURNAL_NO',l_qty_rec.journal_no);
786       FND_MSG_PUB.Add;
787       RAISE FND_API.G_EXC_ERROR;
788     END IF;
789     IF (NVL(x_ic_jrnl_mst_row.journal_no, ' ') = ' ') THEN
790       FND_MESSAGE.SET_NAME('GMI','IC_API_UNABLE_TO_GET_DOC_NO');
791       FND_MESSAGE.SET_TOKEN('DOC_TYPE','JRNL');
792       FND_MESSAGE.SET_TOKEN('ORGN_CODE',p_qty_rec.orgn_code);
793       FND_MSG_PUB.Add;
794       RAISE FND_API.G_EXC_ERROR;
795     END IF;
796 IF GMIVDBL.ic_jrnl_mst_insert(x_ic_jrnl_mst_row, x_ic_jrnl_mst_row) THEN
797       x_return_status := FND_API.G_RET_STS_SUCCESS;
798       x_ic_adjs_jnl_row1.journal_id := x_ic_jrnl_mst_row.journal_id;
799       --Jalaj Srivastava Bug 2483656
800       IF (      (l_assign_type = 2)
801 	   AND  (p_qty_rec.trans_type >=6)
802 	 ) THEN
803 	    prev_orgn_code  := p_qty_rec.orgn_code;
804 	    prev_journal_no := x_ic_jrnl_mst_row.journal_no;
805       ELSE
806 	   prev_orgn_code  := NULL;
807 	   prev_journal_no := NULL;
808       END IF;
809       OPEN  get_doc_line;
810       FETCH get_doc_line INTO x_ic_adjs_jnl_row1.doc_line;
811       CLOSE get_doc_line;
812 
813   IF GMIVDBL.ic_adjs_jnl_insert(x_ic_adjs_jnl_row1,x_ic_adjs_jnl_row1) THEN
814      x_return_status := FND_API.G_RET_STS_SUCCESS;
815      IF (substr(x_ic_adjs_jnl_row1.trans_type,4,1) = 'I') THEN
816         GMIVQTY.construct_txn_rec
817           (x_ic_adjs_jnl_row1, l_tran_rec);
818         GMI_TRANS_ENGINE_PUB.create_completed_transaction
819           ( p_api_version      => 1.0
820           , p_init_msg_list    => FND_API.G_FALSE
821           , p_commit           => FND_API.G_FALSE
822           , p_validation_level => FND_API.G_VALID_LEVEL_FULL
823           , p_tran_rec         => l_tran_rec
824           , x_tran_row         => l_tran_row1
825           , x_return_status    => x_return_status
826           , x_msg_count        => x_msg_count
827           , x_msg_data         => x_msg_data
828           );
829         IF x_return_status <> FND_API.G_RET_STS_SUCCESS
830         THEN
831           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
832         END IF;
833      END IF; --IF (substr(x_ic_adjs_jnl_row1.trans_type,4,1) = 'I')
834 
835      IF substr(x_ic_adjs_jnl_row1.trans_type,1,3) IN ('TRN','STS','GRD') THEN
836         x_ic_adjs_jnl_row2.doc_id := x_ic_adjs_jnl_row1.doc_id;
837         x_ic_adjs_jnl_row2.journal_id := x_ic_adjs_jnl_row1.journal_id;
838         x_ic_adjs_jnl_row2.doc_line := x_ic_adjs_jnl_row1.doc_line + 1;
839         IF GMIVDBL.ic_adjs_jnl_insert(x_ic_adjs_jnl_row2, x_ic_adjs_jnl_row2) THEN
840 	  x_return_status := FND_API.G_RET_STS_SUCCESS;
841           IF (substr(x_ic_adjs_jnl_row1.trans_type,4,1) = 'I') THEN
842               GMIVQTY.construct_txn_rec
843                 (x_ic_adjs_jnl_row2, l_tran_rec);
844               GMI_TRANS_ENGINE_PUB.create_completed_transaction
845               ( p_api_version      => 1.0
846               , p_init_msg_list    => FND_API.G_FALSE
847               , p_commit           => FND_API.G_FALSE
848               , p_validation_level => FND_API.G_VALID_LEVEL_FULL
849               , p_tran_rec         => l_tran_rec
850               , x_tran_row         => l_tran_row2
851               , x_return_status    => x_return_status
852               , x_msg_count        => x_msg_count
853               , x_msg_data         => x_msg_data
854               );
855 
856             IF x_return_status <> FND_API.G_RET_STS_SUCCESS
857             THEN
858               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
859             END IF;
860             /* *********************************************************************
861                Jalaj Srivastava Bug 3282770
862                If it is a move immediate and moving allocations is
863                required/permitted then lets do it.
864                ********************************************************************* */
865             --{
866             IF (x_move_allocations = 'Y') THEN
867               GMIALLOC.UPDATE_PENDING_ALLOCATIONS
868                    ( p_api_version          => 1.0
869                     ,p_init_msg_list        => fnd_api.g_false
870                     ,p_commit               => fnd_api.g_false
871                     ,p_validation_level     => fnd_api.g_valid_level_full
872                     ,x_return_status        => x_return_status
873                     ,x_msg_count            => x_msg_count
874                     ,x_msg_data             => x_msg_data
875                     ,pdoc_id                => l_tran_rec.doc_id
876                     ,pto_whse_code          => x_ic_adjs_jnl_row2.whse_code
877                     ,pto_location           => nvl(x_ic_adjs_jnl_row2.location,fnd_profile.value('IC$DEFAULT_LOCT'))
878                    );
879 
880 
881               IF x_return_status = FND_API.G_RET_STS_ERROR THEN
882                 RAISE FND_API.G_EXC_ERROR;
883               ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
884                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
885               END IF;
886 
887             END IF;--}
888 
889           END IF; --(substr(x_ic_adjs_jnl_row1.trans_type,4,1) = 'I')
890 	ELSE --GMIVDBL.ic_adjs_jnl_insert(x_ic_adjs_jnl_row2, x_ic_adjs_jnl_row2)
891 	   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
892         END IF; --GMIVDBL.ic_adjs_jnl_insert(x_ic_adjs_jnl_row2, x_ic_adjs_jnl_row2)
893      END IF; --substr(x_ic_adjs_jnl_row1.trans_type,1,3) IN ('TRN','STS','GRD')
894   ELSE --GMIVDBL.ic_adjs_jnl_insert(x_ic_adjs_jnl_row1,x_ic_adjs_jnl_row1)
895     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
896   END IF; --GMIVDBL.ic_adjs_jnl_insert(x_ic_adjs_jnl_row1,x_ic_adjs_jnl_row1)
897 ELSE --GMIVDBL.ic_jrnl_mst_insert(x_ic_jrnl_mst_row, x_ic_jrnl_mst_row)
898   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
899 END IF;
900 END IF;
901 
902   		/* Bug 1655794 - Generate the output log file with proper messages */
903   		/* upon sucessful run of the API. */
904      IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
905       	IF(x_ic_adjs_jnl_row1.trans_type = 'CREI') THEN
906       		FND_MESSAGE.SET_NAME('GMI','IC_API_CRE_TRAN_POSTED');
907 	ELSIF(x_ic_adjs_jnl_row1.trans_type = 'ADJI') THEN
908       		FND_MESSAGE.SET_NAME('GMI','IC_API_ADJ_TRAN_POSTED');
909 	ELSIF(x_ic_adjs_jnl_row1.trans_type = 'TRNI') THEN
910       		FND_MESSAGE.SET_NAME('GMI','IC_API_TRN_TRAN_POSTED');
911 	ELSIF(x_ic_adjs_jnl_row1.trans_type = 'STSI') THEN
912       		FND_MESSAGE.SET_NAME('GMI','IC_API_STS_TRAN_POSTED');
913         ELSIF(x_ic_adjs_jnl_row1.trans_type = 'GRDI') THEN
914       		FND_MESSAGE.SET_NAME('GMI','IC_API_GRD_TRAN_POSTED');
915         ELSIF (x_ic_adjs_jnl_row1.trans_type = 'CRER') THEN
916       		FND_MESSAGE.SET_NAME('GMI','IC_API_CRER_TRAN_CREATED');
917         ELSIF(x_ic_adjs_jnl_row1.trans_type = 'ADJR') THEN
918       		FND_MESSAGE.SET_NAME('GMI','IC_API_ADJR_TRAN_CREATED');
919         ELSIF(x_ic_adjs_jnl_row1.trans_type = 'TRNR') THEN
920       		FND_MESSAGE.SET_NAME('GMI','IC_API_TRNR_TRAN_CREATED');
921         ELSIF(x_ic_adjs_jnl_row1.trans_type = 'STSR') THEN
922       		FND_MESSAGE.SET_NAME('GMI','IC_API_STSR_TRAN_CREATED');
923         ELSIF(x_ic_adjs_jnl_row1.trans_type = 'GRDR') THEN
924       		FND_MESSAGE.SET_NAME('GMI','IC_API_GRDR_TRAN_CREATED');
925 	END IF;
926         IF (x_ic_adjs_jnl_row1.trans_type IN ('CRER','ADJR')) THEN
927 	   FND_MESSAGE.SET_TOKEN('DOC_LINE', x_ic_adjs_jnl_row1.doc_line);
928         ELSIF (x_ic_adjs_jnl_row1.trans_type IN ('GRDR','TRNR','STSR')) THEN
929 	   FND_MESSAGE.SET_TOKEN('DOC_LINE_FROM', x_ic_adjs_jnl_row1.doc_line);
930 	   FND_MESSAGE.SET_TOKEN('DOC_LINE_TO', x_ic_adjs_jnl_row2.doc_line);
931         END IF;
932 	FND_MESSAGE.SET_TOKEN('JOURNAL_NO', x_ic_jrnl_mst_row.journal_no);
933 	FND_MESSAGE.SET_TOKEN('ORGN_CODE', x_ic_adjs_jnl_row1.orgn_code);
934 	FND_MESSAGE.SET_TOKEN('ITEM_NO', p_ic_item_mst_row.item_no);
935       	FND_MESSAGE.SET_TOKEN('LOT_NO',p_ic_lots_mst_row.lot_no);
936       	FND_MESSAGE.SET_TOKEN('SUBLOT_NO',p_ic_lots_mst_row.sublot_no);
937 	FND_MSG_PUB.Add;
938 
939 	/* **************************************************************
940 	   Jalaj Srivastava Bug 3282770
941 	   Post message to log to indicate that the allocations have been
942 	   moved.
943 	   *************************************************************** */
944         IF (x_ic_adjs_jnl_row1.trans_type = 'TRNI' and x_move_allocations = 'Y') THEN
945           FND_MESSAGE.SET_NAME('GMI','GMI_ALLOCATIONS_MOVED');
946         END IF;
947 	FND_MSG_PUB.Add;
948 
949       	IF FND_API.to_boolean(p_commit) THEN
950        	   COMMIT WORK;
951       	END IF;
952      ELSE
953        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
954      END IF; --(x_return_status = FND_API.G_RET_STS_SUCCESS)
955      FND_MSG_PUB.Count_AND_GET
956         (p_count => x_msg_count, p_data => x_msg_data);
957      IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
958         ROLLBACK TO Create_Posting;
959      END IF;
960 
961   EXCEPTION
962   WHEN FND_API.G_EXC_ERROR THEN
963     ROLLBACK TO Create_Posting;
964     x_return_status := FND_API.G_RET_STS_ERROR;
965     FND_MSG_PUB.Count_AND_GET
966       (p_count => x_msg_count, p_data  => x_msg_data);
967    WHEN OTHERS THEN
968     ROLLBACK TO Create_Posting;
969     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
970 
971     FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
972     FND_MSG_PUB.Count_AND_GET
973       (p_count => x_msg_count, p_data => x_msg_data);
974 END Inventory_Posting;
975 
976 
977 
978 PROCEDURE Inventory_Transfer
979 ( p_api_version      IN  NUMBER
980 , p_init_msg_list    IN  VARCHAR2
981 , p_commit           IN  VARCHAR2
982 , p_validation_level IN  NUMBER
983 , p_xfer_rec         IN  GMIGAPI.xfer_rec_typ
984 , p_ic_item_mst_row  IN  ic_item_mst%ROWTYPE
985 , p_ic_item_cpg_row  IN  ic_item_cpg%ROWTYPE
986 , p_ic_lots_mst_row  IN  ic_lots_mst%ROWTYPE
987 , p_ic_lots_cpg_row  IN  ic_lots_cpg%ROWTYPE
988 , p_ic_xfer_mst_row  OUT NOCOPY ic_xfer_mst%ROWTYPE
989 , x_ic_xfer_mst_row  OUT NOCOPY ic_xfer_mst%ROWTYPE
990 , x_return_status    OUT NOCOPY VARCHAR2
991 , x_msg_count        OUT NOCOPY NUMBER
992 , x_msg_data         OUT NOCOPY VARCHAR2
993 )
994 IS
995   l_api_name         VARCHAR2(30) := 'Inventory Transfer';
996   l_return_status    NUMBER;
997 BEGIN
998     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
999 
1000     FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
1001     FND_MSG_PUB.Count_AND_GET
1002       (p_count => x_msg_count, p_data => x_msg_data);
1003 END Inventory_Transfer;
1004 
1005 END GMIGAPI;