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