[Home] [Help]
PACKAGE BODY: APPS.AHL_UMP_UF_PVT
Source
4 --G_DEBUG varchar2(1) := FND_PROFILE.VALUE('AHL_API_FILE_DEBUG_ON');
1 PACKAGE BODY AHL_UMP_UF_PVT AS
2 /* $Header: AHLVUMFB.pls 120.2.12020000.2 2012/12/07 16:13:15 sareepar ship $ */
3
5 G_DEBUG VARCHAR2(1) := AHL_DEBUG_PUB.is_log_enabled;
6 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AHL_UMP_UF_PVT';
7 G_APP_NAME CONSTANT VARCHAR2(3) := 'AHL';
8
9
10 ------------------------------
11 -- Declare Local Procedures --
12 ------------------------------
13 PROCEDURE process_uf_header(
14 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
15 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_Rec_type
16 );
17
18 PROCEDURE convert_uf_header_val_to_id(
22 PROCEDURE convert_unit_header_val_to_id(
19 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
20 );
21
23 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
24 );
25
26 PROCEDURE convert_part_header_val_to_id(
27 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
28 );
29
30 PROCEDURE convert_node_header_val_to_id(
31 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
32 );
33
34 PROCEDURE validate_uf_header(
35 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type
36 );
37 PROCEDURE validate_uf_header_pm(
38 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type
39 );
40
41 PROCEDURE default_unchanged_uf_header(
42 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_Rec_type
43 );
44
45 PROCEDURE process_uf_details(
46 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
47 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type,
48 p_x_uf_details_tbl IN OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
49 );
50
51
52 PROCEDURE validate_uf_details(
53 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type,
54 p_x_uf_details_tbl IN OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
55 );
56
57 PROCEDURE default_unchanged_uf_details(
58 p_x_uf_details_tbl IN OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
59 );
60
61 PROCEDURE validate_utilization_forecast(
62 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_rec_type,
63 x_uf_details_tbl OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
64 );
65
66 PROCEDURE post_process_uf_header(
67 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type
68 );
69
70 ------------------------
71 -- Declare Procedures --
72 ------------------------
73
74 -- Start of Comments --
75 -- Procedure name : process_utilization_forecast
76 -- Type : Public
77 -- Function : For a given set of utilization forecast header and details, will validate and insert/update
78 -- the utilization forecast information.
79 -- Pre-reqs :
80 -- Parameters :
81 --
82 -- Standard IN Parameters :
83 -- p_api_version IN NUMBER Default 1.0
84 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_TRUE
85 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
86 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
87 -- Standard OUT Parameters :
88 -- x_return_status OUT VARCHAR2 Required
89 -- x_msg_count OUT NUMBER Required
90 -- x_msg_data OUT VARCHAR2 Required
91 --
92 -- p_module_type IN VARCHAR2 Required.
93 --
94 -- This parameter indicates the front-end form interface. The default value is 'JSP'. If the value
95 -- is JSP, then this API clears out all id columns and validations are done using the values based
96 -- on which the Id's are populated.
97 --
98 -- process_utilization_forecast Parameters:
99 --
100 -- p_x_uf_header_rec IN OUT AHL_UMP_UF_PVT.uf_header_rec_type Required
101 -- Utilization Forecast Header Details
102 -- p_x_uf_detail_tbl IN OUT AHL_UMP_UF_PVT.uf_detail_tbl_type Required
103 -- Utilization Forecast details
104 --
105 --
106 -- Version :
107 -- Initial Version 1.0
108 --
109 -- End of Comments.
110
111 PROCEDURE process_utilization_forecast (
112 p_api_version IN NUMBER := 1.0,
113 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
114 p_commit IN VARCHAR2 := FND_API.G_FALSE,
115 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
116 p_module_type IN VARCHAR2 := NULL,
117 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type,
118 p_x_uf_details_tbl IN OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type,
119 x_return_status OUT NOCOPY VARCHAR2,
120 x_msg_count OUT NOCOPY NUMBER,
121 x_msg_data OUT NOCOPY VARCHAR2) IS
122
123 l_api_version CONSTANT NUMBER := 1.0;
124 l_api_name CONSTANT VARCHAR2(30) := 'process_utilization_forecast';
125 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
126
127 BEGIN
128
129 -- Standard start of API savepoint
130 SAVEPOINT process_uf_pvt;
131
132 -- Standard call to check for call compatibility
133 IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version,l_api_name, G_PKG_NAME )
134 THEN
135 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
136 END IF;
137
138 -- Initialize message list if p_init_msg_list is set to TRUE
139 IF FND_API.To_Boolean( p_init_msg_list)
140 THEN
141 FND_MSG_PUB.Initialize;
142 END IF;
143
144 -- Initialize API return status to success
145 x_return_status := FND_API.G_RET_STS_SUCCESS;
146
147 -- Enable Debug.
148 IF G_DEBUG = 'Y' THEN
149 AHL_DEBUG_PUB.enable_debug;
150 END IF;
151
152 IF G_DEBUG = 'Y' THEN
153 AHL_DEBUG_PUB.debug('Started processing UF');
154 END IF;
155 -------
156 process_uf_header(
157 p_validation_level => p_validation_level,
158 p_x_uf_header_rec => p_x_uf_header_rec
159 );
160 -- Check Error Message stack.
164 END IF;
161 x_msg_count := FND_MSG_PUB.count_msg;
162 IF x_msg_count > 0 THEN
163 RAISE FND_API.G_EXC_ERROR;
165
166 -- PROCESS UF details
167 IF (p_x_uf_details_tbl.count > 0) THEN
168 process_uf_details(
172 );
169 p_validation_level => p_validation_level,
170 p_uf_header_rec => p_x_uf_header_rec,
171 p_x_uf_details_tbl => p_x_uf_details_tbl
173 END IF;
174
175 -- Check Error Message stack.
176 x_msg_count := FND_MSG_PUB.count_msg;
177 IF x_msg_count > 0 THEN
178 RAISE FND_API.G_EXC_ERROR;
179 END IF;
180
181
182 -- post processing to delete header if use unit forecast is 'N' and there are no uf_details.
183 post_process_uf_header(p_uf_header_rec => p_x_uf_header_rec);
184
185 -- Check Error Message stack.
186 x_msg_count := FND_MSG_PUB.count_msg;
187 IF x_msg_count > 0 THEN
188 RAISE FND_API.G_EXC_ERROR;
189 END IF;
190
191 -- Standard check of p_commit
192 IF FND_API.TO_BOOLEAN(p_commit) THEN
193 COMMIT WORK;
194 END IF;
195
196 -- Standard call to get message count and if count is 1, get message info
197 FND_MSG_PUB.Count_And_Get
198 ( p_count => x_msg_count,
199 p_data => x_msg_data,
200 p_encoded => fnd_api.g_false
201 );
202
203 IF G_DEBUG = 'Y' THEN
204 AHL_DEBUG_PUB.debug('Successfully ending processing UF');
205 END IF;
206
207 -- Disable debug
208 IF G_DEBUG = 'Y' THEN
209 AHL_DEBUG_PUB.disable_debug;
210 END IF;
211
212 EXCEPTION
213 WHEN FND_API.G_EXC_ERROR THEN
214 Rollback to process_uf_pvt;
215 x_return_status := FND_API.G_RET_STS_ERROR;
216 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
217 p_data => x_msg_data,
218 p_encoded => fnd_api.g_false);
219 -- Disable debug
220 IF G_DEBUG = 'Y' THEN
221 AHL_DEBUG_PUB.disable_debug;
222 END IF;
223
224
225 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
226 Rollback to process_uf_pvt;
227 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
228 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
229 p_data => x_msg_data,
230 p_encoded => fnd_api.g_false);
231 -- Disable debug
232 IF G_DEBUG = 'Y' THEN
233 AHL_DEBUG_PUB.disable_debug;
234 END IF;
235
236 WHEN OTHERS THEN
237 Rollback to process_uf_pvt;
238 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
239 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
240 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
241 p_procedure_name => l_api_name,
242 p_error_text => SUBSTR(SQLERRM,1,500));
243 END IF;
244 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
245 p_data => x_msg_data,
246 p_encoded => fnd_api.g_false);
247 -- Disable debug
248 IF G_DEBUG = 'Y' THEN
249 AHL_DEBUG_PUB.disable_debug;
250 END IF;
251
252
253 END process_utilization_forecast;
254
255 ----------------------------------------------------------
256 -- This procedure processes uf_header_rec
257 ----------------------------------------------------------
258 PROCEDURE process_uf_header(
259 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
263 -- Convert values to ID's for header rec
260 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_Rec_type
261 ) IS
262 BEGIN
264 IF (p_validation_level = FND_API.G_VALID_LEVEL_FULL )
265 THEN
266 convert_uf_header_val_to_id(p_x_uf_header_rec => p_x_uf_header_rec);
267 END IF;
268
269 IF (AHL_UTIL_PKG.is_pm_installed() = 'N')
270 THEN
271 validate_uf_header(p_uf_header_rec => p_x_uf_header_rec);
272 ELSE
273 validate_uf_header_pm(p_uf_header_rec => p_x_uf_header_rec);
274 END IF;
275 default_unchanged_uf_header(p_x_uf_header_rec => p_x_uf_header_rec);
276
277 --save uf header now
278 IF(p_x_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE) THEN
279 --setting object version number for create
280 p_x_uf_header_rec.object_version_number := 1;
281 --setting up user/create/update information
282 p_x_uf_header_rec.created_by := fnd_global.user_id;
283 p_x_uf_header_rec.creation_date := SYSDATE;
284 p_x_uf_header_rec.last_updated_by := fnd_global.user_id;
285 p_x_uf_header_rec.last_update_date := SYSDATE;
286 p_x_uf_header_rec.last_update_login := fnd_global.user_id;
287
288 AHL_UF_HEADERS_PKG.insert_row(
289 x_uf_header_id => p_x_uf_header_rec.uf_header_id,
290 x_object_version_number => p_x_uf_header_rec.object_version_number,
291 x_created_by => p_x_uf_header_rec.created_by,
292 x_creation_date => p_x_uf_header_rec.creation_date,
293 x_last_updated_by => p_x_uf_header_rec.last_updated_by,
294 x_last_update_date => p_x_uf_header_rec.last_update_date,
295 x_last_update_login => p_x_uf_header_rec.last_update_login,
296 x_unit_config_header_id => p_x_uf_header_rec.unit_config_header_id,
297 x_pc_node_id => p_x_uf_header_rec.pc_node_id,
298 x_inventory_item_id => p_x_uf_header_rec.inventory_item_id,
299 x_inventory_org_id => p_x_uf_header_rec.inventory_org_id,
300 x_csi_item_instance_id => p_x_uf_header_rec.csi_item_instance_id,
301 x_use_unit_flag => p_x_uf_header_rec.use_unit_flag,
302 x_attribute_category => p_x_uf_header_rec.attribute_category,
303 x_attribute1 => p_x_uf_header_rec.attribute1,
304 x_attribute2 => p_x_uf_header_rec.attribute2,
305 x_attribute3 => p_x_uf_header_rec.attribute3,
306 x_attribute4 => p_x_uf_header_rec.attribute4,
307 x_attribute5 => p_x_uf_header_rec.attribute5,
308 x_attribute6 => p_x_uf_header_rec.attribute6,
309 x_attribute7 => p_x_uf_header_rec.attribute7,
310 x_attribute8 => p_x_uf_header_rec.attribute8,
311 x_attribute9 => p_x_uf_header_rec.attribute9,
312 x_attribute10 => p_x_uf_header_rec.attribute10,
313 x_attribute11 => p_x_uf_header_rec.attribute11,
314 x_attribute12 => p_x_uf_header_rec.attribute12,
315 x_attribute13 => p_x_uf_header_rec.attribute13,
316 x_attribute14 => p_x_uf_header_rec.attribute14,
317 x_attribute15 => p_x_uf_header_rec.attribute15
318 );
319 ELSIF (p_x_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE) THEN
320
321 -- setting up object version number
322 p_x_uf_header_rec.object_version_number := p_x_uf_header_rec.object_version_number + 1;
323 --setting up user/create/update information
324 p_x_uf_header_rec.last_updated_by := fnd_global.user_id;
325 p_x_uf_header_rec.last_update_date := SYSDATE;
329 x_uf_header_id => p_x_uf_header_rec.uf_header_id,
326 p_x_uf_header_rec.last_update_login := fnd_global.user_id;
327
328 AHL_UF_HEADERS_PKG.update_row(
330 x_object_version_number => p_x_uf_header_rec.object_version_number,
331 x_last_updated_by => p_x_uf_header_rec.last_updated_by,
332 x_last_update_date => p_x_uf_header_rec.last_update_date,
333 x_last_update_login => p_x_uf_header_rec.last_update_login,
334 x_unit_config_header_id => p_x_uf_header_rec.unit_config_header_id,
335 x_pc_node_id => p_x_uf_header_rec.pc_node_id,
336 x_inventory_item_id => p_x_uf_header_rec.inventory_item_id,
337 x_inventory_org_id => p_x_uf_header_rec.inventory_org_id,
338 x_csi_item_instance_id => p_x_uf_header_rec.csi_item_instance_id,
339 x_use_unit_flag => p_x_uf_header_rec.use_unit_flag,
340 x_attribute_category => p_x_uf_header_rec.attribute_category,
341 x_attribute1 => p_x_uf_header_rec.attribute1,
342 x_attribute2 => p_x_uf_header_rec.attribute2,
343 x_attribute3 => p_x_uf_header_rec.attribute3,
344 x_attribute4 => p_x_uf_header_rec.attribute4,
345 x_attribute5 => p_x_uf_header_rec.attribute5,
346 x_attribute6 => p_x_uf_header_rec.attribute6,
347 x_attribute7 => p_x_uf_header_rec.attribute7,
348 x_attribute8 => p_x_uf_header_rec.attribute8,
349 x_attribute9 => p_x_uf_header_rec.attribute9,
350 x_attribute10 => p_x_uf_header_rec.attribute10,
351 x_attribute11 => p_x_uf_header_rec.attribute11,
352 x_attribute12 => p_x_uf_header_rec.attribute12,
353 x_attribute13 => p_x_uf_header_rec.attribute13,
354 x_attribute14 => p_x_uf_header_rec.attribute14,
355 x_attribute15 => p_x_uf_header_rec.attribute15
356 );
357 END IF;
358
359
360 END process_uf_header;
361
362 ----------------------------------------------------------
363 -- This procedure converts values to ids for uf_header_rec
364 ----------------------------------------------------------
365 PROCEDURE convert_uf_header_val_to_id(
366 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
367 ) IS
368
369 BEGIN
370 -- conversion between uf_header_id : unit_config_header_id, inventory_item_id, pc_node_id
371
372 IF(p_x_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_UNIT)THEN
373 convert_unit_header_val_to_id(p_x_uf_header_rec);
374 ELSIF (p_x_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PART)THEN
375 convert_part_header_val_to_id(p_x_uf_header_rec);
376 ELSIF (p_x_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PC_NODE)THEN
377 convert_node_header_val_to_id(p_x_uf_header_rec);
378 END IF;
379
380 IF FND_MSG_PUB.count_msg > 0 THEN
381 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
382 END IF;
383
384 END convert_uf_header_val_to_id;
385
386 ----------------------------------------------------------------------------------------
387 -- This procedure converts values to ids for uf_header_rec for unit utilization forecast
388 ----------------------------------------------------------------------------------------
389 PROCEDURE convert_unit_header_val_to_id(
390 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
391 )IS
392
393 l_uf_header_id NUMBER;
394 l_unit_config_header_id NUMBER;
395
396 CURSOR unit_config_header_id_csr(p_unit_name IN VARCHAR2) IS
397 SELECT unit_config_header_id
398 FROM ahl_unit_config_headers
399 WHERE name = p_unit_name;
400
401 CURSOR uf_header_id_uid_csr(p_unit_config_header_id IN NUMBER) IS
402 SELECT uf_header_id
403 FROM ahl_uf_headers
404 WHERE unit_config_header_id = p_unit_config_header_id;
405
406 BEGIN
407
408 IF(p_x_uf_header_rec.uf_header_id IS NULL) THEN
409 IF(p_x_uf_header_rec.unit_config_header_id IS NULL AND p_x_uf_header_rec.unit_name IS NULL) THEN
410 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFHID_UCHID_NLL');
411 FND_MSG_PUB.ADD;
412 ELSIF (p_x_uf_header_rec.unit_config_header_id IS NULL AND p_x_uf_header_rec.unit_name IS NOT NULL) THEN
413 OPEN unit_config_header_id_csr(p_x_uf_header_rec.unit_name);
414 FETCH unit_config_header_id_csr INTO l_unit_config_header_id;
415 IF(unit_config_header_id_csr%NOTFOUND) THEN
416 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UNIT_INV');
417 FND_MSG_PUB.ADD;
418 ELSE
419 p_x_uf_header_rec.unit_config_header_id := l_unit_config_header_id;
420 END IF;
421 CLOSE unit_config_header_id_csr;
422 END IF;
423 --fetching uf_header_id based on unit_config_header_id
424 IF (p_x_uf_header_rec.unit_config_header_id IS NOT NULL AND
425 p_x_uf_header_rec.operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE) THEN
426 OPEN uf_header_id_uid_csr(p_x_uf_header_rec.unit_config_header_id);
427 FETCH uf_header_id_uid_csr INTO l_uf_header_id;
428 IF(uf_header_id_uid_csr%NOTFOUND)THEN
429 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HREC_NOTINDB');
430 FND_MSG_PUB.ADD;
431 ELSE
432 p_x_uf_header_rec.uf_header_id := l_uf_header_id;
436 END IF;
433 END IF;
434 CLOSE uf_header_id_uid_csr;
435 END IF;
437
438 END convert_unit_header_val_to_id;
439
440 ----------------------------------------------------------------------------------------
441 -- This procedure converts values to ids for uf_header_rec for part/item utilization forecast
442 ----------------------------------------------------------------------------------------
443 PROCEDURE convert_part_header_val_to_id(
444 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
445 )IS
446
447 l_uf_header_id NUMBER;
448 l_inventory_item_id NUMBER;
449
450 CURSOR inventory_item_id_csr(p_inventory_item_name IN VARCHAR2) IS
451 SELECT inventory_item_id
452 FROM mtl_system_items_kfv
453 WHERE concatenated_segments = p_inventory_item_name;
454
455
456 CURSOR uf_header_id_pid_csr(p_inventory_item_id IN NUMBER) IS
457 SELECT uf_header_id
458 FROM ahl_uf_headers
459 WHERE inventory_item_id = p_inventory_item_id;
460
461
462 BEGIN
463 IF(p_x_uf_header_rec.uf_header_id IS NULL) THEN
464 IF(p_x_uf_header_rec.inventory_item_id IS NULL AND p_x_uf_header_rec.inventory_item_name IS NULL) THEN
465 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_INVID_NLL');
466 FND_MSG_PUB.ADD;
467 ELSIF (p_x_uf_header_rec.inventory_item_id IS NULL AND p_x_uf_header_rec.inventory_item_name IS NOT NULL) THEN
468 OPEN inventory_item_id_csr(p_x_uf_header_rec.inventory_item_name);
469 FETCH inventory_item_id_csr INTO l_inventory_item_id;
470 IF(inventory_item_id_csr%NOTFOUND) THEN
471 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_INV');
472 FND_MSG_PUB.ADD;
473 ELSE
474 p_x_uf_header_rec.inventory_item_id := l_inventory_item_id;
475 END IF;
476 CLOSE inventory_item_id_csr;
477 END IF;
478 --fetching uf_header_id based on inventory_item_id
479 IF (p_x_uf_header_rec.inventory_item_id IS NOT NULL AND
480 p_x_uf_header_rec.operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE) THEN
481 OPEN uf_header_id_pid_csr(p_x_uf_header_rec.inventory_item_id);
482 FETCH uf_header_id_pid_csr INTO l_uf_header_id;
483 IF(uf_header_id_pid_csr%NOTFOUND)THEN
484 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HREC_NOTINDB');
485 FND_MSG_PUB.ADD;
486 ELSE
487 p_x_uf_header_rec.uf_header_id := l_uf_header_id;
488 END IF;
489 CLOSE uf_header_id_pid_csr;
490 END IF;
491 END IF;
492 END convert_part_header_val_to_id;
493
494 ----------------------------------------------------------------------------------------
495 -- This procedure converts values to ids for uf_header_rec for pc node utilization forecast
496 ----------------------------------------------------------------------------------------
497 PROCEDURE convert_node_header_val_to_id(
498 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_rec_type
499 )IS
500
501 CURSOR uf_header_id_nid_csr(p_pc_node_id IN NUMBER) IS
502 SELECT uf_header_id
503 FROM ahl_uf_headers
504 WHERE pc_node_id = p_pc_node_id;
505
506 l_uf_header_id NUMBER;
507
508
509 BEGIN
510 IF p_x_uf_header_rec.operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE THEN
511 IF(p_x_uf_header_rec.uf_header_id IS NULL) THEN
512 IF(p_x_uf_header_rec.pc_node_id IS NULL) THEN
513 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_NODEID_NLL');
514 FND_MSG_PUB.ADD;
515 ELSE
516 OPEN uf_header_id_nid_csr(p_x_uf_header_rec.pc_node_id);
517 FETCH uf_header_id_nid_csr INTO l_uf_header_id;
518 IF(uf_header_id_nid_csr%NOTFOUND)THEN
519 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HREC_NOTINDB');
520 FND_MSG_PUB.ADD;
521 ELSE
522 p_x_uf_header_rec.uf_header_id := l_uf_header_id;
523 END IF;
524 CLOSE uf_header_id_nid_csr;
525 END IF;
526 END IF;
527 END IF;
528
529 END convert_node_header_val_to_id;
530
531 ------------------------------------------------------------------------
532 -- This procedure does the following validations for uf_header_rec
533 -- check whether forecast type is AHL_UMP_UF_PVT.G_UF_TYPE_UNIT,AHL_UMP_UF_PVT.G_UF_TYPE_PART or AHL_UMP_UF_PVT.G_UF_TYPE_PC_NODE
534 -- check of uf_header_id , if null, verify operation flag is create AHL_UMP_UF_PVT.G_OP_CREATE, else AHL_UMP_UF_PVT.G_UF_TYPE_UNIT
535 -- check for object version number if latest. If uf_header_id is null, it should be null too.
536 -- for forecast type U : Unit
537 -- validate whether this unit is a complete Unit Configuration.
538 -- validate whether this unit is attached to a complete primary PC.
539 -- validate whether use unit flag is not null
540 -- for forecast type P : Part
541 -- validate whether this part is in inventory.A VALID Part
542 -- validate whether this part is attached to a complete primary PC.
543 -- use unit flag should be null.
544 -- for forecast type N : Node
545 -- validate whether this node is defined in PC nodes table.
546 -- validate whether this node is attached to a complete primary PC.
547 -- use unit flag should be null.
548 -------------------------------------------------------------------------
549 PROCEDURE validate_uf_header(
550 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type
551 ) IS
552
556 WHERE uf_header_id = p_uf_header_id;
553 CURSOR uf_header_csr (p_uf_header_id IN NUMBER) IS
554 SELECT object_version_number, unit_config_header_id,pc_node_id,inventory_item_id,inventory_org_id,use_unit_flag
555 FROM ahl_uf_headers
557
558
559 l_object_version_number NUMBER;
560 l_unit_config_header_id NUMBER;
561 l_pc_node_id NUMBER;
562 l_inventory_item_id NUMBER;
563 l_inventory_org_id NUMBER;
564 l_use_unit_flag ahl_uf_headers.use_unit_flag%TYPE;
565
566 CURSOR unit_status_check_csr(p_unit_config_header_id IN NUMBER) IS
567 SELECT UCH.unit_config_status_code
568 FROM ahl_unit_config_headers UCH
569 WHERE (UCH.active_end_date IS NULL OR TRUNC(UCH.active_end_date) > TRUNC(SYSDATE))
570 AND UCH.unit_config_header_id = p_unit_config_header_id;
571
572 l_unit_config_status_code ahl_unit_header_details_v.unit_config_status_code%TYPE;
573
574 CURSOR part_check_csr(p_inventory_item_id IN NUMBER) IS
575 SELECT 'x'
576 FROM mtl_system_items_kfv
577 WHERE inventory_item_id = p_inventory_item_id;
578
579 l_exists VARCHAR2(1);
580
581 CURSOR pc_status_check_up_csr(p_unit_item_id IN NUMBER,p_association_type IN VARCHAR2) IS
582 SELECT a.primary_flag,a.status
583 FROM ahl_pc_headers_b a, ahl_pc_nodes_b b, ahl_pc_associations c
584 WHERE a.pc_header_id = b.pc_header_id AND b.pc_node_id = c.pc_node_id AND
585 a.primary_flag = G_PC_PRIMARY_FLAG AND
586 a.status = G_COMPLETE_STATUS AND
587 c.association_type_flag = p_association_type AND
588 c.unit_item_id = p_unit_item_id;
589
590 CURSOR pc_status_check_n_csr(p_pc_node_id IN NUMBER) IS
591 SELECT a.primary_flag,a.status
592 FROM ahl_pc_headers_b a, ahl_pc_nodes_b b
593 WHERE a.pc_header_id = b.pc_header_id
594 AND b.pc_node_id = p_pc_node_id;
595
596 l_pc_primary_flag ahl_pc_headers_b.primary_flag%TYPE;
597 l_pc_status ahl_pc_headers_b.status%TYPE;
598
599 BEGIN
600
601 -- Operation Flag and Header ID validation.
602 IF (p_uf_header_rec.forecast_type NOT IN(AHL_UMP_UF_PVT.G_UF_TYPE_UNIT,AHL_UMP_UF_PVT.G_UF_TYPE_PART,AHL_UMP_UF_PVT.G_UF_TYPE_PC_NODE))THEN
603 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_UF_TYPE');
604 FND_MSG_PUB.ADD;
605 ELSIF (p_uf_header_rec.operation_flag IS NOT NULL AND p_uf_header_rec.operation_flag NOT IN(AHL_UMP_UF_PVT.G_OP_CREATE,AHL_UMP_UF_PVT.G_OP_UPDATE,AHL_UMP_UF_PVT.G_OP_DELETE))THEN
606 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HEADER');
607 FND_MSG_PUB.ADD;
611 FND_MSG_PUB.ADD;
608 ELSIF ((p_uf_header_rec.uf_header_id IS NULL)
609 AND (p_uf_header_rec.operation_flag IS NULL OR p_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE)) THEN
610 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_UFHID_NLL');
612 ELSIF(p_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE AND
613 p_uf_header_rec.uf_header_id IS NOT NULL ) THEN
614 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_UFHID_N_NLL');
615 FND_MSG_PUB.ADD;
616 END IF;
617
618
619
620 IF(FND_MSG_PUB.count_msg > 0)THEN
621 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
622 END IF;
623
624 IF (( p_uf_header_rec.operation_flag IS NULL OR p_uf_header_rec.operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE) AND p_uf_header_rec.uf_header_id IS NOT NULL)THEN
625 OPEN uf_header_csr(p_uf_header_rec.uf_header_id);
626 FETCH uf_header_csr INTO l_object_version_number, l_unit_config_header_id,l_pc_node_id,l_inventory_item_id,l_inventory_org_id,l_use_unit_flag;
627 IF (uf_header_csr%NOTFOUND) THEN
628 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HREC_NOTINDB');
629 FND_MSG_PUB.ADD;
630 ELSIF (l_object_version_number <> p_uf_header_rec.object_version_number)THEN
631 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_HREC_OBJV_MIS');
632 FND_MSG_PUB.ADD;
633 END IF;
634 CLOSE uf_header_csr;
635
636 IF(FND_MSG_PUB.count_msg > 0)THEN
637 RAISE FND_API.G_EXC_ERROR;
638 END IF;
639
640 IF(p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_UNIT) THEN
641 IF(p_uf_header_rec.unit_config_header_id = FND_API.G_MISS_NUM)THEN
642 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFHID_UCHID_NLL');
643 FND_MSG_PUB.ADD;
644 ELSIF (p_uf_header_rec.unit_config_header_id IS NOT NULL AND
645 p_uf_header_rec.unit_config_header_id <> l_unit_config_header_id )THEN FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UCHID_MIS');
646 FND_MSG_PUB.ADD;
647 ELSE
648 OPEN unit_status_check_csr(l_unit_config_header_id);
652 FND_MSG_PUB.ADD;
649 FETCH unit_status_check_csr INTO l_unit_config_status_code;
650 IF (unit_status_check_csr%NOTFOUND) THEN
651 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UNIT_INV');
653 ELSIF (l_unit_config_status_code = AHL_UMP_UF_PVT.G_DRAFT_STATUS)THEN
654 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UC_STATUS_DRAFT');
655 FND_MSG_PUB.ADD;
656 END IF;
657 CLOSE unit_status_check_csr;
658
659 OPEN pc_status_check_up_csr(l_unit_config_header_id,AHL_UMP_UF_PVT.G_PC_UNIT_ASSOCIATION);
660 FETCH pc_status_check_up_csr INTO l_pc_primary_flag,l_pc_status;
661 IF (pc_status_check_up_csr%NOTFOUND) THEN
662 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UNIT_PC_INV');
663 FND_MSG_PUB.ADD;
664 ELSIF (l_pc_primary_flag <> AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG OR l_pc_status <> AHL_UMP_UF_PVT.G_COMPLETE_STATUS) THEN
665 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UNIT_PC_INV');
666 FND_MSG_PUB.ADD;
667 END IF;
668 CLOSE pc_status_check_up_csr;
669
670
671 END IF;
672 ELSIF(p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PART) THEN
673 IF(p_uf_header_rec.inventory_item_id = FND_API.G_MISS_NUM)THEN
674 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_INVID_NLL');
675 FND_MSG_PUB.ADD;
676 ELSIF (p_uf_header_rec.inventory_item_id IS NOT NULL AND
677 p_uf_header_rec.inventory_item_id <> l_inventory_item_id )THEN
678 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVID_MIS');
679 FND_MSG_PUB.ADD;
680 ELSE
681 OPEN part_check_csr(l_inventory_item_id);
682 FETCH part_check_csr INTO l_exists;
683 IF (part_check_csr%NOTFOUND) THEN
684 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_INV');
685 FND_MSG_PUB.ADD;
686 END IF;
687 CLOSE part_check_csr;
688
689 OPEN pc_status_check_up_csr(l_inventory_item_id,AHL_UMP_UF_PVT.G_PC_ITEM_ASSOCIATION);
690 FETCH pc_status_check_up_csr INTO l_pc_primary_flag,l_pc_status;
691 IF (pc_status_check_up_csr%NOTFOUND) THEN
692 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_PC_INV');
693 FND_MSG_PUB.ADD;
694 ELSIF (l_pc_primary_flag <> AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG OR l_pc_status <> AHL_UMP_UF_PVT.G_COMPLETE_STATUS) THEN
695 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_PC_INV');
696 FND_MSG_PUB.ADD;
697 END IF;
698 CLOSE pc_status_check_up_csr;
699
700 END IF;
701 ELSIF(p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PC_NODE) THEN
702 IF(p_uf_header_rec.pc_node_id = FND_API.G_MISS_NUM)THEN
703 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_NODEID_NLL');
704 FND_MSG_PUB.ADD;
705 ELSIF (p_uf_header_rec.pc_node_id IS NOT NULL AND
706 p_uf_header_rec.pc_node_id <> l_pc_node_id )THEN
707 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_NODEID_MIS');
708 FND_MSG_PUB.ADD;
709 ELSE
710 OPEN pc_status_check_n_csr(l_pc_node_id);
711 FETCH pc_status_check_n_csr INTO l_pc_primary_flag,l_pc_status;
712 IF (pc_status_check_n_csr%NOTFOUND) THEN
713 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_NODE_PC_INV');
714 FND_MSG_PUB.ADD;
715 ELSIF (l_pc_primary_flag <> AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG OR l_pc_status <> AHL_UMP_UF_PVT.G_COMPLETE_STATUS) THEN
716 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_NODE_PC_INV');
717 FND_MSG_PUB.ADD;
718 END IF;
719 CLOSE pc_status_check_n_csr;
720
721 END IF;
722 END IF;
723 ELSIF (p_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE AND
724 p_uf_header_rec.uf_header_id IS NULL)THEN
725 IF(p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_UNIT) THEN
726 IF(p_uf_header_rec.unit_config_header_id IS NULL OR
727 p_uf_header_rec.unit_config_header_id = FND_API.G_MISS_NUM) THEN
728 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFHID_UCHID_NLL');
729 FND_MSG_PUB.ADD;
730 ELSE
734 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UNIT_INV');
731 OPEN unit_status_check_csr(p_uf_header_rec.unit_config_header_id);
732 FETCH unit_status_check_csr INTO l_unit_config_status_code;
733 IF (unit_status_check_csr%NOTFOUND) THEN
735 FND_MSG_PUB.ADD;
736 ELSIF (l_unit_config_status_code = AHL_UMP_UF_PVT.G_DRAFT_STATUS)THEN
737 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UC_STATUS_DRAFT');
738 FND_MSG_PUB.ADD;
739 END IF;
740 CLOSE unit_status_check_csr;
741
742 OPEN pc_status_check_up_csr(p_uf_header_rec.unit_config_header_id, AHL_UMP_UF_PVT.G_PC_UNIT_ASSOCIATION);
743 FETCH pc_status_check_up_csr INTO l_pc_primary_flag,l_pc_status;
744 IF (pc_status_check_up_csr%NOTFOUND) THEN
745 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UNIT_PC_INV');
746 FND_MSG_PUB.ADD;
747 ELSIF (l_pc_primary_flag <> AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG OR l_pc_status <> AHL_UMP_UF_PVT.G_COMPLETE_STATUS) THEN
748 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UNIT_PC_INV');
749 FND_MSG_PUB.ADD;
750 END IF;
751 CLOSE pc_status_check_up_csr;
752
753 END IF;
754 ELSIF (p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PART) THEN
755 IF(p_uf_header_rec.inventory_item_id IS NULL OR
756 p_uf_header_rec.inventory_item_id = FND_API.G_MISS_NUM) THEN
757 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_INVID_NLL');
758 FND_MSG_PUB.ADD;
759 ELSE
760 OPEN part_check_csr(p_uf_header_rec.inventory_item_id);
761 FETCH part_check_csr INTO l_exists;
762 IF (part_check_csr%NOTFOUND) THEN
763 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_INV');
764 FND_MSG_PUB.ADD;
765 END IF;
766 CLOSE part_check_csr;
767
768 OPEN pc_status_check_up_csr(p_uf_header_rec.inventory_item_id, AHL_UMP_UF_PVT.G_PC_ITEM_ASSOCIATION);
769 FETCH pc_status_check_up_csr INTO l_pc_primary_flag,l_pc_status;
770 IF (pc_status_check_up_csr%NOTFOUND) THEN
771 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_PC_INV');
772 FND_MSG_PUB.ADD;
773 ELSIF (l_pc_primary_flag <> AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG OR l_pc_status <> AHL_UMP_UF_PVT.G_COMPLETE_STATUS) THEN
774 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_PC_INV');
775 FND_MSG_PUB.ADD;
776 END IF;
777 CLOSE pc_status_check_up_csr;
778
779 END IF;
780 ELSIF (p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PC_NODE) THEN
781 IF(p_uf_header_rec.pc_node_id IS NULL OR
782 p_uf_header_rec.pc_node_id = FND_API.G_MISS_NUM) THEN
783 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_NODEID_NLL');
784 FND_MSG_PUB.ADD;
785 ELSE
786 OPEN pc_status_check_n_csr(p_uf_header_rec.pc_node_id);
787 FETCH pc_status_check_n_csr INTO l_pc_primary_flag,l_pc_status;
788 IF (pc_status_check_n_csr%NOTFOUND) THEN
789 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_NODE_PC_INV');
790 FND_MSG_PUB.ADD;
791 ELSIF (l_pc_primary_flag <> AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG OR l_pc_status <> AHL_UMP_UF_PVT.G_COMPLETE_STATUS) THEN
792 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_NODE_PC_INV');
793 FND_MSG_PUB.ADD;
794 END IF;
795 CLOSE pc_status_check_n_csr;
796 END IF;
797 END IF;
798 ELSE
799 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_HEADER');
800 FND_MSG_PUB.ADD;
804 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
801 END IF;
802
803 IF(FND_MSG_PUB.count_msg > 0)THEN
805 END IF;
806
807 IF((p_uf_header_rec.use_unit_flag IS NOT NULL OR p_uf_header_rec.use_unit_flag <> FND_API.G_MISS_CHAR)
808 AND p_uf_header_rec.use_unit_flag NOT IN (AHL_UMP_UF_PVT.G_UF_USE_UNIT_DEFAULT,AHL_UMP_UF_PVT.G_UF_USE_UNIT_YES)) THEN
809 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_UNT_FLG');
810 FND_MSG_PUB.ADD;
811 END IF;
812
813 IF(FND_MSG_PUB.count_msg > 0)THEN
814 RAISE FND_API.G_EXC_ERROR;
815 END IF;
816
817
818 END validate_uf_header;
819 ----------------------------------------------------------
820 ------------------------------------------------------------------------
821 -- This procedure does the following validations for uf_header_rec when preventive maintenance is installed
822 -- check whether forecast type is AHL_UMP_UF_PVT.G_UF_TYPE_PART or AHL_UMP_UF_PVT.G_UF_TYPE_INSTANCE
823 -- check of uf_header_id , if null, verify operation flag is create AHL_UMP_UF_PVT.G_OP_CREATE
824 -- check for object version number if latest. If uf_header_id is null, it should be null too.
825 -- for forecast type P : Part
826 -- validate whether this part is in inventory.A VALID Part--
827 -- use unit flag should be "N" or null.
828 -- for forecast type C : Instance
829 -- validate whether this instance is defined in csi instance tables
830 -- validate whether this is an instanc of a valid part.
831 -- use unit flag should be valid.
832 -------------------------------------------------------------------------
833 PROCEDURE validate_uf_header_pm(
834 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type
835 ) IS
836
837 CURSOR uf_header_csr (p_uf_header_id IN NUMBER) IS
838 SELECT object_version_number, inventory_item_id,csi_item_instance_id,use_unit_flag
839 FROM ahl_uf_headers
840 WHERE uf_header_id = p_uf_header_id;
841
842
843 l_object_version_number NUMBER;
844 l_inventory_item_id NUMBER;
845 l_csi_item_instance_id NUMBER;
846 l_use_unit_flag ahl_uf_headers.use_unit_flag%TYPE;
847
848 --l_part_number mtl_system_items_kfv.concatenated_segments%TYPE;
849
850 CURSOR part_check_csr(p_inventory_item_id IN NUMBER) IS
851 SELECT 'x'
852 FROM mtl_system_items_kfv
853 WHERE inventory_item_id = p_inventory_item_id;
854
855 l_exists VARCHAR2(1);
856
857 CURSOR instance_check_csr(p_csi_item_instance_id IN NUMBER) IS
858 SELECT 'x'
859 FROM csi_item_instances
860 WHERE instance_id = p_csi_item_instance_id;
861
862
863 BEGIN
864 -- Operation Flag and Header ID validation.
865 IF (p_uf_header_rec.forecast_type NOT IN(AHL_UMP_UF_PVT.G_UF_TYPE_PART,AHL_UMP_UF_PVT.G_UF_TYPE_INSTANCE))THEN
866 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_UF_TYPE');
867 FND_MSG_PUB.ADD;
868 ELSIF (p_uf_header_rec.operation_flag IS NOT NULL AND p_uf_header_rec.operation_flag NOT IN(AHL_UMP_UF_PVT.G_OP_CREATE,AHL_UMP_UF_PVT.G_OP_UPDATE,AHL_UMP_UF_PVT.G_OP_DELETE))THEN
869 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HEADER');
870 FND_MSG_PUB.ADD;
871 ELSIF ((p_uf_header_rec.uf_header_id IS NULL)
872 AND (p_uf_header_rec.operation_flag IS NULL OR p_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE)) THEN
873 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_UFHID_NLL');
874 FND_MSG_PUB.ADD;
875 ELSIF(p_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE AND
876 p_uf_header_rec.uf_header_id IS NOT NULL ) THEN
877 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_UFHID_N_NLL');
878 FND_MSG_PUB.ADD;
879 END IF;
880
881
882
883 IF(FND_MSG_PUB.count_msg > 0)THEN
884 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
885 END IF;
886
887 IF (( p_uf_header_rec.operation_flag IS NULL OR p_uf_header_rec.operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE) AND p_uf_header_rec.uf_header_id IS NOT NULL)THEN
888 OPEN uf_header_csr(p_uf_header_rec.uf_header_id);
889 FETCH uf_header_csr INTO l_object_version_number, l_inventory_item_id,l_csi_item_instance_id,l_use_unit_flag;
890 IF (uf_header_csr%NOTFOUND) THEN
891 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HREC_NOTINDB');
892 FND_MSG_PUB.ADD;
893 ELSIF (l_object_version_number <> p_uf_header_rec.object_version_number)THEN
894 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_HREC_OBJV_MIS');
895 FND_MSG_PUB.ADD;
896 END IF;
897 CLOSE uf_header_csr;
898
899 IF(FND_MSG_PUB.count_msg > 0)THEN
900 RAISE FND_API.G_EXC_ERROR;
901 END IF;
902
903 IF(p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PART) THEN
904 IF(p_uf_header_rec.inventory_item_id = FND_API.G_MISS_NUM)THEN
905 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_INVID_NLL');
906 FND_MSG_PUB.ADD;
907 ELSIF (p_uf_header_rec.inventory_item_id IS NOT NULL AND
908 p_uf_header_rec.inventory_item_id <> l_inventory_item_id )THEN
909 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVID_MIS');
910 FND_MSG_PUB.ADD;
911 ELSE
912 OPEN part_check_csr(l_inventory_item_id);
913 FETCH part_check_csr INTO l_exists;
914 IF (part_check_csr%NOTFOUND) THEN
915 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_INV');
916 FND_MSG_PUB.ADD;
917 END IF;
918 CLOSE part_check_csr;
919 END IF;
920 ELSIF(p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_INSTANCE) THEN
921 IF(p_uf_header_rec.csi_item_instance_id = FND_API.G_MISS_NUM)THEN
925 p_uf_header_rec.csi_item_instance_id <> l_csi_item_instance_id )THEN
922 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_INSTID_NLL');
923 FND_MSG_PUB.ADD;
924 ELSIF (p_uf_header_rec.csi_item_instance_id IS NOT NULL AND
926 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INSTID_MIS');
927 FND_MSG_PUB.ADD;
928 ELSE
929 OPEN instance_check_csr(l_csi_item_instance_id);
930 FETCH instance_check_csr INTO l_exists;
931 IF (instance_check_csr%NOTFOUND) THEN
932 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INST_INV');
933 FND_MSG_PUB.ADD;
934 END IF;
935 CLOSE instance_check_csr;
936 END IF;
937 END IF;
938 ELSIF (p_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE AND
939 p_uf_header_rec.uf_header_id IS NULL)THEN
940 IF (p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PART) THEN
941 IF(p_uf_header_rec.inventory_item_id IS NULL OR
942 p_uf_header_rec.inventory_item_id = FND_API.G_MISS_NUM) THEN
943 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_INVID_NLL');
944 FND_MSG_PUB.ADD;
945 ELSE
946 OPEN part_check_csr(p_uf_header_rec.inventory_item_id);
947 FETCH part_check_csr INTO l_exists;
948 IF (part_check_csr%NOTFOUND) THEN
949 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_PART_INV');
950 FND_MSG_PUB.ADD;
951 END IF;
952 CLOSE part_check_csr;
953 END IF;
954 ELSIF (p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_INSTANCE) THEN
955 IF(p_uf_header_rec.csi_item_instance_id IS NULL OR
956 p_uf_header_rec.csi_item_instance_id = FND_API.G_MISS_NUM) THEN
957 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UFH_INSTID_NLL');
958 FND_MSG_PUB.ADD;
959 ELSE
960 OPEN instance_check_csr(p_uf_header_rec.csi_item_instance_id);
961 FETCH instance_check_csr INTO l_exists;
962 IF (instance_check_csr%NOTFOUND) THEN
963 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INST_INV');
964 FND_MSG_PUB.ADD;
965 END IF;
966 CLOSE instance_check_csr;
967 END IF;
968 END IF;
969 ELSE
970 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_HEADER');
971 FND_MSG_PUB.ADD;
972 END IF;
973
974 IF(FND_MSG_PUB.count_msg > 0)THEN
975 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
976 END IF;
977
978 IF((p_uf_header_rec.use_unit_flag IS NOT NULL OR p_uf_header_rec.use_unit_flag <> FND_API.G_MISS_CHAR)
979 AND p_uf_header_rec.use_unit_flag NOT IN (AHL_UMP_UF_PVT.G_UF_USE_UNIT_DEFAULT,AHL_UMP_UF_PVT.G_UF_USE_UNIT_YES)) THEN
980 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_UNT_FLG');
981 FND_MSG_PUB.ADD;
982 END IF;
983
984 IF(FND_MSG_PUB.count_msg > 0)THEN
985 RAISE FND_API.G_EXC_ERROR;
986 END IF;
987
988
989 END validate_uf_header_pm;
990
991 ----------------------------------------------------------
992 -- This procedure processes defaults unchanged attribute in uf header record
993 ----------------------------------------------------------
994 PROCEDURE default_unchanged_uf_header(
995 p_x_uf_header_rec IN OUT NOCOPY AHL_UMP_UF_PVT.uf_header_Rec_type
996 ) IS
997
998 CURSOR uf_header_csr(p_uf_header_id IN NUMBER, p_object_version_number IN NUMBER) IS
999 SELECT unit_config_header_id, inventory_item_id, pc_node_id, inventory_org_id,csi_item_instance_id,
1000 use_unit_flag, attribute_category, attribute1,attribute2, attribute3,
1001 attribute4, attribute5, attribute6, attribute7, attribute8, attribute9,
1002 attribute10, attribute11, attribute12, attribute13, attribute14, attribute15
1003 FROM ahl_uf_headers
1004 WHERE object_version_number= p_object_version_number
1005 AND uf_header_id = p_uf_header_id;
1006
1007 l_uf_header_rec AHL_UMP_UF_PVT.uf_header_Rec_type;
1008
1009 BEGIN
1010 IF(p_x_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE) THEN
1011 OPEN uf_header_csr(p_x_uf_header_rec.uf_header_id, p_x_uf_header_rec.object_version_number);
1012 FETCH uf_header_csr INTO l_uf_header_rec.unit_config_header_id, l_uf_header_rec.inventory_item_id,l_uf_header_rec.csi_item_instance_id,
1013 l_uf_header_rec.pc_node_id, l_uf_header_rec.inventory_org_id, l_uf_header_rec.use_unit_flag,
1014 l_uf_header_rec.attribute_category,l_uf_header_rec.attribute1,l_uf_header_rec.attribute2,
1015 l_uf_header_rec.attribute3, l_uf_header_rec.attribute4, l_uf_header_rec.attribute5,
1016 l_uf_header_rec.attribute6, l_uf_header_rec.attribute7, l_uf_header_rec.attribute8,
1017 l_uf_header_rec.attribute9, l_uf_header_rec.attribute10, l_uf_header_rec.attribute11,
1018 l_uf_header_rec.attribute12, l_uf_header_rec.attribute13, l_uf_header_rec.attribute14,
1019 l_uf_header_rec.attribute15;
1020 IF (uf_header_csr%NOTFOUND) THEN
1021 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_HREC_NOTINDB');
1022 FND_MSG_PUB.ADD;
1023 ELSE
1024 IF (p_x_uf_header_rec.unit_config_header_id is null) THEN
1025 p_x_uf_header_rec.unit_config_header_id := l_uf_header_rec.unit_config_header_id;
1026 ELSIF(p_x_uf_header_rec.unit_config_header_id = FND_API.G_MISS_NUM) THEN
1027 p_x_uf_header_rec.unit_config_header_id := null;
1028 END IF;
1029
1030 IF (p_x_uf_header_rec.inventory_item_id is null) THEN
1031 p_x_uf_header_rec.inventory_item_id := l_uf_header_rec.inventory_item_id;
1035
1032 ELSIF(p_x_uf_header_rec.inventory_item_id = FND_API.G_MISS_NUM) THEN
1033 p_x_uf_header_rec.inventory_item_id := null;
1034 END IF;
1036 IF (p_x_uf_header_rec.pc_node_id is null) THEN
1037 p_x_uf_header_rec.pc_node_id := l_uf_header_rec.pc_node_id;
1038 ELSIF(p_x_uf_header_rec.pc_node_id = FND_API.G_MISS_NUM) THEN
1039 p_x_uf_header_rec.pc_node_id := null; END IF;
1040
1041 IF (p_x_uf_header_rec.inventory_org_id is null) THEN
1042 p_x_uf_header_rec.inventory_org_id := l_uf_header_rec.inventory_org_id;
1043 ELSIF(p_x_uf_header_rec.inventory_org_id = FND_API.G_MISS_NUM) THEN
1044 p_x_uf_header_rec.inventory_org_id := null;
1045 END IF;
1046
1047 IF (p_x_uf_header_rec.csi_item_instance_id is null) THEN
1048 p_x_uf_header_rec.csi_item_instance_id := l_uf_header_rec.csi_item_instance_id;
1049 ELSIF(p_x_uf_header_rec.csi_item_instance_id = FND_API.G_MISS_NUM) THEN
1050 p_x_uf_header_rec.csi_item_instance_id := null;
1051 END IF;
1052
1053 IF (p_x_uf_header_rec.use_unit_flag is null) THEN
1054 p_x_uf_header_rec.use_unit_flag := l_uf_header_rec.use_unit_flag;
1055 ELSIF(p_x_uf_header_rec.use_unit_flag = FND_API.G_MISS_CHAR) THEN
1056 p_x_uf_header_rec.use_unit_flag := AHL_UMP_UF_PVT.G_UF_USE_UNIT_DEFAULT;
1057 END IF;
1058
1059 IF (p_x_uf_header_rec.attribute_category is null) THEN
1060 p_x_uf_header_rec.attribute_category := l_uf_header_rec.attribute_category;
1061 ELSIF(p_x_uf_header_rec.attribute_category = FND_API.G_MISS_CHAR) THEN
1062 p_x_uf_header_rec.attribute_category := null;
1063 END IF;
1064
1065 IF (p_x_uf_header_rec.attribute1 is null) THEN
1066 p_x_uf_header_rec.attribute1 := l_uf_header_rec.attribute1;
1067 ELSIF(p_x_uf_header_rec.attribute1 = FND_API.G_MISS_CHAR) THEN
1068 p_x_uf_header_rec.attribute1 := null;
1069 END IF;
1070
1071 IF (p_x_uf_header_rec.attribute2 is null) THEN
1072 p_x_uf_header_rec.attribute2 := l_uf_header_rec.attribute2;
1073 ELSIF(p_x_uf_header_rec.attribute2 = FND_API.G_MISS_CHAR) THEN
1074 p_x_uf_header_rec.attribute2 := null;
1075 END IF;
1076
1077 IF (p_x_uf_header_rec.attribute3 is null) THEN
1078 p_x_uf_header_rec.attribute3 := l_uf_header_rec.attribute3;
1079 ELSIF(p_x_uf_header_rec.attribute3 = FND_API.G_MISS_CHAR) THEN
1080 p_x_uf_header_rec.attribute3 := null;
1081 END IF;
1082
1083 IF (p_x_uf_header_rec.attribute4 is null) THEN
1084 p_x_uf_header_rec.attribute4 := l_uf_header_rec.attribute4;
1085 ELSIF(p_x_uf_header_rec.attribute4 = FND_API.G_MISS_CHAR) THEN
1086 p_x_uf_header_rec.attribute4 := null;
1087 END IF;
1088
1089 IF (p_x_uf_header_rec.attribute5 is null) THEN
1090 p_x_uf_header_rec.attribute5 := l_uf_header_rec.attribute5;
1091 ELSIF(p_x_uf_header_rec.attribute5 = FND_API.G_MISS_CHAR) THEN
1092 p_x_uf_header_rec.attribute5 := null;
1093 END IF;
1094
1095 IF (p_x_uf_header_rec.attribute6 is null) THEN
1096 p_x_uf_header_rec.attribute6 := l_uf_header_rec.attribute6;
1097 ELSIF(p_x_uf_header_rec.attribute6 = FND_API.G_MISS_CHAR) THEN
1098 p_x_uf_header_rec.attribute6 := null;
1099 END IF;
1100
1101 IF (p_x_uf_header_rec.attribute7 is null) THEN
1102 p_x_uf_header_rec.attribute7 := l_uf_header_rec.attribute7;
1103 ELSIF(p_x_uf_header_rec.attribute7 = FND_API.G_MISS_CHAR) THEN
1104 p_x_uf_header_rec.attribute7 := null;
1105 END IF;
1106
1107 IF (p_x_uf_header_rec.attribute8 is null) THEN
1108 p_x_uf_header_rec.attribute8 := l_uf_header_rec.attribute8;
1112
1109 ELSIF(p_x_uf_header_rec.attribute8 = FND_API.G_MISS_CHAR) THEN
1110 p_x_uf_header_rec.attribute8 := null;
1111 END IF;
1113 IF (p_x_uf_header_rec.attribute9 is null) THEN
1114 p_x_uf_header_rec.attribute9 := l_uf_header_rec.attribute9;
1115 ELSIF(p_x_uf_header_rec.attribute9 = FND_API.G_MISS_CHAR) THEN
1116 p_x_uf_header_rec.attribute9 := null;
1117 END IF;
1118
1119 IF (p_x_uf_header_rec.attribute10 is null) THEN
1120 p_x_uf_header_rec.attribute10 := l_uf_header_rec.attribute10;
1121 ELSIF(p_x_uf_header_rec.attribute10 = FND_API.G_MISS_CHAR) THEN
1125 IF (p_x_uf_header_rec.attribute11 is null) THEN
1122 p_x_uf_header_rec.attribute10 := null;
1123 END IF;
1124
1126 p_x_uf_header_rec.attribute11 := l_uf_header_rec.attribute11;
1127 ELSIF(p_x_uf_header_rec.attribute11 = FND_API.G_MISS_CHAR) THEN
1128 p_x_uf_header_rec.attribute11 := null;
1132 p_x_uf_header_rec.attribute12 := l_uf_header_rec.attribute12;
1129 END IF;
1130
1131 IF (p_x_uf_header_rec.attribute12 is null) THEN
1133 ELSIF(p_x_uf_header_rec.attribute12 = FND_API.G_MISS_CHAR) THEN
1134 p_x_uf_header_rec.attribute12 := null;
1135 END IF;
1136
1137 IF (p_x_uf_header_rec.attribute13 is null) THEN
1138 p_x_uf_header_rec.attribute13 := l_uf_header_rec.attribute13;
1139 ELSIF(p_x_uf_header_rec.attribute13 = FND_API.G_MISS_CHAR) THEN
1140 p_x_uf_header_rec.attribute13 := null;
1141 END IF;
1142
1143 IF (p_x_uf_header_rec.attribute14 is null) THEN
1144 p_x_uf_header_rec.attribute14 := l_uf_header_rec.attribute14;
1145 ELSIF(p_x_uf_header_rec.attribute14 = FND_API.G_MISS_CHAR) THEN
1146 p_x_uf_header_rec.attribute14 := null;
1147 END IF;
1148
1149 IF (p_x_uf_header_rec.attribute15 is null) THEN
1150 p_x_uf_header_rec.attribute15 := l_uf_header_rec.attribute15;
1151 ELSIF(p_x_uf_header_rec.attribute15 = FND_API.G_MISS_CHAR) THEN
1152 p_x_uf_header_rec.attribute15 := null;
1153 END IF;
1154
1155 END IF;
1156 CLOSE uf_header_csr;
1157 ELSIF (p_x_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE) THEN
1158
1159 IF (p_x_uf_header_rec.unit_config_header_id = FND_API.G_MISS_NUM) THEN
1160 p_x_uf_header_rec.unit_config_header_id := null;
1161 END IF;
1162
1163 IF (p_x_uf_header_rec.inventory_item_id = FND_API.G_MISS_NUM) THEN
1164 p_x_uf_header_rec.inventory_item_id := null;
1165 END IF;
1166
1167 IF (p_x_uf_header_rec.csi_item_instance_id = FND_API.G_MISS_NUM) THEN
1168 p_x_uf_header_rec.csi_item_instance_id := null;
1169 END IF;
1170
1171 IF (p_x_uf_header_rec.pc_node_id = FND_API.G_MISS_NUM) THEN
1172 p_x_uf_header_rec.pc_node_id := null;
1173 END IF;
1174
1175 IF (p_x_uf_header_rec.inventory_org_id = FND_API.G_MISS_NUM) THEN
1176 p_x_uf_header_rec.inventory_org_id := null;
1177 END IF;
1178
1179 IF (p_x_uf_header_rec.use_unit_flag is null) THEN
1180 p_x_uf_header_rec.use_unit_flag := AHL_UMP_UF_PVT.G_UF_USE_UNIT_DEFAULT;
1181 ELSIF(p_x_uf_header_rec.use_unit_flag = FND_API.G_MISS_CHAR) THEN
1182 p_x_uf_header_rec.use_unit_flag := AHL_UMP_UF_PVT.G_UF_USE_UNIT_DEFAULT;
1183 END IF;
1184
1185 IF (p_x_uf_header_rec.attribute_category = FND_API.G_MISS_CHAR) THEN
1186 p_x_uf_header_rec.attribute_category := null;
1187 END IF;
1188 IF (p_x_uf_header_rec.attribute1 = FND_API.G_MISS_CHAR) THEN
1189 p_x_uf_header_rec.attribute1 := null;
1190 END IF;
1191 IF (p_x_uf_header_rec.attribute2 = FND_API.G_MISS_CHAR) THEN
1192 p_x_uf_header_rec.attribute2 := null;
1193 END IF;
1194 IF (p_x_uf_header_rec.attribute3 = FND_API.G_MISS_CHAR) THEN
1195 p_x_uf_header_rec.attribute3 := null;
1196 END IF;
1197 IF (p_x_uf_header_rec.attribute4 = FND_API.G_MISS_CHAR) THEN
1198 p_x_uf_header_rec.attribute4 := null;
1199 END IF;
1200 IF (p_x_uf_header_rec.attribute5 = FND_API.G_MISS_CHAR) THEN
1201 p_x_uf_header_rec.attribute5 := null;
1202 END IF;
1203 IF (p_x_uf_header_rec.attribute6 = FND_API.G_MISS_CHAR) THEN
1204 p_x_uf_header_rec.attribute6 := null;
1205 END IF;
1206 IF (p_x_uf_header_rec.attribute7 = FND_API.G_MISS_CHAR) THEN p_x_uf_header_rec.attribute7 := null;
1207 END IF;
1208 IF (p_x_uf_header_rec.attribute8 = FND_API.G_MISS_CHAR) THEN
1209 p_x_uf_header_rec.attribute8 := null;
1210 END IF;
1211 IF (p_x_uf_header_rec.attribute9 = FND_API.G_MISS_CHAR) THEN
1212 p_x_uf_header_rec.attribute9 := null;
1213 END IF;
1214 IF (p_x_uf_header_rec.attribute10 = FND_API.G_MISS_CHAR) THEN
1215 p_x_uf_header_rec.attribute10 := null;
1216 END IF;
1217 IF (p_x_uf_header_rec.attribute11 = FND_API.G_MISS_CHAR) THEN
1218 p_x_uf_header_rec.attribute11 := null;
1219 END IF;
1220 IF (p_x_uf_header_rec.attribute12 = FND_API.G_MISS_CHAR) THEN
1221 p_x_uf_header_rec.attribute12 := null;
1222 END IF;
1223 IF (p_x_uf_header_rec.attribute13 = FND_API.G_MISS_CHAR) THEN
1224 p_x_uf_header_rec.attribute13 := null;
1225 END IF;
1226 IF (p_x_uf_header_rec.attribute14 = FND_API.G_MISS_CHAR) THEN
1227 p_x_uf_header_rec.attribute14 := null;
1228 END IF;
1229 IF (p_x_uf_header_rec.attribute15 = FND_API.G_MISS_CHAR) THEN
1230 p_x_uf_header_rec.attribute15 := null;
1231 END IF;
1232 END IF;
1233 END default_unchanged_uf_header;
1234
1235
1236 ----------------------------------------------------------
1237 -- This procedure processes uf_detail_rec
1238 ----------------------------------------------------------
1239 PROCEDURE process_uf_details(
1240 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
1241 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type,
1242 p_x_uf_details_tbl IN OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
1243 ) IS
1244
1245 BEGIN
1246 --no value to id conversion involved here
1247
1248 validate_uf_details(
1249 p_uf_header_rec => p_uf_header_rec,
1250 p_x_uf_details_tbl => p_x_uf_details_tbl
1251 );
1252
1253 default_unchanged_uf_details(p_x_uf_details_tbl => p_x_uf_details_tbl);
1254 --save details now
1258 END IF;
1255 FOR i IN p_x_uf_details_tbl.FIRST..p_x_uf_details_tbl.LAST LOOP
1256 IF(p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_DELETE) THEN
1257 AHL_UF_DETAILS_PKG.delete_row(p_x_uf_details_tbl(i).uf_detail_id);
1259 END LOOP;
1260
1261 FOR i IN p_x_uf_details_tbl.FIRST..p_x_uf_details_tbl.LAST LOOP
1262 IF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE) THEN
1263
1264 --setting object version number for create
1265 p_x_uf_details_tbl(i).object_version_number := p_x_uf_details_tbl(i).object_version_number + 1;
1266 --setting up user/create/update information
1270
1267 p_x_uf_details_tbl(i).last_updated_by := fnd_global.user_id;
1268 p_x_uf_details_tbl(i).last_update_date := SYSDATE;
1269 p_x_uf_details_tbl(i).last_update_login := fnd_global.user_id;
1271 AHL_UF_DETAILS_PKG.update_row(
1272 x_uf_detail_id => p_x_uf_details_tbl(i).uf_detail_id,
1273 x_object_version_number => p_x_uf_details_tbl(i).object_version_number,
1274 x_last_updated_by => p_x_uf_details_tbl(i).last_updated_by,
1275 x_last_update_date => p_x_uf_details_tbl(i).last_update_date,
1276 x_last_update_login => p_x_uf_details_tbl(i).last_update_login,
1277 x_uf_header_id => p_x_uf_details_tbl(i).uf_header_id,
1278 x_uom_code => p_x_uf_details_tbl(i).uom_code,
1279 x_start_date => p_x_uf_details_tbl(i).start_date,
1280 x_end_date => p_x_uf_details_tbl(i).end_date,
1281 x_usage_per_day => p_x_uf_details_tbl(i).usage_per_day,
1282 x_attribute_category => p_x_uf_details_tbl(i).attribute_category,
1283 x_attribute1 => p_x_uf_details_tbl(i).attribute1,
1284 x_attribute2 => p_x_uf_details_tbl(i).attribute2,
1285 x_attribute3 => p_x_uf_details_tbl(i).attribute3,
1286 x_attribute4 => p_x_uf_details_tbl(i).attribute4,
1287 x_attribute5 => p_x_uf_details_tbl(i).attribute5,
1288 x_attribute6 => p_x_uf_details_tbl(i).attribute6,
1289 x_attribute7 => p_x_uf_details_tbl(i).attribute7,
1290 x_attribute8 => p_x_uf_details_tbl(i).attribute8,
1291 x_attribute9 => p_x_uf_details_tbl(i).attribute9,
1292 x_attribute10 => p_x_uf_details_tbl(i).attribute10,
1293 x_attribute11 => p_x_uf_details_tbl(i).attribute11,
1294 x_attribute12 => p_x_uf_details_tbl(i).attribute12,
1295 x_attribute13 => p_x_uf_details_tbl(i).attribute13,
1299 END IF;
1296 x_attribute14 => p_x_uf_details_tbl(i).attribute14,
1297 x_attribute15 => p_x_uf_details_tbl(i).attribute15
1298 );
1300 END LOOP;
1301 FOR i IN p_x_uf_details_tbl.FIRST..p_x_uf_details_tbl.LAST LOOP
1302 IF(p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE) THEN
1303 --setting object version number for create
1304 p_x_uf_details_tbl(i).object_version_number := 1;
1305 --setting up user/create/update information
1306 p_x_uf_details_tbl(i).created_by := fnd_global.user_id;
1307 p_x_uf_details_tbl(i).creation_date := SYSDATE;
1308 p_x_uf_details_tbl(i).last_updated_by := fnd_global.user_id;
1309 p_x_uf_details_tbl(i).last_update_date := SYSDATE;
1310 p_x_uf_details_tbl(i).last_update_login := fnd_global.user_id;
1311
1312 p_x_uf_details_tbl(i).uf_header_id := p_uf_header_rec.uf_header_id;
1313
1314 AHL_UF_DETAILS_PKG.insert_row(
1315 x_uf_detail_id => p_x_uf_details_tbl(i).uf_detail_id,
1316 x_object_version_number => p_x_uf_details_tbl(i).object_version_number,
1317 x_created_by => p_x_uf_details_tbl(i).created_by,
1318 x_creation_date => p_x_uf_details_tbl(i).creation_date,
1319 x_last_updated_by => p_x_uf_details_tbl(i).last_updated_by,
1320 x_last_update_date => p_x_uf_details_tbl(i).last_update_date,
1321 x_last_update_login => p_x_uf_details_tbl(i).last_update_login,
1322 x_uf_header_id => p_x_uf_details_tbl(i).uf_header_id,
1323 x_uom_code => p_x_uf_details_tbl(i).uom_code,
1324 x_start_date => p_x_uf_details_tbl(i).start_date,
1325 x_end_date => p_x_uf_details_tbl(i).end_date,
1326 x_usage_per_day => p_x_uf_details_tbl(i).usage_per_day,
1327 x_attribute_category => p_x_uf_details_tbl(i).attribute_category,
1328 x_attribute1 => p_x_uf_details_tbl(i).attribute1,
1329 x_attribute2 => p_x_uf_details_tbl(i).attribute2,
1330 x_attribute3 => p_x_uf_details_tbl(i).attribute3,
1331 x_attribute4 => p_x_uf_details_tbl(i).attribute4,
1332 x_attribute5 => p_x_uf_details_tbl(i).attribute5,
1333 x_attribute6 => p_x_uf_details_tbl(i).attribute6,
1334 x_attribute7 => p_x_uf_details_tbl(i).attribute7,
1335 x_attribute8 => p_x_uf_details_tbl(i).attribute8,
1336 x_attribute9 => p_x_uf_details_tbl(i).attribute9,
1337 x_attribute10 => p_x_uf_details_tbl(i).attribute10,
1338 x_attribute11 => p_x_uf_details_tbl(i).attribute11,
1339 x_attribute12 => p_x_uf_details_tbl(i).attribute12,
1340 x_attribute13 => p_x_uf_details_tbl(i).attribute13,
1341 x_attribute14 => p_x_uf_details_tbl(i).attribute14,
1342 x_attribute15 => p_x_uf_details_tbl(i).attribute15
1343 );
1344 END IF;
1345 END LOOP;
1346
1347 --validate saved data.. check for gaps etc
1348 validate_utilization_forecast(
1349 p_uf_header_rec => p_uf_header_rec,
1350 x_uf_details_tbl => p_x_uf_details_tbl
1351 );
1352
1353 IF(FND_MSG_PUB.count_msg > 0)THEN
1354 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1355 END IF;
1356
1357 END process_uf_details;
1358
1359
1360 ---------------------------------------------------------------------------------------------------------------------------------------------------
1361 -- This procedure does the following validations for uf_details_tbl
1362 -- verify operation flag is not null for all records
1363 -- check if uf_header_id , if null, verify operation flag is create AHL_UMP_UF_PVT.G_OP_CREATE for all records in details
1364 -- check if uf_detail_id is not null then operation flag is update AHL_UMP_UF_PVT.G_UF_TYPE_UNIT or 'D' and uf_header_id is not null
1365 -- Validate that for every record in p_x_uf_details_tbl, start_date is < end_date(IF not null) and start_date is not null.
1366 -- Validate that for every record in p_x_uf_details_tbl, usage_per_day is a valid number +ve,-ve or 0 .
1367 -- Validate that for every record in p_x_uf_details_tbl, uom is valid.
1368 -- If operation_flag is "U" or "D" verfiy object version number if they are same as in database.
1369 -- If operation_flag is "U", if start_date < SYSDATE, split this record and
1370 -- update current record with UOM for this record in DB and end date as SYSDATE - 1
1371 -- add a new one with with start date as SYSDATE and operation flag as AHL_UMP_UF_PVT.G_OP_CREATE
1372 -- If operation_flag is "D", if start_date < SYSDATE, put end date as SYSDATE -1 (yesterday's date).set operation_flag as AHL_UMP_UF_PVT.G_UF_TYPE_UNIT
1373 -- update x_return_status on error , break if required
1374 ---------------------------------------------------------------------------------------------------------------------------------------------------
1375 PROCEDURE validate_uf_details(
1376 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type,
1377 p_x_uf_details_tbl IN OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
1378 ) IS
1379
1383 WHERE uf_detail_id = p_uf_detail_id;
1380 CURSOR uf_details_csr (p_uf_detail_id IN NUMBER) IS
1381 SELECT object_version_number, uf_header_id,uom_code,start_date,end_date,usage_per_day
1382 FROM ahl_uf_details
1384
1385 l_object_version_number NUMBER;
1386 l_uf_header_id NUMBER;
1387 l_uom_code ahl_uf_details.uom_code%TYPE;
1388 l_start_date DATE;
1389 l_end_date DATE;
1390 l_usage_per_day NUMBER;
1391
1392 l_total NUMBER;
1393 l_last NUMBER;
1394
1395 CURSOR part_uom_code_ckeck_csr(p_uom_code IN VARCHAR2) IS
1396 select 'x'
1397 from mtl_units_of_measure_vl
1398 where uom_code = p_uom_code;
1399
1400 CURSOR node_uom_code_ckeck_csr(p_uom_code IN VARCHAR2) IS
1401 select 'x'
1402 from mtl_units_of_measure_vl
1403 where uom_code = p_uom_code;
1404
1405 CURSOR unit_uom_code_ckeck_csr(p_uom_code IN VARCHAR2) IS
1406 select 'x'
1407 from mtl_units_of_measure_vl
1408 where uom_code = p_uom_code;
1409
1410 l_exists VARCHAR2(1);
1411
1412 BEGIN
1413 l_total := p_x_uf_details_tbl.count;
1414 FOR i IN p_x_uf_details_tbl.FIRST..l_total LOOP
1415 --checking for unexpected errors
1416 IF ( p_x_uf_details_tbl(i).operation_flag IS NOT NULL AND p_x_uf_details_tbl(i).operation_flag NOT IN(AHL_UMP_UF_PVT.G_OP_CREATE,AHL_UMP_UF_PVT.G_OP_UPDATE,AHL_UMP_UF_PVT.G_OP_DELETE))THEN
1417 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_DETAIL');
1418 FND_MSG_PUB.ADD;
1419 ELSIF (p_uf_header_rec.operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE AND p_x_uf_details_tbl(i).operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE) THEN
1420 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_OP_DET_HED');
1421 FND_MSG_PUB.ADD;
1422 ELSIF ((p_x_uf_details_tbl(i).operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE AND p_x_uf_details_tbl(i).uf_detail_id IS NULL) OR
1423 (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE AND p_x_uf_details_tbl(i).uf_detail_id IS NOT NULL)) THEN
1424 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INVOP_DETAIL');
1425 FND_MSG_PUB.ADD;
1426 END IF;
1427 -- Raise if unexpected errors
1428 IF FND_MSG_PUB.count_msg > 0 THEN
1429 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1430 END IF;
1431
1432 IF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE AND
1433 p_x_uf_details_tbl(i).end_date = FND_API.G_MISS_DATE) THEN
1434 p_x_uf_details_tbl(i).end_date := NULL;
1435
1436 -- checking for expected error if record is modified
1437 ELSIF (p_x_uf_details_tbl(i).operation_flag <> AHL_UMP_UF_PVT.G_OP_CREATE AND p_x_uf_details_tbl(i).uf_detail_id IS NOT NULL)THEN
1438 OPEN uf_details_csr(p_x_uf_details_tbl(i).uf_detail_id);
1439 FETCH uf_details_csr INTO l_object_version_number, l_uf_header_id,l_uom_code,l_start_date,l_end_date,l_usage_per_day;
1440 IF (uf_details_csr%NOTFOUND) THEN
1441 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_DET_INV_NOTINDB');
1442 FND_MSG_PUB.ADD;
1443 ELSIF l_object_version_number <> p_x_uf_details_tbl(i).object_version_number THEN
1444 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_DET_OBJV_MIS');
1445 FND_MSG_PUB.ADD;
1446 ELSE
1447 IF p_x_uf_details_tbl(i).end_date IS NULL THEN
1448 p_x_uf_details_tbl(i).end_date := l_end_date;
1452 IF p_x_uf_details_tbl(i).uf_header_id IS NULL THEN
1449 ELSIF p_x_uf_details_tbl(i).end_date = FND_API.G_MISS_DATE THEN
1450 p_x_uf_details_tbl(i).end_date := NULL;
1451 END IF;
1453 p_x_uf_details_tbl(i).uf_header_id := l_uf_header_id;
1454 ELSIF p_x_uf_details_tbl(i).uf_header_id = FND_API.G_MISS_NUM THEN
1455 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_DET_UFHID');
1456 FND_MSG_PUB.ADD;
1457 ELSIF (p_x_uf_details_tbl(i).uf_header_id <> l_uf_header_id) THEN
1458 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_DET_UFHID');
1459 FND_MSG_PUB.ADD;
1460 END IF;
1461 END IF;
1462 CLOSE uf_details_csr;
1463 END IF;
1464
1465 IF(FND_MSG_PUB.count_msg > 0)THEN
1466 RAISE FND_API.G_EXC_ERROR;
1467 END IF;
1468
1469 -- checking for expected error if start date , end date,UOM are invalid
1470 IF(p_x_uf_details_tbl(i).operation_flag IN (AHL_UMP_UF_PVT.G_OP_CREATE,AHL_UMP_UF_PVT.G_OP_UPDATE))THEN
1471 -- checking for start and end dates
1472 IF(p_x_uf_details_tbl(i).start_date IS NULL) THEN
1473 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_SDATE_NLL');
1474 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1475 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1476 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1477 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1478 FND_MSG_PUB.ADD;
1479 ELSIF (p_x_uf_details_tbl(i).end_date IS NOT NULL) THEN
1480 IF ((TRUNC(p_x_uf_details_tbl(i).end_date) < TRUNC(p_x_uf_details_tbl(i).start_date)) OR
1481 (TRUNC(p_x_uf_details_tbl(i).end_date) < TRUNC(SYSDATE)))THEN
1482 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_EDATE');
1483 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1484 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1485 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1486 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1487 FND_MSG_PUB.ADD;
1488 ELSIF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE) THEN
1489 IF(TRUNC(p_x_uf_details_tbl(i).start_date) < TRUNC(SYSDATE))THEN
1490 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_SDATE');
1491 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1492 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1493 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1494 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1495 FND_MSG_PUB.ADD;
1496 END IF;
1497 ELSIF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE) THEN
1498 IF ( TRUNC(p_x_uf_details_tbl(i).start_date) < TRUNC(SYSDATE) AND
1499 (TRUNC(p_x_uf_details_tbl(i).start_date) <> TRUNC(l_start_date) OR
1500 p_x_uf_details_tbl(i).uom_code <> l_uom_code)) THEN
1501 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_DONCHG_STD_UOM');
1502 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1506 FND_MSG_PUB.ADD;
1503 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1504 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1505 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1507 END IF;
1508 END IF;
1509 ELSIF (p_x_uf_details_tbl(i).end_date IS NULL) THEN
1510 IF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE) THEN
1511 IF(TRUNC(p_x_uf_details_tbl(i).start_date) < TRUNC(SYSDATE))THEN
1512 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_SDATE');
1513 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1514 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1515 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1516 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1517 FND_MSG_PUB.ADD;
1518 END IF;
1519 ELSIF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE) THEN
1520 IF ( TRUNC(p_x_uf_details_tbl(i).start_date) < TRUNC(SYSDATE) AND
1521 (TRUNC(p_x_uf_details_tbl(i).start_date) <> TRUNC(l_start_date) OR
1522 p_x_uf_details_tbl(i).uom_code <> l_uom_code)) THEN
1523 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_DONCHG_STD_UOM');
1524 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1525 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1526 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1527 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1528 FND_MSG_PUB.ADD;
1529 END IF;
1530 END IF;
1531 END IF;
1532
1533 --checking for expected error if UOM is invalid
1534 IF(p_x_uf_details_tbl(i).uom_code IS NULL) THEN
1535 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_UOMCD_NLL');
1536 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1537 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1538 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1539 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1540 FND_MSG_PUB.ADD;
1541 ELSE
1542 IF (p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_OP_UPDATE)THEN
1543 OPEN unit_uom_code_ckeck_csr(p_x_uf_details_tbl(i).uom_code);
1544 FETCH unit_uom_code_ckeck_csr into l_exists;
1545 IF (unit_uom_code_ckeck_csr%NOTFOUND) THEN
1546 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_UOMCD');
1547 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1548 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1549 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1550 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1551 FND_MSG_PUB.ADD;
1552 END IF;
1553 CLOSE unit_uom_code_ckeck_csr;
1554 ELSIF (p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PART)THEN
1555 OPEN part_uom_code_ckeck_csr(p_x_uf_details_tbl(i).uom_code);
1556 FETCH part_uom_code_ckeck_csr into l_exists;
1557 IF (part_uom_code_ckeck_csr%NOTFOUND) THEN
1558 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_UOMCD');
1559 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1560 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1561 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1562 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1563 FND_MSG_PUB.ADD;
1564 END IF;
1565 CLOSE part_uom_code_ckeck_csr;
1566 ELSIF (p_uf_header_rec.forecast_type = AHL_UMP_UF_PVT.G_UF_TYPE_PC_NODE)THEN
1567 OPEN node_uom_code_ckeck_csr(p_x_uf_details_tbl(i).uom_code);
1568 FETCH node_uom_code_ckeck_csr into l_exists;
1569 IF (node_uom_code_ckeck_csr%NOTFOUND) THEN
1570 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_INV_UOMCD');
1571 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1572 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1573 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1574 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1575 FND_MSG_PUB.ADD;
1576 END IF;
1577 CLOSE node_uom_code_ckeck_csr;
1581
1578 END IF;
1579 END IF;--UOM code check
1580 END IF;
1582 --spliting and end-dating
1583 IF (FND_MSG_PUB.count_msg = 0) THEN
1584 IF(p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE)THEN
1585 IF TRUNC(p_x_uf_details_tbl(i).start_date) < TRUNC(SYSDATE) THEN
1586 IF((TRUNC(p_x_uf_details_tbl(i).start_date) <> TRUNC(l_start_date))OR
1587 (p_x_uf_details_tbl(i).uom_code <> l_uom_code)) THEN
1588 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_DONCHG_STD_UOM');
1589 FND_MESSAGE.Set_Token('START_DATE',p_x_uf_details_tbl(i).start_date);
1590 FND_MESSAGE.Set_Token('END_DATE',p_x_uf_details_tbl(i).end_date);
1591 FND_MESSAGE.Set_Token('UOM_CODE',p_x_uf_details_tbl(i).uom_code);
1592 FND_MESSAGE.Set_Token('USAGE_PER_DAY',p_x_uf_details_tbl(i).usage_per_day);
1593 FND_MSG_PUB.ADD;
1594 ELSIF ((TRUNC(p_x_uf_details_tbl(i).end_date) <> TRUNC(l_end_date))OR
1595 (p_x_uf_details_tbl(i).usage_per_day <> l_usage_per_day)) THEN
1596 -- adding new record
1597 l_last := p_x_uf_details_tbl.count + 1;
1598 p_x_uf_details_tbl(l_last).start_date := SYSDATE;
1599 p_x_uf_details_tbl(l_last).end_date := p_x_uf_details_tbl(i).end_date;
1600 p_x_uf_details_tbl(l_last).usage_per_day := p_x_uf_details_tbl(i).usage_per_day;
1601 p_x_uf_details_tbl(l_last).uom_code := p_x_uf_details_tbl(i).uom_code;
1602 p_x_uf_details_tbl(l_last).operation_flag := AHL_UMP_UF_PVT.G_OP_CREATE;
1603 p_x_uf_details_tbl(l_last).uf_header_id := p_x_uf_details_tbl(i).uf_header_id;
1604 -- Modifying and end-dating existing record.
1605 p_x_uf_details_tbl(i).end_date := TRUNC(SYSDATE - 1);
1609 END IF;
1606 p_x_uf_details_tbl(i).uom_code := l_uom_code;
1607 p_x_uf_details_tbl(i).usage_per_day := l_usage_per_day;
1608
1610 END IF;
1611 -- end dating if start date < sysdate
1612 ELSIF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_DELETE)THEN
1613 IF(TRUNC(l_start_date) < TRUNC(SYSDATE))THEN
1617 p_x_uf_details_tbl(i).usage_per_day := l_usage_per_day;
1614 p_x_uf_details_tbl(i).start_date := l_start_date;
1615 p_x_uf_details_tbl(i).end_date := SYSDATE - 1;
1616 p_x_uf_details_tbl(i).uom_code := l_uom_code;
1618 p_x_uf_details_tbl(i).operation_flag := AHL_UMP_UF_PVT.G_OP_UPDATE;
1619 END IF;
1620 END IF;
1621 END IF; --end splitting and end dating
1622
1623 END LOOP;
1624
1625 IF FND_MSG_PUB.count_msg > 0 THEN
1626 RAISE FND_API.G_EXC_ERROR;
1627 END IF;
1628
1629 END validate_uf_details;
1630
1631 ---------------------------------------------------------------------------------------------------------------------------------------------------
1632 -- This procedure verfies whether saved utilization forecast was validate_uf_detailsand had no gaps.
1633 -- fetch details table records for this uf_header_id ordered by UOM, start date where endt_date >= Sysdate - 1.
1634 -- for same UOM, end date of one record should always be one less than the start date of next record
1635 -- update x_return_status on error , break if required
1636 -----------------------------------------------------------------------------------------------------------------------------------------------------
1637
1638
1639 PROCEDURE validate_utilization_forecast(
1640 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_rec_type,
1641 x_uf_details_tbl OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
1642 ) IS
1643
1644 CURSOR uf_sorted_details_csr (p_uf_header_id IN NUMBER) IS
1645 SELECT object_version_number, uf_detail_id, uf_header_id,uom_code,start_date,end_date,usage_per_day
1646 FROM ahl_uf_details
1647 WHERE uf_header_id = p_uf_header_id
1648 AND (end_date IS NULL OR TRUNC(end_date) >= TRUNC(SYSDATE))
1649 ORDER BY uom_code,start_date;
1650
1651 i NUMBER;
1652
1653 BEGIN
1654 i:= 1;
1655
1656 OPEN uf_sorted_details_csr(p_uf_header_rec.uf_header_id);
1657 LOOP
1658 FETCH uf_sorted_details_csr INTO x_uf_details_tbl(i).object_version_number,
1659 x_uf_details_tbl(i).uf_detail_id,
1660 x_uf_details_tbl(i).uf_header_id,
1661 x_uf_details_tbl(i).uom_code,
1662 x_uf_details_tbl(i).start_date,
1663 x_uf_details_tbl(i).end_date,
1664 x_uf_details_tbl(i).usage_per_day;
1665 exit when uf_sorted_details_csr%notfound;
1666 i := i + 1;
1667 END LOOP;
1668
1669 CLOSE uf_sorted_details_csr;
1670 IF(x_uf_details_tbl.COUNT > 0) THEN
1671 FOR i IN x_uf_details_tbl.FIRST..x_uf_details_tbl.LAST LOOP
1672 IF(x_uf_details_tbl.LAST > i) THEN
1673 IF(x_uf_details_tbl(i).uom_code = x_uf_details_tbl(i+1).uom_code) THEN
1674 IF(x_uf_details_tbl(i).end_date IS NULL) THEN
1675 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UF_OLAPS_IN_UF');
1676 FND_MESSAGE.Set_Token('FSTART_DATE',x_uf_details_tbl(i).start_date);
1677 FND_MESSAGE.Set_Token('FEND_DATE',x_uf_details_tbl(i).end_date);
1678 FND_MESSAGE.Set_Token('FUOM_CODE',x_uf_details_tbl(i).uom_code);
1679 FND_MESSAGE.Set_Token('FUSAGE_PER_DAY',x_uf_details_tbl(i).usage_per_day);
1680 FND_MESSAGE.Set_Token('NSTART_DATE',x_uf_details_tbl(i+1).start_date);
1681 FND_MESSAGE.Set_Token('NEND_DATE',x_uf_details_tbl(i+1).end_date);
1682 FND_MESSAGE.Set_Token('NUOM_CODE',x_uf_details_tbl(i+1).uom_code);
1683 FND_MESSAGE.Set_Token('NUSAGE_PER_DAY',x_uf_details_tbl(i+1).usage_per_day);
1684 FND_MSG_PUB.ADD;
1685 ELSIF TRUNC(x_uf_details_tbl(i+1).start_date) <> TRUNC(x_uf_details_tbl(i).end_date + 1) THEN
1686 IF(TRUNC(x_uf_details_tbl(i+1).start_date) > TRUNC(x_uf_details_tbl(i).end_date + 1)) THEN
1687 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UF_GAPS_IN_UF');
1688 ELSE
1689 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UF_OLAPS_IN_UF');
1690 END IF;
1691 FND_MESSAGE.Set_Token('FSTART_DATE',x_uf_details_tbl(i).start_date);
1692 FND_MESSAGE.Set_Token('FEND_DATE',x_uf_details_tbl(i).end_date);
1693 FND_MESSAGE.Set_Token('FUOM_CODE',x_uf_details_tbl(i).uom_code);
1694 FND_MESSAGE.Set_Token('FUSAGE_PER_DAY',x_uf_details_tbl(i).usage_per_day);
1695 FND_MESSAGE.Set_Token('NSTART_DATE',x_uf_details_tbl(i+1).start_date);
1696 FND_MESSAGE.Set_Token('NEND_DATE',x_uf_details_tbl(i+1).end_date);
1697 FND_MESSAGE.Set_Token('NUOM_CODE',x_uf_details_tbl(i+1).uom_code);
1698 FND_MESSAGE.Set_Token('NUSAGE_PER_DAY',x_uf_details_tbl(i+1).usage_per_day);
1699 FND_MSG_PUB.ADD;
1700 END IF;
1701 END IF;
1702 END IF;
1703 END LOOP;
1704 END IF;
1705
1706 IF FND_MSG_PUB.count_msg > 0 THEN
1707 RAISE FND_API.G_EXC_ERROR;
1708 END IF;
1709
1710 END validate_utilization_forecast;
1711
1712 --------------------------------------------------------------------------------
1713 -- This procedure writes message.
1714 --------------------------------------------------------------------------------
1715 PROCEDURE default_unchanged_uf_details(
1716 p_x_uf_details_tbl IN OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type
1717 ) IS
1718
1719 CURSOR uf_details_csr(p_uf_detail_id IN NUMBER, p_object_version_number IN NUMBER) IS
1720 SELECT uf_header_id,end_date,attribute_category, attribute1,attribute2, attribute3, attribute4,
1724 WHERE object_version_number= p_object_version_number
1721 attribute5, attribute6, attribute7, attribute8, attribute9, attribute10, attribute11,
1722 attribute12, attribute13, attribute14, attribute15
1723 FROM ahl_uf_details
1725 AND uf_detail_id = p_uf_detail_id;
1726
1727 l_uf_details_rec AHL_UMP_UF_PVT.uf_details_rec_type;
1728
1729 BEGIN
1730 FOR i IN p_x_uf_details_tbl.FIRST..p_x_uf_details_tbl.LAST LOOP
1731 IF(p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_UPDATE) THEN
1732 OPEN uf_details_csr(p_x_uf_details_tbl(i).uf_detail_id, p_x_uf_details_tbl(i).object_version_number);
1733 FETCH uf_details_csr INTO l_uf_details_rec.uf_header_id,l_uf_details_rec.end_date,l_uf_details_rec.attribute_category,l_uf_details_rec.attribute1,l_uf_details_rec.attribute2,
1737 IF (uf_details_csr%NOTFOUND) THEN
1734 l_uf_details_rec.attribute3, l_uf_details_rec.attribute4, l_uf_details_rec.attribute5, l_uf_details_rec.attribute6, l_uf_details_rec.attribute7,
1735 l_uf_details_rec.attribute8, l_uf_details_rec.attribute9, l_uf_details_rec.attribute10, l_uf_details_rec.attribute11, l_uf_details_rec.attribute12,
1736 l_uf_details_rec.attribute13, l_uf_details_rec.attribute14, l_uf_details_rec.attribute15;
1738 FND_MESSAGE.Set_Name(G_APP_NAME,'AHL_UMP_UF_DET_OBJV_MIS');
1739 FND_MSG_PUB.ADD;
1740 ELSE
1741 IF (p_x_uf_details_tbl(i).uf_header_id is null) THEN
1742 p_x_uf_details_tbl(i).uf_header_id := l_uf_details_rec.uf_header_id;
1743 ELSIF(p_x_uf_details_tbl(i).uf_header_id = FND_API.G_MISS_NUM) THEN
1744 p_x_uf_details_tbl(i).uf_header_id := null;
1745 END IF;
1746
1747 IF (p_x_uf_details_tbl(i).end_date is null) THEN
1748 p_x_uf_details_tbl(i).end_date := l_uf_details_rec.end_date;
1749 ELSIF(p_x_uf_details_tbl(i).end_date = FND_API.G_MISS_DATE) THEN
1750 p_x_uf_details_tbl(i).end_date := null;
1751 END IF;
1752
1753 IF (p_x_uf_details_tbl(i).attribute_category is null) THEN
1757 END IF;
1754 p_x_uf_details_tbl(i).attribute_category := l_uf_details_rec.attribute_category;
1755 ELSIF(p_x_uf_details_tbl(i).attribute_category = FND_API.G_MISS_CHAR) THEN
1756 p_x_uf_details_tbl(i).attribute_category := null;
1758
1759 IF (p_x_uf_details_tbl(i).attribute1 is null) THEN
1760 p_x_uf_details_tbl(i).attribute1 := l_uf_details_rec.attribute1;
1761 ELSIF(p_x_uf_details_tbl(i).attribute1 = FND_API.G_MISS_CHAR) THEN
1762 p_x_uf_details_tbl(i).attribute1 := null;
1763 END IF;
1764
1765 IF (p_x_uf_details_tbl(i).attribute2 is null) THEN
1766 p_x_uf_details_tbl(i).attribute2 := l_uf_details_rec.attribute2;
1767 ELSIF(p_x_uf_details_tbl(i).attribute2 = FND_API.G_MISS_CHAR) THEN
1768 p_x_uf_details_tbl(i).attribute2 := null;
1769 END IF;
1770
1771 IF (p_x_uf_details_tbl(i).attribute3 is null) THEN
1772 p_x_uf_details_tbl(i).attribute3 := l_uf_details_rec.attribute3;
1773 ELSIF(p_x_uf_details_tbl(i).attribute3 = FND_API.G_MISS_CHAR) THEN
1774 p_x_uf_details_tbl(i).attribute3 := null;
1775 END IF;
1776
1777 IF (p_x_uf_details_tbl(i).attribute4 is null) THEN
1778 p_x_uf_details_tbl(i).attribute4 := l_uf_details_rec.attribute4;
1779 ELSIF(p_x_uf_details_tbl(i).attribute4 = FND_API.G_MISS_CHAR) THEN
1780 p_x_uf_details_tbl(i).attribute4 := null;
1781 END IF;
1782
1783 IF (p_x_uf_details_tbl(i).attribute5 is null) THEN
1784 p_x_uf_details_tbl(i).attribute5 := l_uf_details_rec.attribute5;
1785 ELSIF(p_x_uf_details_tbl(i).attribute5 = FND_API.G_MISS_CHAR) THEN
1786 p_x_uf_details_tbl(i).attribute5 := null;
1787 END IF;
1788
1789 IF (p_x_uf_details_tbl(i).attribute6 is null) THEN
1790 p_x_uf_details_tbl(i).attribute6 := l_uf_details_rec.attribute6;
1791 ELSIF(p_x_uf_details_tbl(i).attribute6 = FND_API.G_MISS_CHAR) THEN
1792 p_x_uf_details_tbl(i).attribute6 := null;
1793 END IF;
1794
1795 IF (p_x_uf_details_tbl(i).attribute7 is null) THEN
1796 p_x_uf_details_tbl(i).attribute7 := l_uf_details_rec.attribute7;
1797 ELSIF(p_x_uf_details_tbl(i).attribute7 = FND_API.G_MISS_CHAR) THEN
1798 p_x_uf_details_tbl(i).attribute7 := null;
1799 END IF;
1800
1801 IF (p_x_uf_details_tbl(i).attribute8 is null) THEN
1802 p_x_uf_details_tbl(i).attribute8 := l_uf_details_rec.attribute8;
1803 ELSIF(p_x_uf_details_tbl(i).attribute8 = FND_API.G_MISS_CHAR) THEN
1804 p_x_uf_details_tbl(i).attribute8 := null;
1805 END IF;
1806
1807 IF (p_x_uf_details_tbl(i).attribute9 is null) THEN
1808 p_x_uf_details_tbl(i).attribute9 := l_uf_details_rec.attribute9;
1809 ELSIF(p_x_uf_details_tbl(i).attribute9 = FND_API.G_MISS_CHAR) THEN
1810 p_x_uf_details_tbl(i).attribute9 := null;
1811 END IF;
1812
1813 IF (p_x_uf_details_tbl(i).attribute10 is null) THEN
1814 p_x_uf_details_tbl(i).attribute10 := l_uf_details_rec.attribute10;
1815 ELSIF(p_x_uf_details_tbl(i).attribute10 = FND_API.G_MISS_CHAR) THEN
1816 p_x_uf_details_tbl(i).attribute10 := null;
1817 END IF;
1818
1819 IF (p_x_uf_details_tbl(i).attribute11 is null) THEN
1820 p_x_uf_details_tbl(i).attribute11 := l_uf_details_rec.attribute11;
1821 ELSIF(p_x_uf_details_tbl(i).attribute11 = FND_API.G_MISS_CHAR) THEN
1822 p_x_uf_details_tbl(i).attribute11 := null;
1823 END IF;
1824
1825 IF (p_x_uf_details_tbl(i).attribute12 is null) THEN
1826 p_x_uf_details_tbl(i).attribute12 := l_uf_details_rec.attribute12;
1827 ELSIF(p_x_uf_details_tbl(i).attribute12 = FND_API.G_MISS_CHAR) THEN
1828 p_x_uf_details_tbl(i).attribute12 := null;
1829 END IF;
1830
1831 IF (p_x_uf_details_tbl(i).attribute13 is null) THEN
1832 p_x_uf_details_tbl(i).attribute13 := l_uf_details_rec.attribute13;
1833 ELSIF(p_x_uf_details_tbl(i).attribute13 = FND_API.G_MISS_CHAR) THEN
1834 p_x_uf_details_tbl(i).attribute13 := null;
1835 END IF;
1836
1837 IF (p_x_uf_details_tbl(i).attribute14 is null) THEN
1838 p_x_uf_details_tbl(i).attribute14 := l_uf_details_rec.attribute14;
1839 ELSIF(p_x_uf_details_tbl(i).attribute14 = FND_API.G_MISS_CHAR) THEN
1840 p_x_uf_details_tbl(i).attribute14 := null;
1841 END IF;
1842
1843 IF (p_x_uf_details_tbl(i).attribute15 is null) THEN
1844 p_x_uf_details_tbl(i).attribute15 := l_uf_details_rec.attribute15;
1845 ELSIF(p_x_uf_details_tbl(i).attribute15 = FND_API.G_MISS_CHAR) THEN
1846 p_x_uf_details_tbl(i).attribute15 := null;
1847 END IF;
1848
1849 END IF;
1850 CLOSE uf_details_csr;
1851 ELSIF (p_x_uf_details_tbl(i).operation_flag = AHL_UMP_UF_PVT.G_OP_CREATE) THEN
1852
1853 IF(p_x_uf_details_tbl(i).uf_header_id = FND_API.G_MISS_NUM) THEN
1854 p_x_uf_details_tbl(i).uf_header_id := null;
1855 END IF;
1856
1857 IF(p_x_uf_details_tbl(i).end_date = FND_API.G_MISS_DATE) THEN
1858 p_x_uf_details_tbl(i).end_date := null;
1859 END IF;
1863 IF (p_x_uf_details_tbl(i).attribute1 = FND_API.G_MISS_CHAR) THEN
1860 IF (p_x_uf_details_tbl(i).attribute_category = FND_API.G_MISS_CHAR) THEN
1861 p_x_uf_details_tbl(i).attribute_category := null;
1862 END IF;
1864 p_x_uf_details_tbl(i).attribute1 := null;
1865 END IF;
1866 IF (p_x_uf_details_tbl(i).attribute2 = FND_API.G_MISS_CHAR) THEN
1867 p_x_uf_details_tbl(i).attribute2 := null;
1868 END IF;
1869 IF (p_x_uf_details_tbl(i).attribute3 = FND_API.G_MISS_CHAR) THEN
1870 p_x_uf_details_tbl(i).attribute3 := null;
1871 END IF;
1872 IF (p_x_uf_details_tbl(i).attribute4 = FND_API.G_MISS_CHAR) THEN
1873 p_x_uf_details_tbl(i).attribute4 := null;
1874 END IF;
1875 IF (p_x_uf_details_tbl(i).attribute5 = FND_API.G_MISS_CHAR) THEN
1876 p_x_uf_details_tbl(i).attribute5 := null;
1877 END IF;
1878 IF (p_x_uf_details_tbl(i).attribute6 = FND_API.G_MISS_CHAR) THEN
1879 p_x_uf_details_tbl(i).attribute6 := null;
1880 END IF;
1881 IF (p_x_uf_details_tbl(i).attribute7 = FND_API.G_MISS_CHAR) THEN
1882 p_x_uf_details_tbl(i).attribute7 := null;
1883 END IF;
1884 IF (p_x_uf_details_tbl(i).attribute8 = FND_API.G_MISS_CHAR) THEN
1888 p_x_uf_details_tbl(i).attribute9 := null;
1885 p_x_uf_details_tbl(i).attribute8 := null;
1886 END IF;
1887 IF (p_x_uf_details_tbl(i).attribute9 = FND_API.G_MISS_CHAR) THEN
1889 END IF;
1890 IF (p_x_uf_details_tbl(i).attribute10 = FND_API.G_MISS_CHAR) THEN
1891 p_x_uf_details_tbl(i).attribute10 := null;
1892 END IF;
1893 IF (p_x_uf_details_tbl(i).attribute11 = FND_API.G_MISS_CHAR) THEN
1894 p_x_uf_details_tbl(i).attribute11 := null;
1895 END IF;
1896 IF (p_x_uf_details_tbl(i).attribute12 = FND_API.G_MISS_CHAR) THEN
1897 p_x_uf_details_tbl(i).attribute12 := null;
1898 END IF;
1899 IF (p_x_uf_details_tbl(i).attribute13 = FND_API.G_MISS_CHAR) THEN
1900 p_x_uf_details_tbl(i).attribute13 := null;
1901 END IF;
1902 IF (p_x_uf_details_tbl(i).attribute14 = FND_API.G_MISS_CHAR) THEN
1903 p_x_uf_details_tbl(i).attribute14 := null;
1904 END IF;
1905 IF (p_x_uf_details_tbl(i).attribute15 = FND_API.G_MISS_CHAR) THEN
1906 p_x_uf_details_tbl(i).attribute15 := null;
1907 END IF;
1908
1909 END IF;
1910 END LOOP;
1911
1912 END default_unchanged_uf_details;
1913 -------------------------------------------------------------------------------------
1914 -- This procedure deletes header if no forecast detials and use unit flag is also 'N'
1915 -------------------------------------------------------------------------------------
1916 PROCEDURE post_process_uf_header(
1917 p_uf_header_rec IN AHL_UMP_UF_PVT.uf_header_Rec_type
1918 ) IS
1919
1920 CURSOR uf_details_csr (p_uf_header_id IN NUMBER) IS
1921 SELECT 'x'
1922 FROM ahl_uf_details WHERE uf_header_id = p_uf_header_id;
1923
1924 l_exist VARCHAR2(1);
1925
1926
1927 BEGIN
1928 IF(p_uf_header_rec.use_unit_flag IS NULL OR p_uf_header_rec.use_unit_flag = G_UF_USE_UNIT_DEFAULT) THEN
1929 OPEN uf_details_csr (p_uf_header_rec.uf_header_id);
1930 FETCH uf_details_csr INTO l_exist;
1931 IF(uf_details_csr%NOTFOUND) THEN
1932 AHL_UF_HEADERS_PKG.delete_row(p_uf_header_rec.uf_header_id);
1933 END IF;
1934 CLOSE uf_details_csr;
1935 END IF;
1936 END post_process_uf_header;
1937
1938
1939
1940 ----------------------------------------------------------------------
1941 -- Procedure to get Utilzation Forecast from Product Classification --
1942 ----------------------------------------------------------------------
1943 -- added parameter p_add_unit_item_forecast to fix bug# 6749351.
1944 -- This flag is currently being applied to only item based forecasts.
1945 PROCEDURE get_uf_from_pc (
1946 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1947 p_pc_node_id IN NUMBER := NULL,
1948 p_inventory_item_id IN NUMBER := NULL,
1949 p_inventory_org_id IN NUMBER := NULL,
1950 p_unit_config_header_id IN NUMBER := NULL,
1951 p_unit_name IN VARCHAR2:=NULL,
1952 p_part_number IN VARCHAR2 :=NULL,
1953 p_onward_end_date IN DATE := NULL,
1954 p_add_unit_item_forecast IN VARCHAR2 := 'N',
1955 x_UF_details_tbl OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type,
1956 x_return_status OUT NOCOPY VARCHAR2)
1957 IS
1958 --
1959 CURSOR ahl_get_config_header_id_csr(c_unit_name IN VARCHAR2) IS
1960 SELECT unit_config_header_id
1961 FROM ahl_unit_config_headers
1962 WHERE name = c_unit_name;
1963 --
1964 CURSOR ahl_get_inv_item_id_csr(c_part_number IN mtl_system_items_kfv.concatenated_segments%TYPE) IS
1965 SELECT inventory_item_id
1966 FROM mtl_system_items_kfv
1967 WHERE concatenated_segments = c_part_number;
1968 --
1969 CURSOR ahl_pc_id_from_assoc_csr(c_unit_config_header_id IN NUMBER,
1970 c_type IN VARCHAR2,
1971 c_primary_flag IN VARCHAR2,
1972 c_complete_status IN VARCHAR2 ) IS
1973 SELECT a.pc_node_id
1974 FROM ahl_pc_associations a, ahl_pc_nodes_b b, ahl_pc_headers_b c
1975 WHERE a.unit_item_id = c_unit_config_header_id
1976 AND a.association_type_flag = c_type
1977 AND a.pc_node_id = b.pc_node_id
1978 AND b.pc_header_id = c.pc_header_id
1979 AND c.primary_flag = c_primary_flag
1980 AND c.status = c_complete_status;
1981 --
1982 CURSOR ahl_item_id_from_uc_header_csr(c_uc_header_id IN NUMBER) IS
1983 SELECT a.inventory_item_id
1984 FROM csi_item_instances a, ahl_unit_config_headers b
1985 WHERE a.instance_id = b.csi_item_instance_id
1986 AND b.unit_config_header_id = c_uc_header_id;
1987 --
1988 CURSOR ahl_check_pc_id_csr(p_pc_node_id IN NUMBER,
1989 c_primary_flag IN VARCHAR2,
1990 c_complete_status IN VARCHAR2 ) IS
1991 SELECT 'x'
1992 FROM ahl_pc_nodes_b a, ahl_pc_headers_b b
1993 WHERE a.pc_node_id = p_pc_node_id
1994 AND a.pc_header_id = b.pc_header_id
1995 AND b.primary_flag = c_primary_flag
1996 AND b.status = c_complete_status;
1997 --
1998 CURSOR ahl_trav_pc_nodes_csr (c_pc_id IN NUMBER) IS
1999 SELECT pc_node_id
2005 SELECT distinct a.uom_code
2000 FROM ahl_pc_nodes_b
2001 START WITH pc_node_id = c_pc_id
2002 CONNECT BY pc_node_id = PRIOR parent_node_id;
2003 --
2004 CURSOR ahl_uf_uom_nodes_csr (c_pc_id IN NUMBER) IS
2006 FROM ahl_uf_details a, ahl_uf_headers b
2007 WHERE a.uf_header_id = b.uf_header_id
2008 AND b.pc_node_id = c_pc_id
2009 -- JKJain, NR Analysis and Forecasting
2010 order by uom_code;
2011 --
2012 CURSOR ahl_uf_details_csr (c_pc_id IN NUMBER, p_uom_code IN VARCHAR2) IS
2013 SELECT a.UF_DETAIL_ID,
2014 a.OBJECT_VERSION_NUMBER,
2015 a.LAST_UPDATE_DATE ,
2016 a.LAST_UPDATED_BY ,
2017 a.CREATION_DATE ,
2018 a.CREATED_BY ,
2019 a.LAST_UPDATE_LOGIN ,
2020 a.UF_HEADER_ID ,
2021 a.UOM_CODE ,
2022 a.START_DATE ,
2023 a.END_DATE ,
2024 a.USAGE_PER_DAY ,
2025 a.ATTRIBUTE_CATEGORY ,
2026 a.ATTRIBUTE1 ,
2027 a.ATTRIBUTE2 ,
2028 a.ATTRIBUTE3 ,
2029 a.ATTRIBUTE4 ,
2030 a.ATTRIBUTE5 ,
2031 a.ATTRIBUTE6 ,
2032 a.ATTRIBUTE7 ,
2033 a.ATTRIBUTE8 ,
2034 a.ATTRIBUTE9 ,
2035 a.ATTRIBUTE10 ,
2036 a.ATTRIBUTE11 ,
2037 a.ATTRIBUTE12 ,
2038 a.ATTRIBUTE13 ,
2039 a.ATTRIBUTE14 ,
2040 a.ATTRIBUTE15
2041 FROM ahl_uf_details a, ahl_uf_headers b
2042 WHERE a.uom_code = p_uom_code
2043 AND b.pc_node_id = c_pc_id
2044 AND a.uf_header_id = b.uf_header_id;
2045 --
2046 CURSOR ahl_uf_details_date_csr (p_pc_id IN NUMBER, p_uom_code IN VARCHAR2,p_onward_end_date IN DATE) IS
2047 SELECT a.UF_DETAIL_ID,
2048 a.OBJECT_VERSION_NUMBER,
2049 a.LAST_UPDATE_DATE ,
2050 a.LAST_UPDATED_BY ,
2051 a.CREATION_DATE ,
2052 a.CREATED_BY ,
2053 a.LAST_UPDATE_LOGIN ,
2054 a.UF_HEADER_ID ,
2055 a.UOM_CODE ,
2056 a.START_DATE ,
2057 a.END_DATE ,
2058 a.USAGE_PER_DAY ,
2059 a.ATTRIBUTE_CATEGORY ,
2060 a.ATTRIBUTE1 ,
2061 a.ATTRIBUTE2 ,
2062 a.ATTRIBUTE3 ,
2063 a.ATTRIBUTE4 ,
2064 a.ATTRIBUTE5 ,
2065 a.ATTRIBUTE6 ,
2066 a.ATTRIBUTE7 ,
2067 a.ATTRIBUTE8 ,
2068 a.ATTRIBUTE9 ,
2069 a.ATTRIBUTE10 ,
2070 a.ATTRIBUTE11 ,
2071 a.ATTRIBUTE12 ,
2072 a.ATTRIBUTE13 ,
2073 a.ATTRIBUTE14 ,
2074 a.ATTRIBUTE15
2075 FROM ahl_uf_details a, ahl_uf_headers b
2076 WHERE (a.end_date IS NULL OR TRUNC(a.end_date) >= TRUNC(p_onward_end_date))
2077 AND a.uf_header_id = b.uf_header_id
2078 AND a.uom_code = p_uom_code
2079 AND b.pc_node_id = p_pc_id;
2080
2081 -- added to fix bug# 6749351
2082 CURSOR ahl_uf_uom_item_csr (p_inventory_item_id IN NUMBER) IS
2083 SELECT distinct a.uom_code
2084 FROM ahl_uf_details a, ahl_uf_headers b
2085 WHERE a.uf_header_id = b.uf_header_id
2086 AND b.inventory_item_id = p_inventory_item_id
2087 -- JKJain, NR Analysis and Forecasting
2088 order by uom_code;
2089
2090 -- get uf details for item for all dates.
2091 CURSOR ahl_uf_item_details_csr(p_inventory_item_id IN NUMBER,
2092 p_uom_code IN VARCHAR2) IS
2093 SELECT a.UF_DETAIL_ID,
2094 a.OBJECT_VERSION_NUMBER,
2095 a.LAST_UPDATE_DATE ,
2096 a.LAST_UPDATED_BY ,
2097 a.CREATION_DATE ,
2098 a.CREATED_BY ,
2099 a.LAST_UPDATE_LOGIN ,
2100 a.UF_HEADER_ID ,
2101 a.UOM_CODE ,
2102 a.START_DATE ,
2103 a.END_DATE ,
2104 a.USAGE_PER_DAY ,
2105 a.ATTRIBUTE_CATEGORY ,
2106 a.ATTRIBUTE1 ,
2107 a.ATTRIBUTE2 ,
2108 a.ATTRIBUTE3 ,
2109 a.ATTRIBUTE4 ,
2110 a.ATTRIBUTE5 ,
2111 a.ATTRIBUTE6 ,
2112 a.ATTRIBUTE7 ,
2113 a.ATTRIBUTE8 ,
2114 a.ATTRIBUTE9 ,
2115 a.ATTRIBUTE10 ,
2116 a.ATTRIBUTE11 ,
2117 a.ATTRIBUTE12 ,
2118 a.ATTRIBUTE13 ,
2119 a.ATTRIBUTE14 ,
2120 a.ATTRIBUTE15
2121 FROM ahl_uf_details a, ahl_uf_headers b
2122 WHERE a.uf_header_id = b.uf_header_id
2123 AND a.uom_code = p_uom_code
2124 AND b.inventory_item_id = p_inventory_item_id;
2125
2126 -- get uf details for item based on p_onward_end_date.
2127 CURSOR ahl_uf_item_details_date_csr(p_inventory_item_id IN NUMBER,
2128 p_uom_code IN VARCHAR2,
2129 p_onward_end_date IN DATE) IS
2130 SELECT a.UF_DETAIL_ID,
2131 a.OBJECT_VERSION_NUMBER,
2135 a.CREATED_BY ,
2132 a.LAST_UPDATE_DATE ,
2133 a.LAST_UPDATED_BY ,
2134 a.CREATION_DATE ,
2136 a.LAST_UPDATE_LOGIN ,
2137 a.UF_HEADER_ID ,
2138 a.UOM_CODE ,
2139 a.START_DATE ,
2140 a.END_DATE ,
2141 a.USAGE_PER_DAY ,
2142 a.ATTRIBUTE_CATEGORY ,
2143 a.ATTRIBUTE1 ,
2144 a.ATTRIBUTE2 ,
2145 a.ATTRIBUTE3 ,
2146 a.ATTRIBUTE4 ,
2147 a.ATTRIBUTE5 ,
2148 a.ATTRIBUTE6 ,
2149 a.ATTRIBUTE7 ,
2150 a.ATTRIBUTE8 ,
2151 a.ATTRIBUTE9 ,
2152 a.ATTRIBUTE10 ,
2153 a.ATTRIBUTE11 ,
2154 a.ATTRIBUTE12 ,
2155 a.ATTRIBUTE13 ,
2156 a.ATTRIBUTE14 ,
2157 a.ATTRIBUTE15
2158 FROM ahl_uf_details a, ahl_uf_headers b
2159 WHERE (a.end_date IS NULL OR TRUNC(a.end_date) >= TRUNC(p_onward_end_date))
2160 AND a.uf_header_id = b.uf_header_id
2161 AND a.uom_code = p_uom_code
2162 AND b.inventory_item_id = p_inventory_item_id;
2163
2164 -- added to fix bug# 6749351
2165 CURSOR ahl_uf_uom_unit_csr (p_unit_config_id IN NUMBER) IS
2166 SELECT distinct a.uom_code
2167 FROM ahl_uf_details a, ahl_uf_headers b
2168 WHERE a.uf_header_id = b.uf_header_id
2169 AND b.unit_config_header_id = p_unit_config_id
2170 order by uom_code;
2171
2172 -- get uf details for item for all dates.
2176 a.OBJECT_VERSION_NUMBER,
2173 CURSOR ahl_uf_unit_details_csr(p_unit_config_id IN NUMBER,
2174 p_uom_code IN VARCHAR2) IS
2175 SELECT a.UF_DETAIL_ID,
2177 a.LAST_UPDATE_DATE ,
2178 a.LAST_UPDATED_BY ,
2179 a.CREATION_DATE ,
2180 a.CREATED_BY ,
2181 a.LAST_UPDATE_LOGIN ,
2182 a.UF_HEADER_ID ,
2183 a.UOM_CODE ,
2184 a.START_DATE ,
2185 a.END_DATE ,
2186 a.USAGE_PER_DAY ,
2187 a.ATTRIBUTE_CATEGORY ,
2188 a.ATTRIBUTE1 ,
2189 a.ATTRIBUTE2 ,
2190 a.ATTRIBUTE3 ,
2191 a.ATTRIBUTE4 ,
2192 a.ATTRIBUTE5 ,
2193 a.ATTRIBUTE6 ,
2194 a.ATTRIBUTE7 ,
2195 a.ATTRIBUTE8 ,
2196 a.ATTRIBUTE9 ,
2197 a.ATTRIBUTE10 ,
2198 a.ATTRIBUTE11 ,
2199 a.ATTRIBUTE12 ,
2200 a.ATTRIBUTE13 ,
2201 a.ATTRIBUTE14 ,
2202 a.ATTRIBUTE15
2203 FROM ahl_uf_details a, ahl_uf_headers b
2204 WHERE a.uf_header_id = b.uf_header_id
2205 AND a.uom_code = p_uom_code
2206 AND b.unit_config_header_id = p_unit_config_id;
2207
2208 -- get uf details for item based on p_onward_end_date.
2209 CURSOR ahl_uf_unit_details_date_csr(p_unit_config_id IN NUMBER,
2210 p_uom_code IN VARCHAR2,
2211 p_onward_end_date IN DATE) IS
2212 SELECT a.UF_DETAIL_ID,
2213 a.OBJECT_VERSION_NUMBER,
2214 a.LAST_UPDATE_DATE ,
2215 a.LAST_UPDATED_BY ,
2216 a.CREATION_DATE ,
2217 a.CREATED_BY ,
2221 a.START_DATE ,
2218 a.LAST_UPDATE_LOGIN ,
2219 a.UF_HEADER_ID ,
2220 a.UOM_CODE ,
2222 a.END_DATE ,
2223 a.USAGE_PER_DAY ,
2224 a.ATTRIBUTE_CATEGORY ,
2225 a.ATTRIBUTE1 ,
2226 a.ATTRIBUTE2 ,
2227 a.ATTRIBUTE3 ,
2228 a.ATTRIBUTE4 ,
2229 a.ATTRIBUTE5 ,
2230 a.ATTRIBUTE6 ,
2231 a.ATTRIBUTE7 ,
2232 a.ATTRIBUTE8 ,
2233 a.ATTRIBUTE9 ,
2234 a.ATTRIBUTE10 ,
2235 a.ATTRIBUTE11 ,
2236 a.ATTRIBUTE12 ,
2237 a.ATTRIBUTE13 ,
2238 a.ATTRIBUTE14 ,
2239 a.ATTRIBUTE15
2240 FROM ahl_uf_details a, ahl_uf_headers b
2241 WHERE (a.end_date IS NULL OR TRUNC(a.end_date) >= TRUNC(p_onward_end_date))
2242 AND a.uf_header_id = b.uf_header_id
2243 AND a.uom_code = p_uom_code
2244 AND b.unit_config_header_id = p_unit_config_id;
2245 --
2246 l_UF_details_tbl AHL_UMP_UF_PVT.uf_details_tbl_type;
2247 l_UF_details_rec AHL_UMP_UF_PVT.uf_details_rec_type;
2248 l_temp_details_rec ahl_uf_details_csr%ROWTYPE;
2249 l_unit_config_header_id NUMBER DEFAULT p_unit_config_header_id;
2250 l_inventory_item_id NUMBER DEFAULT p_inventory_item_id;
2251 l_pc_node_id NUMBER DEFAULT p_PC_node_id;
2252 l_pc_id NUMBER;
2253 l_uom_code AHL_UF_DETAILS.UOM_CODE%TYPE;
2254 l_msg_count NUMBER;
2255 l_duplicate VARCHAR2(1);
2256 l_junk VARCHAR2(1);
2257 j NUMBER;
2258 --
2259 BEGIN
2260
2261 -- Initialize Procedure return status to success
2262 -- Initialize message list if p_init_msg_list is set to TRUE
2263 IF FND_API.To_Boolean( p_init_msg_list)
2264 THEN
2265 FND_MSG_PUB.Initialize;
2266 END IF;
2267
2268 -- Initialize API return status to success
2269 x_return_status := FND_API.G_RET_STS_SUCCESS; j := 0;
2270
2271 --Part 1. Resolve all possible inputs to l_pc_node_id
2272
2273 --Resolve unit name into unit config header id
2274 IF (p_unit_config_header_id IS NULL AND p_unit_name IS NOT NULL) THEN
2275 OPEN ahl_get_config_header_id_csr(p_unit_name);
2276 FETCH ahl_get_config_header_id_csr INTO l_unit_config_header_id;
2277 CLOSE ahl_get_config_header_id_csr;
2278 END IF;
2279
2280 --Resolve part number into inventory item id
2281 IF (p_inventory_item_id IS NULL AND p_part_number IS NOT NULL) THEN
2282 OPEN ahl_get_inv_item_id_csr(p_part_number);
2283 FETCH ahl_get_inv_item_id_csr INTO l_inventory_item_id;
2284 CLOSE ahl_get_inv_item_id_csr;
2285 END IF;
2286
2287 --Verify that exactly one of the IDs is defined.
2288 IF ((l_pc_node_id IS NULL AND
2289 l_inventory_item_id IS NULL AND
2290 l_unit_config_header_id IS NULL)
2291 OR (l_pc_node_id IS NOT NULL AND
2292 l_inventory_item_id IS NOT NULL)
2293 OR (l_pc_node_id IS NOT NULL AND
2294 l_unit_config_header_id IS NOT NULL)
2295 OR (l_unit_config_header_id IS NOT NULL AND
2296 l_inventory_item_id IS NOT NULL) ) THEN
2297 FND_MESSAGE.Set_Name('AHL','AHL_UMP_UTIL_ONLY_ONE_ID');
2298 FND_MSG_PUB.ADD;
2299 END IF;
2300
2301 l_msg_count := FND_MSG_PUB.count_msg;
2302 IF l_msg_count > 0 THEN
2303 x_return_status := FND_API.G_RET_STS_ERROR;
2304 RETURN;
2305 END IF;
2306
2307 --Now verify pc node id is in 'COMPLETE' and 'PRIMARY' PC tree
2308 IF (l_pc_node_id IS NOT NULL) THEN
2309 OPEN ahl_check_pc_id_csr(l_pc_node_id,
2310 AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG,
2311 AHL_UMP_UF_PVT.G_COMPLETE_STATUS);
2312 FETCH ahl_check_pc_id_csr INTO l_junk;
2313 IF (ahl_check_pc_id_csr%NOTFOUND) THEN
2314 l_pc_node_id := NULL;
2315 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_UTIL_NO_PRIM_PC');
2316 -- FND_MESSAGE.Set_Token('UID',l_pc_node_id);
2317 -- FND_MSG_PUB.ADD;
2318 END IF;
2319 CLOSE ahl_check_pc_id_csr;
2320 END IF;
2321
2322 --Resolve unit_config_header_id into a pc node id
2323 IF (l_unit_config_header_id IS NOT NULL) THEN
2324 OPEN ahl_pc_id_from_assoc_csr(l_unit_config_header_id,
2325 AHL_UMP_UF_PVT.G_PC_UNIT_ASSOCIATION,
2326 AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG,
2327 AHL_UMP_UF_PVT.G_COMPLETE_STATUS);
2328 FETCH ahl_pc_id_from_assoc_csr INTO l_pc_node_id;
2329 IF (ahl_pc_id_from_assoc_csr%NOTFOUND) THEN
2330 l_pc_node_id := NULL;
2331
2332 --If can not find PC as unit, then try it with item
2333 OPEN ahl_item_id_from_uc_header_csr(l_unit_config_header_id);
2334 FETCH ahl_item_id_from_uc_header_csr INTO l_inventory_item_id;
2335 CLOSE ahl_item_id_from_uc_header_csr;
2336
2337 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_UTIL_NO_PRIM_PC');
2338 -- FND_MESSAGE.Set_Token('UID',l_unit_config_header_id);
2339 -- FND_MSG_PUB.ADD;
2340 END IF;
2341 CLOSE ahl_pc_id_from_assoc_csr;
2342
2343 /*
2344 -- Added to fix bug# 6749351
2345 IF (p_add_unit_item_forecast = 'Y') THEN
2346 OPEN ahl_uf_uom_unit_csr(l_unit_config_header_id);
2347 LOOP
2348 FETCH ahl_uf_uom_unit_csr INTO l_uom_code;
2349 EXIT WHEN ahl_uf_uom_unit_csr%NOTFOUND;
2350 IF(p_onward_end_date IS NULL) THEN
2351 OPEN ahl_uf_unit_details_csr(l_unit_config_header_id, l_uom_code);
2352 LOOP
2353 FETCH ahl_uf_unit_details_csr INTO l_temp_details_rec;
2354 EXIT WHEN ahl_uf_unit_details_csr%NOTFOUND;
2355
2359 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2356 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2357 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2358 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2360 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2361 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2362 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2363 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2364 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2365 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2366 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2367 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2368 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2369 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2370 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2371 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2372 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2373 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2374 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2375 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2376 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2377 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2378 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2379 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2380 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2381 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2382 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2383 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2384 l_UF_details_tbl(j) := l_UF_details_rec;
2385 j := j+1;
2386 END LOOP;
2387 CLOSE ahl_uf_unit_details_csr;
2388 ELSE
2389 OPEN ahl_uf_unit_details_date_csr(l_unit_config_header_id, l_uom_code,p_onward_end_date);
2390 LOOP
2391 FETCH ahl_uf_unit_details_date_csr INTO l_temp_details_rec;
2392 EXIT WHEN ahl_uf_unit_details_date_csr%NOTFOUND;
2393
2394 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2395 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2396 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2397 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2398 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2399 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2400 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2401 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2402 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2403 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2404 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2405 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2406 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2407 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2408 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2409 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2410 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2411 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2412 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2413 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2414 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2415 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2416 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2417 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2418 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2419 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2420 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2421 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2422
2423 l_UF_details_tbl(j) := l_UF_details_rec;
2424 j := j+1;
2425 END LOOP;
2426 CLOSE ahl_uf_unit_details_date_csr;
2427 END IF; --p_onward_date
2428 END LOOP;
2429 CLOSE ahl_uf_uom_unit_csr;
2430 END IF; -- p_unit_item_forecast
2431 */
2432 END IF; -- l_unit_config header_id.
2433
2434 --Or resolve inventory item id into l_pc_node_id
2435 IF (l_inventory_item_id IS NOT NULL) THEN
2436 OPEN ahl_pc_id_from_assoc_csr(l_inventory_item_id,
2437 AHL_UMP_UF_PVT.G_PC_ITEM_ASSOCIATION,
2438 AHL_UMP_UF_PVT.G_PC_PRIMARY_FLAG,
2439 AHL_UMP_UF_PVT.G_COMPLETE_STATUS);
2440 FETCH ahl_pc_id_from_assoc_csr INTO l_pc_node_id;
2441 IF (ahl_pc_id_from_assoc_csr%NOTFOUND) THEN
2442 l_pc_node_id := NULL;
2443 -- FND_MESSAGE.Set_Name('AHL','AHL_UMP_UTIL_NO_PRIM_PC');
2444 -- FND_MESSAGE.Set_Token('UID',l_inventory_item_id);
2448
2445 -- FND_MSG_PUB.ADD;
2446 END IF;
2447 CLOSE ahl_pc_id_from_assoc_csr;
2449 -- Added to fix bug# 6749351
2450 IF (p_add_unit_item_forecast = 'Y') THEN
2451 OPEN ahl_uf_uom_item_csr(l_inventory_item_id);
2452 LOOP
2453 FETCH ahl_uf_uom_item_csr INTO l_uom_code;
2454 EXIT WHEN ahl_uf_uom_item_csr%NOTFOUND;
2455 IF(p_onward_end_date IS NULL) THEN
2456 OPEN ahl_uf_item_details_csr(l_inventory_item_id, l_uom_code);
2457 LOOP
2458 FETCH ahl_uf_item_details_csr INTO l_temp_details_rec;
2459 EXIT WHEN ahl_uf_item_details_csr%NOTFOUND;
2460
2461 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2462 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2463 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2464 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2465 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2466 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2467 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2468 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2469 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2470 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2471 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2472 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2473 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2474 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2475 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2476 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2477 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2478 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2479 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2480 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2481 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2482 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2483 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2484 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2485 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2486 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2487 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2488 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2489 l_UF_details_tbl(j) := l_UF_details_rec;
2490 j := j+1;
2491 END LOOP;
2492 CLOSE ahl_uf_item_details_csr;
2493 ELSE
2494 OPEN ahl_uf_item_details_date_csr(l_inventory_item_id, l_uom_code,p_onward_end_date);
2495 LOOP
2496 FETCH ahl_uf_item_details_date_csr INTO l_temp_details_rec;
2497 EXIT WHEN ahl_uf_item_details_date_csr%NOTFOUND;
2498
2499 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2503 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2500 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2501 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2502 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2504 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2505 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2506 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2507 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2508 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2509 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2510 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2511 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2512 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2513 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2514 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2515 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2516 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2517 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2518 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2519 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2520 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2521 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2522 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2523 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2524 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2525 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2526 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2527
2528 l_UF_details_tbl(j) := l_UF_details_rec;
2529 j := j+1;
2530 END LOOP;
2531 CLOSE ahl_uf_item_details_date_csr;
2532 END IF; --p_onward_date
2533 END LOOP;
2534 CLOSE ahl_uf_uom_item_csr;
2535 END IF; -- p_unit_item_forecast
2536 END IF; -- l_inventory_item_id
2537
2538 --Return if the l_pc_node_id is NULL
2539 IF (l_pc_node_id IS NULL) THEN
2540 x_UF_details_tbl := l_UF_details_tbl;
2541 RETURN;
2542 END IF;
2543
2544 --Part 2. With l_pc_node_id, build forecast data.
2545 --Now traverse up the pc tree.
2546 OPEN ahl_trav_pc_nodes_csr(l_pc_node_id);
2547 LOOP
2548 FETCH ahl_trav_pc_nodes_csr INTO l_pc_id;
2549 EXIT WHEN ahl_trav_pc_nodes_csr%NOTFOUND;
2550 --Now fetch all unique UOM_code for given pc
2551 OPEN ahl_uf_uom_nodes_csr(l_pc_id);
2552 LOOP
2553 FETCH ahl_uf_uom_nodes_csr INTO l_uom_code;
2554 EXIT WHEN ahl_uf_uom_nodes_csr%NOTFOUND;
2555
2556 l_duplicate := 'N';
2557 IF (l_UF_details_tbl.COUNT > 0) THEN
2558 FOR i IN l_UF_details_tbl.FIRST..l_UF_details_tbl.LAST LOOP
2559 IF (l_UF_details_tbl(i).uom_code = l_uom_code) THEN
2560 l_duplicate := 'Y';
2561 EXIT;
2562 END IF;
2563 END LOOP;
2564 END IF;
2565
2566 -- If no duplicates are found for given uom, add to table all dates
2567 IF (l_duplicate = 'N') THEN
2568 IF(p_onward_end_date IS NULL) THEN
2569 OPEN ahl_uf_details_csr(l_pc_id, l_uom_code);
2570 LOOP
2571 FETCH ahl_uf_details_csr INTO l_temp_details_rec;
2572 EXIT WHEN ahl_uf_details_csr%NOTFOUND;
2573
2574 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2575 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2576 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2577 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2578 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2579 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2580 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2581 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2582 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2583 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2584 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2585 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2586 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2587 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2588 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2589 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2590 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2591 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2592 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2593 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2594 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2595 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2596 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2597 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2598 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2602 l_UF_details_tbl(j) := l_UF_details_rec;
2599 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2600 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2601 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2603 j := j+1;
2604 END LOOP;
2605 CLOSE ahl_uf_details_csr;
2606 ELSE
2607 OPEN ahl_uf_details_date_csr(l_pc_id, l_uom_code, p_onward_end_date);
2608 LOOP
2609 FETCH ahl_uf_details_date_csr INTO l_temp_details_rec;
2610 EXIT WHEN ahl_uf_details_date_csr%NOTFOUND;
2611
2612 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2613 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2614 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2615 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2616 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2617 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2618 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2619 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2620 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2621 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2622 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2623 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2624 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2625 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2626 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2627 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2628 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2629 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2630 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2631 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2632 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2633 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2634 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2635 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2636 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2637 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2638 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2639 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2640 l_UF_details_tbl(j) := l_UF_details_rec;
2641 j := j+1;
2642 END LOOP;
2643 CLOSE ahl_uf_details_date_csr;
2644 END IF;
2645 END IF;
2646
2647 END LOOP;
2648 CLOSE ahl_uf_uom_nodes_csr;
2649
2650
2651 END LOOP;
2652 CLOSE ahl_trav_pc_nodes_csr;
2653
2654 x_UF_details_tbl := l_UF_details_tbl;
2655
2656 END get_uf_from_pc;
2657
2658 PROCEDURE get_uf_from_part (
2659
2660 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
2661 p_csi_item_instance_id IN NUMBER,
2662 p_onward_end_date IN DATE := NULL,
2663 x_UF_details_tbl OUT NOCOPY AHL_UMP_UF_PVT.uf_details_tbl_type,
2664 x_return_status OUT NOCOPY VARCHAR2)
2665 IS
2666
2667 --
2668 CURSOR ahl_uf_details_csr (p_csi_item_instance_id IN NUMBER) IS
2669 SELECT a.UF_DETAIL_ID,
2670 a.OBJECT_VERSION_NUMBER,
2671 a.LAST_UPDATE_DATE ,
2672 a.LAST_UPDATED_BY ,
2673 a.CREATION_DATE ,
2674 a.CREATED_BY ,
2675 a.LAST_UPDATE_LOGIN ,
2676 a.UF_HEADER_ID ,
2677 a.UOM_CODE ,
2678 a.START_DATE ,
2679 a.END_DATE ,
2680 a.USAGE_PER_DAY ,
2681 a.ATTRIBUTE_CATEGORY ,
2682 a.ATTRIBUTE1 ,
2683 a.ATTRIBUTE2 ,
2684 a.ATTRIBUTE3 ,
2685 a.ATTRIBUTE4 ,
2686 a.ATTRIBUTE5 ,
2687 a.ATTRIBUTE6 ,
2688 a.ATTRIBUTE7 ,
2689 a.ATTRIBUTE8 ,
2690 a.ATTRIBUTE9 ,
2691 a.ATTRIBUTE10 ,
2692 a.ATTRIBUTE11 ,
2693 a.ATTRIBUTE12 ,
2694 a.ATTRIBUTE13 ,
2695 a.ATTRIBUTE14 ,
2696 a.ATTRIBUTE15
2697 FROM ahl_uf_details a, ahl_uf_headers b,csi_item_instances c
2698 WHERE a.uf_header_id = b.uf_header_id
2699 AND b.inventory_item_id = c.inventory_item_id
2700 AND c.instance_id = p_csi_item_instance_id;
2701
2702 CURSOR ahl_uf_details_date_csr (p_csi_item_instance_id IN NUMBER, p_onward_end_date IN DATE) IS
2703 SELECT a.UF_DETAIL_ID,
2704 a.OBJECT_VERSION_NUMBER,
2705 a.LAST_UPDATE_DATE ,
2706 a.LAST_UPDATED_BY ,
2707 a.CREATION_DATE ,
2708 a.CREATED_BY ,
2709 a.LAST_UPDATE_LOGIN ,
2710 a.UF_HEADER_ID ,
2711 a.UOM_CODE ,
2712 a.START_DATE ,
2713 a.END_DATE ,
2714 a.USAGE_PER_DAY ,
2715 a.ATTRIBUTE_CATEGORY ,
2716 a.ATTRIBUTE1 ,
2717 a.ATTRIBUTE2 ,
2718 a.ATTRIBUTE3 ,
2719 a.ATTRIBUTE4 ,
2720 a.ATTRIBUTE5 ,
2721 a.ATTRIBUTE6 ,
2722 a.ATTRIBUTE7 ,
2723 a.ATTRIBUTE8 ,
2727 a.ATTRIBUTE12 ,
2724 a.ATTRIBUTE9 ,
2725 a.ATTRIBUTE10 ,
2726 a.ATTRIBUTE11 ,
2728 a.ATTRIBUTE13 ,
2729 a.ATTRIBUTE14 ,
2730 a.ATTRIBUTE15
2731 FROM ahl_uf_details a, ahl_uf_headers b,csi_item_instances c
2732 WHERE (a.end_date IS NULL OR TRUNC(a.end_date) >= TRUNC(p_onward_end_date))
2733 AND a.uf_header_id = b.uf_header_id
2734 AND b.inventory_item_id = c.inventory_item_id
2735 AND c.instance_id = p_csi_item_instance_id;
2736
2737
2738 l_UF_details_tbl AHL_UMP_UF_PVT.uf_details_tbl_type;
2739 l_UF_details_rec AHL_UMP_UF_PVT.uf_details_rec_type;
2740 l_temp_details_rec ahl_uf_details_csr%ROWTYPE;
2741 j NUMBER;
2742
2743
2744 BEGIN
2745
2746 IF FND_API.To_Boolean( p_init_msg_list)
2747 THEN
2748 FND_MSG_PUB.Initialize;
2749 END IF;
2750
2751 -- Initialize API return status to success
2752 x_return_status := FND_API.G_RET_STS_SUCCESS;
2753 j := 0;
2754 IF(p_onward_end_date IS NULL) THEN
2755 OPEN ahl_uf_details_csr(p_csi_item_instance_id);
2756 LOOP
2757 FETCH ahl_uf_details_csr INTO l_temp_details_rec;
2758 EXIT WHEN ahl_uf_details_csr%NOTFOUND;
2759
2760 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2761 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2762 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2763 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2764 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2765 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2766 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2767 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2768 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2769 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2770 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2771 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2772 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2773 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2774 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2775 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2776 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2777 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2778 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2779 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2780 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2781 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2782 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2783 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2784 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2785 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2786 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2787 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2788 l_UF_details_tbl(j) := l_UF_details_rec;
2789 j := j+1;
2790 END LOOP;
2791 CLOSE ahl_uf_details_csr;
2792 ELSE
2793 OPEN ahl_uf_details_date_csr(p_csi_item_instance_id, p_onward_end_date);
2794 LOOP
2795 FETCH ahl_uf_details_date_csr INTO l_temp_details_rec;
2796 EXIT WHEN ahl_uf_details_date_csr%NOTFOUND;
2797
2798 l_UF_details_rec.UF_DETAIL_ID := l_temp_details_rec.UF_DETAIL_ID;
2799 l_UF_details_rec.OBJECT_VERSION_NUMBER := l_temp_details_rec.OBJECT_VERSION_NUMBER ;
2800 l_UF_details_rec.LAST_UPDATE_DATE := l_temp_details_rec.LAST_UPDATE_DATE ;
2801 l_UF_details_rec.LAST_UPDATED_BY := l_temp_details_rec.LAST_UPDATED_BY ;
2802 l_UF_details_rec.CREATION_DATE := l_temp_details_rec.CREATION_DATE ;
2803 l_UF_details_rec.CREATED_BY := l_temp_details_rec.CREATED_BY ;
2804 l_UF_details_rec.LAST_UPDATE_LOGIN := l_temp_details_rec.LAST_UPDATE_LOGIN ;
2805 l_UF_details_rec.UF_HEADER_ID := l_temp_details_rec.UF_HEADER_ID ;
2806 l_UF_details_rec.UOM_CODE := l_temp_details_rec.UOM_CODE ;
2807 l_UF_details_rec.START_DATE := l_temp_details_rec.START_DATE ;
2808 l_UF_details_rec.END_DATE := l_temp_details_rec.END_DATE ;
2809 l_UF_details_rec.USAGE_PER_DAY := l_temp_details_rec.USAGE_PER_DAY ;
2810 l_UF_details_rec.ATTRIBUTE_CATEGORY := l_temp_details_rec.ATTRIBUTE_CATEGORY ;
2811 l_UF_details_rec.ATTRIBUTE1 := l_temp_details_rec.ATTRIBUTE1 ;
2812 l_UF_details_rec.ATTRIBUTE2 := l_temp_details_rec.ATTRIBUTE2 ;
2813 l_UF_details_rec.ATTRIBUTE3 := l_temp_details_rec.ATTRIBUTE3 ;
2814 l_UF_details_rec.ATTRIBUTE4 := l_temp_details_rec.ATTRIBUTE4 ;
2815 l_UF_details_rec.ATTRIBUTE5 := l_temp_details_rec.ATTRIBUTE5 ;
2816 l_UF_details_rec.ATTRIBUTE6 := l_temp_details_rec.ATTRIBUTE6 ;
2817 l_UF_details_rec.ATTRIBUTE7 := l_temp_details_rec.ATTRIBUTE7 ;
2818 l_UF_details_rec.ATTRIBUTE8 := l_temp_details_rec.ATTRIBUTE8 ;
2819 l_UF_details_rec.ATTRIBUTE9 := l_temp_details_rec.ATTRIBUTE9 ;
2820 l_UF_details_rec.ATTRIBUTE10 := l_temp_details_rec.ATTRIBUTE10 ;
2821 l_UF_details_rec.ATTRIBUTE11 := l_temp_details_rec.ATTRIBUTE11 ;
2822 l_UF_details_rec.ATTRIBUTE12 := l_temp_details_rec.ATTRIBUTE12 ;
2823 l_UF_details_rec.ATTRIBUTE13 := l_temp_details_rec.ATTRIBUTE13 ;
2824 l_UF_details_rec.ATTRIBUTE14 := l_temp_details_rec.ATTRIBUTE14 ;
2825 l_UF_details_rec.ATTRIBUTE15 := l_temp_details_rec.ATTRIBUTE15 ;
2829 CLOSE ahl_uf_details_date_csr;
2826 l_UF_details_tbl(j) := l_UF_details_rec;
2827 j := j+1;
2828 END LOOP;
2830 END IF;
2831
2832 x_UF_details_tbl := l_UF_details_tbl;
2833
2834
2835 END get_uf_from_part;
2836 -----------------------------------
2837 END AHL_UMP_UF_PVT;