DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMF_ITEMCOST_PUB

Source


1 PACKAGE BODY GMF_ITEMCOST_PUB AS
2 /* $Header: GMFPCSTB.pls 120.2.12000000.3 2007/05/11 17:46:25 pmarada ship $ */
3 
4   /*******************
5   * Global variables *
6   *******************/
7   G_PKG_NAME      CONSTANT  VARCHAR2(30) := 'GMF_ItemCost_PUB';
8   G_tmp		                  BOOLEAN := FND_MSG_PUB.Check_Msg_Level(0) ;
9   G_debug_level	            NUMBER(2) := FND_MSG_PUB.G_Msg_Level_Threshold;
10   G_header_logged           VARCHAR2(1);
11 
12 -- Func start of comments
13 --+==========================================================================+
14 --|  Procedure Name                                                          |
15 --|       log_msg                                                            |
16 --|                                                                          |
17 --|  DESCRIPTION                                                             |
18 --|       This procedure logs messages to message stack.                     |
19 --|                                                                          |
20 --|  PARAMETERS                                                              |
21 --|       p_msg_lvl             IN NUMBER(10) - Message Level                |
22 --|       p_msg_text            IN NUMBER(10) - Actual Message Text          |
23 --|                                                                          |
24 --|  RETURNS                                                                 |
25 --|                                                                          |
26 --|  HISTORY                                                                 |
27 --|       27/02/2001 Uday Moogla - Created                                   |
28 --|       05/nov/2002 Uday Moogala Bug 2659435                               |
29 --|         Removed first param for debug level                              |
30 --|                                                                          |
31 --+==========================================================================+
32 -- Func end of comments
33 
34   PROCEDURE log_msg
35   (
36   p_msg_text      IN VARCHAR2
37   )
38   IS
39   BEGIN
40     FND_MESSAGE.SET_NAME('GMF','GMF_API_DEBUG');
41     FND_MESSAGE.SET_TOKEN('MSG',p_msg_text);
42     FND_MSG_PUB.Add;
43   END LOG_MSG ;
44 
45 -- Func start of comments
46 --+==========================================================================+
47 --|  Procedure Name                                                          |
48 --|       add_header_to_error_stack                                          |
49 --|                                                                          |
50 --|  DESCRIPTION                                                             |
51 --|       This procedure logs header to message stack.                       |
52 --|                                                                          |
53 --|  PARAMETERS                                                              |
54 --|       p_header            Header Record to be logged                     |
55 --|                                                                          |
56 --|  RETURNS                                                                 |
57 --|                                                                          |
58 --|  HISTORY                                                                 |
59 --|       05/11/2001 Uday Moogla - Created Bug 2659435                       |
60 --|                                                                          |
61 --+==========================================================================+
62 -- Func end of comments
63 
64   PROCEDURE add_header_to_error_stack
65   (
66   p_header	            IN            header_rec_type
67   )
68   IS
69   BEGIN
70     IF G_header_logged = 'N'
71     THEN
72       G_header_logged := 'Y';
73       FND_MESSAGE.SET_NAME('GMF','GMF_API_ITEMCOST_HEADER');
74       FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_header.organization_id);
75       FND_MESSAGE.SET_TOKEN('ORGANIZATION_CODE',p_header.organization_code);
76       FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID',p_header.inventory_item_id);
77       FND_MESSAGE.SET_TOKEN('ITEM_NUMBER',p_header.item_number);
78       FND_MESSAGE.SET_TOKEN('PERIOD_ID',p_header.period_id);
79       FND_MESSAGE.SET_TOKEN('CALENDAR_CODE',p_header.calendar_code);
80       FND_MESSAGE.SET_TOKEN('PERIOD_CODE',p_header.period_code);
81       FND_MESSAGE.SET_TOKEN('COSTTYPE_ID',p_header.cost_type_id);
82       FND_MESSAGE.SET_TOKEN('COST_TYPE',p_header.cost_mthd_code);
83       FND_MSG_PUB.Add;
84     END IF;
85   END ADD_HEADER_TO_ERROR_STACK;
86 
87 -- Start of comments
88 --+==========================================================================+
89 --|                   Copyright (c) 1998 Oracle Corporation                  |
90 --|                          Redwood Shores, CA, USA                         |
91 --|                            All rights reserved.                          |
92 --+==========================================================================+
93 --| File Name          : GMFPCSTB.pls                                        |
94 --| Package Name       : GMF_ItemCost_PUB                                    |
95 --| API name           : GMF_ItemCost_PUB                                    |
96 --| Type               : Public                                              |
97 --| Pre-reqs           : N/A                                                 |
98 --| Function           : Item Cost creation, updatation and deletion.        |
99 --|                                                                          |
100 --| Parameters         : N/A                                                 |
101 --|                                                                          |
102 --| Current Vers       : 3.0                                                 |
103 --| Previous Vers      : 2.0                                                 |
104 --| Initial Vers       : 1.0                                                 |
105 --|                                                                          |
106 --| Contents                                                                 |
107 --|	Create_Item_Cost                                                     |
108 --|	Update_Item_Cost                                                     |
109 --|	Delete_Item_Cost                                                     |
110 --|	Get_Item_Cost                                                        |
111 --|                                                                          |
112 --| Notes                                                                    |
113 --|     This package contains public procedures relating to Item Cost        |
114 --|     creation, updatation and deletetion.                                 |
115 --|                                                                          |
116 --|  Pre-defined API message levels					     |
117 --|                                                                          |
118 --|     Valid values for message levels are from 1-50.			     |
119 --|      1 being least severe and 50 highest.				     |
120 --|                                                                          |
121 --|     The pre-defined levels correspond to standard API     		     |
122 --|     return status. Debug levels are used to control the amount of        |
123 --|      debug information a program writes to the PL/SQL message table.     |
124 --|                                                                          |
125 --| G_MSG_LVL_UNEXP_ERROR   CONSTANT NUMBER := 60;                           |
126 --| G_MSG_LVL_ERROR         CONSTANT NUMBER := 50;                           |
127 --| G_MSG_LVL_SUCCESS       CONSTANT NUMBER := 40;                           |
128 --| G_MSG_LVL_DEBUG_HIGH    CONSTANT NUMBER := 30;                           |
129 --| G_MSG_LVL_DEBUG_MEDIUM  CONSTANT NUMBER := 20;                           |
130 --| G_MSG_LVL_DEBUG_LOW     CONSTANT NUMBER := 10;                           |
131 --| HISTORY                                                                  |
132 --|    27/Feb/2001  Uday Moogala  Created  Bug# 1418689                      |
133 --|    06/Jul/2001  Uday Moogala  Bug# 1868624                               |
134 --|                 Fixed Validate_Input_Params procedure to not to validate |
135 --|                 unique key columns when cmptcost_id is passed.           |
136 --|    05/NOV/2002  Uday Moogala  Bug# 2659435                               |
137 --|      Performance related fixes. 					     |
138 --|	 1. remove G_MISS_xxx assignments.				     |
139 --|	 2. Conditionally calling debug routine.                             |
140 --|	 Also, fixed issues found during unit testing. Search for the bug    |
141 --|	 number to find the fixes.               			     |
142 --|    30-OCT-2002  RajaSekhar    Bug#2641405 Added NOCOPY hint              |
143 --|    21/NOV/2002  Uday Moogala  Bug# 2681243                               |
144 --|      1. Return value of GMA_GLOBAL_GRP.set_who has changed to -1 from 0  |
145 --|         in case of invalid users.					     |
146 --|	 2. Removed "when others" section in validate_input_params           |
147 --+==========================================================================+
148 -- End of comments
149 
150 -- Proc start of comments
151 --+==========================================================================+
152 --|  PROCEDURE NAME                                                          |
153 --|       Validate_Input_Params                                              |
154 --|                                                                          |
155 --|  DESCRIPTION                                                             |
156 --|       Validates all the input parameters.                                |
157 --|                                                                          |
158 --|  PARAMETERS                                                              |
159 --|        p_header_rec       IN  Header_Rec_Type                            |
160 --|        x_header_rec       OUT Header_Rec_Type                            |
161 --|        x_user_id          OUT fnd_user.user_id%TYPE                      |
162 --|        x_return_status    OUT VARCHAR2                                   |
163 --|                                                                          |
164 --|  RETURNS                                                                 |
165 --|       TRUE  - If succesfully initialized all variables                   |
166 --|       FALSE - If any error                                               |
167 --|                                                                          |
168 --|  HISTORY                                                                 |
169 --|       27/02/2001 Uday Moogla - Created                                   |
170 --|       06/07/2001 Uday Moogala  Bug# 1868624                              |
171 --|                 Fixed Validate_Input_Params procedure to not to validate |
172 --|                 unique key columns when cmptcost_id is passed.           |
173 --|  06-Apr-07  Pmarada Bug 5586406, Put some log messages                   |
174 --|                                                                          |
175 --+==========================================================================+
176 -- Proc end of comments
177 
178   PROCEDURE validate_input_params
179   (
180   p_header_rec            IN              Header_Rec_Type,
181   p_this_level            IN              This_Level_Dtl_Tbl_Type,
182   p_lower_level           IN              Lower_Level_Dtl_Tbl_Type,
183   p_operation             IN              VARCHAR2,
184   x_header_rec                OUT NOCOPY  Header_Rec_Type,
185   x_this_level                OUT NOCOPY  This_Level_Dtl_Tbl_Type,
186   x_lower_level               OUT NOCOPY  Lower_Level_Dtl_Tbl_Type,
187   x_user_id                   OUT NOCOPY  fnd_user.user_id%TYPE,
188   x_return_status             OUT NOCOPY  VARCHAR2
189   )
190   IS
191 
192     /******************
193     * Local Variables *
194     ******************/
195     l_period_status                       gmf_period_statuses.period_status%TYPE ;
196     l_cost_type                           cm_mthd_mst.cost_type%TYPE ;
197     l_prodcalc_type                       cm_mthd_mst.prodcalc_type%TYPE ;
198     l_usage_ind                           cm_cmpt_mst.usage_ind%TYPE ;
199     l_rmcalc_type                         cm_cmpt_dtl.rmcalc_type%TYPE ;
200     l_cost_cmpntcls_id                    cm_cmpt_mst.cost_cmpntcls_id%TYPE ;
201     l_cost_cmpntcls_code                  cm_cmpt_mst.cost_cmpntcls_code%TYPE ;
202     l_cmpntcost_id                        cm_cmpt_dtl.cmpntcost_id%TYPE ;
203     l_rollover_ind                        cm_cmpt_dtl.rollover_ind%TYPE ;
204     l_idx                                 NUMBER(10) := 0 ;
205     e_this_level                          EXCEPTION ;
206     e_lower_level                         EXCEPTION ;
207 
208   BEGIN
209 
210     /******************************************
211     * Initialize API return status to success *
212     ******************************************/
213     x_return_status := FND_API.G_RET_STS_SUCCESS;
214 
215     /***************************************
216     * just to make sure no elements exist. *
217     ***************************************/
218     x_this_level.delete ;
219     x_lower_level.delete ;
220 
221     /**************************
222     * Organization Validation *
223     **************************/
224     IF (p_header_rec.organization_id <> FND_API.G_MISS_NUM)
225     AND (p_header_rec.organization_id IS NOT NULL)
226     THEN
227       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
228       THEN
229         log_msg('Validating Organization Id :' || p_header_rec.Organization_id);
230       END IF;
231       IF NOT GMF_VALIDATIONS_PVT.Validate_organization_id(p_header_rec.organization_id) THEN
232         add_header_to_error_stack(p_header_rec);
233         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ORGN_ID');
234         FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_header_rec.organization_id);
235         FND_MSG_PUB.Add;
236         RAISE FND_API.G_EXC_ERROR;
237       END IF;
238       IF (p_header_rec.organization_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.organization_code IS NOT NULL)
239       THEN
240         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
241         THEN
242           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_ORGN_CODE');
243           FND_MESSAGE.SET_TOKEN('ORGANIZATION_CODE',p_header_rec.organization_code);
244           FND_MSG_PUB.Add;
245         END IF;
246       END IF;
247     ELSE
248       IF (p_header_rec.organization_code <> FND_API.G_MISS_CHAR)
249       AND (p_header_rec.organization_code IS NOT NULL)
250       THEN
251         IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
252         THEN
253           log_msg('Validating Organization Code :' || p_header_rec.Organization_code);
254         END IF;
255         x_header_rec.organization_id := GMF_VALIDATIONS_PVT.Validate_organization_Code(p_header_rec.organization_code);
256         IF x_header_rec.organization_id IS NULL
257         THEN
258           add_header_to_error_stack(p_header_rec);
259           FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ORGN_CODE');
260           FND_MESSAGE.SET_TOKEN('ORG_CODE',p_header_rec.organization_code);
261           FND_MSG_PUB.Add;
262           RAISE FND_API.G_EXC_ERROR;
263         ELSE
264            IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level THEN        -- Bug 5586406, pmarada
265              log_msg('Organization Id : ' || x_header_rec.organization_id );
266            END IF;
267         END IF;
268       ELSE
269         add_header_to_error_stack(p_header_rec);
270         FND_MESSAGE.SET_NAME('GMF','GMF_API_ORGANIZATION_ID_REQ');
271         FND_MSG_PUB.Add;
272         RAISE FND_API.G_EXC_ERROR;
273       END IF;
274     END IF;
275     x_header_rec.organization_id := nvl(p_header_rec.organization_id, x_header_rec.organization_id) ;
276 
277     /***********************
278     * Cost TYPE Validation *
279     ***********************/
280     IF (p_header_rec.cost_type_id <> FND_API.G_MISS_NUM)
281     AND (p_header_rec.cost_type_id IS NOT NULL)
282     THEN
283       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
284       THEN
285         log_msg('Validating Cost type Id : ' || p_header_rec.cost_type_id);
286       END IF;
287       IF NOT GMF_VALIDATIONS_PVT.Validate_Cost_type_id(p_header_rec.cost_type_id) THEN
288         add_header_to_error_stack(p_header_rec);
289         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_COST_TYPE_ID');
290         FND_MESSAGE.SET_TOKEN('COST_TYPE_ID',p_header_rec.cost_type_id);
291         FND_MSG_PUB.Add;
292         RAISE FND_API.G_EXC_ERROR;
293       END IF;
294       IF (p_header_rec.cost_mthd_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.cost_mthd_code IS NOT NULL)
295       THEN
296         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
297         THEN
298           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_COST_TYPE');
299           FND_MESSAGE.SET_TOKEN('COST_TYPE',p_header_rec.cost_mthd_code);
300           FND_MSG_PUB.Add;
301         END IF;
302       END IF;
303     ELSE
304       IF (p_header_rec.cost_mthd_code <> FND_API.G_MISS_CHAR)
305       AND (p_header_rec.cost_mthd_code IS NOT NULL)
306       THEN
307         IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
308         THEN
309           log_msg('Validating Cost type code : ' || p_header_rec.cost_mthd_code);
310         END IF;
311         x_header_rec.cost_Type_id := GMF_VALIDATIONS_PVT.Validate_Cost_type_Code(p_header_rec.cost_mthd_code);
312         IF x_header_rec.cost_Type_id IS NULL THEN
313           add_header_to_error_stack(p_header_rec);
314           FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_COST_TYPE');
315           FND_MESSAGE.SET_TOKEN('COST_TYPE',p_header_rec.cost_mthd_code);
316           FND_MSG_PUB.Add;
317           RAISE FND_API.G_EXC_ERROR;
318         ELSE
319            IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level THEN        -- Bug 5586406, pmarada
320              log_msg('Cost Type Id : ' || x_header_rec.cost_Type_id );
321            END IF;
322         END IF;
323       ELSE
324         add_header_to_error_stack(p_header_rec);
325         FND_MESSAGE.SET_NAME('GMF','GMF_API_COST_TYPE_ID_REQ');
326         FND_MSG_PUB.Add;
327         RAISE FND_API.G_EXC_ERROR;
328       END IF;
329     END IF;
330     x_header_rec.cost_type_id  := nvl(p_header_rec.cost_type_id, x_header_rec.cost_type_id) ;
331 
332     /***********************
333     * Period Id Validation *
334     ***********************/
335     IF (p_header_rec.period_id <> FND_API.G_MISS_NUM)
336     AND (p_header_rec.period_id IS NOT NULL)
337     THEN
338       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
339       THEN
340         log_msg('Validating Period Id : ' || p_header_rec.period_id);
341       END IF;
342       IF NOT GMF_VALIDATIONS_PVT.Validate_period_id(p_header_rec.period_id)
343       THEN
344         add_header_to_error_stack(p_header_rec);
345         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_PERIOD_ID');
346         FND_MESSAGE.SET_TOKEN('PERIOD_ID',p_header_rec.period_id);
347         FND_MSG_PUB.Add;
348         RAISE FND_API.G_EXC_ERROR;
349       END IF;
350       IF ((p_header_rec.calendar_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.calendar_code IS NOT NULL))
351       AND ((p_header_rec.period_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.period_code IS NOT NULL))
352       THEN
353         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
354         THEN
355           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_PERIOD_CODE');
356           FND_MESSAGE.SET_TOKEN('CALENDAR_CODE',p_header_rec.calendar_code);
357           FND_MESSAGE.SET_TOKEN('PERIOD_CODE',p_header_rec.period_code);
358           FND_MSG_PUB.Add;
359         END IF;
360       END IF;
361     ELSE
362       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
363       THEN
364         log_msg('Validating Calendar Code : '|| p_header_rec.Calendar_code||' period_code : ' || p_header_rec.period_code);
365       END IF;
366       IF ((p_header_rec.calendar_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.calendar_code IS NOT NULL))
367       AND ((p_header_rec.period_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.period_code IS NOT NULL))
368       THEN
369         x_header_rec.period_id := GMF_VALIDATIONS_PVT.Validate_Period_code(x_header_rec.organization_id, p_header_rec.calendar_code,p_header_rec.period_code, x_header_rec.cost_Type_id);
370         IF nvl(x_header_rec.period_id, -1) <= 0 THEN
371           add_header_to_error_stack(p_header_rec);
372           FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_CLDR_PERIOD');
373           FND_MESSAGE.SET_TOKEN('CALENDAR_CODE',p_header_rec.calendar_code);
374           FND_MESSAGE.SET_TOKEN('PERIOD_CODE',p_header_rec.period_code);
375           FND_MSG_PUB.Add;
376           RAISE FND_API.G_EXC_ERROR;
377         ELSE
378            IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level THEN        -- Bug 5586406, pmarada
379              log_msg('Period Id : ' || x_header_rec.period_id );
380            END IF;
381         END IF;
382       ELSE
383         add_header_to_error_stack(p_header_rec);
384         FND_MESSAGE.SET_NAME('GMF','GMF_API_PERIOD_ID_REQ');
385         FND_MSG_PUB.Add;
386         RAISE FND_API.G_EXC_ERROR;
387       END IF;
388     END IF;
389     x_header_rec.period_id     := nvl(p_header_rec.period_id, x_header_rec.period_id) ;
390 
391     BEGIN
392       SELECT    period_status
393       INTO      l_period_status
394       FROM      gmf_period_statuses
395       WHERE     period_id = x_header_rec.period_id;
396     EXCEPTION
397       WHEN OTHERS THEN
398         l_period_status := NULL;
399     END;
400     IF l_period_status IS NULL
401     THEN
402       add_header_to_error_stack(p_header_rec);
403       FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_PERIOD_STATUS');
404       FND_MESSAGE.SET_TOKEN('PERIOD_ID',x_header_rec.period_id);
405       FND_MSG_PUB.Add;
406       RAISE FND_API.G_EXC_ERROR;
407     ELSIF l_period_status = 'F'
408     THEN
409       IF p_operation IN ('UPDATE','DELETE')
410       THEN
411         add_header_to_error_stack(p_header_rec);
412         FND_MESSAGE.SET_NAME('GMF','GMF_API_FROZEN_PERIOD_ID');
413         FND_MESSAGE.SET_TOKEN('PERIOD_ID',x_header_rec.period_id);
414         FND_MSG_PUB.Add;
415         RAISE FND_API.G_EXC_ERROR;
416       END IF ;
417     ELSIF l_period_status = 'C'
418     THEN
419       add_header_to_error_stack(p_header_rec);
420       FND_MESSAGE.SET_NAME('GMF','GMF_API_CLOSED_PERIOD_ID');
421       FND_MESSAGE.SET_TOKEN('PERIOD_ID',x_header_rec.period_id);
422       FND_MSG_PUB.Add;
423       RAISE FND_API.G_EXC_ERROR;
424     END IF;
425 
426     /******************
427     * Item Validation *
428     ******************/
429     IF (p_header_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND (p_header_rec.inventory_item_id IS NOT NULL)
430     THEN
431       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
432       THEN
433         log_msg('Validating Inventory Item Id : ' || p_header_rec.inventory_item_id);
434       END IF;
435       IF NOT GMF_VALIDATIONS_PVT.Validate_inventory_item_Id(p_header_rec.inventory_item_id, x_header_Rec.organization_id)
436       THEN
437         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ITEM_ID');
438         FND_MESSAGE.SET_TOKEN('ITEM_ID', p_header_rec.inventory_item_id);
439         FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',x_header_Rec.organization_id);
440         FND_MSG_PUB.Add;
441         RAISE FND_API.G_EXC_ERROR;
442       END IF;
443       IF (p_header_rec.item_number <> FND_API.G_MISS_CHAR) AND (p_header_rec.item_number IS NOT NULL)
444       THEN
445         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
446         THEN
447           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_ITEM_NO');
448           FND_MESSAGE.SET_TOKEN('ITEM_NO',p_header_rec.item_number);
449           FND_MSG_PUB.Add;
450         END IF;
451       END IF;
452     ELSIF (p_header_rec.item_number <> FND_API.G_MISS_CHAR) AND (p_header_rec.item_number IS NOT NULL)
453     THEN
454       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
455       THEN
456         log_msg('Validating Item Number : ' || p_header_rec.item_number);
457       END IF;
458       x_header_rec.inventory_item_id := GMF_VALIDATIONS_PVT.Validate_Item_Number(p_header_rec.item_number, x_header_Rec.organization_id);
459         IF x_header_rec.inventory_item_id IS NULL
460         THEN
461           FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ITEM_NO');
462           FND_MESSAGE.SET_TOKEN('ITEM_NO',p_header_rec.item_number);
463           FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',x_header_Rec.organization_id);
464           FND_MSG_PUB.Add;
465           RAISE FND_API.G_EXC_ERROR;
466         ELSE
467           IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level THEN
468             log_msg('Inventory Item id : ' || x_header_rec.inventory_item_id);
469           END IF;
470         END IF;
471     ELSE
472       FND_MESSAGE.SET_NAME('GMF','GMF_API_ITEM_ID_REQ');
473       FND_MSG_PUB.Add;
474       RAISE FND_API.G_EXC_ERROR;
475     END IF;
476     x_header_rec.inventory_item_id := nvl(p_header_rec.inventory_item_id, x_header_rec.inventory_item_id);
477 
478     IF (l_period_status = 'F') AND (p_operation = 'INSERT')
479     THEN
480       SELECT          NVL(MAX(rollover_ind),0)
481       INTO            l_rollover_ind
482       FROM            cm_cmpt_dtl
483       WHERE           inventory_item_id = x_header_rec.inventory_item_id
484       AND             organization_id = x_header_rec.organization_id
485       AND             period_id = x_header_rec.period_id
486       AND             cost_type_id = x_header_rec.cost_type_id;
487 
488       IF l_rollover_ind <> 0
489       THEN
490         add_header_to_error_stack(p_header_rec);
491         FND_MESSAGE.SET_NAME('GMF','GMF_API_IC_CANNT_INSERT_CMPTS');
492         FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID',x_header_rec.inventory_item_id);
493         FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',x_header_rec.organization_id);
494         FND_MESSAGE.SET_TOKEN('PERIOD_ID',x_header_rec.period_id);
495         FND_MESSAGE.SET_TOKEN('COST_TYPE_ID',x_header_rec.cost_type_id);
496         FND_MSG_PUB.Add;
497         RAISE FND_API.G_EXC_ERROR;
498       END IF ;
499     END IF ;
500 
501     /***********************
502     * User Name Validation *
503     ***********************/
504     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
505     THEN
506       log_msg('Validating user name : ' || p_header_rec.user_name);
507     END IF;
508 
509     IF (p_header_rec.user_name <> FND_API.G_MISS_CHAR)
510     AND (p_header_rec.user_name IS NOT NULL)
511     THEN
512       GMA_GLOBAL_GRP.Get_who( p_user_name  => p_header_rec.user_name, x_user_id  => x_user_id);
513       IF x_user_id = -1
514       THEN
515         add_header_to_error_stack(p_header_rec);
516         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_USER_NAME');
517         FND_MESSAGE.SET_TOKEN('USER_NAME',p_header_rec.user_name);
518         FND_MSG_PUB.Add;
519         RAISE FND_API.G_EXC_ERROR;
520     	END IF;
521     ELSE
522       add_header_to_error_stack(p_header_rec);
523       FND_MESSAGE.SET_NAME('GMF','GMF_API_USER_NAME_REQ');
524       FND_MSG_PUB.Add;
525       RAISE FND_API.G_EXC_ERROR;
526     END IF;
527     x_header_rec.inventory_item_id := nvl(p_header_rec.inventory_item_id, x_header_rec.inventory_item_id);
528     x_header_rec.period_id         := nvl(p_header_rec.period_id, x_header_rec.period_id) ;
529     x_header_rec.calendar_code     := nvl(p_header_rec.calendar_code, x_header_rec.calendar_code) ;
530     x_header_rec.period_code       := nvl(p_header_rec.period_code, x_header_rec.period_code) ;
531     x_header_rec.cost_type_id      := nvl(p_header_rec.cost_type_id, x_header_rec.cost_type_id) ;
532     x_header_rec.cost_mthd_code    := nvl(p_header_rec.cost_mthd_code, x_header_rec.cost_mthd_code) ;
533     x_header_rec.organization_id   := nvl(p_header_rec.organization_id, x_header_rec.organization_id) ;
534     x_header_rec.organization_code := nvl(p_header_rec.organization_code, x_header_rec.organization_code);
535     x_header_rec.item_number       := nvl(p_header_rec.item_number, x_header_rec.item_number) ;
536     x_header_rec.user_name         := nvl(p_header_rec.user_name, x_header_rec.user_name) ;
537 
538     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
539     THEN
540     	log_msg( 'period_id : ' || x_header_rec.period_id ) ;
541     	log_msg( 'cost_type_id : ' || x_header_rec.cost_type_id ) ;
542     	log_msg( 'Organziation_id : ' || x_header_rec.organization_id ) ;
543     	log_msg( 'inventory_item_id : ' || x_header_rec.inventory_item_id ) ;
544     	log_msg( 'item_number : ' || x_header_rec.item_number ) ;
545     	log_msg( 'user_name : ' || x_header_rec.user_name ) ;
546     END IF;
547 
548     FOR i in 1..p_this_level.count
549     LOOP
550       BEGIN
551         l_usage_ind          := '' ;
552         l_rmcalc_type        := '' ;
553         l_cost_cmpntcls_id   := '' ;
554         l_cost_cmpntcls_code := '' ;
555         l_cmpntcost_id       := '' ;
556 
557         IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level THEN	-- Bug 2659435
558         	log_msg('This Level Record# : ' || i);
559         END IF;
560 
561         /*****************************************************************************************
562         * In case of delete, if cmpntcost_id is supplied skip all validations and use            *
563         * cmpntcost_id to delete the records If cmpntcost_id is not supplied then do validations *
564         * on all unique key columns only                                                         *
565         *****************************************************************************************/
566 
567         IF ((p_operation = 'DELETE')
568         AND ((p_this_level(i).cmpntcost_id <> FND_API.G_MISS_NUM)
569         OR (p_this_level(i).cmpntcost_id IS NOT NULL)))
570         THEN
571           add_header_to_error_stack(p_header_rec);
572           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_IC_UNIQUE_KEY');
573           FND_MESSAGE.SET_TOKEN('CMPNTCOST_ID', p_this_level(i).cmpntcost_id);
574           FND_MSG_PUB.Add;
575           l_cmpntcost_id := p_this_level(i).cmpntcost_id;
576         ELSE
577 
578           /*****************************************************************************
579           * In case of update,if cmpntcost_id is supplied skip validations on columns  *
580           * of unique key i.e., cmpntcls and alys code If cmpntcost_id is not supplied *
581           * then do all validations                                                    *
582           *****************************************************************************/
583           IF ((p_operation = 'UPDATE')
584           AND ((p_this_level(i).cmpntcost_id <> FND_API.G_MISS_NUM)
585           OR (p_this_level(i).cmpntcost_id IS NOT NULL)))
586           THEN
587             l_cmpntcost_id := p_this_level(i).cmpntcost_id;
588 	        ELSE
589             /************************************************************************
590             * Use cmpntcls_id if sent otherwise use cmpntcls_code, If both are sent *
591             * then use only cmpntcls_id and ignore other params and log a message   *
592             * If both are not sent then raise error.                                *
593             ************************************************************************/
594             IF (p_this_level(i).cost_cmpntcls_id <> FND_API.G_MISS_NUM)
595             AND (p_this_level(i).cost_cmpntcls_id IS NOT NULL)
596             THEN
597               IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
598               THEN
599                 log_msg('validating this level Cmpt Cls ID('||i||') : '|| p_this_level(i).cost_cmpntcls_id);
600               END IF;
601 
602               /***********************
603               * Validate CmpntCls Id *
604               ***********************/
605               GMF_VALIDATIONS_PVT.Validate_Cost_Cmpntcls_Id (p_this_level(i).cost_cmpntcls_id,l_cost_cmpntcls_code,l_usage_ind);
606               IF l_usage_ind IS NULL
607               THEN
608           	    add_header_to_error_stack(p_header_rec);
609                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_CMPNTCLS_ID');
610                 FND_MESSAGE.SET_TOKEN('CMPNTCLS_ID',p_this_level(i).cost_cmpntcls_id);
611                 FND_MSG_PUB.Add;
612                 RAISE e_this_level;
613               END IF;
614               l_cost_cmpntcls_id := p_this_level(i).cost_cmpntcls_id ;
615               IF (p_this_level(i).cost_cmpntcls_code <> FND_API.G_MISS_CHAR)
616               AND (p_this_level(i).cost_cmpntcls_code IS NOT NULL)
617               THEN
618                 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
619                 THEN
620           	      add_header_to_error_stack(p_header_rec); -- Bug 2659435
621                   FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_CMPNTCLS_CODE');
622                   FND_MESSAGE.SET_TOKEN('CMPNTCLS_CODE',p_this_level(i).cost_cmpntcls_code);
623                   FND_MSG_PUB.Add;
624                 END IF;
625               END IF;
626             ELSIF (p_this_level(i).cost_cmpntcls_code <> FND_API.G_MISS_CHAR)
627             AND (p_this_level(i).cost_cmpntcls_code IS NOT NULL)
628             THEN
629               l_cost_cmpntcls_code := p_this_level(i).cost_cmpntcls_code ;
630               IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
631               THEN
632                 log_msg('validating this level Cmpt Cls Code('||i||') : ' ||p_this_level(i).cost_cmpntcls_code);
633               END IF;
634 
635               /*************************
636               * Convert value into ID. *
637               *************************/
638               GMF_VALIDATIONS_PVT.Validate_Cost_Cmpntcls_Code (
639                                                               p_this_level(i).cost_cmpntcls_code,
640                                                               l_cost_cmpntcls_id,l_usage_ind
641                                                               ) ;
642               IF l_cost_cmpntcls_id IS NULL
643               THEN
644             	  add_header_to_error_stack(p_header_rec);
645                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_CMPNTCLS_CODE');
646                 FND_MESSAGE.SET_TOKEN('CMPNTCLS_CODE',p_this_level(i).cost_cmpntcls_code);
647                 FND_MSG_PUB.Add;
648                 RAISE e_this_level;
649               ELSE
650                   IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level THEN
651                     log_msg('Cmpt Cls Id := ' || l_cost_cmpntcls_id);
652                   END IF;
653               END IF;
654             ELSE
655               add_header_to_error_stack(p_header_rec);
656               FND_MESSAGE.SET_NAME('GMF','GMF_API_CMPNTCLS_ID_REQ');
657               FND_MSG_PUB.Add;
658               RAISE e_this_level;
659             END IF;
660 
661             /****************
662             * Analysis Code *
663             ****************/
664             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
665             THEN
666             	log_msg('validating this level analysis_code('||i||') : ' || p_this_level(i).cost_analysis_code);
667             END IF;
668             IF (p_this_level(i).cost_analysis_code <> FND_API.G_MISS_CHAR)
669             AND (p_this_level(i).cost_analysis_code IS NOT NULL)
670             THEN
671               IF NOT GMF_VALIDATIONS_PVT.Validate_Analysis_Code(p_this_level(i).cost_analysis_code)
672               THEN
673           	    add_header_to_error_stack(p_header_rec);
674                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ANALYSIS_CODE');
675                 FND_MESSAGE.SET_TOKEN('ANALYSIS_CODE',p_this_level(i).cost_analysis_code);
676                 FND_MSG_PUB.Add;
677                 RAISE e_this_level;
678               END IF;
679             ELSE
680           	  add_header_to_error_stack(p_header_rec);
681               FND_MESSAGE.SET_NAME('GMF','GMF_API_ANALYSIS_CODE_REQ');
682               FND_MSG_PUB.Add;
683               RAISE e_this_level;
684             END IF;
685   	      END IF ;
686           /******************************************************
687           * Enough of validations for delete.                   *
688           * For update and insert we should do all validations. *
689           ******************************************************/
690           IF (p_operation <> 'DELETE')
691           THEN
692 
693             /*******************************************************************************************************
694             * Component Cost, In the form the format mask for this is : 999999999D999999999(999,999,999.999999999) *
695             * To put that check here, the cost should not be >= 1,000,000,000                                      *
696             *******************************************************************************************************/
697             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
698             THEN
699               log_msg('validating this level Component Cost('||i||') for format : '||p_this_level(i).cmpnt_cost);
700             END IF;
701 
702             IF (p_this_level(i).cmpnt_cost <> FND_API.G_MISS_NUM)
703             AND (p_this_level(i).cmpnt_cost IS NOT NULL)
704             THEN
705               IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
706               THEN
707                 log_msg('before cmpnt_cost check for format...');
708               END IF;
709               IF p_this_level(i).cmpnt_cost >= 1000000000
710               THEN
711                 IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
712                 THEN
713                 	log_msg('before raising the error...');
714                 END IF;
715                 add_header_to_error_stack(p_header_rec);
716                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_CMPNT_COST') ;
717                 FND_MESSAGE.SET_TOKEN('CMPNT_COST',p_this_level(i).cmpnt_cost);
718                 FND_MSG_PUB.Add;
719                 RAISE e_this_level;
720               END IF ;
721             ELSIF (p_this_level(i).cmpnt_cost = FND_API.G_MISS_NUM AND p_operation = 'UPDATE')
722             OR (p_operation = 'INSERT')
723             THEN
724               add_header_to_error_stack(p_header_rec);
725               FND_MESSAGE.SET_NAME('GMF','GMF_API_CMPNT_COST_REQ');
726               FND_MSG_PUB.Add;
727               RAISE e_this_level;
728             END IF;
729 
730             /************************************************************************************
731             * Burden Indicator must be either 0 or 1                                            *
732             * If Burden Indicator is 1 then Cost Component Class must have usage indicator = 2. *
733             ************************************************************************************/
734             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
735             THEN
736               log_msg('validating this level Burden Indicator('||i||') : '||p_this_level(i).burden_ind);
737             END IF;
738 
739             IF (p_this_level(i).burden_ind <> FND_API.G_MISS_NUM)
740             AND (p_this_level(i).burden_ind IS NOT NULL)
741             THEN
742               IF (p_this_level(i).burden_ind NOT IN (0,1) )
743               THEN
744           	    add_header_to_error_stack(p_header_rec);
745                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_BURDEN_IND');
746                 FND_MESSAGE.SET_TOKEN('BURDEN_IND',p_this_level(i).burden_ind);
747                 FND_MSG_PUB.Add;
748                 RAISE e_this_level;
749               END IF;
750               IF (p_this_level(i).burden_ind = 1) AND ( l_usage_ind <>2 )
751               THEN
752           	    add_header_to_error_stack(p_header_rec);
753                 FND_MESSAGE.SET_NAME('GMF','GMF_API_BURDEN_USAGE_IND');
754                 FND_MESSAGE.SET_TOKEN('BURDEN_IND',p_this_level(i).burden_ind);
755                 FND_MESSAGE.SET_TOKEN('CMPNT_CLS',l_cost_cmpntcls_code);
756                 FND_MSG_PUB.Add;
757                 RAISE e_this_level;
758               END IF ;
759             ELSIF (p_this_level(i).burden_ind = FND_API.G_MISS_NUM AND p_operation = 'UPDATE')
760             OR (p_operation = 'INSERT')
761             THEN
762               add_header_to_error_stack(p_header_rec); -- Bug 2659435
763               FND_MESSAGE.SET_NAME('GMF','GMF_API_BURDEN_IND_REQ');
764               FND_MSG_PUB.Add;
765               RAISE e_this_level;
766             END IF;
767 
768             /************************************************************************************************
769             * Raw Material Calculation Type                                                                 *
770             * If Cost Method Code =  "Actual Cost" then this field can only have either of 1, 2, 3, 4, OR 5 *
771             * otherwise it will be set to 0                                                                 *
772             ************************************************************************************************/
773             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
774             THEN
775             	log_msg('validating this level Raw Material Calculation Type('||i||') :'|| p_this_level(i).rmcalc_type);
776             END IF;
777 
778             IF (p_this_level(i).rmcalc_type <> FND_API.G_MISS_NUM) AND (p_this_level(i).rmcalc_type IS NOT NULL)
779             THEN
780               IF l_cost_type = 1
781               THEN
782                 IF ((p_this_level(i).rmcalc_type NOT IN (1, 2, 3, 4, 5)) OR (p_this_level(i).rmcalc_type IS NULL))
783                 THEN
784           	      add_header_to_error_stack(p_header_rec);
785                   FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_RMCALC_TYPE');
786                   FND_MESSAGE.SET_TOKEN('RMCALC_TYPE',p_this_level(i).rmcalc_type);
787                   FND_MSG_PUB.Add;
788                   RAISE e_this_level;
789                 ELSE
790                   l_rmcalc_type := p_this_level(i).rmcalc_type ;
791                 END IF;
792               ELSE
793                 l_rmcalc_type := 0 ;
794               END IF ;
795             END IF ;
796 
797             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
798             THEN
799             	log_msg('validating this level delete_mark('||i||') :' || p_this_level(i).delete_mark);
800             END IF;
801 
802             IF (p_this_level(i).delete_mark <> FND_API.G_MISS_NUM)
803             AND (p_this_level(i).delete_mark IS NOT NULL)
804             THEN
805               IF p_this_level(i).delete_mark NOT IN (0,1)
806               THEN
807                 add_header_to_error_stack(p_header_rec);
808                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_DELETE_MARK');
809                 FND_MESSAGE.SET_TOKEN('DELETE_MARK',p_this_level(i).delete_mark);
810                 FND_MSG_PUB.Add;
811                 RAISE e_this_level;
812               END IF;
813             ELSIF (p_this_level(i).delete_mark = FND_API.G_MISS_NUM AND p_operation = 'UPDATE')
814             OR (p_operation = 'INSERT')
815             THEN
816           	  add_header_to_error_stack(p_header_rec);
817               FND_MESSAGE.SET_NAME('GMF','GMF_API_DELETE_MARK_REQ');
818               FND_MSG_PUB.Add;
819               RAISE e_this_level;
820             END IF;
821             IF (p_operation = 'UPDATE') AND (p_this_level(i).delete_mark = 1)
822             THEN
823               add_header_to_error_stack(p_header_rec);
824               FND_MESSAGE.SET_NAME('GMF','GMF_API_CANT_MARK_FOR_PURGE');
825               FND_MSG_PUB.Add;
826               RAISE e_this_level;
827             END IF;
828           END IF ;
829 
830           /**********************************************************************************
831           * Ignore unique key combination if Cmpntcost_Id is supplied. If not supplied then *
832           * query the Cmpntcost_Id. This is done only in case of Update and Delete          *
833           **********************************************************************************/
834           IF (p_operation IN ('UPDATE','DELETE')
835           AND ((p_this_level(i).cmpntcost_id <> FND_API.G_MISS_NUM)
836           OR (p_this_level(i).cmpntcost_id IS NOT NULL)))
837           THEN
838             add_header_to_error_stack(p_header_rec);
839             FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_IC_UNIQUE_KEY');
840             FND_MESSAGE.SET_TOKEN('CMPNTCOST_ID', p_this_level(i).cmpntcost_id);
841             FND_MSG_PUB.Add;
842             l_cmpntcost_id := p_this_level(i).cmpntcost_id;
843           END IF ;
844         END IF ;
845         l_idx := l_idx + 1 ;
846         x_this_level(l_idx).cmpntcost_id        := l_cmpntcost_id ;
847         x_this_level(l_idx).cost_cmpntcls_id    := l_cost_cmpntcls_id ;
848         x_this_level(l_idx).cost_cmpntcls_code  := p_this_level(i).cost_cmpntcls_code ;
849         x_this_level(l_idx).cost_analysis_code  := p_this_level(i).cost_analysis_code ;
850         x_this_level(l_idx).cmpnt_cost          := round(p_this_level(i).cmpnt_cost,9) ;
851         x_this_level(l_idx).burden_ind          := p_this_level(i).burden_ind ;
852         x_this_level(l_idx).total_qty           := p_this_level(i).total_qty ;
853         x_this_level(l_idx).costcalc_orig       := 3 ;  -- insert default value 3 as API Load
854         x_this_level(l_idx).rmcalc_type         := l_rmcalc_type ;
855         IF p_operation = 'DELETE' THEN
856           x_this_level(l_idx).delete_mark       := 1 ;
857         ELSE
858           x_this_level(l_idx).delete_mark       := 0 ;
859         END IF;
860         x_this_level(l_idx).attribute1          := p_this_level(i).attribute1 ;
861         x_this_level(l_idx).attribute2          := p_this_level(i).attribute2 ;
862         x_this_level(l_idx).attribute3          := p_this_level(i).attribute3 ;
863         x_this_level(l_idx).attribute4          := p_this_level(i).attribute4 ;
864         x_this_level(l_idx).attribute5          := p_this_level(i).attribute5 ;
865         x_this_level(l_idx).attribute6          := p_this_level(i).attribute6 ;
866         x_this_level(l_idx).attribute7          := p_this_level(i).attribute7 ;
867         x_this_level(l_idx).attribute8          := p_this_level(i).attribute8 ;
868         x_this_level(l_idx).attribute9          := p_this_level(i).attribute9 ;
869         x_this_level(l_idx).attribute10         := p_this_level(i).attribute10 ;
870         x_this_level(l_idx).attribute11         := p_this_level(i).attribute11 ;
871         x_this_level(l_idx).attribute12         := p_this_level(i).attribute12 ;
872         x_this_level(l_idx).attribute13         := p_this_level(i).attribute13 ;
873         x_this_level(l_idx).attribute14         := p_this_level(i).attribute14 ;
874         x_this_level(l_idx).attribute15         := p_this_level(i).attribute15 ;
875         x_this_level(l_idx).attribute16         := p_this_level(i).attribute16 ;
876         x_this_level(l_idx).attribute17         := p_this_level(i).attribute17 ;
877         x_this_level(l_idx).attribute18         := p_this_level(i).attribute18 ;
878         x_this_level(l_idx).attribute19         := p_this_level(i).attribute19 ;
879         x_this_level(l_idx).attribute20         := p_this_level(i).attribute20 ;
880         x_this_level(l_idx).attribute21         := p_this_level(i).attribute21 ;
881         x_this_level(l_idx).attribute22         := p_this_level(i).attribute22 ;
882         x_this_level(l_idx).attribute23         := p_this_level(i).attribute23 ;
883         x_this_level(l_idx).attribute24         := p_this_level(i).attribute24 ;
884         x_this_level(l_idx).attribute25         := p_this_level(i).attribute25 ;
885         x_this_level(l_idx).attribute26         := p_this_level(i).attribute26 ;
886         x_this_level(l_idx).attribute27         := p_this_level(i).attribute27 ;
887         x_this_level(l_idx).attribute28         := p_this_level(i).attribute28 ;
888         x_this_level(l_idx).attribute29         := p_this_level(i).attribute29 ;
889         x_this_level(l_idx).attribute30         := p_this_level(i).attribute30 ;
890         x_this_level(l_idx).attribute_category  := p_this_level(i).attribute_category ;
891 
892         IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
893         THEN
894           log_msg('x_cmpntcost_id('||l_idx||'): '||l_cmpntcost_id);
895           log_msg('x_cost_cmpntcls_id('||l_idx||'): '|| x_this_level(l_idx).cost_cmpntcls_id);
896           log_msg('x_cost_cmpntcls_code('||l_idx||'): '|| x_this_level(l_idx).cost_cmpntcls_code)	;
897           log_msg('x_cost_analysis_code('||l_idx||'): '|| x_this_level(l_idx).cost_analysis_code)	;
898           log_msg('x_cmpnt_cost('||l_idx||'): '||x_this_level(l_idx).cmpnt_cost);
899           log_msg('x_burden_ind('||l_idx||'): '||x_this_level(l_idx).burden_ind);
900           log_msg('x_total_qty('||l_idx||'): '||x_this_level(l_idx).total_qty);
901           log_msg('x_costcalc_orig('||l_idx||'): '||x_this_level(l_idx).costcalc_orig);
902           log_msg('x_delete_mark('||l_idx||'): '||x_this_level(l_idx).delete_mark);
903         END IF;
904       EXCEPTION
905         WHEN e_this_level THEN
906           RAISE FND_API.G_EXC_ERROR;
907       END ;
908     END LOOP;
909 
910     /********************************
911     * Validate Lower Level Records. *
912     ********************************/
913 
914     l_idx := 0 ;
915     FOR i in 1..p_lower_level.count
916     LOOP
917       BEGIN
918         l_cost_cmpntcls_id   := '' ;
919         l_cost_cmpntcls_code := '' ;
920         l_cmpntcost_id       := '' ;
921         IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
922         THEN
923           log_msg('Lower Level Record # : ' || i);
924         END IF;
925 
926         /******************************************************************************
927         * In case of delete, if cmpntcost_id is supplied skip all validations and use *
928         * cmpntcost_id to delete the records, if cmpntcost_id is not supplied then    *
929         * do validations on all unique key columns only                               *
930         ******************************************************************************/
931         IF ((p_operation = 'DELETE')
932         AND ((p_lower_level(i).cmpntcost_id <> FND_API.G_MISS_NUM)
933         OR (p_lower_level(i).cmpntcost_id IS NOT NULL)))
934         THEN
935           add_header_to_error_stack(p_header_rec);
936           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_IC_UNIQUE_KEY');
937           FND_MESSAGE.SET_TOKEN('CMPNTCOST_ID', p_lower_level(i).cmpntcost_id);
938           FND_MSG_PUB.Add;
939           l_cmpntcost_id := p_lower_level(i).cmpntcost_id;
940         ELSE
941           IF ((p_operation = 'UPDATE')
942           AND ((p_lower_level(i).cmpntcost_id <> FND_API.G_MISS_NUM)
943           OR (p_lower_level(i).cmpntcost_id IS NOT NULL)))
944           THEN
945             l_cmpntcost_id := p_lower_level(i).cmpntcost_id;
946 	        ELSE
947             /***************************************************************************************
948             * Use cmpntcls_id if sent otherwise use cmpntcls_code                                  *
949             * If both are sent then use only cmpntcls_id and ignore other params and log a message *
950             * If both are not sent then raise error.                                               *
951             ***************************************************************************************/
952             IF (p_lower_level(i).cost_cmpntcls_id <> FND_API.G_MISS_NUM)
953             AND (p_lower_level(i).cost_cmpntcls_id IS NOT NULL)
954             THEN
955               IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
956               THEN
957                 log_msg('validating lower level Cmpt Cls ID('||i||') :'|| p_lower_level(i).cost_cmpntcls_id);
958               END IF;
959               IF NOT GMF_VALIDATIONS_PVT.Validate_Cost_Cmpntcls_Id (p_lower_level(i).cost_cmpntcls_id)
960               THEN
961           	    add_header_to_error_stack(p_header_rec);
962                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_CMPNTCLS_ID');
963                 FND_MESSAGE.SET_TOKEN('CMPNTCLS_ID',p_lower_level(i).cost_cmpntcls_id);
964                 FND_MSG_PUB.Add;
965                 RAISE e_lower_level;
966               END IF;
967               l_cost_cmpntcls_id := p_lower_level(i).cost_cmpntcls_id ;
968 
969               /***************************************************
970               * Log message if cost_cmpntcls_code is also passed *
971               ***************************************************/
972               IF (p_lower_level(i).cost_cmpntcls_code <> FND_API.G_MISS_CHAR)
973               AND (p_lower_level(i).cost_cmpntcls_code IS NOT NULL)
974               THEN
975                 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
976                 THEN
977           	      add_header_to_error_stack(p_header_rec);
978                   FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_CMPNTCLS_CODE');
979                   FND_MESSAGE.SET_TOKEN('CMPNTCLS_CODE',p_lower_level(i).cost_cmpntcls_code);
980                   FND_MSG_PUB.Add;
981                 END IF;
982               END IF;
983             ELSIF (p_lower_level(i).cost_cmpntcls_code <> FND_API.G_MISS_CHAR)
984             AND (p_lower_level(i).cost_cmpntcls_code IS NOT NULL)
985             THEN
986               IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
987               THEN
988                 log_msg('validating lower level Cmpt Cls Code('||i||') : ' ||p_lower_level(i).cost_cmpntcls_code);
989               END IF;
990               l_cost_cmpntcls_id := GMF_VALIDATIONS_PVT.Validate_Cost_Cmpntcls_Code (p_lower_level(i).cost_cmpntcls_code);
991               IF l_cost_cmpntcls_id IS NULL THEN
992           	    add_header_to_error_stack(p_header_rec);
993                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_CMPNTCLS_CODE');
994                 FND_MESSAGE.SET_TOKEN('CMPNTCLS_CODE',p_lower_level(i).cost_cmpntcls_code);
995                 FND_MSG_PUB.Add;
996                 RAISE e_lower_level;
997               ELSE
998                  IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level THEN
999                     log_msg('Cmpt Cls Id := ' || l_cost_cmpntcls_id);
1000                   END IF;
1001               END IF;
1002             ELSE
1003           	  add_header_to_error_stack(p_header_rec);
1004               FND_MESSAGE.SET_NAME('GMF','GMF_API_CMPNTCLS_ID_REQ');
1005               FND_MSG_PUB.Add;
1006               RAISE e_lower_level;
1007             END IF;
1008 
1009             /***************************
1010             * Validating Analysis Code *
1011             ***************************/
1012             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1013             THEN
1014               log_msg('validating lower level analysis_code('||i||') :' || p_lower_level(i).cost_analysis_code);
1015             END IF;
1016 
1017             IF (p_lower_level(i).cost_analysis_code <> FND_API.G_MISS_CHAR)
1018             AND (p_lower_level(i).cost_analysis_code IS NOT NULL)
1019             THEN
1020               IF NOT GMF_VALIDATIONS_PVT.Validate_Analysis_Code(p_lower_level(i).cost_analysis_code)
1021               THEN
1022           	    add_header_to_error_stack(p_header_rec);
1023                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ANALYSIS_CODE');
1024                 FND_MESSAGE.SET_TOKEN('ANALYSIS_CODE',p_lower_level(i).cost_analysis_code);
1025                 FND_MSG_PUB.Add;
1026                 RAISE e_lower_level;
1027               END IF;
1028             ELSE
1029               add_header_to_error_stack(p_header_rec);
1030               FND_MESSAGE.SET_NAME('GMF','GMF_API_ANALYSIS_CODE_REQ');
1031               FND_MSG_PUB.Add;
1032               RAISE e_lower_level;
1033             END IF;
1034           END IF;
1035 
1036           /******************************************************
1037           * Enough of validations for delete.                   *
1038           * For update and insert we should do all validations. *
1039           ******************************************************/
1040           IF (p_operation <> 'DELETE')
1041           THEN
1042 
1043             /***************************************************************************************
1044             * Component Cost                                                                       *
1045             * In the form the format mask for this is : 999999999D999999999(999,999,999.999999999) *
1046             * To put that check here, the cost should not be >= 1,000,000,000                      *
1047             ***************************************************************************************/
1048             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1049             THEN
1050               log_msg('validating lower level Component Cost('||i||') for format : '||p_lower_level(i).cmpnt_cost);
1051             END IF;
1052             IF (p_lower_level(i).cmpnt_cost <> FND_API.G_MISS_NUM)
1053             AND (p_lower_level(i).cmpnt_cost IS NOT NULL)
1054             THEN
1055               IF p_lower_level(i).cmpnt_cost >= 1000000000
1056               THEN
1057                 IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1058                 THEN
1059                   log_msg('before raising the error...');
1060                 END IF;
1061                 add_header_to_error_stack(p_header_rec);
1062                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_CMPNT_COST') ;
1063                 FND_MESSAGE.SET_TOKEN('CMPNT_COST',p_lower_level(i).cmpnt_cost);
1064                 FND_MSG_PUB.Add;
1065                 RAISE e_lower_level;
1066               END IF ;
1067             ELSIF (p_lower_level(i).cmpnt_cost = FND_API.G_MISS_NUM AND p_operation = 'UPDATE')
1068             OR (p_operation = 'INSERT')
1069             THEN
1070           	  add_header_to_error_stack(p_header_rec);
1071               FND_MESSAGE.SET_NAME('GMF','GMF_API_CMPNT_COST_REQ');
1072               FND_MSG_PUB.Add;
1073               RAISE e_lower_level;
1074             END IF;
1075             IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1076             THEN
1077          	    log_msg('validating lower level delete_mark('||i||') :' || p_lower_level(i).delete_mark);
1078             END IF;
1079             IF (p_lower_level(i).delete_mark <> FND_API.G_MISS_NUM)
1080             AND (p_lower_level(i).delete_mark IS NOT NULL)
1081             THEN
1082               IF p_lower_level(i).delete_mark NOT IN (0,1)
1083               THEN
1084           	    add_header_to_error_stack(p_header_rec);
1085                 FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_DELETE_MARK');
1086                 FND_MESSAGE.SET_TOKEN('DELETE_MARK',p_lower_level(i).delete_mark);
1087                 FND_MSG_PUB.Add;
1088                 RAISE e_lower_level;
1089               END IF;
1090             ELSIF (p_lower_level(i).delete_mark = FND_API.G_MISS_NUM AND p_operation = 'UPDATE')
1091             OR (p_operation = 'INSERT')
1092             THEN
1093           	  add_header_to_error_stack(p_header_rec);
1094               FND_MESSAGE.SET_NAME('GMF','GMF_API_DELETE_MARK_REQ');
1095               FND_MSG_PUB.Add;
1096               RAISE e_lower_level;
1097             END IF;
1098             IF (p_operation = 'UPDATE') AND (p_lower_level(i).delete_mark = 1)
1099             THEN
1100           	  add_header_to_error_stack(p_header_rec);
1101               FND_MESSAGE.SET_NAME('GMF','GMF_API_CANT_MARK_FOR_PURGE');
1102               FND_MSG_PUB.Add;
1103               RAISE e_lower_level;
1104             END IF;
1105           END IF ;
1106 
1107           /**********************************************************************************
1108           * Ignore unique key combination if Cmpntcost_Id is supplied. If not supplied then *
1109           * query the Cmpntcost_Id. This is done only in case of Update and Delete          *
1110           **********************************************************************************/
1111           IF (p_operation IN ('UPDATE','DELETE')
1112           AND ((p_lower_level(i).cmpntcost_id <> FND_API.G_MISS_NUM)
1113           OR (p_lower_level(i).cmpntcost_id IS NOT NULL)))
1114           THEN
1115             add_header_to_error_stack(p_header_rec);
1116             FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_IC_UNIQUE_KEY');
1117             FND_MESSAGE.SET_TOKEN('CMPNTCOST_ID', p_lower_level(i).cmpntcost_id);
1118             FND_MSG_PUB.Add;
1119             l_cmpntcost_id := p_lower_level(i).cmpntcost_id;
1120           END IF ;
1121         END IF ;
1122         l_idx := l_idx + 1 ;
1123         x_lower_level(l_idx).cmpntcost_id        := l_cmpntcost_id ;
1124         x_lower_level(l_idx).cost_cmpntcls_id    := l_cost_cmpntcls_id ;
1125         x_lower_level(l_idx).cost_cmpntcls_code  := p_lower_level(i).cost_cmpntcls_code ;
1126         x_lower_level(l_idx).cost_analysis_code  := p_lower_level(i).cost_analysis_code ;
1127         x_lower_level(l_idx).cmpnt_cost          := round(p_lower_level(i).cmpnt_cost,9) ;
1128         IF p_operation = 'DELETE' THEN
1129           x_lower_level(l_idx).delete_mark       := 1 ;
1130         ELSE
1131           x_lower_level(l_idx).delete_mark       := 0 ;
1132         END IF;
1133         IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1134         THEN
1135           log_msg('x_cmpntcost_id('||l_idx||'): '||l_cmpntcost_id);
1136           log_msg('x_cost_cmpntcls_id('||l_idx||'): ' || x_lower_level(l_idx).cost_cmpntcls_id);
1137           log_msg('x_cost_cmpntcls_code('||l_idx||'): ' || x_lower_level(l_idx).cost_cmpntcls_code);
1138           log_msg('x_cost_analysis_code('||l_idx||'): ' || x_lower_level(l_idx).cost_analysis_code);
1139           log_msg('x_cmpnt_cost('||l_idx||'): '||x_lower_level(l_idx).cmpnt_cost);
1140           log_msg('x_delete_mark('||l_idx||'): '||x_lower_level(l_idx).delete_mark);
1141         END IF;
1142       EXCEPTION
1143         WHEN e_lower_level THEN
1144           RAISE FND_API.G_EXC_ERROR ;
1145       END ;
1146     END LOOP;
1147   EXCEPTION
1148     WHEN FND_API.G_EXC_ERROR THEN
1149       x_return_status := FND_API.G_RET_STS_ERROR ;
1150     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1151       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1152   END VALIDATE_INPUT_PARAMS ;
1153 
1154 --Start of comments
1155 --+========================================================================+
1156 --| API Name	: Create_Item_Cost                                         |
1157 --| TYPE	: Public                                           	   |
1158 --| Function	: Creates a new Item Cost based on the input into table    |
1159 --|		  CM_CMPT_DTL                                              |
1160 --| Pre-reqa	: None.                                                    |
1161 --| Parameters	:                                                          |
1162 --| IN		:                                                          |
1163 --|		  p_api_version         IN  NUMBER       - Required        |
1164 --|		  p_init_msg_list       IN  VARCHAR2     - Optional        |
1165 --|		  p_commit              IN  VARCHAR2     - Optional        |
1166 --|               p_header_rec          IN  Header_Rec_Type                |
1167 --|               p_this_level_dtl_tbl  IN  This_Level_Dtl_Tbl_Type        |
1168 --|               p_lower_level_dtl_Tbl IN  Lower_Level_Dtl_Tbl_Type       |
1169 --| OUT		:                                                          |
1170 --|		  x_return_status    OUT VARCHAR2                          |
1171 --|		  x_msg_count        OUT NUMBER                            |
1172 --|		  x_msg_data         OUT VARCHAR2                          |
1173 --|               x_costcmpnt_ids    OUT costcmpnt_ids_tbl_type            |
1174 --|                                                                        |
1175 --| Version	:                                                          |
1176 --|	 	  Current Version	: 3.0                              |
1177 --|	  	  Previous Version	: 2.0                              |
1178 --|	  	  Initial Version	: 1.0                              |
1179 --|                                                                        |
1180 --| Notes	:                                                          |
1181 --|                                                                        |
1182 --| HISTORY                                                                |
1183 --| 01-Mar-01     Uday Moogala - Created                                   |
1184 --|                                                                        |
1185 --+========================================================================+
1186 -- End of comments
1187 
1188   PROCEDURE Create_Item_Cost
1189   (
1190   p_api_version		      IN              NUMBER,
1191   p_init_msg_list	      IN              VARCHAR2 := FND_API.G_FALSE,
1192   p_commit		          IN              VARCHAR2 := FND_API.G_FALSE,
1193   x_return_status	          OUT NOCOPY  VARCHAR2,
1194   x_msg_count		            OUT NOCOPY  NUMBER,
1195   x_msg_data		            OUT NOCOPY  VARCHAR2,
1196   p_header_rec		      IN              Header_Rec_Type,
1197   p_this_level_dtl_tbl	IN              This_Level_Dtl_Tbl_Type,
1198   p_lower_level_dtl_Tbl	IN              Lower_Level_Dtl_Tbl_Type,
1199   x_costcmpnt_ids	          OUT NOCOPY  costcmpnt_ids_tbl_type
1200   )
1201   IS
1202 
1203     /******************
1204     * Local Variables *
1205     ******************/
1206     l_api_name		      CONSTANT        VARCHAR2(30)	:= 'Create_Item_Cost' ;
1207 	  l_api_version       CONSTANT        NUMBER		:= 3.0 ;
1208     l_header_rec          	            Header_Rec_Type ;
1209     l_this_level_dtl_tbl  	            This_Level_Dtl_Tbl_Type ;
1210     l_lower_level_dtl_Tbl 	            Lower_Level_Dtl_Tbl_Type ;
1211     l_costcmpnt_ids_tbl                 costcmpnt_ids_tbl_type ;
1212 	  l_cost_type                         cm_mthd_mst.cost_type%TYPE ;
1213     l_user_id              	            fnd_user.user_id%TYPE ;
1214 	  l_return_status        	            VARCHAR2(2) ;
1215 	  l_count		       	                  NUMBER(10) ;
1216 	  l_data                 	            VARCHAR2(2000) ;
1217 
1218   BEGIN
1219 
1220     /**********************************
1221     * Standard Start of API savepoint *
1222     **********************************/
1223     SAVEPOINT	 CREATE_ITEM_COST_PUB ;
1224 
1225     /*************************************************************
1226     * Initialize message list if p_init_msg_list is set to TRUE. *
1227     *************************************************************/
1228     IF FND_API.to_Boolean( p_init_msg_list )
1229     THEN
1230 	    FND_MSG_PUB.initialize;
1231     END IF;
1232 
1233     /*************************************************
1234     * Standard call to check for call compatibility. *
1235     *************************************************/
1236     IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1237     THEN
1238 	    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1239     END IF;
1240 
1241     /******************************************
1242     * Initialize API return status to success *
1243     ******************************************/
1244     x_return_status := FND_API.G_RET_STS_SUCCESS;
1245 
1246     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1247     THEN
1248     	log_msg('Beginning Create Item Cost process.');
1249     END IF;
1250 
1251     G_header_logged := 'N';
1252 
1253     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1254     THEN
1255     	log_msg('In public API. This level Count : ' || p_this_level_dtl_tbl.count);
1256     	log_msg('In public API. Lower level Count : ' || p_lower_level_dtl_tbl.count);
1257     END IF;
1258 
1259     IF ((p_this_level_dtl_tbl.count > 0) OR (p_lower_level_dtl_tbl.count > 0))
1260     THEN
1261       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1262       THEN
1263       	log_msg('Validating  input parameters');
1264       END IF;
1265 
1266       /*************************************
1267       * Validate all the input parameters. *
1268       *************************************/
1269       Validate_Input_Params
1270       (
1271       p_header_rec        =>      p_header_rec,
1272       p_this_level        =>      p_this_level_dtl_tbl,
1273       p_lower_level       =>      p_lower_level_dtl_tbl,
1274       p_operation         =>      'INSERT',
1275       x_header_rec        =>      l_header_rec,
1276       x_this_level        =>      l_this_level_dtl_tbl,
1277       x_lower_level       =>      l_lower_level_dtl_tbl,
1278       x_user_id           =>      l_user_id,
1279       x_return_status     =>      l_return_status
1280       );
1281 
1282       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1283       THEN
1284     	  log_msg('Return Status after validating : ' || l_return_status);
1285       END IF;
1286 
1287       /*****************************************
1288       * Return if validation failures detected *
1289       *****************************************/
1290       IF l_return_status = FND_API.G_RET_STS_ERROR
1291       THEN
1292         add_header_to_error_stack(p_header_rec);
1293         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_INS');
1294         FND_MSG_PUB.Add;
1295         RAISE FND_API.G_EXC_ERROR;
1296       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1297       THEN
1298         add_header_to_error_stack(p_header_rec);
1299         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_INS');
1300         FND_MSG_PUB.Add;
1301         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1302       END IF;
1303     END IF;
1304 
1305     IF ((l_this_level_dtl_tbl.count > 0) OR (l_lower_level_dtl_tbl.count > 0))
1306     THEN
1307       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1308       THEN
1309         log_msg('Calling private API to insert record...');
1310       END IF;
1311       GMF_ITEMCOST_PVT.CREATE_ITEM_COST
1312       (
1313       p_api_version		    =>        3.0,
1314       p_init_msg_list	    =>        FND_API.G_FALSE,
1315       p_commit            =>        FND_API.G_FALSE,
1316       x_return_status	    =>        l_return_status,
1317       x_msg_count		      =>        l_count,
1318       x_msg_data		      =>        l_data,
1319       p_header_rec		    =>        l_header_rec,
1320       p_this_level_dtl_tbl=>        l_this_level_dtl_tbl,
1321       p_lower_level_dtl_Tbl=>       l_lower_level_dtl_tbl,
1322       p_user_id		        =>        l_user_id,
1323       x_costcmpnt_ids	    =>        x_costcmpnt_ids
1324       );
1325 
1326       /****************************************
1327       * Return if insert fails for any reason *
1328       ****************************************/
1329       IF l_return_status = FND_API.G_RET_STS_ERROR
1330       THEN
1331         add_header_to_error_stack(l_header_rec);
1332         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_INS');
1333         FND_MSG_PUB.Add;
1334         RAISE FND_API.G_EXC_ERROR;
1335       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1336         add_header_to_error_stack(l_header_rec);
1337         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_INS');
1338         FND_MSG_PUB.Add;
1339         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1340       END IF;
1341       add_header_to_error_stack(l_header_rec);
1342       FND_MESSAGE.SET_NAME('GMF','GMF_API_ROWS_INS');
1343       FND_MESSAGE.SET_TOKEN('NUM_ROWS',x_costcmpnt_ids.count);
1344       FND_MSG_PUB.Add;
1345     ELSE
1346       add_header_to_error_stack(l_header_rec);
1347       FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_INS');
1348       FND_MSG_PUB.Add;
1349     END IF ;
1350     /******************************
1351     * Standard check of p_commit. *
1352     ******************************/
1353     IF FND_API.To_Boolean( p_commit )
1354     THEN
1355 	    COMMIT WORK;
1356     END IF;
1357 
1358     /**************************************************************************
1359     * Standard call to get message count and if count is 1, get message info. *
1360     **************************************************************************/
1361     FND_MSG_PUB.Count_And_Get
1362   	(
1363     p_count		        =>          x_msg_count,
1364     p_data		        =>          x_msg_data
1365     );
1366   EXCEPTION
1367     WHEN FND_API.G_EXC_ERROR THEN
1368 	    ROLLBACK TO  CREATE_ITEM_COST_PUB;
1369 	    x_return_status := FND_API.G_RET_STS_ERROR ;
1370 	    FND_MSG_PUB.Count_And_Get
1371     	(
1372       p_count		        =>          x_msg_count,
1373       p_data		        =>          x_msg_data
1374       );
1375     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1376 	    ROLLBACK TO  CREATE_ITEM_COST_PUB;
1377 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1378 	    FND_MSG_PUB.Count_And_Get
1379     	(
1380       p_count		        =>          x_msg_count,
1381       p_data		        =>          x_msg_data
1382       );
1383     WHEN OTHERS THEN
1384 	    ROLLBACK TO  CREATE_ITEM_COST_PUB;
1385 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1386 	    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1387 	    THEN
1388 	      FND_MSG_PUB.Add_Exc_Msg (	G_PKG_NAME, l_api_name);
1389 	    END IF;
1390 	    FND_MSG_PUB.Count_And_Get
1391     	(
1392       p_count		        =>          x_msg_count,
1393       p_data		        =>          x_msg_data
1394       );
1395   END CREATE_ITEM_COST;
1396 
1397 --Start of comments
1398 --+========================================================================+
1399 --| API Name    : Update_Item_Cost                                         |
1400 --| TYPE        : Public                                                   |
1401 --| Function    : Updates Item Cost based on the input into CM_CMPT_DTL    |
1402 --| Pre-reqa    : None.                                                    |
1403 --| Parameters  :                                                          |
1404 --| IN		:                                                          |
1405 --|		  p_api_version         IN  NUMBER       - Required        |
1406 --|		  p_init_msg_list       IN  VARCHAR2     - Optional        |
1407 --|		  p_commit              IN  VARCHAR2     - Optional        |
1408 --|               p_header_rec          IN  Header_Rec_Type                |
1409 --|               p_this_level_dtl_tbl  IN  This_Level_Dtl_Tbl_Type        |
1410 --|               p_lower_level_dtl_Tbl IN  Lower_Level_Dtl_Tbl_Type       |
1411 --| OUT		:                                                          |
1412 --|		  x_return_status       OUT VARCHAR2                       |
1413 --|		  x_msg_count           OUT NUMBER                         |
1414 --|		  x_msg_data            OUT VARCHAR2                       |
1415 --|                                                                        |
1416 --| Version     :                                                          |
1417 --|               Current Version       : 3.0                              |
1418 --|               Previous Version      : 2.0                              |
1419 --|               Initial Version       : 1.0                              |
1420 --|                                                                        |
1421 --| Notes       :                                                          |
1422 --|                                                                        |
1423 --| HISTORY                                                                |
1424 --| 01-Mar-01     Uday Moogala - Created                                   |
1425 --|                                                                        |
1426 --+========================================================================+
1427 -- End of comments
1428 
1429   PROCEDURE Update_Item_Cost
1430   (
1431   p_api_version		      IN              NUMBER,
1432   p_init_msg_list	      IN              VARCHAR2 := FND_API.G_FALSE,
1433   p_commit		          IN              VARCHAR2 := FND_API.G_FALSE,
1434   x_return_status	          OUT NOCOPY  VARCHAR2,
1435   x_msg_count		            OUT NOCOPY  NUMBER,
1436   x_msg_data		            OUT NOCOPY  VARCHAR2,
1437   p_header_rec		      IN              Header_Rec_Type,
1438   p_this_level_dtl_tbl	IN              This_Level_Dtl_Tbl_Type,
1439   p_lower_level_dtl_Tbl	IN              Lower_Level_Dtl_Tbl_Type
1440   )
1441   IS
1442 
1443     /******************
1444     * Local Variables *
1445     ******************/
1446 	  l_api_name              CONSTANT    VARCHAR2(30)   := 'Update_Item_Cost' ;
1447     l_api_version           CONSTANT    NUMBER         := 3.0 ;
1448     l_header_rec                        Header_Rec_Type ;
1449     l_this_level_dtl_tbl                This_Level_Dtl_Tbl_Type ;
1450     l_lower_level_dtl_Tbl               Lower_Level_Dtl_Tbl_Type ;
1451 	  l_cost_type                         cm_mthd_mst.cost_type%TYPE ;
1452     l_user_id                           fnd_user.user_id%TYPE ;
1453     l_return_status                     VARCHAR2(2) ;
1454     l_count                             NUMBER(10) ;
1455     l_data                              VARCHAR2(2000) ;
1456 	  l_no_rows_upd                       NUMBER(10) ;
1457 
1458 BEGIN
1459 
1460     /**********************************
1461     * Standard Start of API savepoint *
1462     **********************************/
1463     SAVEPOINT	 UPDATE_ITEM_COST_PUB ;
1464 
1465     /*************************************************************
1466     * Initialize message list if p_init_msg_list is set to TRUE. *
1467     *************************************************************/
1468     IF FND_API.to_Boolean( p_init_msg_list )
1469     THEN
1470 	    FND_MSG_PUB.initialize;
1471     END IF;
1472 
1473     /*************************************************
1474     * Standard call to check for call compatibility. *
1475     *************************************************/
1476     IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1477     THEN
1478 	    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1479     END IF;
1480 
1481     /******************************************
1482     * Initialize API return status to success *
1483     ******************************************/
1484     x_return_status := FND_API.G_RET_STS_SUCCESS;
1485 
1486     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1487     THEN
1488     	log_msg('Beginning Update Item Cost process.');
1489     END IF;
1490 
1491     G_header_logged := 'N';
1492 
1493     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1494     THEN
1495     	log_msg('In public API. This level Count : ' || p_this_level_dtl_tbl.count);
1496     	log_msg('In public API. Lower level Count : ' || p_lower_level_dtl_tbl.count);
1497     END IF;
1498 
1499     IF ((p_this_level_dtl_tbl.count > 0) OR (p_lower_level_dtl_tbl.count > 0))
1500     THEN
1501       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1502       THEN
1503       	log_msg('Validating  input parameters');
1504       END IF;
1505 
1506       /*************************************
1507       * Validate all the input parameters. *
1508       *************************************/
1509       Validate_Input_Params
1510       (
1511       p_header_rec        =>      p_header_rec,
1512       p_this_level        =>      p_this_level_dtl_tbl,
1513       p_lower_level       =>      p_lower_level_dtl_tbl,
1514       p_operation         =>      'UPDATE',
1515       x_header_rec        =>      l_header_rec,
1516       x_this_level        =>      l_this_level_dtl_tbl,
1517       x_lower_level       =>      l_lower_level_dtl_tbl,
1518       x_user_id           =>      l_user_id,
1519       x_return_status     =>      l_return_status
1520       );
1521       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1522       THEN
1523     	  log_msg('Return Status after validating : ' || l_return_status);
1524       END IF;
1525 
1526       /*****************************************
1527       * Return if validation failures detected *
1528       *****************************************/
1529       IF l_return_status = FND_API.G_RET_STS_ERROR
1530       THEN
1531         add_header_to_error_stack(p_header_rec);
1532         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_UPD');
1533         FND_MSG_PUB.Add;
1534         RAISE FND_API.G_EXC_ERROR;
1535       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1536       THEN
1537         add_header_to_error_stack(p_header_rec);
1538         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_UPD');
1539         FND_MSG_PUB.Add;
1540         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1541       END IF;
1542     END IF;
1543 
1544     IF ((l_this_level_dtl_tbl.count > 0) OR (l_lower_level_dtl_tbl.count > 0))
1545     THEN
1546       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1547       THEN
1548       	log_msg('Calling private API to update records...');
1549       END IF;
1550       GMF_ITEMCOST_PVT.UPDATE_ITEM_COST
1551       (
1552       p_api_version		    =>        3.0,
1553       p_init_msg_list	    =>        FND_API.G_FALSE,
1554       p_commit            =>        FND_API.G_FALSE,
1555       x_return_status	    =>        l_return_status,
1556       x_msg_count		      =>        l_count,
1557       x_msg_data		      =>        l_data,
1558       p_header_rec		    =>        l_header_rec,
1559       p_this_level_dtl_tbl=>        l_this_level_dtl_tbl,
1560       p_lower_level_dtl_Tbl=>       l_lower_level_dtl_tbl,
1561       p_user_id		        =>        l_user_id
1562       );
1563       /****************************************
1564       * Return if insert fails for any reason *
1565       ****************************************/
1566       IF l_return_status = FND_API.G_RET_STS_ERROR
1567       THEN
1568         add_header_to_error_stack(p_header_rec);
1569         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_UPD');
1570         FND_MSG_PUB.Add;
1571         RAISE FND_API.G_EXC_ERROR;
1572       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1573         add_header_to_error_stack(p_header_rec);
1574         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_UPD');
1575         FND_MSG_PUB.Add;
1576         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1577       END IF;
1578       add_header_to_error_stack(p_header_rec);
1579       FND_MESSAGE.SET_NAME('GMF','GMF_API_ROWS_UPD');
1580       FND_MESSAGE.SET_TOKEN('NUM_ROWS',l_this_level_dtl_tbl.count+l_lower_level_dtl_tbl.count);
1581       FND_MSG_PUB.Add;
1582     ELSE
1583       add_header_to_error_stack(p_header_rec);
1584       FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_UPD');
1585       FND_MSG_PUB.Add;
1586     END IF ;
1587 
1588     /******************************
1589     * Standard check of p_commit. *
1590     ******************************/
1591     IF FND_API.To_Boolean( p_commit )
1592     THEN
1593 	    COMMIT WORK;
1594     END IF;
1595 
1596     /**************************************************************************
1597     * Standard call to get message count and if count is 1, get message info. *
1598     **************************************************************************/
1599     FND_MSG_PUB.Count_And_Get
1600   	(
1601     p_count		        =>          x_msg_count,
1602     p_data		        =>          x_msg_data
1603     );
1604   EXCEPTION
1605     WHEN FND_API.G_EXC_ERROR THEN
1606 	    ROLLBACK TO  UPDATE_ITEM_COST_PUB;
1607 	    x_return_status := FND_API.G_RET_STS_ERROR ;
1608 	    FND_MSG_PUB.Count_And_Get
1609     	(
1610       p_count		        =>          x_msg_count,
1611       p_data		        =>          x_msg_data
1612       );
1613     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1614 	    ROLLBACK TO  UPDATE_ITEM_COST_PUB;
1615 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1616 	    FND_MSG_PUB.Count_And_Get
1617     	(
1618       p_count		        =>          x_msg_count,
1619       p_data		        =>          x_msg_data
1620       );
1621     WHEN OTHERS THEN
1622 	    ROLLBACK TO  UPDATE_ITEM_COST_PUB;
1623 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1624 	    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1625 	    THEN
1626 	      FND_MSG_PUB.Add_Exc_Msg (	G_PKG_NAME, l_api_name);
1627 	    END IF;
1628 	    FND_MSG_PUB.Count_And_Get
1629     	(
1630       p_count		        =>          x_msg_count,
1631       p_data		        =>          x_msg_data
1632       );
1633   END UPDATE_ITEM_COST ;
1634 
1635 --Start of comments
1636 --+========================================================================+
1637 --| API Name    : Delete_Item_Cost                                         |
1638 --| TYPE        : Public                                                   |
1639 --| Function    : Deletes Item Cost based on the input from CM_CMPT_DTL    |
1640 --| Pre-reqa    : None.                                                    |
1641 --| Parameters  :                                                          |
1642 --| IN          :                                                          |
1643 --|               p_api_version         IN  NUMBER       - Required        |
1644 --|               p_init_msg_list       IN  VARCHAR2     - Optional        |
1645 --|               p_commit              IN  VARCHAR2     - Optional        |
1646 --|               p_header_rec          IN  Header_Rec_Type                |
1647 --|               p_this_level_dtl_tbl  IN  This_Level_Dtl_Tbl_Type        |
1648 --|               p_lower_level_dtl_Tbl IN  Lower_Level_Dtl_Tbl_Type       |
1649 --| OUT         :                                                          |
1650 --|               x_return_status       OUT VARCHAR2                       |
1651 --|               x_msg_count           OUT NUMBER                         |
1652 --|               x_msg_data            OUT VARCHAR2                       |
1653 --|                                                                        |
1654 --| Version     :                                                          |
1655 --|               Current Version       : 3.0                              |
1656 --|               Previous Version      : 2.0                              |
1657 --|               Initial Version       : 1.0                              |
1658 --|                                                                        |
1659 --| Notes       :                                                          |
1660 --|                                                                        |
1661 --| HISTORY                                                                |
1662 --| 01-Mar-01     Uday Moogala - Created                                   |
1663 --|                                                                        |
1664 --+========================================================================+
1665 -- End of comments
1666 
1667   PROCEDURE Delete_Item_Cost
1668   (
1669   p_api_version		      IN              NUMBER,
1670   p_init_msg_list	      IN              VARCHAR2 := FND_API.G_FALSE,
1671   p_commit		          IN              VARCHAR2 := FND_API.G_FALSE,
1672   x_return_status	          OUT NOCOPY  VARCHAR2,
1673   x_msg_count		            OUT NOCOPY  NUMBER,
1674   x_msg_data		            OUT NOCOPY  VARCHAR2,
1675   p_header_rec		      IN              Header_Rec_Type,
1676   p_this_level_dtl_tbl	IN              This_Level_Dtl_Tbl_Type,
1677   p_lower_level_dtl_Tbl	IN              Lower_Level_Dtl_Tbl_Type
1678   )
1679   IS
1680 
1681     /******************
1682     * Local Variables *
1683     ******************/
1684 	  l_api_name              CONSTANT    VARCHAR2(30)   := 'Delete_Item_Cost' ;
1685 	  l_api_version           CONSTANT    NUMBER         := 3.0 ;
1686     l_header_rec                        Header_Rec_Type ;
1687     l_this_level_dtl_tbl                This_Level_Dtl_Tbl_Type ;
1688     l_lower_level_dtl_Tbl               Lower_Level_Dtl_Tbl_Type ;
1689     l_user_id                           fnd_user.user_id%TYPE ;
1690     l_return_status                     VARCHAR2(2) ;
1691     l_count                             NUMBER(10) ;
1692     l_data                              VARCHAR2(2000) ;
1693     l_no_rows_del                       NUMBER(10) ;
1694   BEGIN
1695 
1696     /**********************************
1697     * Standard Start of API savepoint *
1698     **********************************/
1699     SAVEPOINT	 DELETE_ITEM_COST_PUB ;
1700 
1701     /*************************************************************
1702     * Initialize message list if p_init_msg_list is set to TRUE. *
1703     *************************************************************/
1704     IF FND_API.to_Boolean( p_init_msg_list )
1705     THEN
1706 	    FND_MSG_PUB.initialize;
1707     END IF;
1708 
1709     /*************************************************
1710     * Standard call to check for call compatibility. *
1711     *************************************************/
1712     IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1713     THEN
1714 	    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1715     END IF;
1716 
1717     /******************************************
1718     * Initialize API return status to success *
1719     ******************************************/
1720     x_return_status := FND_API.G_RET_STS_SUCCESS;
1721 
1722     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1723     THEN
1724     	log_msg('Beginning Delete Item Cost process.');
1725     END IF;
1726 
1727     G_header_logged := 'N';
1728 
1729     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1730     THEN
1731     	log_msg('In public API. This level Count : ' || p_this_level_dtl_tbl.count);
1732     	log_msg('In public API. Lower level Count : ' || p_lower_level_dtl_tbl.count);
1733     END IF;
1734 
1735     IF ((p_this_level_dtl_tbl.count > 0) OR (p_lower_level_dtl_tbl.count > 0))
1736     THEN
1737       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1738       THEN
1739       	log_msg('Validating  input parameters');
1740       END IF;
1741 
1742       /*************************************
1743       * Validate all the input parameters. *
1744       *************************************/
1745       Validate_Input_Params
1746       (
1747       p_header_rec        =>      p_header_rec,
1748       p_this_level        =>      p_this_level_dtl_tbl,
1749       p_lower_level       =>      p_lower_level_dtl_tbl,
1750       p_operation         =>      'DELETE',
1751       x_header_rec        =>      l_header_rec,
1752       x_this_level        =>      l_this_level_dtl_tbl,
1753       x_lower_level       =>      l_lower_level_dtl_tbl,
1754       x_user_id           =>      l_user_id,
1755       x_return_status     =>      l_return_status
1756       );
1757 
1758       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1759       THEN
1760     	  log_msg('Return Status after validating : ' || l_return_status);
1761       END IF;
1762 
1763       /*****************************************
1764       * Return if validation failures detected *
1765       *****************************************/
1766       IF l_return_status = FND_API.G_RET_STS_ERROR
1767       THEN
1768         add_header_to_error_stack(p_header_rec);
1769         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_DEL');
1770         FND_MSG_PUB.Add;
1771         RAISE FND_API.G_EXC_ERROR;
1772       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1773       THEN
1774         add_header_to_error_stack(p_header_rec);
1775         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_DEL');
1776         FND_MSG_PUB.Add;
1777         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1778       END IF;
1779     END IF;
1780 
1781     IF ((l_this_level_dtl_tbl.count > 0) OR (l_lower_level_dtl_tbl.count > 0))
1782     THEN
1783       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1784       THEN
1785       	log_msg('Calling private API to delete records...');
1786       END IF;
1787 
1788       GMF_ITEMCOST_PVT.UPDATE_ITEM_COST
1789       (
1790       p_api_version	              =>              3.0,
1791       p_init_msg_list	            =>              FND_API.G_FALSE,
1792       p_commit                    =>              FND_API.G_FALSE,
1793       x_return_status	            =>              l_return_status,
1794       x_msg_count		              =>              l_count,
1795       x_msg_data		              =>              l_data,
1796       p_header_rec		            =>              l_header_rec,
1797       p_this_level_dtl_tbl	      =>              l_this_level_dtl_tbl,
1798       p_lower_level_dtl_Tbl	      =>              l_lower_level_dtl_tbl,
1799       p_user_id		                =>              l_user_id
1800       );
1801 
1802       /****************************************
1803       * Return if update fails for any reason *
1804       ****************************************/
1805       IF l_return_status = FND_API.G_RET_STS_ERROR
1806       THEN
1807         add_header_to_error_stack(p_header_rec);
1808         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_DEL');
1809         FND_MSG_PUB.Add;
1810         RAISE FND_API.G_EXC_ERROR;
1811       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
1812       THEN
1813         add_header_to_error_stack(p_header_rec);
1814         FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_DEL');
1815         FND_MSG_PUB.Add;
1816         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1817       END IF;
1818       add_header_to_error_stack(p_header_rec);
1819       FND_MESSAGE.SET_NAME('GMF','GMF_API_ROWS_DEL');
1820       FND_MESSAGE.SET_TOKEN('NUM_ROWS',l_this_level_dtl_tbl.count+l_lower_level_dtl_tbl.count);
1821       FND_MSG_PUB.Add;
1822     ELSE
1823       add_header_to_error_stack(p_header_rec);
1824       FND_MESSAGE.SET_NAME('GMF','GMF_API_NO_ROWS_DEL');
1825       FND_MSG_PUB.Add;
1826     END IF ;
1827 
1828     /******************************
1829     * Standard check of p_commit. *
1830     ******************************/
1831     IF FND_API.To_Boolean( p_commit )
1832     THEN
1833 	    COMMIT WORK;
1834     END IF;
1835 
1836     /**************************************************************************
1837     * Standard call to get message count and if count is 1, get message info. *
1838     **************************************************************************/
1839     FND_MSG_PUB.Count_And_Get
1840   	(
1841     p_count		        =>          x_msg_count,
1842     p_data		        =>          x_msg_data
1843     );
1844   EXCEPTION
1845     WHEN FND_API.G_EXC_ERROR THEN
1846 	    ROLLBACK TO  DELETE_ITEM_COST_PUB;
1847 	    x_return_status := FND_API.G_RET_STS_ERROR ;
1848 	    FND_MSG_PUB.Count_And_Get
1849     	(
1850       p_count		        =>          x_msg_count,
1851       p_data		        =>          x_msg_data
1852       );
1853     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1854 	    ROLLBACK TO  DELETE_ITEM_COST_PUB;
1855 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1856 	    FND_MSG_PUB.Count_And_Get
1857     	(
1858       p_count		        =>          x_msg_count,
1859       p_data		        =>          x_msg_data
1860       );
1861     WHEN OTHERS THEN
1862 	    ROLLBACK TO  DELETE_ITEM_COST_PUB;
1863 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1864 	    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1865 	    THEN
1866 	      FND_MSG_PUB.Add_Exc_Msg (	G_PKG_NAME, l_api_name);
1867 	    END IF;
1868 	    FND_MSG_PUB.Count_And_Get
1869     	(
1870       p_count		        =>          x_msg_count,
1871       p_data		        =>          x_msg_data
1872       );
1873   END DELETE_ITEM_COST ;
1874 
1875 --Start of comments
1876 --+========================================================================+
1877 --| API Name	: Get_Item_Cost                                            |
1878 --| TYPE	: Public                                           	   |
1879 --| Function	: Retrieve Item Cost based on the input from table         |
1880 --|		  CM_CMPT_DTL                                              |
1881 --| Pre-reqa	: None.                                                    |
1882 --| Parameters	:                                                          |
1883 --| IN		:                                                          |
1884 --|		  p_api_version         IN  NUMBER       - Required        |
1885 --|		  p_init_msg_list       IN  VARCHAR2     - Optional        |
1886 --|               p_header_rec          IN  Header_Rec_Type                |
1887 --|               x_this_level_dtl_tbl  IN  This_Level_Dtl_Tbl_Type        |
1888 --|               x_lower_level_dtl_Tbl IN  Lower_Level_Dtl_Tbl_Type       |
1889 --| OUT		:                                                          |
1890 --|		  x_return_status    OUT VARCHAR2                          |
1891 --|		  x_msg_count        OUT NUMBER                            |
1892 --|		  x_msg_data         OUT VARCHAR2                          |
1893 --|                                                                        |
1894 --| Version	:                                                          |
1895 --|	 	  Current Version	: 3.0                              |
1896 --|	  	  Previous Version	: 2.0                              |
1897 --|	  	  Initial Version	: 1.0                              |
1898 --|                                                                        |
1899 --| Notes	:                                                          |
1900 --|                                                                        |
1901 --| HISTORY                                                                |
1902 --| 26-Apr-01     Uday Moogala - Created                                   |
1903 --|                                                                        |
1904 --+========================================================================+
1905 -- End of comments
1906 
1907   PROCEDURE Get_Item_Cost
1908   (
1909   p_api_version             IN              NUMBER,
1910   p_init_msg_list           IN              VARCHAR2 := FND_API.G_FALSE,
1911   x_return_status               OUT NOCOPY  VARCHAR2,
1912   x_msg_count                   OUT NOCOPY  NUMBER,
1913   x_msg_data                    OUT NOCOPY  VARCHAR2,
1914   p_header_rec              IN              Header_Rec_Type,
1915   x_this_level_dtl_tbl          OUT NOCOPY  This_Level_Dtl_Tbl_Type,
1916   x_lower_level_dtl_Tbl         OUT NOCOPY  Lower_Level_Dtl_Tbl_Type
1917   )
1918   IS
1919 
1920     /******************
1921     * Local Variables *
1922     ******************/
1923 	  l_api_name                  CONSTANT    VARCHAR2(30)   := 'Delete_Item_Cost' ;
1924 	  l_api_version               CONSTANT    NUMBER         := 3.0 ;
1925     l_return_status                         VARCHAR2(2) ;
1926     l_count                                 NUMBER(10) ;
1927     l_data                                  VARCHAR2(2000) ;
1928     l_header_rec		                        Header_Rec_Type ;
1929     l_period_status                         gmf_period_statuses.period_status%TYPE ;
1930     l_cost_type                             cm_mthd_mst.cost_type%TYPE ;
1931     l_rmcalc_type                           cm_cmpt_dtl.rmcalc_type%TYPE ;
1932     l_prodcalc_type                         cm_mthd_mst.prodcalc_type%TYPE ;
1933     l_user_id              	                fnd_user.user_id%TYPE ;
1934 
1935   BEGIN
1936 
1937     /**********************************
1938     * Standard Start of API savepoint *
1939     **********************************/
1940     SAVEPOINT	 GET_ITEM_COST_PUB ;
1941 
1942     /*************************************************************
1943     * Initialize message list if p_init_msg_list is set to TRUE. *
1944     *************************************************************/
1945     IF FND_API.to_Boolean( p_init_msg_list )
1946     THEN
1947 	    FND_MSG_PUB.initialize;
1948     END IF;
1949 
1950     /*************************************************
1951     * Standard call to check for call compatibility. *
1952     *************************************************/
1953     IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1954     THEN
1955 	    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1956     END IF;
1957 
1958     /******************************************
1959     * Initialize API return status to success *
1960     ******************************************/
1961     x_return_status := FND_API.G_RET_STS_SUCCESS;
1962 
1963     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1964     THEN
1965     	log_msg('Beginning Get Item Cost API.');
1966     END IF;
1967 
1968     G_header_logged := 'N';
1969 
1970     /**************************
1971     * Organization Validation *
1972     **************************/
1973     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
1974     THEN
1975     	log_msg('Validating Organization Id :' || p_header_rec.Organization_id);
1976     END IF;
1977     IF (p_header_rec.organization_id <> FND_API.G_MISS_NUM)
1978     AND (p_header_rec.organization_id IS NOT NULL)
1979     THEN
1980       IF NOT GMF_VALIDATIONS_PVT.Validate_organization_id(p_header_rec.organization_id) THEN
1981         add_header_to_error_stack(p_header_rec);
1982         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ORGN_ID');
1983         FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_header_rec.organization_id);
1984         FND_MSG_PUB.Add;
1985         RAISE FND_API.G_EXC_ERROR;
1986       END IF;
1987       IF (p_header_rec.organization_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.organization_code IS NOT NULL)
1988       THEN
1989         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
1990         THEN
1991           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_ORGN_CODE');
1992           FND_MESSAGE.SET_TOKEN('ORGANIZATION_CODE',p_header_rec.organization_code);
1993           FND_MSG_PUB.Add;
1994         END IF;
1995       END IF;
1996     ELSE
1997       IF (p_header_rec.organization_code <> FND_API.G_MISS_CHAR)
1998       AND (p_header_rec.organization_code IS NOT NULL)
1999       THEN
2000         l_header_rec.organization_id := GMF_VALIDATIONS_PVT.Validate_organization_Code(p_header_rec.organization_code);
2001         IF l_header_rec.organization_id IS NULL
2002         THEN
2003           add_header_to_error_stack(p_header_rec);
2004           FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ORGN_CODE');
2005           FND_MESSAGE.SET_TOKEN('ORG_CODE',p_header_rec.organization_code);
2006           FND_MSG_PUB.Add;
2007           RAISE FND_API.G_EXC_ERROR;
2008         END IF;
2009       ELSE
2010         add_header_to_error_stack(p_header_rec);
2011         FND_MESSAGE.SET_NAME('GMF','GMF_API_ORGANIZATION_ID_REQ');
2012         FND_MSG_PUB.Add;
2013         RAISE FND_API.G_EXC_ERROR;
2014       END IF;
2015     END IF;
2016 
2017     /***********************
2018     * Cost TYPE Validation *
2019     ***********************/
2020     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2021     THEN
2022     	log_msg('Validating Cost type Id : ' || p_header_rec.cost_type_id);
2023     END IF;
2024     IF (p_header_rec.cost_type_id <> FND_API.G_MISS_NUM)
2025     AND (p_header_rec.cost_type_id IS NOT NULL)
2026     THEN
2027       IF NOT GMF_VALIDATIONS_PVT.Validate_Cost_type_id(p_header_rec.cost_type_id) THEN
2028         add_header_to_error_stack(p_header_rec);
2029         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_COST_TYPE_ID');
2030         FND_MESSAGE.SET_TOKEN('COST_TYPE_ID',p_header_rec.cost_type_id);
2031         FND_MSG_PUB.Add;
2032         RAISE FND_API.G_EXC_ERROR;
2033       END IF;
2034       IF (p_header_rec.cost_mthd_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.cost_mthd_code IS NOT NULL)
2035       THEN
2036         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2037         THEN
2038           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_COST_TYPE');
2039           FND_MESSAGE.SET_TOKEN('COST_TYPE',p_header_rec.organization_code);
2040           FND_MSG_PUB.Add;
2041         END IF;
2042       END IF;
2043     ELSE
2044       IF (p_header_rec.cost_mthd_code <> FND_API.G_MISS_CHAR)
2045       AND (p_header_rec.cost_mthd_code IS NOT NULL)
2046       THEN
2047         l_header_rec.cost_type_id := GMF_VALIDATIONS_PVT.Validate_Cost_type_Code(p_header_rec.cost_mthd_code);
2048         IF l_header_rec.cost_type_id IS NULL THEN
2049           add_header_to_error_stack(p_header_rec);
2050           FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_COST_TYPE');
2051           FND_MESSAGE.SET_TOKEN('COST_TYPE',p_header_rec.cost_mthd_code);
2052           FND_MSG_PUB.Add;
2053           RAISE FND_API.G_EXC_ERROR;
2054         END IF;
2055       ELSE
2056         add_header_to_error_stack(p_header_rec);
2057         FND_MESSAGE.SET_NAME('GMF','GMF_API_COST_TYPE_ID_REQ');
2058         FND_MSG_PUB.Add;
2059         RAISE FND_API.G_EXC_ERROR;
2060       END IF;
2061     END IF;
2062 
2063     /***********************
2064     * Period Id Validation *
2065     ***********************/
2066     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2067     THEN
2068       log_msg('validating Period Id : ' || p_header_rec.period_id);
2069     END IF;
2070 
2071     IF (p_header_rec.period_id <> FND_API.G_MISS_NUM)
2072     AND (p_header_rec.period_id IS NOT NULL)
2073     THEN
2074       IF NOT GMF_VALIDATIONS_PVT.Validate_period_id(p_header_rec.period_id)
2075       THEN
2076         add_header_to_error_stack(p_header_rec);
2077         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_PERIOD_ID');
2078         FND_MESSAGE.SET_TOKEN('PERIOD_ID',p_header_rec.period_id);
2079         FND_MSG_PUB.Add;
2080         RAISE FND_API.G_EXC_ERROR;
2081       END IF;
2082       IF ((p_header_rec.calendar_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.calendar_code IS NOT NULL))
2083       AND ((p_header_rec.period_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.period_code IS NOT NULL))
2084       THEN
2085         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2086         THEN
2087           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_PERIOD_CODE');
2088           FND_MESSAGE.SET_TOKEN('CALENDAR_CODE',p_header_rec.calendar_code);
2089           FND_MESSAGE.SET_TOKEN('PERIOD_CODE',p_header_rec.period_code);
2090           FND_MSG_PUB.Add;
2091         END IF;
2092       END IF;
2093     ELSE
2094       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2095       THEN
2096         log_msg('Validating Calendar Code : '|| p_header_rec.Calendar_code||' period_code : ' || p_header_rec.period_code);
2097       END IF;
2098 
2099       IF ((p_header_rec.calendar_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.calendar_code IS NOT NULL))
2100       AND ((p_header_rec.period_code <> FND_API.G_MISS_CHAR) AND (p_header_rec.period_code IS NOT NULL))
2101       THEN
2102         l_header_rec.period_id := GMF_VALIDATIONS_PVT.Validate_Period_code(p_header_rec.organization_id, p_header_rec.calendar_code,p_header_rec.period_code,p_header_rec.cost_type_id);
2103       ELSE
2104         add_header_to_error_stack(p_header_rec);
2105         FND_MESSAGE.SET_NAME('GMF','GMF_API_PERIOD_ID_REQ');
2106         FND_MSG_PUB.Add;
2107         RAISE FND_API.G_EXC_ERROR;
2108       END IF;
2109     END IF;
2110 
2111     /******************
2112     * Item Validation *
2113     ******************/
2114     IF (p_header_rec.inventory_item_id <> FND_API.G_MISS_NUM) AND	(p_header_rec.inventory_item_id IS NOT NULL)
2115     THEN
2116       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2117       THEN
2118         log_msg('Validating Inventory Item Id : ' || p_header_rec.inventory_item_id);
2119       END IF;
2120       IF NOT GMF_VALIDATIONS_PVT.Validate_inventory_item_Id(p_header_rec.inventory_item_id, p_header_rec.organization_id)
2121       THEN
2122         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ITEM_ID');
2123         FND_MESSAGE.SET_TOKEN('ITEM_ID', p_header_rec.inventory_item_id);
2124         FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_header_rec.organization_id);
2125         FND_MSG_PUB.Add;
2126         RAISE FND_API.G_EXC_ERROR;
2127       END IF;
2128       IF (p_header_rec.item_number <> FND_API.G_MISS_CHAR) AND (p_header_rec.item_number IS NOT NULL)
2129       THEN
2130         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_SUCCESS)
2131         THEN
2132           FND_MESSAGE.SET_NAME('GMF','GMF_API_IGNORE_ITEM_NO');
2133           FND_MESSAGE.SET_TOKEN('ITEM_NO',p_header_rec.item_number);
2134           FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_header_rec.organization_id);
2135           FND_MSG_PUB.Add;
2136         END IF;
2137       END IF;
2138     ELSIF (p_header_rec.item_number <> FND_API.G_MISS_CHAR) AND (p_header_rec.item_number IS NOT NULL)
2139     THEN
2140       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2141       THEN
2142         log_msg('Validating Item Number : ' || p_header_rec.item_number);
2143       END IF;
2144       l_header_rec.inventory_item_id := GMF_VALIDATIONS_PVT.Validate_Item_Number(p_header_rec.item_number, p_header_Rec.organization_id);
2145       IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2146       THEN
2147         log_msg('Inventory Item id : ' || p_header_rec.inventory_item_id);
2148       END IF;
2149       IF l_header_rec.inventory_item_id IS NULL
2150       THEN
2151         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_ITEM_NO');
2152         FND_MESSAGE.SET_TOKEN('ITEM_NO',p_header_rec.item_number);
2153         FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',p_header_rec.organization_id);
2154         FND_MSG_PUB.Add;
2155         RAISE FND_API.G_EXC_ERROR;
2156       END IF;
2157     ELSE
2158       FND_MESSAGE.SET_NAME('GMF','GMF_API_ITEM_ID_REQ');
2159       FND_MSG_PUB.Add;
2160       RAISE FND_API.G_EXC_ERROR;
2161     END IF;
2162 
2163     /***********************
2164     * User Name Validation *
2165     ***********************/
2166     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2167     THEN
2168       log_msg('Validating user name : ' || p_header_rec.user_name);
2169     END IF;
2170 
2171     IF (p_header_rec.user_name <> FND_API.G_MISS_CHAR)
2172     AND (p_header_rec.user_name IS NOT NULL)
2173     THEN
2174       GMA_GLOBAL_GRP.Get_who( p_user_name  => p_header_rec.user_name, x_user_id  => l_user_id);
2175       IF l_user_id = -1
2176       THEN
2177         add_header_to_error_stack(p_header_rec);
2178         FND_MESSAGE.SET_NAME('GMF','GMF_API_INVALID_USER_NAME');
2179         FND_MESSAGE.SET_TOKEN('USER_NAME',p_header_rec.user_name);
2180         FND_MSG_PUB.Add;
2181         RAISE FND_API.G_EXC_ERROR;
2182     	END IF;
2183     ELSE
2184       add_header_to_error_stack(p_header_rec);
2185       FND_MESSAGE.SET_NAME('GMF','GMF_API_USER_NAME_REQ');
2186       FND_MSG_PUB.Add;
2187       RAISE FND_API.G_EXC_ERROR;
2188     END IF;
2189 
2190     l_header_rec.period_id   := nvl(p_header_rec.period_id, l_header_rec.period_id);
2191     l_header_rec.cost_type_id  := nvl(p_header_rec.cost_type_id, l_header_rec.cost_type_id);
2192     l_header_rec.organization_id       := nvl(p_header_rec.organization_id, l_header_rec.organization_id);
2193     l_header_rec.inventory_item_id       := nvl(p_header_rec.inventory_item_id, l_header_rec.inventory_item_id);
2194 
2195     IF FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW >= G_Debug_Level
2196     THEN
2197     	log_msg('Calling private API to fetch records...');
2198     END IF;
2199 
2200     GMF_ITEMCOST_PVT.GET_ITEM_COST
2201     (
2202     p_api_version                 =>        3.0,
2203     p_init_msg_list               =>        FND_API.G_FALSE,
2204     x_return_status               =>        l_return_status,
2205     x_msg_count                   =>        l_count,
2206     x_msg_data                    =>        l_data,
2207     p_header_rec                  =>        l_header_rec,
2208     x_this_level_dtl_tbl          =>        x_this_level_dtl_tbl,
2209     x_lower_level_dtl_Tbl         =>        x_lower_level_dtl_Tbl
2210     );
2211 
2212     /****************************************
2213     * Return if update fails for any reason *
2214     ****************************************/
2215     IF l_return_status = FND_API.G_RET_STS_ERROR
2216     THEN
2217       RAISE FND_API.G_EXC_ERROR;
2218     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
2219     THEN
2220       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2221     END IF;
2222 
2223     /**************************************************************************
2224     * Standard call to get message count and if count is 1, get message info. *
2225     **************************************************************************/
2226     FND_MSG_PUB.Count_And_Get
2227   	(
2228     p_count		        =>          x_msg_count,
2229     p_data		        =>          x_msg_data
2230     );
2231   EXCEPTION
2232     WHEN FND_API.G_EXC_ERROR THEN
2233 	    ROLLBACK TO  GET_ITEM_COST_PUB;
2234 	    x_return_status := FND_API.G_RET_STS_ERROR ;
2235 	    FND_MSG_PUB.Count_And_Get
2236     	(
2237       p_count		        =>          x_msg_count,
2238       p_data		        =>          x_msg_data
2239       );
2240     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2241 	    ROLLBACK TO  GET_ITEM_COST_PUB;
2242 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2243 	    FND_MSG_PUB.Count_And_Get
2244     	(
2245       p_count		        =>          x_msg_count,
2246       p_data		        =>          x_msg_data
2247       );
2248     WHEN OTHERS THEN
2249 	    ROLLBACK TO  GET_ITEM_COST_PUB;
2250 	    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2251 	    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2252 	    THEN
2253 	      FND_MSG_PUB.Add_Exc_Msg (	G_PKG_NAME, l_api_name);
2254 	    END IF;
2255 	    FND_MSG_PUB.Count_And_Get
2256     	(
2257       p_count		        =>          x_msg_count,
2258       p_data		        =>          x_msg_data
2259       );
2260   END GET_ITEM_COST;
2261 
2262 END GMF_ITEMCOST_PUB;