4 -- Common constants and variables --
1 PACKAGE BODY AHL_RSV_RESERVATIONS_PVT AS
2 /* $Header: AHLVRSVB.pls 120.17.12020000.2 2012/12/07 14:05:10 sareepar ship $ */
3 ------------------------------------
5 ------------------------------------
6 l_log_current_level NUMBER := fnd_log.g_current_runtime_level;
7 l_log_statement NUMBER := fnd_log.level_statement;
8 l_log_procedure NUMBER := fnd_log.level_procedure;
9 l_log_error NUMBER := fnd_log.level_error;
10 l_log_unexpected NUMBER := fnd_log.level_unexpected;
11
12 -- Helper procedure added by skpathak on 12-NOV-2008 for bug 7241925
13 -- Gets the reservation (if any) that matches the scheduled_material_id+serial_number
14 -- If p_match_serial is 'Y', also checks if the serial is already included in the reservation
15 PROCEDURE GET_MATCHING_RESERVATION(p_scheduled_material_id IN NUMBER,
16 p_serial_number IN VARCHAR2,
17 p_match_serial IN VARCHAR2 DEFAULT 'N',
18 x_reservation_id OUT NOCOPY NUMBER,
19 x_reservation_quantity OUT NOCOPY NUMBER);
20
21
22 PROCEDURE INITIALIZE_CREATE_REC(
23 p_schedule_material_id IN NUMBER,
24 p_serial_number IN VARCHAR2,
25 x_rsv_rec OUT NOCOPY inv_reservation_global.mtl_reservation_rec_type,
26 x_return_status OUT NOCOPY VARCHAR2
27 );
28
29 ------------------------------------------------------------------------------------------------------------------
30 -- Start of Comments --
31 -- Procedure name : CREATE_RESERVATION
32 -- Type : Private
33 -- Function : Reserves the serial numbers in the p_serial_number_tbl
34 -- Pre-reqs :
35 -- Standard IN Parameters :
39 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
36 -- p_api_version IN NUMBER Required
37 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
38 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
40 -- p_module_type IN VARCHAR2 Default NULL
41 -- Standard OUT Parameters :
42 -- x_return_status OUT VARCHAR2 Required
43 -- x_msg_count OUT NUMBER Required
44 -- x_msg_data OUT VARCHAR2 Required
45
46 --
47 -- CREATE_RESERVATION Parameters:
48 -- p_scheduled_material_id : The Schedule Material Id
49 -- p_serial_number_tbl : The table of Serial Numbers to be reserved
50 -- End of Comments.
51 ------------------------------------------------------------------------------------------------------------------
52 PROCEDURE CREATE_RESERVATION(
53 p_api_version IN NUMBER,
54 p_init_msg_list IN VARCHAR2,
55 p_commit IN VARCHAR2,
56 p_validation_level IN NUMBER,
57 p_module_type IN VARCHAR2,
58 x_return_status OUT NOCOPY VARCHAR2,
59 x_msg_count OUT NOCOPY NUMBER,
60 x_msg_data OUT NOCOPY VARCHAR2,
61 p_scheduled_material_id IN NUMBER,
62 p_serial_number_tbl IN serial_number_tbl_type
63 )
64 IS
65 -- Declare local variables
66 l_api_name CONSTANT VARCHAR2(30) := 'create_reservation';
67 l_api_version CONSTANT NUMBER := 1.0;
68 l_init_msg_list VARCHAR2(1) := 'F';
69 l_return_status VARCHAR2(1);
70 l_msg_count NUMBER;
71 l_msg_data VARCHAR2(2000);
72 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
73
74 l_sn_number NUMBER := 0; -- Number of serial numbers to be reserved
75
76
77 CURSOR get_mtl_req_dtls_csr (c_scheduled_material_id IN NUMBER) IS
78 SELECT asmt.organization_id, asmt.requested_date, asmt.uom,
79 nvl(asmt.requested_quantity,0) requested_quantity, asmt.inventory_item_id,
80 asmt.object_version_number, nvl(asmt.reserved_quantity,0) reserved_quantity,
81 nvl(asmt.completed_quantity,0) completed_quantity
82 FROM ahl_material_requirements_v asmt
83 WHERE asmt.schedule_material_id = c_scheduled_material_id;
84
85 l_mtl_req_dtls_rec get_mtl_req_dtls_csr%ROWTYPE;
86
87 l_create_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
88 l_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
89
90 -- To fetch the instance details when you have the inventory item id, serial number and the organization id
91 -- inventory item id is from the Ahl Schedule Materials table
92 -- organization id from the Ahl Schedule Materials table
93 CURSOR get_instance_dtls_csr (c_inventory_itme_id IN NUMBER,
94 c_serial_number IN VARCHAR2,
95 c_organization_id IN NUMBER)
96 IS
97 SELECT csi.instance_id,
98 msn.serial_number,
99 csi.inv_subinventory_name subinventory_code
100 FROM csi_item_instances csi,
101 mtl_serial_numbers msn
102 WHERE trunc(sysdate) >= trunc(nvl(CSI.active_start_date,sysdate))
103 AND trunc(sysdate) < trunc(nvl(CSI.active_end_date,sysdate+1))
104 AND msn.current_status = 3 -- inventory
105 AND msn.reservation_id is null
106 AND (msn.group_mark_id is null or msn.group_mark_id = -1)
107 AND csi.inventory_item_id = c_inventory_itme_id
108 AND csi.serial_number = c_serial_number
109 AND csi.last_vld_organization_id = c_organization_id
110 AND csi.inventory_item_id = msn.inventory_item_id
111 AND csi.serial_number = msn.serial_number;
112
113 l_instance_details_rec get_instance_dtls_csr%ROWTYPE;
114
115 -- Cursor get_reservation_csr removed by skpathak on 12-NOV-2008 for bug 7241925
116 -- in favor of call to the new helper procedure GET_MATCHING_RESERVATION
117 /**
118 CURSOR get_reservation_csr (c_scheduled_material_id IN NUMBER, c_subinventory_code IN VARCHAR2)
119 IS
120 SELECT mrsv.reservation_id, mrsv.primary_reservation_quantity
121 FROM mtl_reservations mrsv,ahl_schedule_materials asmt
122 WHERE mrsv.demand_source_line_detail = c_scheduled_material_id
123 AND external_source_code = 'AHL'
124 AND subinventory_code = c_subinventory_code
125 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
126 AND mrsv.organization_id = asmt.organization_id
127 AND mrsv.requirement_date = asmt.requested_date
128 AND mrsv.inventory_item_id = asmt.inventory_item_id;
129 **/
130
131 l_reservation_id NUMBER;
132 l_reserved_quantity NUMBER;
133
134
135 l_x_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
136 l_x_quantity_reserved NUMBER;
137 l_x_reservation_id NUMBER;
138
139 -- for updating the reservations
140 l_from_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
141 l_to_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
142 l_to_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
143
144 BEGIN
145 -- Standard start of API savepoint
146 SAVEPOINT CREATE_RESERVATION_PVT;
147 -- Initialize return status to success before any code logic/validation
148 x_return_status:= FND_API.G_RET_STS_SUCCESS;
149
150
151 -- Standard call to check for call compatibility
155 END IF;
152 IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
153 THEN
154 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
156
157
158 -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
159 IF FND_API.TO_BOOLEAN(p_init_msg_list)
160 THEN
161 FND_MSG_PUB.INITIALIZE;
162 END IF;
163
164 -- Log API entry point
165 IF (l_log_procedure >= l_log_current_level) THEN
166 fnd_log.string
167 (
168 fnd_log.level_procedure,
169 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
170 'At the start of PL SQL procedure '
171 );
172 END IF;
173
174
175 -- Validate to make sure that the Serial Number table is not empty
176 l_sn_number := p_serial_number_tbl.COUNT;
177 IF l_sn_number = 0 THEN
178 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_SNQTY_GTR_ZRO' );
179 FND_MSG_PUB.add;
180 -- log the error
181 IF (l_log_error >= l_log_current_level) THEN
182 fnd_log.string
183 (
184 fnd_log.level_error,
185 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
186 'Number of Serial Numbers to be reserved equal to ZERO'
187 );
188 END IF;
189 RAISE FND_API.G_EXC_ERROR;
190 END IF; -- l_sn_number = 0
191
192 -- Get the Material Requirements details
193 OPEN get_mtl_req_dtls_csr(p_scheduled_material_id);
194 FETCH get_mtl_req_dtls_csr INTO l_mtl_req_dtls_rec;
195 IF get_mtl_req_dtls_csr%NOTFOUND THEN
196 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_MAT_REQ' );
197 FND_MSG_PUB.add;
198 -- log the error
199 IF (l_log_error >= l_log_current_level) THEN
200 fnd_log.string
201 (
202 fnd_log.level_error,
203 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
204 'get_mtl_req_dtls_csr, did not fetch any records'
205 );
206 END IF;
207 CLOSE get_mtl_req_dtls_csr;
208 RAISE FND_API.G_EXC_ERROR;
209 END IF; -- Material Requirement details not found
210 CLOSE get_mtl_req_dtls_csr;
211
212
213 -- Validate whether the sum of serial numbers to reserve + already issued + reserved quantities
214 -- is not more than the initially requested quantity
215 IF l_sn_number + l_mtl_req_dtls_rec.completed_quantity +
216 l_mtl_req_dtls_rec.reserved_quantity > l_mtl_req_dtls_rec.requested_quantity THEN
217 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_QTY_EXCDS_REQSTD' );
218 FND_MSG_PUB.add;
219 -- log the error
220 IF (l_log_error >= l_log_current_level) THEN
221 fnd_log.string
222 (
223 fnd_log.level_error,
224 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
225 'Number of serial numbers + Completed Qty + Reserved Qty is more than Requested Qty '
226 );
227 END IF;
228 RAISE FND_API.G_EXC_ERROR;
229 END IF; -- sum of number of serial nos to be reserved ,completed qty and reserved qty is more than requested qty
230
231 -- For all the serial numbers that need to be reserved
232 FOR i IN p_serial_number_tbl.FIRST..p_serial_number_tbl.LAST
233 LOOP
234 -- Initialize the record to be send to the WMS package
235 Initialize_create_rec( p_scheduled_material_id, -- the schedule material id
236 p_serial_number_tbl(i).serial_number, -- the serial number
237 l_create_rsv_rec, -- record to be passed ti the WMS packages
238 l_return_status); -- return status
239 -- get the instance id,serial number and the subinventory code
240 OPEN get_instance_dtls_csr( l_mtl_req_dtls_rec.inventory_item_id,
241 p_serial_number_tbl(i).serial_number,
242 l_mtl_req_dtls_rec.organization_id);
243 FETCH get_instance_dtls_csr INTO l_instance_details_rec;
244 IF get_instance_dtls_csr%NOTFOUND THEN
245 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_SL_NUM' );
246 FND_MESSAGE.Set_Token('SERIALNUMBER',p_serial_number_tbl(i).serial_number);
247 FND_MSG_PUB.add;
248 -- log the error
249 IF (l_log_error >= l_log_current_level) THEN
250 fnd_log.string
251 (
252 fnd_log.level_error,
253 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
254 'get_instance_dtls_csr, did not fetch any records'
255 );
256 END IF;
257 CLOSE get_instance_dtls_csr;
258 RAISE FND_API.G_EXC_ERROR;
259 END IF; -- get_instance_dtls_csr%NOTFOUND
260 CLOSE get_instance_dtls_csr;
261
262 l_reservation_id := null;
263 l_reserved_quantity := null;
264
265 -- Get the reservation id and the quantity already reserved
266 -- Changed by skpathak on 12-NOV-2008 for bug 7241925
267 -- Can update a reservation to add one more serial only if all of these match:
268 -- Org, Item, Subinventory, Locator, Revision, Lot and LPN
269 /**
270 OPEN get_reservation_csr(p_scheduled_material_id,l_instance_details_rec.subinventory_code) ;
271 FETCH get_reservation_csr INTO l_reservation_id,l_x_quantity_reserved;
272 CLOSE get_reservation_csr;
273 **/
274 GET_MATCHING_RESERVATION(p_scheduled_material_id => p_scheduled_material_id,
275 p_serial_number => p_serial_number_tbl(i).serial_number,
276 p_match_serial => 'N',
280 IF (l_log_statement >= l_log_current_level) THEN
277 x_reservation_id => l_reservation_id,
278 x_reservation_quantity => l_x_quantity_reserved);
279
281 fnd_log.string(fnd_log.level_statement, l_debug_module,
282 'GET_MATCHING_RESERVATION returned l_reservation_id = ' || l_reservation_id ||
283 ', l_x_quantity_reserved = ' || l_x_quantity_reserved);
284 END IF;
285 -- End Changes by skpathak on 12-NOV-2008 for bug 7241925
286
287 -- Call WMS API to create reservation if none has been created for this material requirement
288 -- in a particular subinventory, otherwise
289 -- update the current reservation by adding more serial number.
290
291 IF l_reservation_id IS NULL THEN
292 -- populate p_rsv_rec
293 l_create_rsv_rec.primary_reservation_quantity := 1;
294 l_create_rsv_rec.subinventory_code := l_instance_details_rec.subinventory_code;
295 l_serial_number_tbl(1).serial_number := p_serial_number_tbl(i).serial_number;
296 -- Added by jaramana on June 29, 2005
297 l_serial_number_tbl(1).inventory_item_id := l_mtl_req_dtls_rec.inventory_item_id;
298
299 IF (l_log_statement >= l_log_current_level) THEN
300 fnd_log.string
301 (
302 fnd_log.level_statement,
303 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
304 'Calling WMS api:inv_reservation_pub.create_reservation'
305 );
306 END IF;
307
308 inv_reservation_pub.create_reservation
309 (
310 p_api_version_number => l_api_version,
311 p_init_msg_lst => l_init_msg_list,
312 x_return_status => l_return_status,
313 x_msg_count => l_msg_count,
314 x_msg_data => l_msg_data,
315 p_rsv_rec => l_create_rsv_rec,
316 p_serial_number => l_serial_number_tbl,
317 x_serial_number => l_x_serial_number_tbl,
318 x_quantity_reserved => l_x_quantity_reserved,
319 x_reservation_id => l_x_reservation_id
320 );
321 ELSE -- l_reservation_id IS NOT NULL
322 -- populate p_original_rsv_rec
323 l_from_rsv_rec.reservation_id := l_reservation_id;
324 -- populate p_rsv_rec
325 l_to_rsv_rec.reservation_id := l_reservation_id;
326 l_to_rsv_rec.primary_reservation_quantity := l_x_quantity_reserved +1;
327 l_to_serial_number_tbl(1).serial_number := p_serial_number_tbl(i).serial_number;
328 l_to_serial_number_tbl(1).inventory_item_id := l_mtl_req_dtls_rec.inventory_item_id;
329
330 -- initialize the table
331 l_serial_number_tbl.DELETE;
332
333 IF (l_log_statement >= l_log_current_level) THEN
334 fnd_log.string
335 (
336 fnd_log.level_statement,
337 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
338 'Calling WMS api:inv_reservation_pub.update_reservation'
339 );
340 END IF;
341 inv_reservation_pub.update_reservation
342 (
343 p_api_version_number => l_api_version,
344 p_init_msg_lst => l_init_msg_list,
345 x_return_status => l_return_status,
346 x_msg_count => l_msg_count,
347 x_msg_data => l_msg_data,
348 p_original_rsv_rec => l_from_rsv_rec,
349 p_to_rsv_rec => l_to_rsv_rec,
350 p_original_serial_number => l_serial_number_tbl,
351 p_to_serial_number => l_to_serial_number_tbl
352 );
353 END IF; -- IF l_reservation_id IS NULL
354
355 -- Check the error status
356 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
357 -- log the error
358 IF (l_log_error >= l_log_current_level) THEN
359 fnd_log.string
360 (
361 fnd_log.level_error,
362 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
363 'Call to WMS returned Unexpected Error'
364 );
365 END IF;
366 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
367 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
368 -- log the error
369 IF (l_log_error >= l_log_current_level) THEN
370 fnd_log.string
371 (
372 fnd_log.level_error,
373 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
374 'Call to WMS returned Expected Error'
375 );
376 END IF;
377 RAISE FND_API.G_EXC_ERROR;
378 END IF;
379 END LOOP; -- FOR i IN p_serial_number_tbl.FIRST..p_serial_number_tbl.LAST
380
381 -- Check Error Message stack.
382 x_msg_count := FND_MSG_PUB.count_msg;
383 IF x_msg_count > 0
384 THEN
385 -- log the error
386 IF (l_log_error >= l_log_current_level) THEN
387 fnd_log.string
388 (
389 fnd_log.level_error,
390 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
391 'Call to WMS returned Errors in x_msg_count'
392 );
393 END IF;
394 RAISE FND_API.G_EXC_ERROR;
395 END IF;
396
397 -- Commit if p_commit = FND_API.G_TRUE
398 IF FND_API.TO_BOOLEAN(p_commit)
399 THEN
400 COMMIT WORK;
401 IF (l_log_statement >= l_log_current_level) THEN
402 fnd_log.string
403 (
404 fnd_log.level_statement,
405 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
409 END IF;
406 'Committed'
407 );
408 END IF;
410
411 -- Standard call to get message count and if count is 1, get message info
412 FND_MSG_PUB.count_and_get
413 (
414 p_count => x_msg_count,
415 p_data => x_msg_data,
416 p_encoded => FND_API.G_FALSE
417 );
418
419 -- Log API exit point
420 IF (l_log_procedure >= l_log_current_level)THEN
421 fnd_log.string
422 (
423 fnd_log.level_procedure,
424 l_debug_module||'.end',
425 'At the end of PLSQL procedure'
426 );
427 END IF;
428
429 EXCEPTION
430 WHEN FND_API.G_EXC_ERROR THEN
431 ROLLBACK TO CREATE_RESERVATION_PVT;
432 x_return_status := FND_API.G_RET_STS_ERROR;
433 FND_MSG_PUB.count_and_get
434 (
435 p_count => x_msg_count,
436 p_data => x_msg_data,
437 p_encoded => FND_API.G_FALSE
438 );
439
440 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
441 ROLLBACK TO CREATE_RESERVATION_PVT;
442 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
443 FND_MSG_PUB.count_and_get
444 (
445 p_count => x_msg_count,
446 p_data => x_msg_data,
447 p_encoded => FND_API.G_FALSE
448 );
449
450 WHEN OTHERS THEN
451 ROLLBACK TO CREATE_RESERVATION_PVT;
452 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
453 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
454 THEN
455 FND_MSG_PUB.add_exc_msg
456 (
457 p_pkg_name => G_PKG_NAME,
458 p_procedure_name => 'create_reservation',
459 p_error_text => SUBSTR(SQLERRM,1,240)
460 );
461 END IF;
462 FND_MSG_PUB.count_and_get
463 (
464 p_count => x_msg_count,
465 p_data => x_msg_data,
466 p_encoded => FND_API.G_FALSE
467 );
468 END CREATE_RESERVATION;
469
470 ------------------------------------------------------------------------------------------------------------------
471 -- Declare Procedure --
472 ------------------------------------------------------------------------------------------------------------------
473 -- Start of Comments --
474 -- Procedure name : UPDATE_RESERVATION
475 -- Type : Private
476 -- Function : Updates reservation for serial numbers in the p_serial_number_tbl
477 -- Pre-reqs :
478 -- Standard IN Parameters :
479 -- p_api_version IN NUMBER Required
480 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
481 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
482 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
483 -- p_module_type IN VARCHAR2 Default NULL
484 -- Standard OUT Parameters :
485 -- x_return_status OUT VARCHAR2 Required
486 -- x_msg_count OUT NUMBER Required
487 -- x_msg_data OUT VARCHAR2 Required
488
489 --
490 -- CREATE_RESERVATION Parameters:
491 -- p_scheduled_material_id : The Schedule Material Id
492 -- p_serial_number_tbl : The table of Serial Numbers to be reserved
493 -- End of Comments.
494 ------------------------------------------------------------------------------------------------------------------
495 PROCEDURE UPDATE_RESERVATION(
496 p_api_version IN NUMBER,
497 p_init_msg_list IN VARCHAR2,
498 p_commit IN VARCHAR2,
499 p_validation_level IN NUMBER,
500 p_module_type IN VARCHAR2,
501 x_return_status OUT NOCOPY VARCHAR2,
502 x_msg_count OUT NOCOPY NUMBER,
503 x_msg_data OUT NOCOPY VARCHAR2,
504 p_scheduled_material_id IN NUMBER ,
505 p_requested_date IN DATE)
506 IS
507 -- Declare local variables
508 l_api_name CONSTANT VARCHAR2(30) := 'update_reservation';
509 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
510
511 l_api_version CONSTANT NUMBER := 1.0;
512 l_init_msg_list VARCHAR2(1) := 'F';
513 l_return_status VARCHAR2(1);
514 l_msg_count NUMBER;
515 l_msg_data VARCHAR2(2000);
516
517
518 l_requested_date DATE;
519 l_reservation_id NUMBER;
520 l_x_quantity_reserved NUMBER := NULL;
521 l_from_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
522 l_to_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
523 l_x_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
524 l_to_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
525 l_from_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
526
527 -- Variables to check the log level according to the coding standards
528 l_dbg_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
529 l_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
530
531
532 -- Declare cursors
533 CURSOR get_mtl_req_dtls_csr (c_scheduled_material_id IN NUMBER)
534 IS
535 SELECT asmt.requested_date
536 FROM ahl_schedule_materials asmt
537 WHERE asmt.scheduled_material_id = c_scheduled_material_id;
538
539 CURSOR get_reservation_csr (c_scheduled_material_id IN NUMBER)
540 IS
544 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
541 SELECT reservation_id
542 FROM mtl_reservations mrsv,ahl_schedule_materials asmt
543 WHERE mrsv.demand_source_line_detail = c_scheduled_material_id
545 AND mrsv.organization_id = asmt.organization_id
546 AND mrsv.requirement_date = asmt.requested_date
547 AND mrsv.inventory_item_id = asmt.inventory_item_id
548 AND mrsv.external_source_code = 'AHL';
549
550 BEGIN
551 -- Standard start of API savepoint
552 SAVEPOINT UPDATE_RESERVATION_PVT;
553
554 -- Initialize return status to success before any code logic/validation
555 x_return_status:= FND_API.G_RET_STS_SUCCESS;
556
557 -- Standard call to check for call compatibility
558 IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
559 THEN
560 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
561 END IF;
562
563 -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
564 IF FND_API.TO_BOOLEAN(p_init_msg_list)
565 THEN
566 FND_MSG_PUB.INITIALIZE;
567 END IF;
568
569 -- Log API entry point
570 IF (l_log_procedure >= l_log_current_level)THEN
571 fnd_log.string
572 (
573 fnd_log.level_procedure,
574 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
575 'At the start of PL SQL procedure '
576 );
577 END IF;
578
579
580 -- Validate the schedule material id
581 IF p_scheduled_material_id IS NULL THEN
582 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_MAT_REQ' );
583 FND_MSG_PUB.add;
584 -- log the error
585 IF (l_log_error >= l_log_current_level) THEN
586 fnd_log.string
587 (
588 fnd_log.level_error,
589 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
590 'schedule material id is null'
591 );
592 END IF;
593 RAISE FND_API.G_EXC_ERROR;
594 END IF; -- IF p_scheduled_material_id IS NULL
595
596 -- Validate the schedule material id
597 OPEN get_mtl_req_dtls_csr(p_scheduled_material_id);
598 FETCH get_mtl_req_dtls_csr INTO l_requested_date;
599 IF get_mtl_req_dtls_csr%NOTFOUND THEN
600 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_MAT_REQ' );
601 FND_MSG_PUB.add;
602 -- log the error
603 IF (l_log_error >= l_log_current_level) THEN
604 fnd_log.string
605 (
606 fnd_log.level_error,
607 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
608 'Invalid Material Requirement ID'
609 );
610 END IF;
611 CLOSE get_mtl_req_dtls_csr;
612 RAISE FND_API.G_EXC_ERROR;
613 END IF; -- IF get_mtl_req_dtls_csr%NOTFOUND
614 CLOSE get_mtl_req_dtls_csr;
615
616 -- if the requested date is null, throw error
617 IF p_requested_date IS NULL THEN
618 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_REQ_DATE' );
619 FND_MSG_PUB.add;
620 -- log the error
621 IF (l_log_error >= l_log_current_level) THEN
622 fnd_log.string
623 (
624 fnd_log.level_error,
625 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
626 'Requested Date is null'
627 );
628 END IF;
629 RAISE FND_API.G_EXC_ERROR;
630 END IF; --IF p_requested_date IS NULL
631
632 -- if the dates are the same, no need to do anything
633 IF p_requested_date = l_requested_date THEN
634 IF (l_log_statement >= l_log_current_level) THEN
635 fnd_log.string
636 (
637 fnd_log.level_statement,
638 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
639 'No change in dates, returning to caller'
640 );
641 END IF;
642 RETURN;
643 END IF; --IF p_requested_date = l_requested_date
644
645 -- get all the reservations for this scheduled material id
646 OPEN get_reservation_csr(p_scheduled_material_id);
647 LOOP
648 FETCH get_reservation_csr INTO l_reservation_id;
649 EXIT WHEN get_reservation_csr%NOTFOUND;
650
651 l_from_rsv_rec.reservation_id := l_reservation_id;
652 l_to_rsv_rec.reservation_id := l_reservation_id;
653 l_to_rsv_rec.requirement_date:= p_requested_date;
654
655 /*
656 l_to_serial_number_tbl(1).serial_number := p_serial_number_tbl(i).serial_number;
657 l_to_serial_number_tbl(1).inventory_item_id := l_mtl_req_dtls_rec.inventory_item;
658 */
659 IF (l_log_statement >= l_log_current_level) THEN
660 fnd_log.string
661 (
662 fnd_log.level_statement,
663 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
664 'Calling WMS api:inv_reservation_pub.update_reservation'
665 );
666 END IF;
667 -- Call WMS Update reservation API
668 inv_reservation_pub.update_reservation
669 (
670 p_api_version_number => l_api_version,
671 p_init_msg_lst => l_init_msg_list,
672 x_return_status => l_return_status,
673 x_msg_count => l_msg_count,
674 x_msg_data => l_msg_data,
675 p_original_rsv_rec => l_from_rsv_rec,
676 p_to_rsv_rec => l_to_rsv_rec,
677 p_original_serial_number => l_from_serial_number_tbl,
678 p_to_serial_number => l_to_serial_number_tbl
679 );
680
681 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
682 -- log the error
686 fnd_log.level_error,
683 IF (l_log_error >= l_log_current_level) THEN
684 fnd_log.string
685 (
687 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
688 'Call to WMS returned Unexpected Error'
689 );
690 END IF;
691 CLOSE get_reservation_csr;
692 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
693 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
694 -- log the error
695 IF (l_log_error >= l_log_current_level) THEN
696 fnd_log.string
697 (
698 fnd_log.level_error,
699 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
700 'Call to WMS returned Expected Error'
701 );
702 END IF;
703 CLOSE get_reservation_csr;
704 RAISE FND_API.G_EXC_ERROR;
705 END IF;
706 END LOOP; -- All the reservations for this material requiement id
707
708 -- Check Error Message stack.
709 x_msg_count := FND_MSG_PUB.count_msg;
710 IF x_msg_count > 0
711 THEN
712 -- log the error
713 IF (l_log_error >= l_log_current_level) THEN
714 fnd_log.string
715 (
716 fnd_log.level_error,
717 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
718 'Call to WMS returned Errors in x_msg_count'
719 );
720 END IF;
721 RAISE FND_API.G_EXC_ERROR;
722 END IF;
723
724 -- Commit if p_commit = FND_API.G_TRUE
725 IF FND_API.TO_BOOLEAN(p_commit)
726 THEN
727 COMMIT WORK;
728 IF (l_log_statement >= l_log_current_level) THEN
729 fnd_log.string
730 (
731 fnd_log.level_statement,
732 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
733 'Committed'
734 );
735 END IF;
736 END IF;
737
738 -- Standard call to get message count and if count is 1, get message info
739 FND_MSG_PUB.count_and_get
740 (
741 p_count => x_msg_count,
742 p_data => x_msg_data,
743 p_encoded => FND_API.G_FALSE
744 );
745
746 -- Log API exit point
747 IF (l_log_procedure >= l_log_current_level)THEN
748 fnd_log.string
749 (
750 fnd_log.level_procedure,
751 l_debug_module||'.end',
752 'At the end of PLSQL procedure'
753 );
754 END IF;
755 EXCEPTION
756 WHEN FND_API.G_EXC_ERROR THEN
757 ROLLBACK TO UPDATE_RESERVATION_PVT;
758 x_return_status := FND_API.G_RET_STS_ERROR;
759 FND_MSG_PUB.count_and_get
760 (
761 p_count => x_msg_count,
762 p_data => x_msg_data,
763 p_encoded => FND_API.G_FALSE
764 );
765
766 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
767 ROLLBACK TO UPDATE_RESERVATION_PVT;
768 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
769 FND_MSG_PUB.count_and_get
770 (
771 p_count => x_msg_count,
772 p_data => x_msg_data,
773 p_encoded => FND_API.G_FALSE
774 );
775
776 WHEN OTHERS THEN
777 ROLLBACK TO UPDATE_RESERVATION_PVT;
778 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
779 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
780 THEN
781 FND_MSG_PUB.add_exc_msg
782 (
783 p_pkg_name => G_PKG_NAME,
784 p_procedure_name => 'update_reservation',
785 p_error_text => SUBSTR(SQLERRM,1,240)
786 );
787 END IF;
788 FND_MSG_PUB.count_and_get
789 (
790 p_count => x_msg_count,
791 p_data => x_msg_data,
792 p_encoded => FND_API.G_FALSE
793 );
794 END UPDATE_RESERVATION;
795
796 ---------------------------------------------------------------------------------------------------------------------
797 -- Declare Procedures --
798 ---------------------------------------------------------------------------------------------------------------------
799 -- Start of Comments --
800 -- Procedure name : DELETE_RESERVATION
801 -- Type : Private
802 -- Function : API to delete all the reservation made for a requirement
803 -- Pre-reqs :
804 -- Standard IN Parameters :
805 -- p_api_version IN NUMBER Required
806 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
807 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
808 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
809 -- p_module_type IN VARCHAR2 Default NULL
810 -- Standard OUT Parameters :
811 -- x_return_status OUT VARCHAR2 Required
812 -- x_msg_count OUT NUMBER Required
813 -- x_msg_data OUT VARCHAR2 Required
814
815 --
816 -- DELETE_RESERVATION Parameters:
817 -- p_scheduled_material_id : The Schedule Material Id
818 -- p_sub_inventory_code : If not null then only reservations from this subinventory will be deleted, if null all the reservations will be deleted.
819 -- End of Comments.
820 ---------------------------------------------------------------------------------------------------------------------
821 PROCEDURE DELETE_RESERVATION(
822 p_api_version IN NUMBER := 1.0,
823 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
824 p_commit IN VARCHAR2 := FND_API.G_FALSE,
828 x_msg_count OUT NOCOPY NUMBER,
825 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
826 p_module_type IN VARCHAR2,
827 x_return_status OUT NOCOPY VARCHAR2,
829 x_msg_data OUT NOCOPY VARCHAR2,
830 p_scheduled_material_id IN NUMBER ,
831 p_sub_inventory_code IN VARCHAR2 := NULL,
832 p_serial_number IN VARCHAR2 := NULL
833 )
834 IS
835
836 -- Declare local variables
837 l_api_name CONSTANT VARCHAR2(30) := 'delete_reservation';
838 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
839
840 l_api_version CONSTANT NUMBER := 1.0;
841 l_init_msg_list VARCHAR2(1) := 'F';
842 l_return_status VARCHAR2(1);
843 l_msg_count NUMBER;
844 l_msg_data VARCHAR2(2000);
845
846
847 l_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
848 l_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
849 l_total_relieved_qty NUMBER :=0;
850
851 l_ret_value NUMBER;
852 l_reservation_id NUMBER;
853
854 -- Variables to check the log level according to the coding standards
855 l_dbg_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
856 l_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
857
858 l_temp NUMBER;
859
860
861 -- Declare cursors
862 /*CURSOR get_mtl_req_dtls_csr (c_scheduled_material_id IN NUMBER)
863 IS
864 SELECT 1
865 FROM ahl_schedule_materials asmt
866 WHERE asmt.scheduled_material_id = c_scheduled_material_id;
867 */
868
869 -- AnRaj: Added a join with ahl_schedule_materials and further where conditions to remove the FTS
870 -- on mtl_reservations
871 CURSOR get_reservation_csr (c_scheduled_material_id IN NUMBER, c_subinventory_code IN VARCHAR2)
872 IS
873 SELECT reservation_id
874 FROM mtl_reservations mrsv,ahl_schedule_materials asmt
875 WHERE mrsv.demand_source_line_detail = c_scheduled_material_id
876 AND mrsv.external_source_code = 'AHL'
877 AND (c_subinventory_code IS NULL OR mrsv.subinventory_code = c_subinventory_code)
878 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
879 AND mrsv.organization_id = asmt.organization_id
880 AND mrsv.requirement_date = asmt.requested_date
881 AND mrsv.inventory_item_id = asmt.inventory_item_id;
882 BEGIN
883 -- Standard start of API savepoint
884 SAVEPOINT DELETE_RESERVATION_PVT;
885
886 -- Initialize return status to success before any code logic/validation
887 x_return_status:= FND_API.G_RET_STS_SUCCESS;
888
889 -- Standard call to check for call compatibility
890 IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
891 THEN
892 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
893 END IF;
894
895 -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
896 IF FND_API.TO_BOOLEAN(p_init_msg_list)
897 THEN
898 FND_MSG_PUB.INITIALIZE;
899 END IF;
900
901 -- Log API entry point
902 IF (l_log_procedure >= l_log_current_level)THEN
903 fnd_log.string
904 (
905 fnd_log.level_procedure,
906 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
907 'At the start of PL SQL procedure '
908 );
909 END IF;
910
911 -- Validate the schedule material id and p_sub_inventory_code
912 IF p_scheduled_material_id IS NULL THEN
913 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_MAT_REQ' );
914 FND_MSG_PUB.add;
915 RAISE FND_API.G_EXC_ERROR;
916 END IF;
917
918 -- log the p_scheduled_material_id and the p_sub_inventory_code
919 IF (l_log_statement >= l_log_current_level) THEN
920 fnd_log.string
921 (
922 fnd_log.level_statement,
923 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
924 'p_scheduled_material_id' || p_scheduled_material_id
925 );
926 fnd_log.string
927 (
928 fnd_log.level_statement,
929 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
930 'p_sub_inventory_code' || p_sub_inventory_code
931 );
932 END IF;
933
934 -- validate whehther the scheduled material id is valid
935 BEGIN
936 SELECT 1
937 INTO l_temp
938 FROM ahl_schedule_materials
939 WHERE scheduled_material_id = p_scheduled_material_id;
940 EXCEPTION
941 WHEN NO_DATA_FOUND THEN
942 FND_MESSAGE.Set_Name('AHL','AHL_RSV_INVLD_MAT_REQ');
943 FND_MSG_PUB.ADD;
944 -- log the error
945 IF (l_log_error >= l_log_current_level) THEN
946 fnd_log.string
947 (
948 fnd_log.level_error,
949 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
950 'Invalid Material Requirement ID'
951 );
952 END IF;
953 RAISE FND_API.G_EXC_ERROR;
954 END;
955
956 -- Begin Changes by skpathak on 12-NOV-2008 for bug 7241925
957 IF (p_serial_number IS NOT NULL) THEN
958 -- Delete based on the serial number
959 GET_MATCHING_RESERVATION(p_scheduled_material_id => p_scheduled_material_id,
960 p_serial_number => p_serial_number,
961 p_match_serial => 'Y', -- Match reservation with serial
965 IF (l_log_statement >= l_log_current_level) THEN
962 x_reservation_id => l_reservation_id,
963 x_reservation_quantity => l_temp);
964
966 fnd_log.string(fnd_log.level_statement, l_debug_module,
967 'GET_MATCHING_RESERVATION returned l_reservation_id = ' || l_reservation_id);
968 END IF;
969
970 IF (l_reservation_id IS NOT NULL) THEN
971 IF (l_log_statement >= l_log_current_level) THEN
972 fnd_log.string(fnd_log.level_statement, l_debug_module,
973 'About to Call inv_reservation_pub.delete_reservation with l_reservation_id: ' || l_reservation_id);
974 END IF;
975
976 -- Assign the reservation id to be deleted
977 l_rsv_rec.reservation_id := l_reservation_id;
978 -- Call the WMS api
979 inv_reservation_pub.delete_reservation
980 (
981 p_api_version_number => l_api_version,
982 p_init_msg_lst => l_init_msg_list,
983 x_return_status => l_return_status,
984 x_msg_count => l_msg_count,
985 x_msg_data => l_msg_data,
986 p_rsv_rec => l_rsv_rec,
987 p_serial_number => l_serial_number_tbl
988 );
989 IF (l_log_statement >= l_log_current_level) THEN
990 fnd_log.string(fnd_log.level_statement, l_debug_module,
991 'Returned from inv_reservation_pub.delete_reservation, l_return_status: ' || l_return_status);
992 END IF;
993 -- Check whether the return status is success, if not raise exception
994 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
995 -- log the error
996 IF (l_log_error >= l_log_current_level) THEN
997 fnd_log.string(fnd_log.level_error, l_debug_module,
998 'inv_reservation_pub.delete_reservation returned FND_API.G_RET_STS_UNEXP_ERROR');
999 END IF;
1000 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1001 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
1002 -- log the error
1003 IF (l_log_error >= l_log_current_level) THEN
1004 fnd_log.string(fnd_log.level_error, l_debug_module,
1005 'inv_reservation_pub.delete_reservation returned FND_API.G_RET_STS_ERROR');
1006 END IF;
1007 RAISE FND_API.G_EXC_ERROR;
1008 END IF;
1009 END IF; -- l_reservation_id IS NOT NULL
1010 ELSE
1011 -- Delete Based on p_scheduled_material_id and p_sub_inventory_code
1012 OPEN get_reservation_csr(p_scheduled_material_id,p_sub_inventory_code);
1013 LOOP
1014 -- For each of the reservation id associated with this material requirement call the Delete api
1015 FETCH get_reservation_csr INTO l_reservation_id;
1016 EXIT WHEN get_reservation_csr%NOTFOUND;
1017 -- logging
1018 IF (l_log_statement >= l_log_current_level) THEN
1019 fnd_log.string
1020 (
1021 fnd_log.level_statement,
1022 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1023 'Going to Call inv_reservation_pub.delete_reservation l_reservation_id :' || l_reservation_id
1024 );
1025 END IF;
1026
1027 -- Assign the reservation id to be deleted
1028 l_rsv_rec.reservation_id := l_reservation_id;
1029 -- Call the WMS api
1030 inv_reservation_pub.delete_reservation
1031 (
1032 p_api_version_number => l_api_version,
1033 p_init_msg_lst => l_init_msg_list,
1034 x_return_status => l_return_status,
1035 x_msg_count => l_msg_count,
1036 x_msg_data => l_msg_data,
1037 p_rsv_rec => l_rsv_rec,
1038 p_serial_number => l_serial_number_tbl
1039 );
1040 IF (l_log_statement >= l_log_current_level) THEN
1041 fnd_log.string
1042 (
1043 fnd_log.level_statement,
1044 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1045 'After call inv_reservation_pub.delete_reservation,l_return_status :' || l_return_status
1046 );
1047 END IF;
1048 -- Check whether the return status is success, if not raise exception
1049 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1050 -- log the error
1051 IF (l_log_error >= l_log_current_level) THEN
1052 fnd_log.string
1053 (
1054 fnd_log.level_error,
1055 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1056 'inv_reservation_pub.delete_reservation returned FND_API.G_RET_STS_UNEXP_ERROR'
1057 );
1058 END IF;
1059 CLOSE get_reservation_csr;
1060 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1061 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
1062 -- log the error
1063 IF (l_log_error >= l_log_current_level) THEN
1064 fnd_log.string
1065 (
1069 );
1066 fnd_log.level_error,
1067 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1068 'inv_reservation_pub.delete_reservation returned FND_API.G_RET_STS_ERROR'
1070 END IF;
1071 CLOSE get_reservation_csr;
1072 RAISE FND_API.G_EXC_ERROR;
1073 END IF;
1074 END LOOP; -- All the reservations for this material req id, sub inventory pair
1075 END IF;
1076
1077 -- Log API exit point
1078 IF (l_log_procedure >= l_log_current_level)THEN
1079 fnd_log.string
1080 (
1081 fnd_log.level_procedure,
1082 l_debug_module||'.end',
1083 'At the end of PLSQL procedure'
1084 );
1085 END IF;
1086
1087 -- Check Error Message stack.
1088 x_msg_count := FND_MSG_PUB.count_msg;
1089 IF x_msg_count > 0
1090 THEN
1091 RAISE FND_API.G_EXC_ERROR;
1092 END IF;
1093
1094 -- Commit if p_commit = FND_API.G_TRUE
1095 IF FND_API.TO_BOOLEAN(p_commit)
1096 THEN
1097 COMMIT WORK;
1098 IF (l_log_statement >= l_log_current_level) THEN
1099 fnd_log.string
1100 (
1101 fnd_log.level_statement,
1102 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1103 'delete reservation COMMITTED'
1104 );
1105 END IF;
1106 END IF;
1107
1108 -- Standard call to get message count and if count is 1, get message info
1109 FND_MSG_PUB.count_and_get
1110 (
1111 p_count => x_msg_count,
1112 p_data => x_msg_data,
1113 p_encoded => FND_API.G_FALSE
1114 );
1115
1116 EXCEPTION
1117 WHEN FND_API.G_EXC_ERROR THEN
1118 ROLLBACK TO DELETE_RESERVATION_PVT;
1119 x_return_status := FND_API.G_RET_STS_ERROR;
1120 FND_MSG_PUB.count_and_get
1121 (
1122 p_count => x_msg_count,
1123 p_data => x_msg_data,
1124 p_encoded => FND_API.G_FALSE
1125 );
1126
1127 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1128 ROLLBACK TO DELETE_RESERVATION_PVT;
1129 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1130 FND_MSG_PUB.count_and_get
1131 (
1132 p_count => x_msg_count,
1133 p_data => x_msg_data,
1134 p_encoded => FND_API.G_FALSE
1135 );
1136
1137 WHEN OTHERS THEN
1138 ROLLBACK TO DELETE_RESERVATION_PVT;
1139 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1140 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1141 THEN
1142 FND_MSG_PUB.add_exc_msg
1143 (
1144 p_pkg_name => G_PKG_NAME,
1145 p_procedure_name => 'delete_reservation',
1146 p_error_text => SUBSTR(SQLERRM,1,240)
1147 );
1148 END IF;
1149 FND_MSG_PUB.count_and_get
1150 (
1151 p_count => x_msg_count,
1152 p_data => x_msg_data,
1153 p_encoded => FND_API.G_FALSE
1154 );
1155 END DELETE_RESERVATION;
1156
1157 ---------------------------------------------------------------------------------------------------------------------
1158 -- Declare Procedures --
1159 ---------------------------------------------------------------------------------------------------------------------
1160 -- Start of Comments --
1161 -- Procedure name : RELIEVE_RESERVATION
1162 -- Type : Private
1163 -- Function : API to delete the reservation made for a particular serial number
1164 -- Pre-reqs :
1165 -- Standard IN Parameters :
1166 -- p_api_version IN NUMBER Required
1167 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
1168 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
1169 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
1170 -- p_module_type IN VARCHAR2 Default NULL
1171 -- Standard OUT Parameters :
1172 -- x_return_status OUT VARCHAR2 Required
1173 -- x_msg_count OUT NUMBER Required
1174 -- x_msg_data OUT VARCHAR2 Required
1175
1176 --
1177 -- RELIEVE_RESERVATION Parameters:
1178 -- p_scheduled_material_id : The Schedule Material Id
1179 -- p_serial_number : The Serial number whose reservation has to be deleted
1180 -- End of Comments.
1181 ---------------------------------------------------------------------------------------------------------------------
1182 PROCEDURE RELIEVE_RESERVATION(
1183 p_api_version IN NUMBER := 1.0,
1184 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1185 p_commit IN VARCHAR2 := FND_API.G_FALSE,
1186 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
1187 p_module_type IN VARCHAR2,
1188 x_return_status OUT NOCOPY VARCHAR2,
1189 x_msg_count OUT NOCOPY NUMBER,
1190 x_msg_data OUT NOCOPY VARCHAR2,
1191 p_scheduled_material_id IN NUMBER ,
1192 p_serial_number IN VARCHAR2)
1193 IS
1194 -- Declare local variables
1195 l_api_name CONSTANT VARCHAR2(30) := 'relieve_reservation';
1199 l_init_msg_list VARCHAR2(1) := 'F';
1196 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
1197
1198 l_api_version CONSTANT NUMBER := 1.0;
1200 l_return_status VARCHAR2(1);
1201 l_msg_count NUMBER;
1202 l_msg_data VARCHAR2(2000);
1203 l_commit VARCHAR2(1) := 'F';
1204
1205 l_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
1206 l_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
1207 l_reservation_id NUMBER;
1208 l_reserved_quantity NUMBER;
1209 l_x_primary_relieved_quantity NUMBER;
1210 l_x_primary_remain_quantity NUMBER;
1211
1212 -- Variables to check the log level according to the coding standards
1213 l_dbg_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1214 l_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
1215
1216 -- Declare Cursors
1217 CURSOR get_mtl_req_dtls_csr (c_scheduled_material_id IN NUMBER)
1218 IS
1219 SELECT asmt.organization_id,
1220 asmt.requested_date,
1221 asmt.uom,
1222 asmt.requested_quantity,
1223 asmt.inventory_item_id,
1227 WHERE asmt.status = 'ACTIVE'
1224 asmt.object_version_number
1225 FROM ahl_schedule_materials asmt,
1226 ahl_visit_tasks_b avtl
1228 AND asmt.requested_quantity <>0
1229 AND asmt.scheduled_material_id = c_scheduled_material_id
1230 AND asmt.visit_task_id = avtl.visit_task_id
1231 AND ( avtl.status_code='PLANNING'
1232 OR
1233 ( avtl.status_code='RELEASED'
1234 AND
1235 EXISTS ( SELECT awo.visit_task_id
1236 FROM ahl_workorders awo
1237 WHERE avtl.visit_task_id = awo.visit_task_id
1238 AND (awo.status_code = '1' OR awo.status_code='3') -- 1:Unreleased,3:Released
1239 )
1240 )
1241 );
1242 l_get_mtl_req_dtls_rec get_mtl_req_dtls_csr%ROWTYPE;
1243
1244 -- Cursor get_reservation_csr removed by skpathak on 12-NOV-2008 for bug 7241925
1245 -- in favor of call to the new helper procedure GET_MATCHING_RESERVATION
1246 /**
1247 CURSOR get_reservation_csr (c_scheduled_material_id IN NUMBER, c_SUBINVENTORY_CODE IN VARCHAR2)
1248 IS
1249 SELECT reservation_id, primary_reservation_quantity
1250 FROM mtl_reservations mrsv,ahl_schedule_materials asmt
1251 WHERE mrsv.demand_source_line_detail = c_scheduled_material_id
1252 AND mrsv.external_source_code = 'AHL'
1253 AND mrsv.SUBINVENTORY_CODE = c_SUBINVENTORY_CODE
1254 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
1255 AND mrsv.organization_id = asmt.organization_id
1256 AND mrsv.requirement_date = asmt.requested_date
1257 AND mrsv.inventory_item_id = asmt.inventory_item_id;
1258 **/
1259 CURSOR get_instance_dtls_csr (c_inventory_itme_id IN NUMBER, c_serial_number IN VARCHAR2, c_organization_id IN NUMBER)
1260 IS
1261 SELECT csi.instance_id, msn.serial_number,csi.inv_subinventory_name subinventory_code
1262 FROM csi_item_instances csi,mtl_serial_numbers msn
1263 WHERE csi.inventory_item_id = c_inventory_itme_id
1264 AND csi.serial_number = c_serial_number
1265 AND csi.last_vld_organization_id = c_organization_id
1266 AND csi.inventory_item_id = msn.inventory_item_id;
1267
1268 l_get_instance_dtls_rec get_instance_dtls_csr%ROWTYPE;
1269
1270 BEGIN
1271 -- Standard start of API savepoint
1272 SAVEPOINT RELIEVE_RESERVATION_PVT;
1273
1274 -- Initialize return status to success before any code logic/validation
1275 x_return_status:= FND_API.G_RET_STS_SUCCESS;
1276
1277 -- Standard call to check for call compatibility
1278 IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1279 THEN
1280 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1281 END IF;
1282
1286 FND_MSG_PUB.INITIALIZE;
1283 -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
1284 IF FND_API.TO_BOOLEAN(p_init_msg_list)
1285 THEN
1287 END IF;
1288
1289 -- Log API entry point
1290 IF (l_log_procedure >= l_log_current_level)THEN
1291 fnd_log.string
1292 (
1293 fnd_log.level_procedure,
1294 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
1295 'At the start of PL SQL procedure '
1296 );
1297 END IF;
1298
1299 -- Validate the schedule material id
1300 IF p_scheduled_material_id IS NULL THEN
1301 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_MAT_REQ' );
1302 FND_MSG_PUB.add;
1303 -- log the error
1304 IF (l_log_error >= l_log_current_level) THEN
1305 fnd_log.string
1306 (
1307 fnd_log.level_error,
1308 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1309 'AHL_RSV_INVLD_MAT_REQ: FND_API.G_EXC_ERROR'
1310 );
1311 END IF;
1312 RAISE FND_API.G_EXC_ERROR;
1313 END IF; -- IF p_scheduled_material_id IS NULL
1314
1315 -- Get the Material Requirements details
1316 OPEN get_mtl_req_dtls_csr(p_scheduled_material_id);
1317 FETCH get_mtl_req_dtls_csr INTO l_get_mtl_req_dtls_rec;
1318 -- If the details are not found then raise exception
1319 IF get_mtl_req_dtls_csr%NOTFOUND THEN
1320 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_MAT_REQ' );
1321 FND_MSG_PUB.add;
1322 CLOSE get_mtl_req_dtls_csr;
1323 RAISE FND_API.G_EXC_ERROR;
1324 END IF; -- IF get_mtl_req_dtls_csr%NOTFOUND
1325 CLOSE get_mtl_req_dtls_csr;
1326
1327 -- Validate the Serial Number
1328 IF p_serial_number IS NULL THEN
1329 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_SL_NUM' );
1330 FND_MSG_PUB.add;
1331 IF (l_log_error>= l_log_current_level)THEN
1332 fnd_log.string
1333 (
1334 fnd_log.level_error,
1335 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1336 'p_serial_number is null'
1337 );
1338 END IF;
1339 RAISE FND_API.G_EXC_ERROR;
1340 END IF; -- IF p_serial_number IS NULL
1341
1342 -- Get the details of the item instance
1343 OPEN get_instance_dtls_csr(l_get_mtl_req_dtls_rec.inventory_item_id,p_serial_number,l_get_mtl_req_dtls_rec.organization_id);
1344 FETCH get_instance_dtls_csr INTO l_get_instance_dtls_rec;
1345 IF get_instance_dtls_csr%NOTFOUND THEN
1346 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_INVLD_SL_NUM' );
1347 FND_MSG_PUB.add;
1348 CLOSE get_instance_dtls_csr;
1349 RAISE FND_API.G_EXC_ERROR;
1350 END IF; -- IF get_instance_dtls_csr%NOTFOUND
1351 CLOSE get_instance_dtls_csr;
1352
1353 IF (l_log_statement >= l_log_current_level) THEN
1354 fnd_log.string(fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1355 'Serial Number to be Deleted:' || p_serial_number );
1356 fnd_log.string(fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1357 'l_get_mtl_req_dtls_rec.inventory_item_id:' ||l_get_mtl_req_dtls_rec.inventory_item_id );
1358 fnd_log.string(fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1359 'l_get_mtl_req_dtls_rec.organization_id:' || l_get_mtl_req_dtls_rec.organization_id );
1360 fnd_log.string(fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1361 'p_scheduled_material_id:' || p_scheduled_material_id );
1365
1362 END IF;
1363
1364
1366 -- Get the reservation details, that is id and the reserved quantity
1367 -- Changed by skpathak on 12-NOV-2008 for bug 7241925
1368 /**
1369 OPEN get_reservation_csr(p_scheduled_material_id,l_get_instance_dtls_rec.subinventory_code);
1370 FETCH get_reservation_csr INTO l_reservation_id,l_reserved_quantity;
1371 -- If no reservations are found , then exit as nothing needs to be done
1372 IF get_reservation_csr%NOTFOUND THEN
1373 CLOSE get_reservation_csr;
1374 RETURN;
1375 END IF; -- IF get_reservation_csr%NOTFOUND
1376 CLOSE get_reservation_csr;
1377 **/
1378 GET_MATCHING_RESERVATION(p_scheduled_material_id => p_scheduled_material_id,
1379 p_serial_number => p_serial_number,
1380 p_match_serial => 'Y', -- Match reservation by serial
1381 x_reservation_id => l_reservation_id,
1382 x_reservation_quantity => l_reserved_quantity);
1383
1384 IF (l_log_statement >= l_log_current_level) THEN
1385 fnd_log.string(fnd_log.level_statement, l_debug_module,
1386 'GET_MATCHING_RESERVATION returned l_reservation_id = ' || l_reservation_id ||
1387 ', l_reserved_quantity = ' || l_reserved_quantity);
1388 END IF;
1389 -- End Changes by skpathak on 12-NOV-2008 for bug 7241925
1390
1391 -- If there is only one reserved item then DELETE_RESERVATION api has to be invoked
1392 IF l_reserved_quantity = 1 THEN
1393 delete_reservation(
1394 p_api_version => l_api_version,
1395 p_init_msg_list => l_init_msg_list,
1396 p_commit => l_commit,
1400 x_msg_count => l_msg_count,
1397 p_validation_level => FND_API.G_VALID_LEVEL_FULL, -- the validation level
1398 p_module_type => p_module_type,
1399 x_return_status => l_return_status,
1401 x_msg_data => l_msg_data,
1402 p_scheduled_material_id => p_scheduled_material_id,
1403 -- Begin Changes by skpathak on 12-NOV-2008 for bug 7241925
1404 /**
1405 p_sub_inventory_code => l_get_instance_dtls_rec.subinventory_code
1406 **/
1407 p_sub_inventory_code => null,
1408 p_serial_number => p_serial_number
1409 -- End Changes by skpathak on 12-NOV-2008 for bug 7241925
1410 );
1411 ELSIF l_reserved_quantity > 1 THEN
1412
1413 -- Initialize the record to be send to the WMS package
1414 /*Initialize_create_rec( p_scheduled_material_id, -- the schedule material id
1415 p_serial_number, -- the serial number
1416 l_rsv_rec, -- record to be passed ti the WMS packages
1417 l_return_status); -- return status
1418 */
1419 -- If there are more than one item reserved, then RELIEVE_RESERVATION has to be called
1420 l_rsv_rec.reservation_id := l_reservation_id;
1421 l_serial_number_tbl(1).serial_number := p_serial_number;
1422 l_serial_number_tbl(1).inventory_item_id := l_get_mtl_req_dtls_rec.inventory_item_id;
1423
1424 inv_reservation_pub.relieve_reservation(
1425 p_api_version_number => l_api_version,
1426 p_init_msg_lst => l_init_msg_list,
1427 x_return_status => l_return_status,
1428 x_msg_count => l_msg_count,
1429 x_msg_data => l_msg_data,
1430 p_rsv_rec => l_rsv_rec,
1431 p_primary_relieved_quantity => 1,
1432 p_relieve_all => fnd_api.g_false,
1433 p_original_serial_number => l_serial_number_tbl,
1434 x_primary_relieved_quantity => l_x_primary_relieved_quantity,
1435 x_primary_remain_quantity => l_x_primary_remain_quantity
1436 );
1437 END IF; -- IF l_reserved_quantity = 1
1438
1439 -- Check for the returned status from these APIs
1440 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1441 IF (l_log_error >= l_log_current_level) THEN
1442 fnd_log.string
1443 (
1444 fnd_log.level_error,
1445 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1446 'After Relieve/Delete FND_API.G_EXC_UNEXPECTED_ERROR'
1447 );
1448 END IF;
1449 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1450 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
1451 IF (l_log_error >= l_log_current_level) THEN
1452 fnd_log.string
1453 (
1454 fnd_log.level_error,
1455 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1456 'After Relieve/Delete FND_API.G_EXC_ERROR'
1457 );
1458 END IF;
1459 RAISE FND_API.G_EXC_ERROR;
1460 END IF;
1461
1462 -- Log API exit point
1463 IF (l_log_procedure >= l_log_current_level)THEN
1464 fnd_log.string
1465 (
1466 fnd_log.level_procedure,
1467 l_debug_module||'.end',
1468 'At the end of PLSQL procedure'
1469 );
1470 END IF;
1471
1472 -- Check Error Message stack.
1473 x_msg_count := FND_MSG_PUB.count_msg;
1474 IF x_msg_count > 0
1475 THEN
1476 RAISE FND_API.G_EXC_ERROR;
1477 END IF;
1478
1479 -- Commit if p_commit = FND_API.G_TRUE
1480 IF FND_API.TO_BOOLEAN(p_commit)
1481 THEN
1482 COMMIT WORK;
1483 END IF;
1484
1485 -- Standard call to get message count and if count is 1, get message info
1486 FND_MSG_PUB.count_and_get
1487 (
1488 p_count => x_msg_count,
1489 p_data => x_msg_data,
1490 p_encoded => FND_API.G_FALSE
1491 );
1492
1493 EXCEPTION
1494 WHEN FND_API.G_EXC_ERROR THEN
1495 ROLLBACK TO RELIEVE_RESERVATION_PVT;
1496 x_return_status := FND_API.G_RET_STS_ERROR;
1497 FND_MSG_PUB.count_and_get
1498 (
1499 p_count => x_msg_count,
1500 p_data => x_msg_data,
1501 p_encoded => FND_API.G_FALSE
1502 );
1503
1504 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1505 ROLLBACK TO RELIEVE_RESERVATION_PVT;
1506 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1507 FND_MSG_PUB.count_and_get
1508 (
1509 p_count => x_msg_count,
1510 p_data => x_msg_data,
1511 p_encoded => FND_API.G_FALSE
1512 );
1513
1514 WHEN OTHERS THEN
1515 ROLLBACK TO RELIEVE_RESERVATION_PVT;
1516 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1517 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1518 THEN
1519 FND_MSG_PUB.add_exc_msg
1520 (
1521 p_pkg_name => G_PKG_NAME,
1522 p_procedure_name => 'relieve_reservation',
1523 p_error_text => SUBSTR(SQLERRM,1,240)
1524 );
1525 END IF;
1526 FND_MSG_PUB.count_and_get
1527 (
1528 p_count => x_msg_count,
1529 p_data => x_msg_data,
1533
1530 p_encoded => FND_API.G_FALSE
1531 );
1532 END RELIEVE_RESERVATION;
1534 ---------------------------------------------------------------------------------------------------------------------
1535 -- Declare Procedures --
1536 ---------------------------------------------------------------------------------------------------------------------
1537 -- Start of Comments --
1538 -- Procedure name : TRANSFER_RESERVATION
1539 -- Type : Private
1540 -- Function : API to change the demand source type, called when pushed to production
1541 -- Pre-reqs :
1542 -- Standard IN Parameters :
1543 -- p_api_version IN NUMBER Required
1544 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
1545 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
1546 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
1547 -- p_module_type IN VARCHAR2 Default NULL
1548 -- Standard OUT Parameters :
1549 -- x_return_status OUT VARCHAR2 Required
1550 -- x_msg_count OUT NUMBER Required
1551 -- x_msg_data OUT VARCHAR2 Required
1552
1553 --
1554 -- TRANSFER_RESERVATION Parameters:
1555 -- p_visit_id : The id of the visit for which the reservations need to be transferred.
1556 -- End of Comments.
1557 ---------------------------------------------------------------------------------------------------------------------
1558 PROCEDURE TRANSFER_RESERVATION(
1559 p_api_version IN NUMBER := 1.0,
1560 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1561 p_commit IN VARCHAR2 := FND_API.G_FALSE,
1562 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
1563 p_module_type IN VARCHAR2,
1564 x_return_status OUT NOCOPY VARCHAR2,
1565 x_msg_count OUT NOCOPY NUMBER,
1566 x_msg_data OUT NOCOPY VARCHAR2,
1567 p_visit_id IN NUMBER)
1568 IS
1569 -- Declare local variables
1570 l_api_name CONSTANT VARCHAR2(30) := 'transfer_reservation';
1571
1572 l_api_version CONSTANT NUMBER := 1.0;
1573 l_init_msg_list VARCHAR2(1) := 'F';
1574 l_return_status VARCHAR2(1);
1575 l_msg_count NUMBER;
1576 l_msg_data VARCHAR2(2000);
1577
1578 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
1579
1580 l_reservation_id NUMBER;
1581 l_wip_entity_id NUMBER;
1582 l_from_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
1583 l_to_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
1584 l_from_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
1585 l_to_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
1586 l_x_to_reservation_id NUMBER;
1587
1588 -- Variables to check the log level according to the coding standards
1589 l_dbg_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1590 l_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
1591
1592 -- Declare Cursors and local record types
1593 CURSOR get_mtl_req_dtls_csr (c_visit_id IN NUMBER)
1594 IS
1595 SELECT mat.visit_task_id, mat.scheduled_material_id, mat.workorder_operation_id, mat.operation_sequence
1596 FROM ahl_schedule_materials mat,
1597 ahl_visit_tasks_b vt
1598 WHERE mat.status = 'ACTIVE'
1599 AND mat.requested_quantity <>0
1600 AND vt.status_code = 'PLANNING'
1601 AND vt.visit_task_id = mat.visit_task_id
1602 AND vt.visit_id = c_visit_ID;
1603 l_get_mtl_req_dtls_rec get_mtl_req_dtls_csr%ROWTYPE;
1604
1605 -- AnRaj: Added a join with ahl_schedule_materials and further where conditions to remove the FTS
1606 CURSOR get_reservation_csr (c_scheduled_material_id IN NUMBER)
1607 IS
1608 SELECT reservation_id
1609 FROM mtl_reservations mrsv,ahl_schedule_materials asmt
1610 WHERE demand_source_line_detail = c_scheduled_material_id
1611 AND external_source_code = 'AHL'
1612 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
1613 AND mrsv.organization_id = asmt.organization_id
1614 AND mrsv.requirement_date = asmt.requested_date
1615 AND mrsv.inventory_item_id = asmt.inventory_item_id;
1616
1617 CURSOR get_wip_dtls_csr (c_visit_task_ID IN NUMBER)
1618 IS
1619 SELECT aw.wip_entity_id
1620 FROM ahl_workorders aw
1621 WHERE aw.status_code in ('1','3') -- 1:Unreleased,3:Released
1622 AND aw.visit_task_id = c_visit_task_id;
1623
1624 BEGIN
1625 -- Standard start of API savepoint
1626 SAVEPOINT TRANSFER_RESERVATION_PVT;
1627
1628 -- Initialize return status to success before any code logic/validation
1629 x_return_status:= FND_API.G_RET_STS_SUCCESS;
1630
1631 -- Standard call to check for call compatibility
1632 IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
1633 THEN
1634 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1635 END IF;
1636
1637 -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
1638 IF FND_API.TO_BOOLEAN(p_init_msg_list)
1639 THEN
1640 FND_MSG_PUB.INITIALIZE;
1641 END IF;
1642
1643 -- Log API entry point
1644 IF (l_log_procedure >= l_log_current_level)THEN
1645 fnd_log.string
1646 (
1647 fnd_log.level_procedure,
1651 END IF;
1648 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
1649 'At the start of PL SQL procedure '
1650 );
1652
1653
1654 -- Get all the material requirements for this visit
1655 OPEN get_mtl_req_dtls_csr(p_visit_id);
1656 LOOP
1657 -- For each material requirement
1658 FETCH get_mtl_req_dtls_csr INTO l_get_mtl_req_dtls_rec;
1659 EXIT WHEN get_mtl_req_dtls_csr%NOTFOUND;
1660 -- Get the all the reservations made for this material requirement
1661 OPEN get_reservation_csr(l_get_mtl_req_dtls_rec.scheduled_material_id);
1662 LOOP
1663 -- For each reservation id
1664 FETCH get_reservation_csr INTO l_reservation_id;
1665 EXIT WHEN get_reservation_csr%NOTFOUND;
1666 l_from_rsv_rec.reservation_id := l_reservation_id;
1667 -- Get the WIP entity ID
1668 OPEN get_wip_dtls_csr(l_get_mtl_req_dtls_rec.visit_task_id);
1669 FETCH get_wip_dtls_csr INTO l_wip_entity_id;
1670 CLOSE get_wip_dtls_csr;
1671
1672 l_to_rsv_rec.demand_source_type_id := inv_reservation_global.g_source_type_wip;
1673 l_to_rsv_rec.demand_source_header_id := l_wip_entity_id;
1674 l_to_rsv_rec.demand_source_line_id := l_get_mtl_req_dtls_rec.operation_sequence;
1675
1676 l_to_rsv_rec.demand_source_line_detail := l_get_mtl_req_dtls_rec.scheduled_material_id;
1677 l_from_rsv_rec.demand_source_line_detail := l_get_mtl_req_dtls_rec.scheduled_material_id;
1678
1679 IF (l_log_statement >= l_log_current_level) THEN
1680 fnd_log.string
1681 (
1682 fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1683 'Before Calling inv_reservation_pub.transfer_reservation'
1684 );
1685 fnd_log.string
1686 (
1687 fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1688 'l_to_rsv_rec.demand_source_type_id' || l_to_rsv_rec.demand_source_type_id
1689 );
1690 fnd_log.string
1691 (
1692 fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1693 'l_to_rsv_rec.demand_source_header_id' || l_to_rsv_rec.demand_source_header_id
1694 );
1695 fnd_log.string
1696 (
1697 fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1698 'l_to_rsv_rec.demand_source_line_detail' || l_to_rsv_rec.demand_source_line_detail
1699 );
1700 fnd_log.string
1701 (
1702 fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1703 'l_from_rsv_rec.reservation_id' || l_from_rsv_rec.reservation_id
1704 );
1705 fnd_log.string
1706 (
1707 fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1708 'l_to_serial_number_tbl.COUNT' || l_to_serial_number_tbl.COUNT
1709 );
1710
1711 END IF;
1712
1713 -- Call the WMS Transfer Reservaion API
1714 inv_reservation_pub.transfer_reservation
1715 (
1716 p_api_version_number => l_api_version,
1717 p_init_msg_lst => l_init_msg_list,
1718 x_return_status => l_return_status,
1719 x_msg_count => l_msg_count,
1720 x_msg_data => l_msg_data,
1721 p_is_transfer_supply => fnd_api.g_false,
1722 p_original_rsv_rec => l_from_rsv_rec,
1723 p_to_rsv_rec => l_to_rsv_rec,
1724 p_original_serial_number=> l_from_serial_number_tbl,
1725 p_to_serial_number => l_to_serial_number_tbl,
1726 x_to_reservation_id => l_x_to_reservation_id
1727 );
1728
1729 -- Check for the returned status from these APIs
1730 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1731 CLOSE get_reservation_csr;
1732 CLOSE get_mtl_req_dtls_csr;
1733 IF (l_log_error >= l_log_current_level) THEN
1734 fnd_log.string
1735 (
1736 fnd_log.level_error,
1737 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1738 'inv_reservation_pub.transfer_reservation returned FND_API.G_EXC_ERROR'
1739 );
1740 END IF;
1741 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1742 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
1743 CLOSE get_reservation_csr;
1744 CLOSE get_mtl_req_dtls_csr;
1745 IF (l_log_error >= l_log_current_level) THEN
1746 fnd_log.string
1747 (
1748 fnd_log.level_error,
1749 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1750 'inv_reservation_pub.transfer_reservation returned FND_API.G_RET_STS_ERROR'
1751 );
1752 END IF;
1753 RAISE FND_API.G_EXC_ERROR;
1754 END IF;
1755 END LOOP ; -- get_reservation_csr,for all the reservations for this material req
1756 CLOSE get_reservation_csr;
1757 END LOOP; --get_mtl_req_dtls_csr, for all the mat reqs of this visit
1758 CLOSE get_mtl_req_dtls_csr;
1759
1760 -- Log API exit point
1761 IF (l_log_procedure >= l_log_current_level)THEN
1762 fnd_log.string
1763 (
1764 fnd_log.level_procedure,
1765 l_debug_module||'.end',
1766 'At the end of PLSQL procedure'
1767 );
1768 END IF;
1769
1770 -- Check Error Message stack.
1771 x_msg_count := FND_MSG_PUB.count_msg;
1772 IF x_msg_count > 0
1773 THEN
1774 RAISE FND_API.G_EXC_ERROR;
1775 END IF;
1776
1777 -- Commit if p_commit = FND_API.G_TRUE
1778 IF FND_API.TO_BOOLEAN(p_commit)
1779 THEN
1780 COMMIT WORK;
1781 END IF;
1782
1783 -- Standard call to get message count and if count is 1, get message info
1784 FND_MSG_PUB.count_and_get
1785 (
1786 p_count => x_msg_count,
1787 p_data => x_msg_data,
1788 p_encoded => FND_API.G_FALSE
1789 );
1790
1791 EXCEPTION
1792 WHEN FND_API.G_EXC_ERROR THEN
1793 ROLLBACK TO TRANSFER_RESERVATION_PVT;
1794 x_return_status := FND_API.G_RET_STS_ERROR;
1795 FND_MSG_PUB.count_and_get
1796 (
1797 p_count => x_msg_count,
1798 p_data => x_msg_data,
1799 p_encoded => FND_API.G_FALSE
1800 );
1801
1802 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1803 ROLLBACK TO TRANSFER_RESERVATION_PVT;
1804 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1805 FND_MSG_PUB.count_and_get
1806 (
1807 p_count => x_msg_count,
1808 p_data => x_msg_data,
1809 p_encoded => FND_API.G_FALSE
1810 );
1811
1812 WHEN OTHERS THEN
1813 ROLLBACK TO TRANSFER_RESERVATION_PVT;
1814 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1815 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1816 THEN
1817 FND_MSG_PUB.add_exc_msg
1818 (
1819 p_pkg_name => G_PKG_NAME,
1823 END IF;
1820 p_procedure_name => 'relieve_reservation',
1821 p_error_text => SUBSTR(SQLERRM,1,240)
1822 );
1824 FND_MSG_PUB.count_and_get
1825 (
1826 p_count => x_msg_count,
1827 p_data => x_msg_data,
1828 p_encoded => FND_API.G_FALSE
1829 );
1830 END TRANSFER_RESERVATION;
1831
1832
1833 ---------------------------------------------------------------------------------------------------------------------
1834 -- Declare Procedures --
1835 ---------------------------------------------------------------------------------------------------------------------
1836 -- Start of Comments --
1837 -- Procedure name : UPDATE_VISIT_RESERVATIONS
1838 -- Type : Private
1839 -- Function : API to update all the reservations for s particular visit
1840 -- Pre-reqs :
1841 -- Standard IN Parameters :
1842 -- Standard OUT Parameters :
1843 -- x_return_status OUT VARCHAR2 Required
1844 --
1845 -- UPDATE_VISIT_RESERVATIONS Parameters:
1846 -- p_visit_id : The id of the visit for which the reservations need to be transferred.
1847 -- This method is invoked from AHL_LTP_REQST_MATRL_PVT.MODIFY_VISIT_RESERVATIONS
1848 -- After a task is deleted, to reschedule the reservations as task times might have changed
1849 -- End of Comments.
1850 ---------------------------------------------------------------------------------------------------------------------
1851 PROCEDURE UPDATE_VISIT_RESERVATIONS(
1852 x_return_status OUT NOCOPY VARCHAR2,
1853 p_visit_id IN NUMBER)
1854 IS
1855 -- Declare local variables
1856 l_api_name CONSTANT VARCHAR2(30) := 'update_visit_reservations';
1857 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
1858 l_api_version CONSTANT NUMBER := 1.0;
1859 l_init_msg_list VARCHAR2(1) := 'F';
1860 l_return_status VARCHAR2(1);
1861 l_msg_count NUMBER;
1862 l_msg_data VARCHAR2(2000);
1863
1864 l_from_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
1865 l_to_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
1866 l_from_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
1867 l_to_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
1868 l_x_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
1869 l_x_quantity_reserved NUMBER;
1870
1871 -- Declare cursors and record variables
1872 -- Get the all the reservation related information using the schedule material id
1873 CURSOR get_upd_rsv_csr (c_visit_id IN NUMBER)
1874 IS
1875 SELECT mrsv.reservation_id, mrsv.demand_source_header_id, mrsv.demand_source_line_id, mrsv.inventory_item_id,mrsv.organization_id
1876 FROM ahl_schedule_materials asmt,
1877 ahl_visit_tasks_b vt,
1878 mtl_reservations mrsv
1879 WHERE vt.status_code = 'PLANNING'
1880 AND vt.visit_task_id = asmt.visit_task_id
1881 AND vt.visit_id = c_visit_id
1882 AND mrsv.external_source_code = 'AHL'
1883 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
1884 AND mrsv.organization_id = asmt.organization_id
1885 AND mrsv.requirement_date = asmt.requested_date
1886 AND mrsv.inventory_item_id = asmt.inventory_item_id;
1887 l_get_upd_rsv_rec get_upd_rsv_csr%ROWTYPE;
1888
1892 SELECT scheduled_material_id, requested_date
1889 -- get the material requiremnt id and the date
1890 CURSOR get_mtl_req_id_csr (c_visit_task_id IN NUMBER, c_rt_oper_material_id IN NUMBER, c_inventory_item_id IN NUMBER)
1891 IS
1893 FROM ahl_schedule_materials
1894 WHERE visit_task_id = c_visit_task_id
1895 AND rt_oper_material_id = c_rt_oper_material_id
1896 AND inventory_item_id = c_inventory_item_id
1897 AND status = 'ACTIVE';
1898 l_get_mtl_req_id_rec get_mtl_req_id_csr%ROWTYPE;
1899
1900 -- For getting the Serial numbers
1901 TYPE serial_num_type IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
1902 serial_num_tbl serial_num_type;
1903
1904 -- local variables
1905 l_reservation_id NUMBER;
1906 l_inventory_item_id NUMBER;
1907 l_temp_id NUMBER;
1908
1909 BEGIN
1910 -- Standard start of API savepoint
1911 SAVEPOINT UPDATE_VISIT_RESERVATIONS_PVT;
1912
1913 -- Initialize return status to success before any code logic/validation
1914 x_return_status:= FND_API.G_RET_STS_SUCCESS;
1915
1916 -- Log API entry point
1917 IF (l_log_procedure >= l_log_current_level)THEN
1918 fnd_log.string
1919 (
1920 fnd_log.level_procedure,
1921 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
1922 'At the start of PL SQL procedure '
1923 );
1924 END IF;
1925
1926 -- Get all the material requirements with reservations Created
1927 -- for this visit, there can be any number of material requirements
1928 OPEN get_upd_rsv_csr (p_visit_id);
1929 LOOP
1930 FETCH get_upd_rsv_csr INTO l_get_upd_rsv_rec;
1931 EXIT WHEN get_upd_rsv_csr%NOTFOUND;
1932 -- Find out the new material requirements for this reservation
1933
1934 l_reservation_id := l_get_upd_rsv_rec.reservation_id;
1935 IF (l_log_statement >= l_log_current_level) THEN
1936 fnd_log.string
1937 (
1938 fnd_log.level_statement,
1939 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1940 'Reservation ID to be updated:' || l_reservation_id
1941 );
1942 END IF;
1943
1944 l_inventory_item_id := l_get_upd_rsv_rec.inventory_item_id;
1945 IF (l_log_statement >= l_log_current_level) THEN
1946 fnd_log.string
1947 (
1948 fnd_log.level_statement,
1949 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1950 'Inventory Item ID: ' || l_inventory_item_id
1951 );
1952 END IF;
1953 IF (l_log_statement >= l_log_current_level) THEN
1954 fnd_log.string
1955 (
1956 fnd_log.level_statement,
1957 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1958 'demand_source_header_id: ' || l_get_upd_rsv_rec.demand_source_header_id
1959 );
1960 END IF;
1961 IF (l_log_statement >= l_log_current_level) THEN
1962 fnd_log.string
1963 (
1964 fnd_log.level_statement,
1965 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1966 'demand_source_line_id: ' || l_get_upd_rsv_rec.demand_source_line_id
1967 );
1968 END IF;
1969
1970 -- For each material requirement id, get the schedule material id and the requested date
1971 OPEN get_mtl_req_id_csr(l_get_upd_rsv_rec.demand_source_header_id,l_get_upd_rsv_rec.demand_source_line_id,l_get_upd_rsv_rec.inventory_item_id);
1972 FETCH get_mtl_req_id_csr INTO l_get_mtl_req_id_rec;
1973 IF get_mtl_req_id_csr%NOTFOUND THEN
1974 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_UPD_VST_RSV_FAIL' );
1975 FND_MSG_PUB.add;
1976 -- log the error
1977 IF (l_log_error >= l_log_current_level) THEN
1978 fnd_log.string
1979 (
1980 fnd_log.level_error,
1981 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
1982 'No record found in ahl schedule materials for get_mtl_req_id_csr'
1983 );
1984 END IF;
1985 CLOSE get_upd_rsv_csr;
1986 CLOSE get_mtl_req_id_csr;
1987 RAISE FND_API.G_EXC_ERROR;
1988 END IF; -- IF get_mtl_req_id_csr%NOTFOUND
1989 CLOSE get_mtl_req_id_csr;
1990
1991 IF (l_log_statement >= l_log_current_level) THEN
1992 fnd_log.string
1993 (
1994 fnd_log.level_statement,
1995 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
1996 'l_get_mtl_req_id_rec.scheduled_material_id: ' || l_get_mtl_req_id_rec.scheduled_material_id
1997 );
1998 END IF;
1999
2000 -- Get all the Serial Numbers reserved for this material req
2001 BEGIN
2002 SELECT serial_number
2003 BULK COLLECT INTO serial_num_tbl
2004 FROM mtl_serial_numbers
2005 WHERE reservation_id = l_reservation_id
2006 AND INVENTORY_ITEM_ID = l_get_upd_rsv_rec.inventory_item_id
2007 AND CURRENT_ORGANIZATION_ID = l_get_upd_rsv_rec.organization_id;
2008 EXCEPTION
2009 WHEN NO_DATA_FOUND THEN
2010 -- log the error
2011 IF (l_log_statement >= l_log_current_level) THEN
2012 fnd_log.string
2013 (
2014 fnd_log.level_statement,
2015 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
2016 'No Serial Numbers reseved for Reservation ID:' || l_reservation_id
2017 );
2018 END IF;
2019 END;
2020
2021 IF serial_num_tbl.count > 0 THEN
2022 -- Initialize the record to be send to the WMS package
2023 Initialize_create_rec( l_get_mtl_req_id_rec.scheduled_material_id, -- the schedule material id
2024 serial_num_tbl(1), -- the serial number
2025 l_to_rsv_rec, -- record to be passed to the WMS packages
2026 l_return_status); -- return status
2027
2028 IF (l_log_statement >= l_log_current_level) THEN
2029 fnd_log.string
2030 (
2031 fnd_log.level_statement,
2032 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2033 'Organizzation ID is: ' || l_to_rsv_rec.organization_id
2034 );
2035 END IF;
2036
2037 l_to_rsv_rec.primary_reservation_quantity := serial_num_tbl.count;
2038 IF (l_log_statement >= l_log_current_level) THEN
2039 fnd_log.string
2040 (
2041 fnd_log.level_statement,
2042 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2043 'Number of Serial Numbers to be updated: ' || l_to_rsv_rec.primary_reservation_quantity
2044 );
2045 END IF;
2046 -- commented out, as serial numbers as not required to be passed as we are updating only the date
2047 /* FOR I in serial_num_tbl.first..serial_num_tbl.last
2048 LOOP
2049 l_to_serial_number_tbl(I).serial_number := serial_num_tbl(I);
2050 l_to_serial_number_tbl(I).inventory_item_id := l_inventory_item_id;
2051 END LOOP;*/
2052 END IF;
2053
2054 -- update reservation with new material requirement and requested date
2055 l_from_rsv_rec.reservation_id := l_get_upd_rsv_rec.reservation_id;
2056 l_to_rsv_rec.reservation_id := l_get_upd_rsv_rec.reservation_id;
2057 l_to_rsv_rec.requirement_date := l_get_mtl_req_id_rec.requested_date;
2058 l_to_rsv_rec.demand_source_line_detail := l_get_mtl_req_id_rec.scheduled_material_id;
2059
2060 -- Call WMS Update reservation API
2061 inv_reservation_pub.update_reservation
2062 (
2063 p_api_version_number => l_api_version,
2064 p_init_msg_lst => l_init_msg_list,
2065 x_return_status => l_return_status,
2066 x_msg_count => l_msg_count,
2067 x_msg_data => l_msg_data,
2068 p_original_rsv_rec => l_from_rsv_rec,
2069 p_to_rsv_rec => l_to_rsv_rec,
2070 p_original_serial_number => l_from_serial_number_tbl,
2071 p_to_serial_number => l_to_serial_number_tbl--,
2072 );
2073
2074 -- Check for the returned status from these APIs
2075 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2076 --RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2077 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2078 -- log the error
2079 IF (l_log_statement >= l_log_current_level) THEN
2080 fnd_log.string
2081 (
2082 fnd_log.level_statement,
2083 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2084 'inv_reservation_pub.update_reservation returned UNEXPECTED ERROR'
2085 );
2086 END IF;
2087 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
2088 --RAISE FND_API.G_EXC_ERROR;
2089 x_return_status := FND_API.G_RET_STS_ERROR;
2090 -- log the error
2091 IF (l_log_statement >= l_log_current_level) THEN
2092 fnd_log.string
2093 (
2094 fnd_log.level_statement,
2095 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2096 'inv_reservation_pub.update_reservation returned EXPECTED ERROR'
2097 );
2098 END IF;
2099 END IF;
2100 END LOOP;
2101 CLOSE get_upd_rsv_csr;
2102
2103 -- Log API exit point
2104 IF (l_log_procedure >= l_log_current_level)THEN
2105 fnd_log.string
2106 (
2107 fnd_log.level_procedure,
2108 l_debug_module||'.end',
2109 'At the end of PLSQL procedure'
2110 );
2111 END IF;
2112 END UPDATE_VISIT_RESERVATIONS;
2113
2114 ---------------------------------------------------------------------------------------------------------------------
2115 -- Declare Procedures --
2116 ---------------------------------------------------------------------------------------------------------------------
2117 -- Start of Comments --
2118 -- Procedure name : DELETE_VISIT_RESERVATIONS
2119 -- Type : Private
2120 -- Function : API to delete all the reservations for s particular visit
2121 -- Pre-reqs :
2122 -- Standard IN Parameters :
2123 -- Standard OUT Parameters :
2124 -- x_return_status OUT VARCHAR2 Required
2125 --
2126 -- DELETE_VISIT_RESERVATIONS Parameters:
2127 -- p_visit_id : The visit id for which the reservations need to be deleted
2128 -- This procedure is called in AHL_LTP_REQST_MATRL_PVT.Unschedule_Visit_Materials
2129 -- When a task is deleted, to remove the reservations related to that task.
2130 -- End of Comments.
2131 ---------------------------------------------------------------------------------------------------------------------
2132 PROCEDURE DELETE_VISIT_RESERVATIONS(
2133 x_return_status OUT NOCOPY VARCHAR2,
2134 p_visit_id IN NUMBER)
2135 IS
2136 -- Declare local variables
2137 l_api_name CONSTANT VARCHAR2(30) := 'delete_visit_reservations';
2138 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
2139 l_api_version CONSTANT NUMBER := 1.0;
2140 l_init_msg_list VARCHAR2(1) := 'F';
2141 l_return_status VARCHAR2(1);
2142 l_msg_count NUMBER;
2143 l_msg_data VARCHAR2(2000);
2144
2145 l_from_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
2146 l_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
2147 l_to_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
2148 l_from_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
2149 l_to_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
2150 l_x_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
2151 l_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
2152 l_x_quantity_reserved NUMBER;
2153
2154 -- Variables to check the log level according to the coding standards
2155 l_dbg_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2156 l_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
2157
2158 l_reservation_id NUMBER:= null;
2159
2160 --Declare Cursors
2161 --
2162 CURSOR get_del_rsv_csr (c_visit_id IN NUMBER)
2163 IS
2164 SELECT mrsv.reservation_id
2165 FROM ahl_schedule_materials asmt,
2166 ahl_visit_tasks_b avt,
2167 mtl_reservations mrsv
2168 WHERE avt.status_code in ( 'PLANNING','DELETED')
2169 AND avt.visit_task_id = asmt.visit_task_id
2170 AND avt.visit_id = c_visit_ID
2171 AND avt.visit_id = asmt.visit_id
2172 AND mrsv.external_source_code = 'AHL'
2173 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
2174 AND mrsv.organization_id = asmt.organization_id
2175 AND mrsv.requirement_date = asmt.requested_date
2176 AND mrsv.inventory_item_id = asmt.inventory_item_id;
2177
2178 BEGIN
2179 -- Standard start of API savepoint
2180 SAVEPOINT DELETE_VISIT_RESERVATIONS_PVT;
2181
2182 -- Initialize return status to success before any code logic/validation
2183 x_return_status:= FND_API.G_RET_STS_SUCCESS;
2184
2185 -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
2186 /* IF FND_API.TO_BOOLEAN(p_init_msg_list)
2187 THEN
2188 FND_MSG_PUB.INITIALIZE;
2189 END IF;
2190 */
2191
2192 -- Log API entry point
2193 IF (l_log_procedure >= l_log_current_level)THEN
2194 fnd_log.string
2195 (
2196 fnd_log.level_procedure,
2197 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
2198 'At the start of PL SQL procedure '
2199 );
2200 END IF;
2201
2202
2203 OPEN get_del_rsv_csr (p_visit_id);
2204 LOOP
2205 FETCH get_del_rsv_csr INTO l_reservation_id;
2206 EXIT WHEN get_del_rsv_csr%NOTFOUND;
2207 l_rsv_rec.reservation_id := l_reservation_id;
2208 -- Call WMS delete reservation API
2209 inv_reservation_pub.delete_reservation
2210 (
2211 p_api_version_number => l_api_version,
2212 p_init_msg_lst => l_init_msg_list,
2213 x_return_status => l_return_status,
2214 x_msg_count => l_msg_count,
2215 x_msg_data => l_msg_data,
2216 p_rsv_rec => l_rsv_rec,
2217 p_serial_number => l_serial_number_tbl
2218 );
2219 -- Check for the returned status from these APIs
2220 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2221 --RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2222 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2223 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
2224 --RAISE FND_API.G_EXC_ERROR;
2225 x_return_status := FND_API.G_RET_STS_ERROR;
2226 END IF;
2227 END LOOP;
2228 CLOSE get_del_rsv_csr;
2229
2230 -- Log API exit point
2231 IF (l_log_procedure >= l_log_current_level)THEN
2232 fnd_log.string
2233 (
2234 fnd_log.level_procedure,
2235 l_debug_module||'.end',
2236 'At the end of PLSQL procedure'
2237 );
2238 END IF;
2239 END DELETE_VISIT_RESERVATIONS;
2240
2241
2242 ---------------------------------------------------------------------------------------------------------------------
2243 -- Declare Procedures --
2244 ---------------------------------------------------------------------------------------------------------------------
2245 -- Start of Comments --
2246 -- Procedure name : INITIALIZE_CREATE_REC
2247 -- Type : Private
2248 -- Function : To initializa the record that is to be passed into WMS api
2249 -- Pre-reqs :
2250 -- Standard IN Parameters :
2251 -- Standard OUT Parameters :
2252 -- INITIALIZE_CREATE_REC Parameters:
2253 -- p_rsv_rec :
2254 -- p_schedule_material_id :
2255 -- x_rsv_rec :
2256 -- End of Comments.
2257 ---------------------------------------------------------------------------------------------------------------------
2258 PROCEDURE INITIALIZE_CREATE_REC(
2259 p_schedule_material_id IN NUMBER,
2260 p_serial_number IN VARCHAR2,
2261 x_rsv_rec OUT NOCOPY inv_reservation_global.mtl_reservation_rec_type,
2262 x_return_status OUT NOCOPY VARCHAR2
2263 )
2264 IS
2265
2266 -- Declare local variables
2267 l_api_name CONSTANT VARCHAR2(30) := 'initialize_create_rec';
2268 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
2269 -- Variables to check the log level according to the coding standards
2270 l_dbg_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2271 l_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
2272
2273 -- Declare cursors
2274 -- Cursor to get the Material Requirement Details
2275 CURSOR get_mtl_req_dtls_csr (c_scheduled_material_id IN NUMBER)
2276 IS
2277 SELECT mat.scheduled_material_id , mat.organization_id,
2278 mat.requested_date, mat.uom, mat.inventory_item_id,
2279 mat. workorder_operation_id, vt.status_code task_status_code,
2280 vt.visit_task_number, v.visit_number, mat.operation_sequence,
2281 mat.visit_task_id, mat.rt_oper_material_id
2282 FROM ahl_schedule_materials mat,
2283 ahl_visits_b v,
2284 ahl_visit_tasks_b vt
2285 WHERE vt.visit_task_id = mat.visit_task_id
2286 AND vt.visit_id = v.visit_id
2287 AND mat.scheduled_material_id = c_scheduled_material_id;
2288 l_get_mtl_req_dtls_rec get_mtl_req_dtls_csr%ROWTYPE;
2289
2290 -- Cursor to get the WIP details
2291 CURSOR get_wip_dtls_csr (c_visit_task_ID IN NUMBER)
2292 IS
2293 SELECT aw.wip_entity_id
2294 FROM ahl_workorders aw
2295 WHERE aw.status_code in ('1','3') -- 1:Unreleased,3:Released
2296 AND aw.visit_task_id = c_visit_task_id;
2297 l_get_wip_dtls_rec get_wip_dtls_csr%ROWTYPE;
2298
2299 -- Cursor to get the subinventory and the locator information
2300 -- AnRaj modified by selecting 2 more fiels, bug#4756288
2301 CURSOR get_subinv_locator(c_serial_number IN VARCHAR2,c_inventory_item_id IN NUMBER)
2302 IS
2303 SELECT inv_subinventory_name,inv_locator_id,inventory_revision,lot_number
2304 FROM csi_item_instances
2305 WHERE serial_number = c_serial_number
2306 AND inventory_item_id = c_inventory_item_id;
2307
2308 l_subinventory_name csi_item_instances.inv_subinventory_name%TYPE;
2309 l_inv_locator_id NUMBER;
2310 -- AnRaj added 2 more variable, bug#4756288
2311 l_revision csi_item_instances.inventory_revision%TYPE;
2312 l_lot_number csi_item_instances.serial_number%TYPE;
2313
2314 BEGIN
2315
2316 -- Log API exit point
2317 IF (l_log_procedure >= l_log_current_level)THEN
2318 fnd_log.string
2319 (
2320 fnd_log.level_procedure,
2321 l_debug_module||'.start',
2322 'At the start of PLSQL procedure'
2323 );
2324 END IF;
2325
2326 -- Get the material requirement details
2327
2328
2329 IF (l_log_statement >= l_log_current_level) THEN
2330 fnd_log.string
2331 (
2332 fnd_log.level_statement,
2333 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2334 'p_schedule_material_id in get_mtl_req_dtls_csr is:' || p_schedule_material_id
2335 );
2336 END IF;
2337
2338 OPEN get_mtl_req_dtls_csr (p_schedule_material_id);
2339 FETCH get_mtl_req_dtls_csr INTO l_get_mtl_req_dtls_rec;
2340 CLOSE get_mtl_req_dtls_csr;
2341
2342 IF (l_log_statement >= l_log_current_level) THEN
2343 fnd_log.string
2344 (
2345 fnd_log.level_statement,
2346 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2347 'Fetched Value of l_get_mtl_req_dtls_rec.organization_id is:' || l_get_mtl_req_dtls_rec.organization_id
2348 );
2349 END IF;
2350
2351
2352
2353 IF (l_log_statement >= l_log_current_level) THEN
2354 fnd_log.string
2355 (
2356 fnd_log.level_statement,
2357 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2358 'p_serial_number in get_subinv_locator is: ' || p_serial_number
2359 );
2360 END IF;
2361 IF (l_log_statement >= l_log_current_level) THEN
2362 fnd_log.string
2363 (
2364 fnd_log.level_statement,
2365 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2366 'l_get_mtl_req_dtls_rec.inventory_item_id in get_subinv_locator is ' || l_get_mtl_req_dtls_rec.inventory_item_id
2367 );
2368 END IF;
2369 -- Get the subinventory name and the locator id
2370 OPEN get_subinv_locator(p_serial_number,l_get_mtl_req_dtls_rec.inventory_item_id);
2371 FETCH get_subinv_locator INTO l_subinventory_name,l_inv_locator_id,l_revision,l_lot_number;
2372 CLOSE get_subinv_locator;
2373
2374 x_rsv_rec.reservation_id := NULL;
2375 x_rsv_rec.requirement_date := l_get_mtl_req_dtls_rec.requested_date;
2376 x_rsv_rec.organization_id := l_get_mtl_req_dtls_rec.organization_id;
2377 x_rsv_rec.inventory_item_id := l_get_mtl_req_dtls_rec.inventory_item_id;
2378 x_rsv_rec.demand_source_name := 'CMRO'||'.'|| l_get_mtl_req_dtls_rec.visit_number ||'.'||l_get_mtl_req_dtls_rec.visit_task_number;
2379 x_rsv_rec.demand_source_line_detail := l_get_mtl_req_dtls_rec.scheduled_material_id;
2380 x_rsv_rec.primary_uom_code := l_get_mtl_req_dtls_rec.uom;
2381 x_rsv_rec.primary_uom_id := NULL;
2382 x_rsv_rec.reservation_uom_code := NULL;
2383 x_rsv_rec.reservation_uom_id := NULL;
2384 x_rsv_rec.reservation_quantity := NULL;
2385 x_rsv_rec.primary_reservation_quantity := NULL;
2386 x_rsv_rec.autodetail_group_id := NULL;
2387 x_rsv_rec.external_source_code := 'AHL';
2388 x_rsv_rec.external_source_line_id := NULL;
2389 x_rsv_rec.supply_source_type_id := inv_reservation_global.g_source_type_inv;
2390 x_rsv_rec.supply_source_header_id := NULL;
2391 x_rsv_rec.supply_source_line_id := NULL;
2392 x_rsv_rec.supply_source_name := NULL;
2393 x_rsv_rec.supply_source_line_detail := NULL;
2394 x_rsv_rec.revision := l_revision;
2395 x_rsv_rec.subinventory_code := l_subinventory_name;
2396 x_rsv_rec.subinventory_id := NULL;
2397
2398 -- AnRaj modified, bug#4756288
2399 x_rsv_rec.locator_id := l_inv_locator_id;
2400 x_rsv_rec.lot_number := l_lot_number;
2401 -- end bug#4756288
2402
2403 x_rsv_rec.lot_number_id := NULL;
2404 x_rsv_rec.pick_slip_number := NULL;
2405 x_rsv_rec.lpn_id := NULL;
2406 -- Added later
2407 x_rsv_rec.ship_ready_flag := NULL;
2408 x_rsv_rec.demand_source_delivery := NULL;
2409
2410 x_rsv_rec.attribute_category := NULL;
2411 x_rsv_rec.attribute1 := NULL;
2412 x_rsv_rec.attribute2 := NULL;
2413 x_rsv_rec.attribute3 := NULL;
2414 x_rsv_rec.attribute4 := NULL;
2415 x_rsv_rec.attribute5 := NULL;
2416 x_rsv_rec.attribute6 := NULL;
2417 x_rsv_rec.attribute7 := NULL;
2418 x_rsv_rec.attribute8 := NULL;
2419 x_rsv_rec.attribute9 := NULL;
2420 x_rsv_rec.attribute10 := NULL;
2421 x_rsv_rec.attribute11 := NULL;
2422 x_rsv_rec.attribute12 := NULL;
2423 x_rsv_rec.attribute13 := NULL;
2424 x_rsv_rec.attribute14 := NULL;
2425 x_rsv_rec.attribute15 := NULL;
2426
2427 IF l_get_mtl_req_dtls_rec.task_status_code = 'RELEASED' THEN
2428 -- If the task is in 'released' then get the WIP entity id for demand_source_header_id
2429 OPEN get_wip_dtls_csr (l_get_mtl_req_dtls_rec.visit_task_id);
2430 FETCH get_wip_dtls_csr INTO l_get_wip_dtls_rec;
2431 CLOSE get_wip_dtls_csr;
2432 x_rsv_rec.demand_source_type_id := inv_reservation_global.g_source_type_wip;
2433 x_rsv_rec.demand_source_header_id := l_get_wip_dtls_rec.wip_entity_id;
2434 x_rsv_rec.demand_source_line_id := l_get_mtl_req_dtls_rec.operation_sequence;
2435 ELSIF l_get_mtl_req_dtls_rec.task_status_code = 'PLANNING' THEN
2436 -- If the task is in 'planning' then get the WIP entity id for demand_source_header_id
2437 x_rsv_rec.demand_source_type_id := inv_reservation_global.g_source_type_inv;
2438 x_rsv_rec.demand_source_header_id := l_get_mtl_req_dtls_rec.Visit_Task_ID;
2439 x_rsv_rec.demand_source_line_id := l_get_mtl_req_dtls_rec.rt_oper_material_id;
2440 ELSE
2441 FND_MESSAGE.set_name( 'AHL', 'AHL_RSV_ONLY_PLN_SPF_TSK' );
2442 FND_MSG_PUB.ADD;
2443 --RAISE FND_API.G_EXC_ERROR;
2444 x_return_status := FND_API.G_RET_STS_ERROR;
2445 END IF; -- l_get_mtl_req_dtls_rec.task_status_code = 'RELEASED'
2446
2447 -- Log API exit point
2448 IF (l_log_procedure >= l_log_current_level)THEN
2449 fnd_log.string
2450 (
2451 fnd_log.level_procedure,
2452 l_debug_module||'.end',
2453 'At the end of PLSQL procedure'
2454 );
2455 END IF;
2456 END INITIALIZE_CREATE_REC;
2457
2458
2459 ---------------------------------------------------------------------------------------------------------------------
2460 -- Declare Procedures --
2461 ---------------------------------------------------------------------------------------------------------------------
2462 -- Start of Comments --
2463 -- Procedure name : TRANSFER_RESERVATION_MATRL_REQR
2464 -- Type : Private
2465 -- Function : API to transfer the reservations from one material requirement to another
2466 -- Pre-reqs :
2467 -- Standard IN Parameters :
2468 -- p_api_version IN NUMBER Required
2469 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
2470 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
2471 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
2472 -- p_module_type IN VARCHAR2 Default NULL
2473 -- Standard OUT Parameters :
2474 -- x_return_status OUT VARCHAR2 Required
2475 -- x_msg_count OUT NUMBER Required
2476 -- x_msg_data OUT VARCHAR2 Required
2477
2478 --
2479 -- TRANSFER_RESERVATION Parameters:
2480 -- p_visit_id : The id of the visit for which the reservations need to be transferred.
2481 -- p_visit_task_id : The of the Visit task
2482 -- p_from_mat_req_id : The material requirement id of the from record
2483 -- p_to_mat_req_id : The material requirement id of the to record
2484
2485 -- End of Comments.
2486 ---------------------------------------------------------------------------------------------------------------------
2487 PROCEDURE TRNSFR_RSRV_FOR_MATRL_REQR(
2488 p_api_version IN NUMBER := 1.0,
2489 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
2490 p_commit IN VARCHAR2 := FND_API.G_FALSE,
2491 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
2492 p_module_type IN VARCHAR2,
2493 x_return_status OUT NOCOPY VARCHAR2,
2494 x_msg_count OUT NOCOPY NUMBER,
2495 x_msg_data OUT NOCOPY VARCHAR2,
2496 p_visit_task_id IN NUMBER,
2497 p_from_mat_req_id IN NUMBER,
2498 p_to_mat_req_id IN NUMBER
2499 )
2500 IS
2501 -- Declare local variables
2502 l_api_name CONSTANT VARCHAR2(30) := 'TRNSFR_RSRV_FOR_MATRL_REQR';
2503
2504 l_api_version CONSTANT NUMBER := 1.0;
2505 l_init_msg_list VARCHAR2(1) := 'F';
2506 l_return_status VARCHAR2(1);
2507 l_msg_count NUMBER;
2508 l_msg_data VARCHAR2(2000);
2509
2510 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
2511
2512 l_reservation_id NUMBER;
2513 l_wip_entity_id NUMBER;
2514 l_from_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
2515 l_to_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
2516 l_from_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
2517 l_to_serial_number_tbl inv_reservation_global.serial_number_tbl_type;
2518 l_x_to_reservation_id NUMBER;
2519
2520 -- Variables to check the log level according to the coding standards
2521 l_dbg_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2522 l_proc_level NUMBER := FND_LOG.LEVEL_PROCEDURE;
2523
2524 BEGIN
2525 -- Standard start of API savepoint
2526 SAVEPOINT TRNSFR_RSRV_FOR_MATRL_REQR_PVT;
2527
2528 -- Initialize return status to success before any code logic/validation
2529 x_return_status:= FND_API.G_RET_STS_SUCCESS;
2530
2531 -- Standard call to check for call compatibility
2532 IF NOT FND_API.COMPATIBLE_API_CALL (l_api_version, p_api_version, l_api_name, G_PKG_NAME)
2533 THEN
2537 -- Initialize message list if p_init_msg_list = FND_API.G_TRUE
2534 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2535 END IF;
2536
2538 IF FND_API.TO_BOOLEAN(p_init_msg_list)
2539 THEN
2540 FND_MSG_PUB.INITIALIZE;
2541 END IF;
2542
2543 -- Log API entry point
2544 IF (l_log_procedure >= l_log_current_level)THEN
2545 fnd_log.string
2546 (
2547 fnd_log.level_procedure,
2548 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||'.begin',
2549 'At the start of PL SQL procedure '
2550 );
2551 END IF;
2552
2553 l_from_rsv_rec.demand_source_line_detail := p_from_mat_req_id;
2554 l_to_rsv_rec.demand_source_type_id := inv_reservation_global.g_source_type_inv;
2555 l_to_rsv_rec.demand_source_header_id := p_visit_task_id;
2556 l_to_rsv_rec.demand_source_line_detail := p_to_mat_req_id;
2557
2558 IF (l_log_statement >= l_log_current_level)THEN
2559 fnd_log.string
2560 (fnd_log.level_statement,'ahl.plsql.'||g_pkg_name||'.'||l_api_name,'Calling inv_reservation_pub.transfer_reservation');
2561 END IF;
2562
2563 inv_reservation_pub.transfer_reservation
2564 (
2565 p_api_version_number => l_api_version,
2566 p_init_msg_lst => l_init_msg_list,
2567 x_return_status => l_return_status,
2568 x_msg_count => l_msg_count,
2569 x_msg_data => l_msg_data,
2570 p_is_transfer_supply => fnd_api.g_false,
2571 p_original_rsv_rec => l_from_rsv_rec,
2572 p_to_rsv_rec => l_to_rsv_rec,
2573 p_original_serial_number=> l_from_serial_number_tbl,
2574 p_to_serial_number => l_to_serial_number_tbl,
2575 x_to_reservation_id => l_x_to_reservation_id
2576 );
2577
2578 -- Check for the returned status from these APIs
2579 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2580 IF (l_log_error >= l_log_current_level) THEN
2581 fnd_log.string
2582 (
2583 fnd_log.level_error,
2584 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2588 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2585 'inv_reservation_pub.transfer_reservation returned FND_API.G_EXC_ERROR'
2586 );
2587 END IF;
2589 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
2590 IF (l_log_error >= l_log_current_level) THEN
2591 fnd_log.string
2592 (
2593 fnd_log.level_error,
2594 'ahl.plsql.'||g_pkg_name||'.'||l_api_name,
2595 'inv_reservation_pub.transfer_reservation returned FND_API.G_RET_STS_ERROR'
2596 );
2597 END IF;
2598 RAISE FND_API.G_EXC_ERROR;
2599 END IF;
2600
2601 -- Log API exit point
2602 IF (l_log_procedure >= l_log_current_level)THEN
2603 fnd_log.string
2604 (
2605 fnd_log.level_procedure,
2606 l_debug_module||'.end',
2607 'At the end of PLSQL procedure'
2608 );
2609 END IF;
2610
2611 -- Check Error Message stack.
2612 x_msg_count := FND_MSG_PUB.count_msg;
2613 IF x_msg_count > 0
2614 THEN
2615 RAISE FND_API.G_EXC_ERROR;
2616 END IF;
2617
2618 -- Commit if p_commit = FND_API.G_TRUE
2619 IF FND_API.TO_BOOLEAN(p_commit)
2620 THEN
2621 COMMIT WORK;
2622 END IF;
2623
2624 -- Standard call to get message count and if count is 1, get message info
2625 FND_MSG_PUB.count_and_get
2626 (
2627 p_count => x_msg_count,
2628 p_data => x_msg_data,
2629 p_encoded => FND_API.G_FALSE
2630 );
2631
2632 EXCEPTION
2633 WHEN FND_API.G_EXC_ERROR THEN
2634 ROLLBACK TO TRNSFR_RSRV_FOR_MATRL_REQR_PVT;
2635 x_return_status := FND_API.G_RET_STS_ERROR;
2636 FND_MSG_PUB.count_and_get
2637 (
2638 p_count => x_msg_count,
2639 p_data => x_msg_data,
2640 p_encoded => FND_API.G_FALSE
2641 );
2642
2643 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2644 ROLLBACK TO TRNSFR_RSRV_FOR_MATRL_REQR_PVT;
2645 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2646 FND_MSG_PUB.count_and_get
2647 (
2648 p_count => x_msg_count,
2649 p_data => x_msg_data,
2650 p_encoded => FND_API.G_FALSE
2651 );
2652
2653 WHEN OTHERS THEN
2654 ROLLBACK TO TRNSFR_RSRV_FOR_MATRL_REQR_PVT;
2655 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2656 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2657 THEN
2658 FND_MSG_PUB.add_exc_msg
2659 (
2660 p_pkg_name => G_PKG_NAME,
2661 p_procedure_name => 'TRANSFER_RESERVATION_MATRL_REQR_PVT',
2662 p_error_text => SUBSTR(SQLERRM,1,240)
2663 );
2664 END IF;
2665 FND_MSG_PUB.count_and_get
2666 (
2667 p_count => x_msg_count,
2668 p_data => x_msg_data,
2669 p_encoded => FND_API.G_FALSE
2670 );
2671 END TRNSFR_RSRV_FOR_MATRL_REQR;
2672
2673 -- Helper procedure added by skpathak on 12-NOV-2008 for bug 7241925
2674 -- Gets the reservation (if any) that matches the scheduled_material_id+serial_number
2675 -- If p_match_serial is 'Y', also checks if the serial is already included in the reservation
2676
2677 PROCEDURE GET_MATCHING_RESERVATION(p_scheduled_material_id IN NUMBER,
2678 p_serial_number IN VARCHAR2,
2679 p_match_serial IN VARCHAR2 DEFAULT 'N',
2680 x_reservation_id OUT NOCOPY NUMBER,
2681 x_reservation_quantity OUT NOCOPY NUMBER) IS
2682 -- Declare local variables
2683 l_api_name CONSTANT VARCHAR2(30) := 'GET_MATCHING_RESERVATION';
2684 l_debug_module CONSTANT VARCHAR2(100) := 'ahl.plsql.'||G_PKG_NAME||'.'||l_api_name;
2685
2686 CURSOR get_reservation_csr IS
2687 SELECT mrsv.reservation_id, mrsv.primary_reservation_quantity
2688 FROM mtl_reservations mrsv, ahl_schedule_materials asmt, mtl_serial_numbers msn
2689 WHERE mrsv.demand_source_line_detail = p_scheduled_material_id
2690 AND mrsv.external_source_code = 'AHL'
2691 AND msn.serial_number = p_serial_number
2692 AND mrsv.organization_id = msn.current_organization_id
2693 AND mrsv.inventory_item_id = msn.inventory_item_id
2694 AND NVL(mrsv.subinventory_code, '@@@') = NVL(msn.current_subinventory_code, '@@@')
2695 AND NVL(mrsv.locator_id, -99) = NVL(msn.current_locator_id, -99)
2696 AND NVL(mrsv.revision, '@@@') = NVL(msn.revision, '@@@')
2697 AND NVL(mrsv.lot_number, '@@@') = NVL(msn.lot_number, '@@@')
2698 AND NVL(mrsv.lpn_id, -99) = NVL(msn.lpn_id, -99)
2699 AND ((p_match_serial = 'N') OR (mrsv.reservation_id = msn.reservation_id))
2700 AND mrsv.demand_source_line_detail = asmt.scheduled_material_id
2701 AND mrsv.organization_id = asmt.organization_id
2702 AND mrsv.requirement_date = asmt.requested_date
2703 AND mrsv.inventory_item_id = asmt.inventory_item_id;
2704 BEGIN
2705
2706 -- Log API exit point
2707 IF (l_log_procedure >= l_log_current_level) THEN
2708 fnd_log.string(fnd_log.level_procedure, l_debug_module||'.start',
2709 'At the start of PLSQL procedure, p_scheduled_material_id = ' || p_scheduled_material_id ||
2710 ', p_serial_number = ' || p_serial_number);
2711 END IF;
2712
2713 OPEN get_reservation_csr;
2714 FETCH get_reservation_csr INTO x_reservation_id, x_reservation_quantity;
2715 CLOSE get_reservation_csr;
2716
2717 -- Log API exit point
2718 IF (l_log_procedure >= l_log_current_level) THEN
2719 fnd_log.string(fnd_log.level_procedure, l_debug_module||'.end',
2720 'At the end of PLSQL procedure, x_reservation_id = ' || x_reservation_id ||
2721 ', x_reservation_quantity = ' || x_reservation_quantity);
2722 END IF;
2723 END GET_MATCHING_RESERVATION;
2724
2725 END AHL_RSV_RESERVATIONS_PVT;