[Home] [Help]
PACKAGE BODY: APPS.AHL_PP_MATERIALS_PVT
Source
1 PACKAGE BODY AHL_PP_MATERIALS_PVT AS
2 /* $Header: AHLVPPMB.pls 120.25.12020000.2 2012/12/07 11:33:38 sareepar ship $*/
3 --
4 -----------------------
5 -- Declare Constants --
6 -----------------------
7 G_PKG_NAME VARCHAR2(30) := 'AHL_PP_MATERIALS_PVT';
8 G_DEBUG VARCHAR2(1) := AHL_DEBUG_PUB.is_log_enabled;
9 -------------------------------------------------
10 -- Declare Locally used Record and Table Types --
11 -------------------------------------------------
12 ------------------------------
13 -- Declare Local Procedures --
14 ------------------------------
15 -- Procedure to get organization ID
16 PROCEDURE Check_org_name_Or_Id
17 (p_organization_id IN NUMBER,
18 p_org_name IN VARCHAR2,
19 x_organization_id OUT NOCOPY NUMBER,
20 x_return_status OUT NOCOPY VARCHAR2,
21 x_error_msg_code OUT NOCOPY VARCHAR2
22 );
23 -- Procedure to get department ID
24 PROCEDURE Check_dept_desc_Or_Id
25 (p_organization_id IN NUMBER,
26 p_org_name IN VARCHAR2,
27 p_department_id IN NUMBER,
28 p_dept_description IN VARCHAR2,
29 x_department_id OUT NOCOPY NUMBER,
30 x_return_status OUT NOCOPY VARCHAR2,
31 x_error_msg_code OUT NOCOPY VARCHAR2
32 );
33 -- Procedure to get visit task ID
34 PROCEDURE Get_visit_task_Id
35 (p_workorder_id IN NUMBER,
36 x_visit_task_id OUT NOCOPY NUMBER,
37 x_return_status OUT NOCOPY VARCHAR2,
38 x_error_msg_code OUT NOCOPY VARCHAR2
39 );
40 -- Procedure to get inventory item ID
41 PROCEDURE Get_inventory_item_Id
42 (p_inventory_item_id IN NUMBER,
43 p_concatenated_segments IN VARCHAR2,
44 p_organization_id IN NUMBER,
45 x_inventory_item_id OUT NOCOPY NUMBER,
46 x_return_status OUT NOCOPY VARCHAR2,
47 x_error_msg_code OUT NOCOPY VARCHAR2
48 );
49 -- Procedure to get visit task details
50 PROCEDURE Get_visit_task_details
51 ( p_visit_task_id IN NUMBER,
52 x_visit_id OUT NOCOPY NUMBER,
53 x_organization_id OUT NOCOPY NUMBER,
54 x_department_id OUT NOCOPY NUMBER,
55 x_project_task_id OUT NOCOPY NUMBER,
56 x_project_id OUT NOCOPY NUMBER
57 );
58 PROCEDURE Get_workorder_Id
59 (p_workorder_id IN NUMBER,
60 p_job_number IN VARCHAR2,
61 x_workorder_id OUT NOCOPY NUMBER,
62 x_return_status OUT NOCOPY VARCHAR2,
63 x_error_msg_code OUT NOCOPY VARCHAR2
64 );
65 PROCEDURE Get_workorder_operation_Id
66 (p_workorder_id IN NUMBER,
67 p_operation_sequence IN NUMBER,
68 x_workorder_operation_id OUT NOCOPY NUMBER,
69 x_return_status OUT NOCOPY VARCHAR2,
70 x_error_msg_code OUT NOCOPY VARCHAR2
71 );
72 TYPE dff_default_values_type IS RECORD
73 (
74 ATTRIBUTE_CATEGORY VARCHAR2(30),
75 ATTRIBUTE1 VARCHAR2(150),
76 ATTRIBUTE2 VARCHAR2(150),
77 ATTRIBUTE3 VARCHAR2(150),
78 ATTRIBUTE4 VARCHAR2(150),
79 ATTRIBUTE5 VARCHAR2(150),
80 ATTRIBUTE6 VARCHAR2(150),
81 ATTRIBUTE7 VARCHAR2(150),
82 ATTRIBUTE8 VARCHAR2(150),
83 ATTRIBUTE9 VARCHAR2(150),
84 ATTRIBUTE10 VARCHAR2(150),
85 ATTRIBUTE11 VARCHAR2(150),
86 ATTRIBUTE12 VARCHAR2(150),
87 ATTRIBUTE13 VARCHAR2(150),
88 ATTRIBUTE14 VARCHAR2(150),
89 ATTRIBUTE15 VARCHAR2(150)
90 );
91 PROCEDURE get_dff_default_values
92 (
93 p_req_material_rec IN REQ_MATERIAL_REC_TYPE,
94 flex_fields_defaults OUT NOCOPY dff_default_values_type
95 );
96 --sukhwsin: procedure declaration for SB Effectivity - starts
97 PROCEDURE Get_mc_header_id
98 (p_mc_header_id IN NUMBER,
99 p_mc_name IN VARCHAR2,
100 p_workorder_id IN NUMBER,
101 x_mc_header_id OUT NOCOPY NUMBER,
102 x_return_status OUT NOCOPY VARCHAR2,
103 x_msg_data OUT NOCOPY VARCHAR2
104 );
105 PROCEDURE Get_mc_position_key
106 (p_mc_header_id IN NUMBER,
107 p_mc_position IN VARCHAR2,
108 p_mc_position_key IN NUMBER,
109 x_mc_position_key OUT NOCOPY NUMBER,
110 x_relationship_id OUT NOCOPY NUMBER,
111 x_return_status OUT NOCOPY VARCHAR2,
112 x_msg_data OUT NOCOPY VARCHAR2
113 );
114 PROCEDURE Get_item_group_id
115 (p_item_group_name IN VARCHAR2,
116 p_item_group_id IN NUMBER,
117 x_item_group_id OUT NOCOPY NUMBER,
118 x_return_status OUT NOCOPY VARCHAR2,
119 x_msg_data OUT NOCOPY VARCHAR2
120 );
121 PROCEDURE Get_item_Id_from_item_group
122 (p_item_group_id IN NUMBER,
123 p_inventory_item_id IN NUMBER,
124 p_concatenated_segments IN VARCHAR2,
125 p_organization_id IN NUMBER,
126 x_inventory_item_id OUT NOCOPY NUMBER,
127 x_return_status OUT NOCOPY VARCHAR2,
128 x_msg_data OUT NOCOPY VARCHAR2
129 );
130 PROCEDURE Get_item_Id_from_mc_pos
131 (p_relationship_id IN NUMBER,
132 p_inventory_item_id IN NUMBER,
133 p_concatenated_segments IN VARCHAR2,
134 p_organization_id IN NUMBER,
135 x_inventory_item_id OUT NOCOPY NUMBER,
136 x_return_status OUT NOCOPY VARCHAR2,
137 x_msg_data OUT NOCOPY VARCHAR2
138 );
139 PROCEDURE Validate_mat_req_record
140 ( p_mc_header_id IN NUMBER,
141 p_mc_position_key IN NUMBER,
142 p_item_group_id IN NUMBER,
143 p_inventory_item_id IN NUMBER,
144 x_return_status OUT NOCOPY VARCHAR2,
145 x_msg_data OUT NOCOPY VARCHAR2
146 );
147 --sukhwsin: procedure declaration for SB Effectivity - ends
148 -------------------------------------
149 -- End Local Procedures Declaration--
150 -------------------------------------
151 PROCEDURE Check_org_name_Or_Id
152 (p_organization_id IN NUMBER,
153 p_org_name IN VARCHAR2,
154 x_organization_id OUT NOCOPY NUMBER,
155 x_return_status OUT NOCOPY VARCHAR2,
156 x_error_msg_code OUT NOCOPY VARCHAR2
157 )
158 IS
159 BEGIN
160 IF (p_organization_id IS NOT NULL AND
161 p_organization_id <> FND_API.G_MISS_NUM)
162 THEN
163 SELECT organization_id
164 INTO x_organization_id
165 FROM HR_ALL_ORGANIZATION_UNITS
166 WHERE organization_id = p_organization_id;
167 ELSE
168 SELECT organization_id
169 INTO x_organization_id
170 FROM HR_ALL_ORGANIZATION_UNITS
171 WHERE NAME = p_org_name;
172 END IF;
173 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
174 EXCEPTION
175 WHEN NO_DATA_FOUND THEN
176 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
177 x_error_msg_code:= 'AHL_PP_ORG_ID_NOT_EXISTS';
178 WHEN TOO_MANY_ROWS THEN
179 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
180 x_error_msg_code:= 'AHL_PP_ORG_ID_NOT_EXISTS';
181 WHEN OTHERS THEN
182 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
183 RAISE;
184 END Check_org_name_Or_Id;
185 --
186 PROCEDURE Check_dept_desc_Or_Id
187 (p_organization_id IN NUMBER,
188 p_org_name IN VARCHAR2,
189 p_department_id IN NUMBER,
190 p_dept_description IN VARCHAR2,
191 x_department_id OUT NOCOPY NUMBER,
192 x_return_status OUT NOCOPY VARCHAR2,
193 x_error_msg_code OUT NOCOPY VARCHAR2
194 )
195 IS
196 BEGIN
197 IF (p_department_id IS NOT NULL AND
198 p_department_id <> FND_API.G_MISS_NUM)
199 THEN
200 SELECT department_id
201 INTO x_department_id
202 FROM BOM_DEPARTMENTS
203 WHERE organization_id = p_organization_id
204 AND department_id = p_department_id;
205 ELSE
206 --
207 SELECT department_id
208 INTO x_department_id
209 FROM BOM_DEPARTMENTS
210 WHERE organization_id = p_organization_id
211 AND description = p_dept_description;
212 END IF;
213 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
214 EXCEPTION
215 WHEN NO_DATA_FOUND THEN
216 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
217 x_error_msg_code:= 'AHL_PP_DEPT_ID_NOT_EXIST';
218 WHEN TOO_MANY_ROWS THEN
219 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
220 x_error_msg_code:= 'AHL_PP_DEPT_ID_NOT_EXIST';
221 WHEN OTHERS THEN
222 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
223 RAISE;
224 END Check_dept_desc_Or_Id;
225 --
226 PROCEDURE Get_visit_task_Id
227 (p_workorder_id IN NUMBER,
228 x_visit_task_id OUT NOCOPY NUMBER,
229 x_return_status OUT NOCOPY VARCHAR2,
230 x_error_msg_code OUT NOCOPY VARCHAR2
231 ) IS
232 BEGIN
233 IF (p_workorder_id IS NOT NULL AND
234 p_workorder_id <> FND_API.G_MISS_NUM) THEN
235 SELECT visit_task_id INTO x_visit_task_id
236 FROM AHL_WORKORDERS
237 WHERE workorder_id = p_workorder_id;
238 END IF;
239 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
240 IF G_DEBUG='Y' THEN
241 AHL_DEBUG_PUB.debug( 'XVISITTASK:'|| x_visit_task_id);
242 END IF;
243 EXCEPTION
244 WHEN NO_DATA_FOUND THEN
245 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
246 x_error_msg_code:= 'AHL_PP_TASK_ID_NOT_EXIST';
247 WHEN TOO_MANY_ROWS THEN
248 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
249 x_error_msg_code:= 'AHL_PP_TASK_ID_NOT_EXIST';
250 WHEN OTHERS THEN
251 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
252 RAISE;
253 END Get_visit_task_Id;
254 --
255 PROCEDURE Get_workorder_Id
256 (p_workorder_id IN NUMBER,
257 p_job_number IN VARCHAR2,
258 x_workorder_id OUT NOCOPY NUMBER,
259 x_return_status OUT NOCOPY VARCHAR2,
260 x_error_msg_code OUT NOCOPY VARCHAR2
261 ) IS
262 --
263 BEGIN
264 --
265 IF p_workorder_id IS NOT NULL THEN
266 --
267 SELECT workorder_id INTO x_workorder_id
268 FROM AHL_WORKORDERS
269 WHERE workorder_id = p_workorder_id;
270 ELSE
271 --
272 SELECT workorder_id INTO x_workorder_id
273 FROM AHL_WORKORDERS
274 WHERE workorder_name = p_job_number;
275 END IF;
276 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
277 IF G_DEBUG='Y' THEN
278 AHL_DEBUG_PUB.debug( 'XWOID:'|| x_workorder_id);
279 END IF;
280 EXCEPTION
281 WHEN NO_DATA_FOUND THEN
282 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
283 x_error_msg_code:= 'AHL_PP_WO_ID_NOT_EXIST';
284 WHEN TOO_MANY_ROWS THEN
285 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
286 x_error_msg_code:= 'AHL_PP_WO_ID_NOT_EXIST';
287 WHEN OTHERS THEN
288 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
289 RAISE;
290 END Get_workorder_Id;
291 --
292 PROCEDURE Get_workorder_operation_Id
293 (p_workorder_id IN NUMBER,
294 p_operation_sequence IN NUMBER,
295 x_workorder_operation_id OUT NOCOPY NUMBER,
296 x_return_status OUT NOCOPY VARCHAR2,
297 x_error_msg_code OUT NOCOPY VARCHAR2
298 ) IS
299 BEGIN
300 IF (p_workorder_id IS NOT NULL AND
301 p_operation_sequence IS NOT NULL) THEN
302 --
303 SELECT workorder_operation_id INTO x_workorder_operation_id
304 FROM AHL_WORKORDER_OPERATIONS
305 WHERE workorder_id = p_workorder_id
306 AND operation_sequence_num = p_operation_sequence;
307 --
308 END IF;
309 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
310 EXCEPTION
311 WHEN NO_DATA_FOUND THEN
312 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
313 x_error_msg_code:= 'AHL_PP_WO_OP_ID_NOT_EXIST';
314 WHEN TOO_MANY_ROWS THEN
315 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
316 x_error_msg_code:= 'AHL_PP_WO_OP_ID_NOT_EXIST';
317 WHEN OTHERS THEN
318 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
319 RAISE;
320 END Get_workorder_operation_Id;
321 --
322 PROCEDURE Get_inventory_item_Id
323 (p_inventory_item_id IN NUMBER,
324 p_concatenated_segments IN VARCHAR2,
325 p_organization_id IN NUMBER,
326 x_inventory_item_id OUT NOCOPY NUMBER,
327 x_return_status OUT NOCOPY VARCHAR2,
328 x_error_msg_code OUT NOCOPY VARCHAR2
329 ) IS
330 BEGIN
331 IF (p_inventory_item_id IS NOT NULL AND
332 p_inventory_item_id <> FND_API.G_MISS_NUM) THEN
333 --
334 SELECT inventory_item_id INTO x_inventory_item_id
335 FROM MTL_SYSTEM_ITEMS_KFV
336 WHERE inventory_item_id = p_inventory_item_id
337 AND organization_id = p_organization_id
338 AND inventory_item_flag = 'Y'
339 AND stock_enabled_flag = 'Y'
340 AND mtl_transactions_enabled_flag = 'Y'
341 AND nvl(enabled_flag,'N') = 'Y'
342 AND trunc(sysdate) between trunc(nvl(start_date_active, sysdate)) and trunc(nvl(end_date_active, sysdate));
343 ELSE
344 --
345 SELECT inventory_item_id INTO x_inventory_item_id
346 FROM MTL_SYSTEM_ITEMS_KFV
347 WHERE concatenated_segments = p_concatenated_segments
348 AND organization_id = p_organization_id
349 AND inventory_item_flag = 'Y'
350 AND stock_enabled_flag = 'Y'
351 AND mtl_transactions_enabled_flag = 'Y'
352 AND nvl(enabled_flag,'N') = 'Y'
353 AND trunc(sysdate) between trunc(nvl(start_date_active, sysdate)) and trunc(nvl(end_date_active, sysdate));
354 END IF;
355 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
356 EXCEPTION
357 WHEN NO_DATA_FOUND THEN
358 x_return_status:= Fnd_Api.G_RET_STS_ERROR;
359 x_error_msg_code:= 'AHL_PP_INVALID_ITEM';
360 WHEN OTHERS THEN
361 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
362 RAISE;
363 END Get_inventory_item_Id;
364 --
365 PROCEDURE Get_visit_task_details
366 ( p_visit_task_id IN NUMBER,
367 x_visit_id OUT NOCOPY NUMBER,
368 x_organization_id OUT NOCOPY NUMBER,
369 x_department_id OUT NOCOPY NUMBER,
370 x_project_task_id OUT NOCOPY NUMBER,
371 x_project_id OUT NOCOPY NUMBER
372 )
373 IS
374 CURSOR get_visit_task_cur (c_visit_task_id IN NUMBER)
375 IS
376 SELECT visit_id,
377 department_id,project_task_id
378 FROM ahl_visit_tasks_b
379 WHERE visit_task_id = c_visit_task_id;
380 --
381 CURSOR get_org_details_cur(c_visit_id IN NUMBER)
382 IS
383 SELECT organization_id,department_id,
384 project_id
385 FROM ahl_visits_b
386 WHERE visit_id = c_visit_id;
387 --
388 l_visit_id NUMBER;
389 l_department_id NUMBER;
390 l_vdepartment_id NUMBER;
391 l_project_task_id NUMBER;
392 l_project_id NUMBER;
393 l_organization_id NUMBER;
394 l_schedule_designator VARCHAR2(10);
395 --
396 BEGIN
397 OPEN get_visit_task_cur(p_visit_task_id);
398 FETCH get_visit_task_cur INTO l_visit_id,l_department_id,l_project_task_id;
399 CLOSE get_visit_task_cur;
400 IF l_visit_id IS NOT NULL THEN
401 OPEN get_org_details_cur (l_visit_id);
402 FETCH get_org_details_cur INTO l_organization_id, l_vdepartment_id,
403 l_project_id;
404 CLOSE get_org_details_cur;
405 END IF;
406 --Assign
407 x_organization_id := l_organization_id;
408 x_department_id := nvl(l_department_id,l_vdepartment_id);
409 x_visit_id := l_visit_id;
410 x_project_task_id := l_project_task_id;
411 x_project_id := l_project_id;
412 END Get_visit_task_details;
413 -- Insert procedure to create record in to schedule materials
414 PROCEDURE Insert_Row (
415 X_SCHEDULED_MATERIAL_ID IN NUMBER,
416 X_OBJECT_VERSION_NUMBER IN NUMBER,
417 X_INVENTORY_ITEM_ID IN VARCHAR2,
418 X_SCHEDULE_DESIGNATOR IN VARCHAR2,
419 X_VISIT_ID IN NUMBER,
420 X_VISIT_START_DATE IN DATE,
421 X_VISIT_TASK_ID IN NUMBER,
422 X_ORGANIZATION_ID IN NUMBER,
423 X_SCHEDULED_DATE IN DATE,
424 X_REQUEST_ID IN NUMBER,
425 X_REQUESTED_DATE IN DATE,
426 X_SCHEDULED_QUANTITY IN NUMBER,
427 X_PROCESS_STATUS IN NUMBER,
428 X_ERROR_MESSAGE IN VARCHAR2,
429 X_TRANSACTION_ID IN NUMBER,
430 X_UOM IN VARCHAR2,
431 X_RT_OPER_MATERIAL_ID IN NUMBER,
432 X_OPERATION_CODE IN VARCHAR2,
433 X_OPERATION_SEQUENCE IN NUMBER,
434 X_ITEM_GROUP_ID IN NUMBER,
435 X_REQUESTED_QUANTITY IN NUMBER,
436 X_PROGRAM_ID IN NUMBER,
437 X_PROGRAM_UPDATE_DATE IN DATE,
438 X_LAST_UPDATED_DATE IN DATE,
439 X_WORKORDER_OPERATION_ID IN NUMBER,
440 X_MATERIAL_REQUEST_TYPE IN VARCHAR2,
441 X_STATUS IN VARCHAR2,
442 X_ATTRIBUTE_CATEGORY IN VARCHAR2,
443 X_ATTRIBUTE1 IN VARCHAR2,
444 X_ATTRIBUTE2 IN VARCHAR2,
445 X_ATTRIBUTE3 IN VARCHAR2,
446 X_ATTRIBUTE4 IN VARCHAR2,
447 X_ATTRIBUTE5 IN VARCHAR2,
448 X_ATTRIBUTE6 IN VARCHAR2,
449 X_ATTRIBUTE7 IN VARCHAR2,
450 X_ATTRIBUTE8 IN VARCHAR2,
451 X_ATTRIBUTE9 IN VARCHAR2,
452 X_ATTRIBUTE10 IN VARCHAR2,
453 X_ATTRIBUTE11 IN VARCHAR2,
454 X_ATTRIBUTE12 IN VARCHAR2,
455 X_ATTRIBUTE13 IN VARCHAR2,
456 X_ATTRIBUTE14 IN VARCHAR2,
457 X_ATTRIBUTE15 IN VARCHAR2,
458 X_CREATION_DATE IN DATE,
459 X_CREATED_BY IN NUMBER,
460 X_LAST_UPDATE_DATE IN DATE,
461 X_LAST_UPDATED_BY IN NUMBER,
462 X_LAST_UPDATE_LOGIN IN NUMBER,
463 --sukhwsin: SB Effectivity Code changes - starts
464 X_MC_HEADER_ID IN NUMBER,
465 X_POSITION_KEY IN NUMBER,
466 X_RELATIONSHIP_ID IN NUMBER,
467 --sukhwsin: SB Effectivity Code changes - ends
468 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
469 X_AOG_FLAG IN VARCHAR2
470 ) IS
471 BEGIN
472 INSERT INTO AHL_SCHEDULE_MATERIALS (
473 SCHEDULED_MATERIAL_ID,
474 OBJECT_VERSION_NUMBER,
475 LAST_UPDATE_DATE,
476 LAST_UPDATED_BY,
477 CREATION_DATE,
478 CREATED_BY,
479 LAST_UPDATE_LOGIN,
480 INVENTORY_ITEM_ID,
481 SCHEDULE_DESIGNATOR,
482 VISIT_ID,
483 VISIT_START_DATE,
484 VISIT_TASK_ID,
485 ORGANIZATION_ID,
486 SCHEDULED_DATE,
487 REQUEST_ID,
488 REQUESTED_DATE,
489 SCHEDULED_QUANTITY,
490 PROCESS_STATUS,
491 ERROR_MESSAGE,
492 TRANSACTION_ID,
493 UOM,
494 RT_OPER_MATERIAL_ID,
495 OPERATION_CODE,
496 OPERATION_SEQUENCE,
497 ITEM_GROUP_ID,
498 REQUESTED_QUANTITY,
499 PROGRAM_ID,
500 PROGRAM_UPDATE_DATE,
501 LAST_UPDATED_DATE,
502 WORKORDER_OPERATION_ID,
503 MATERIAL_REQUEST_TYPE,
504 STATUS,
505 ATTRIBUTE_CATEGORY,
506 ATTRIBUTE1,
507 ATTRIBUTE2,
508 ATTRIBUTE3,
509 ATTRIBUTE4,
510 ATTRIBUTE5,
511 ATTRIBUTE6,
512 ATTRIBUTE7,
513 ATTRIBUTE8,
514 ATTRIBUTE9,
515 ATTRIBUTE10,
516 ATTRIBUTE11,
517 ATTRIBUTE12,
518 ATTRIBUTE13,
519 ATTRIBUTE14,
520 ATTRIBUTE15,
521 --sukhwsin: SB Effectivity Code changes - starts
522 MC_HEADER_ID,
523 POSITION_KEY,
524 RELATIONSHIP_ID,
525 --sukhwsin: SB Effectivity Code changes - ends
526 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
527 AOG_FLAG
528 )
529 VALUES(
530 X_SCHEDULED_MATERIAL_ID,
531 X_OBJECT_VERSION_NUMBER,
532 X_LAST_UPDATE_DATE,
533 X_LAST_UPDATED_BY,
534 X_CREATION_DATE,
535 X_CREATED_BY,
536 X_LAST_UPDATE_LOGIN,
537 X_INVENTORY_ITEM_ID,
538 X_SCHEDULE_DESIGNATOR,
539 X_VISIT_ID,
540 X_VISIT_START_DATE,
541 X_VISIT_TASK_ID,
542 X_ORGANIZATION_ID,
543 X_SCHEDULED_DATE,
544 X_REQUEST_ID,
545 -- AnRaj: truncating Requested Date for Material Requirement based on discussions with PM
546 trunc(X_REQUESTED_DATE),
547 X_SCHEDULED_QUANTITY,
548 X_PROCESS_STATUS,
549 X_ERROR_MESSAGE,
550 X_TRANSACTION_ID,
551 X_UOM,
552 X_RT_OPER_MATERIAL_ID,
553 X_OPERATION_CODE,
554 X_OPERATION_SEQUENCE,
555 X_ITEM_GROUP_ID,
556 X_REQUESTED_QUANTITY,
557 X_PROGRAM_ID,
558 X_PROGRAM_UPDATE_DATE,
559 X_LAST_UPDATED_DATE,
560 X_WORKORDER_OPERATION_ID,
561 X_MATERIAL_REQUEST_TYPE,
562 X_STATUS,
563 X_ATTRIBUTE_CATEGORY,
564 X_ATTRIBUTE1,
565 X_ATTRIBUTE2,
566 X_ATTRIBUTE3,
567 X_ATTRIBUTE4,
568 X_ATTRIBUTE5,
569 X_ATTRIBUTE6,
570 X_ATTRIBUTE7,
571 X_ATTRIBUTE8,
572 X_ATTRIBUTE9,
573 X_ATTRIBUTE10,
574 X_ATTRIBUTE11,
575 X_ATTRIBUTE12,
576 X_ATTRIBUTE13,
577 X_ATTRIBUTE14,
578 X_ATTRIBUTE15,
579 --sukhwsin: SB Effectivity Code changes - starts
580 X_MC_HEADER_ID,
581 X_POSITION_KEY,
582 X_RELATIONSHIP_ID,
583 --sukhwsin: SB Effectivity Code changes - ends
584 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
585 X_AOG_FLAG
586 );
587 --
588 END Insert_Row;
589 --Update procedure to update record in schedule materials entity
590 PROCEDURE UPDATE_ROW (
591 X_SCHEDULED_MATERIAL_ID IN NUMBER,
592 X_OBJECT_VERSION_NUMBER IN NUMBER,
593 X_INVENTORY_ITEM_ID IN VARCHAR2,
594 X_SCHEDULE_DESIGNATOR IN VARCHAR2,
595 X_VISIT_ID IN NUMBER,
596 X_VISIT_START_DATE IN DATE,
597 X_VISIT_TASK_ID IN NUMBER,
598 X_ORGANIZATION_ID IN NUMBER,
599 X_SCHEDULED_DATE IN DATE,
600 X_REQUEST_ID IN NUMBER,
601 X_REQUESTED_DATE IN DATE,
602 X_SCHEDULED_QUANTITY IN NUMBER,
603 X_PROCESS_STATUS IN NUMBER,
604 X_ERROR_MESSAGE IN VARCHAR2,
605 X_TRANSACTION_ID IN NUMBER,
606 X_UOM IN VARCHAR2,
607 X_RT_OPER_MATERIAL_ID IN NUMBER,
608 X_OPERATION_CODE IN VARCHAR2,
609 X_OPERATION_SEQUENCE IN NUMBER,
610 X_ITEM_GROUP_ID IN NUMBER,
611 X_REQUESTED_QUANTITY IN NUMBER,
612 X_PROGRAM_ID IN NUMBER,
613 X_PROGRAM_UPDATE_DATE IN DATE,
614 X_LAST_UPDATED_DATE IN DATE,
615 X_ATTRIBUTE_CATEGORY IN VARCHAR2,
616 X_ATTRIBUTE1 IN VARCHAR2,
617 X_ATTRIBUTE2 IN VARCHAR2,
618 X_ATTRIBUTE3 IN VARCHAR2,
619 X_ATTRIBUTE4 IN VARCHAR2,
620 X_ATTRIBUTE5 IN VARCHAR2,
621 X_ATTRIBUTE6 IN VARCHAR2,
622 X_ATTRIBUTE7 IN VARCHAR2,
623 X_ATTRIBUTE8 IN VARCHAR2,
624 X_ATTRIBUTE9 IN VARCHAR2,
625 X_ATTRIBUTE10 IN VARCHAR2,
626 X_ATTRIBUTE11 IN VARCHAR2,
627 X_ATTRIBUTE12 IN VARCHAR2,
628 X_ATTRIBUTE13 IN VARCHAR2,
629 X_ATTRIBUTE14 IN VARCHAR2,
630 X_ATTRIBUTE15 IN VARCHAR2,
631 X_CREATION_DATE IN DATE,
632 X_CREATED_BY IN NUMBER,
633 X_LAST_UPDATE_DATE IN DATE,
634 X_LAST_UPDATED_BY IN NUMBER,
635 X_LAST_UPDATE_LOGIN IN NUMBER,
636 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
637 X_AOG_FLAG IN VARCHAR2
638 ) IS
639 BEGIN
640 UPDATE AHL_SCHEDULE_MATERIALS SET
641 OBJECT_VERSION_NUMBER = X_OBJECT_VERSION_NUMBER + 1,
642 INVENTORY_ITEM_ID = X_INVENTORY_ITEM_ID,
643 SCHEDULE_DESIGNATOR = X_SCHEDULE_DESIGNATOR,
644 VISIT_ID = X_VISIT_ID,
645 VISIT_START_DATE = X_VISIT_START_DATE,
646 VISIT_TASK_ID = X_VISIT_TASK_ID,
647 ORGANIZATION_ID = X_ORGANIZATION_ID,
648 SCHEDULED_DATE = X_SCHEDULED_DATE,
649 REQUEST_ID = X_REQUEST_ID,
650 -- AnRaj: truncating Requested Date for Material Requirement based on discussions with PM
651 REQUESTED_DATE = trunc(X_REQUESTED_DATE),
652 SCHEDULED_QUANTITY = X_SCHEDULED_QUANTITY,
653 PROCESS_STATUS = X_PROCESS_STATUS,
654 ERROR_MESSAGE = X_ERROR_MESSAGE,
655 TRANSACTION_ID = X_TRANSACTION_ID,
656 UOM = X_UOM,
657 RT_OPER_MATERIAL_ID = X_RT_OPER_MATERIAL_ID,
658 OPERATION_CODE = X_OPERATION_CODE,
659 OPERATION_SEQUENCE = X_OPERATION_SEQUENCE,
660 ITEM_GROUP_ID = X_ITEM_GROUP_ID,
661 REQUESTED_QUANTITY = X_REQUESTED_QUANTITY,
662 PROGRAM_ID = X_PROGRAM_ID,
663 PROGRAM_UPDATE_DATE = X_PROGRAM_UPDATE_DATE,
664 LAST_UPDATED_DATE = X_LAST_UPDATED_DATE,
665 ATTRIBUTE_CATEGORY = X_ATTRIBUTE_CATEGORY,
666 ATTRIBUTE1 = X_ATTRIBUTE1,
667 ATTRIBUTE2 = X_ATTRIBUTE2,
668 ATTRIBUTE3 = X_ATTRIBUTE3,
669 ATTRIBUTE4 = X_ATTRIBUTE4,
670 ATTRIBUTE5 = X_ATTRIBUTE5,
671 ATTRIBUTE6 = X_ATTRIBUTE6,
672 ATTRIBUTE7 = X_ATTRIBUTE7,
673 ATTRIBUTE8 = X_ATTRIBUTE8,
674 ATTRIBUTE9 = X_ATTRIBUTE9,
675 ATTRIBUTE10 = X_ATTRIBUTE10,
676 ATTRIBUTE11 = X_ATTRIBUTE11,
677 ATTRIBUTE12 = X_ATTRIBUTE12,
678 ATTRIBUTE13 = X_ATTRIBUTE13,
679 ATTRIBUTE14 = X_ATTRIBUTE14,
680 ATTRIBUTE15 = X_ATTRIBUTE15,
681 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
682 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
683 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
684 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
685 AOG_FLAG = X_AOG_FLAG
686 WHERE SCHEDULED_MATERIAL_ID = X_SCHEDULED_MATERIAL_ID
687 AND OBJECT_VERSION_NUMBER=X_OBJECT_VERSION_NUMBER;
688 IF SQL%rowcount=0 THEN
689 Fnd_Message.SET_NAME('AHL','AHL_COM_RECORD_CHANGED');
690 Fnd_Msg_Pub.ADD;
691 END IF;
692 END UPDATE_ROW;
693 -- Delete procedure to remove record from schedule materials
694 PROCEDURE DELETE_ROW (
695 X_SCHEDULED_MATERIAL_ID IN NUMBER
696 ) IS
697 BEGIN
698 DELETE FROM AHL_SCHEDULE_MATERIALS
699 WHERE SCHEDULED_MATERIAL_ID = X_SCHEDULED_MATERIAL_ID;
700 END DELETE_ROW;
701 --sukhwsin: procedures added for SB Effectivity - starts
702 --Procedure to get mc_header_id from id or value
703 PROCEDURE Get_mc_header_id
704 (p_mc_header_id IN NUMBER,
705 p_mc_name IN VARCHAR2,
706 p_workorder_id IN NUMBER,
707 x_mc_header_id OUT NOCOPY NUMBER,
708 x_return_status OUT NOCOPY VARCHAR2,
709 x_msg_data OUT NOCOPY VARCHAR2
710 ) IS
711 --Get unit name cursor
712 CURSOR Get_Wo_Unit_Name_cur(c_workorder_id IN NUMBER)
713 IS
714 SELECT unit_name
715 FROM AHL_WORKORDER_TASKS_V
716 WHERE workorder_id = c_workorder_id and rownum =1;
717 CURSOR Get_rec_from_id (c_unit_name VARCHAR2, c_mc_header_id NUMBER)
718 IS
719 SELECT DISTINCT
720 AMH.MC_HEADER_ID
721 FROM
722 AHL_MC_HEADERS_VL AMH,
723 AHL_UNIT_CONFIG_HEADERS AUCH
724 WHERE
725 AMH.MC_HEADER_ID = AUCH.MASTER_CONFIG_ID AND
726 AUCH.CSI_ITEM_INSTANCE_ID IN (
727 SELECT SUBJECT_ID /* INSTANCE_ID OF ALL CHILD NODES (INCLUDING RECURSIVE NODES FROM SUB-CONFIG.) */
728 FROM CSI_II_RELATIONSHIPS
729 WHERE NVL(ACTIVE_END_DATE,SYSDATE + 1) > SYSDATE
730 START WITH OBJECT_ID IN
731 (SELECT CSI_ITEM_INSTANCE_ID /*PARENT NODE INSTANCEID */
732 FROM AHL_UNIT_CONFIG_HEADERS
733 WHERE NAME = c_unit_name) /*:UC_NAME */
734 CONNECT BY PRIOR SUBJECT_ID = OBJECT_ID
735 UNION
736 SELECT /*PARENT NODE INSTANCEID */
737 CSI_ITEM_INSTANCE_ID
738 FROM
739 AHL_UNIT_CONFIG_HEADERS
740 WHERE
741 NAME = c_unit_name ) AND
742 AMH.MC_HEADER_ID = c_mc_header_id ;
743 CURSOR Get_rec_from_value (c_unit_name VARCHAR2, c_mc_name VARCHAR2)
744 IS
745 SELECT DISTINCT
746 AMH.MC_HEADER_ID
747 FROM
748 AHL_MC_HEADERS_VL AMH,
749 AHL_UNIT_CONFIG_HEADERS AUCH
750 WHERE
751 AMH.MC_HEADER_ID = AUCH.MASTER_CONFIG_ID AND
752 AUCH.CSI_ITEM_INSTANCE_ID IN (
753 SELECT SUBJECT_ID /* INSTANCE_ID OF ALL CHILD NODES (INCLUDING RECURSIVE NODES FROM SUB-CONFIG.) */
754 FROM CSI_II_RELATIONSHIPS
755 WHERE NVL(ACTIVE_END_DATE,SYSDATE + 1) > SYSDATE
756 START WITH OBJECT_ID IN
757 (SELECT CSI_ITEM_INSTANCE_ID /*PARENT NODE INSTANCEID */
758 FROM AHL_UNIT_CONFIG_HEADERS
759 WHERE NAME = c_unit_name) /*:UC_NAME */
760 CONNECT BY PRIOR SUBJECT_ID = OBJECT_ID
761 UNION
762 SELECT /*PARENT NODE INSTANCEID */
763 CSI_ITEM_INSTANCE_ID
764 FROM
765 AHL_UNIT_CONFIG_HEADERS
766 WHERE
767 NAME = c_unit_name ) AND
768 AMH.NAME = c_mc_name ;
769 l_unit_name VARCHAR2(80);
770 BEGIN
771 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
772 --Get unit name
773 OPEN Get_Wo_Unit_Name_cur(p_workorder_id);
774 FETCH Get_Wo_Unit_Name_cur INTO l_unit_name;
775 IF Get_Wo_Unit_Name_cur%NOTFOUND THEN
776 l_unit_name := null;
777 END IF;
778 CLOSE Get_Wo_Unit_Name_cur;
779 IF (p_mc_header_id IS NOT NULL AND
780 p_mc_header_id <> FND_API.G_MISS_NUM) THEN
781 --
782 OPEN Get_rec_from_id(l_unit_name, p_mc_header_id );
783 FETCH Get_rec_from_id INTO
784 x_mc_header_id;
785 IF Get_rec_from_id%NOTFOUND THEN
786 x_return_status := FND_API.G_RET_STS_ERROR;
787 x_msg_data := 'AHL_PP_INVALID_MC';
788 END IF;
789 CLOSE Get_rec_from_id;
790 RETURN;
791 ELSE
792 --
793 OPEN Get_rec_from_value( l_unit_name, p_mc_name );
794 LOOP
795 FETCH get_rec_from_value INTO x_mc_header_id;
796 EXIT WHEN get_rec_from_value%NOTFOUND;
797 END LOOP;
798 IF ( get_rec_from_value%ROWCOUNT = 0 ) THEN
799 x_return_status := FND_API.G_RET_STS_ERROR;
800 x_msg_data := 'AHL_PP_INVALID_MC';
801 ELSIF ( get_rec_from_value%ROWCOUNT = 1 ) THEN
802 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
803 ELSE
804 x_return_status := FND_API.G_RET_STS_ERROR;
805 x_msg_data := 'AHL_PP_TOO_MANY_MC';
806 x_mc_header_id := NULL;
807 END IF;
808 CLOSE get_rec_from_value;
809 RETURN;
810 END IF;
811 EXCEPTION
812 WHEN OTHERS THEN
813 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
814 RAISE;
815 END Get_mc_header_id;
816 --Procedure to get mc_position_key from id or value
817 PROCEDURE Get_mc_position_key
818 (p_mc_header_id IN NUMBER,
819 p_mc_position IN VARCHAR2,
820 p_mc_position_key IN NUMBER,
821 x_mc_position_key OUT NOCOPY NUMBER,
822 x_relationship_id OUT NOCOPY NUMBER,
823 x_return_status OUT NOCOPY VARCHAR2,
824 x_msg_data OUT NOCOPY VARCHAR2
825 ) IS
826 CURSOR Get_rec_from_id (c_mc_header_id NUMBER, c_mc_position_key NUMBER)
827 IS
828 SELECT DISTINCT
829 AMR.POSITION_KEY, AMR.RELATIONSHIP_ID
830 FROM
831 AHL_MC_RELATIONSHIPS AMR,
832 FND_LOOKUP_VALUES_VL FLV
833 WHERE
834 AMR.POSITION_REF_CODE = FLV.LOOKUP_CODE AND
835 NVL(AMR.ACTIVE_END_DATE,SYSDATE +1 ) > SYSDATE AND
836 FLV.LOOKUP_TYPE = 'AHL_POSITION_REFERENCE' AND
837 FLV.ENABLED_FLAG = 'Y' AND
838 TRUNC(NVL(FLV.END_DATE_ACTIVE,SYSDATE)) >= TRUNC(SYSDATE) AND
839 AMR.MC_HEADER_ID = c_mc_header_id AND
840 AMR.POSITION_KEY = c_mc_position_key;
841 CURSOR Get_rec_from_value (c_mc_header_id NUMBER, c_mc_position VARCHAR2)
842 IS
843 SELECT DISTINCT
844 AMR.POSITION_KEY, AMR.RELATIONSHIP_ID
845 FROM
846 AHL_MC_RELATIONSHIPS AMR,
847 FND_LOOKUP_VALUES_VL FLV
848 WHERE
849 AMR.POSITION_REF_CODE = FLV.LOOKUP_CODE AND
850 NVL(AMR.ACTIVE_END_DATE,SYSDATE +1 ) > SYSDATE AND
851 FLV.LOOKUP_TYPE = 'AHL_POSITION_REFERENCE' AND
852 FLV.ENABLED_FLAG = 'Y' AND
853 TRUNC(NVL(FLV.END_DATE_ACTIVE,SYSDATE)) >= TRUNC(SYSDATE) AND
854 AMR.MC_HEADER_ID = c_mc_header_id AND
855 FLV.MEANING = c_mc_position;
856
857 BEGIN
858 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
859 IF (p_mc_position_key IS NOT NULL AND
860 p_mc_position_key <> FND_API.G_MISS_NUM) THEN
861 --
862 OPEN Get_rec_from_id(p_mc_header_id, p_mc_position_key );
863 FETCH Get_rec_from_id INTO x_mc_position_key, x_relationship_id;
864 IF Get_rec_from_id%NOTFOUND THEN
865 x_return_status := FND_API.G_RET_STS_ERROR;
866 x_msg_data := 'AHL_PP_INVALID_MC_POS';
867 END IF;
868 CLOSE Get_rec_from_id;
869 RETURN;
870 ELSE
871 --
872 OPEN Get_rec_from_value( p_mc_header_id, p_mc_position );
873 LOOP
874 FETCH get_rec_from_value INTO x_mc_position_key, x_relationship_id;
875 EXIT WHEN get_rec_from_value%NOTFOUND;
876 END LOOP;
877 IF ( get_rec_from_value%ROWCOUNT = 0 ) THEN
878 x_return_status := FND_API.G_RET_STS_ERROR;
879 x_msg_data := 'AHL_PP_INVALID_MC_POS';
880 ELSIF ( get_rec_from_value%ROWCOUNT = 1 ) THEN
881 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
882 ELSE
883 x_return_status := FND_API.G_RET_STS_ERROR;
884 x_msg_data := 'AHL_PP_TOO_MANY_MC_POS';
885 x_mc_position_key := NULL;
886 x_relationship_id := NULL;
887 END IF;
888 CLOSE get_rec_from_value;
889 RETURN;
890 END IF;
891 EXCEPTION
892 WHEN OTHERS THEN
893 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
894 RAISE;
895 END Get_mc_position_key;
896 --Procedure to get mc_item_group_id from id or value
897 PROCEDURE Get_item_group_id
898 (p_item_group_name IN VARCHAR2,
899 p_item_group_id IN NUMBER,
900 x_item_group_id OUT NOCOPY NUMBER,
901 x_return_status OUT NOCOPY VARCHAR2,
902 x_msg_data OUT NOCOPY VARCHAR2
903 ) IS
904
905 CURSOR Get_rec_from_id (c_item_group_id NUMBER)
906 IS
907 SELECT ITMGRP.ITEM_GROUP_ID ITEM_GROUP_ID
908 FROM
909 AHL_ITEM_GROUPS_VL ITMGRP
910 WHERE
911 ITMGRP.STATUS_CODE = 'COMPLETE'AND
912 ITMGRP.ITEM_GROUP_ID = c_item_group_id;
913
914 CURSOR Get_rec_from_value (c_item_group_name VARCHAR2)
915 IS
916 SELECT DISTINCT ITMGRP.ITEM_GROUP_ID ITEM_GROUP_ID
917 FROM
918 AHL_ITEM_GROUPS_VL ITMGRP
919 WHERE
920 ITMGRP.STATUS_CODE = 'COMPLETE'AND
921 ITMGRP.NAME = c_item_group_name;
922
923 BEGIN
924 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
925
926 IF (p_item_group_id IS NOT NULL AND
927 p_item_group_id <> FND_API.G_MISS_NUM) THEN
928 --
929 OPEN Get_rec_from_id(p_item_group_id );
930 FETCH Get_rec_from_id INTO x_item_group_id;
931 IF Get_rec_from_id%NOTFOUND THEN
932 x_return_status := FND_API.G_RET_STS_ERROR;
933 x_msg_data := 'AHL_PP_INVALID_MC_ITM_GRP';
934 END IF;
935 CLOSE Get_rec_from_id;
936 RETURN;
937 ELSE
938 --
939 OPEN Get_rec_from_value( p_item_group_name );
940 LOOP
941 FETCH get_rec_from_value INTO x_item_group_id;
942 EXIT WHEN get_rec_from_value%NOTFOUND;
943 END LOOP;
944 IF ( get_rec_from_value%ROWCOUNT = 0 ) THEN
945 x_return_status := FND_API.G_RET_STS_ERROR;
946 x_msg_data := 'AHL_PP_INVALID_MC_ITM_GRP';
947 ELSIF ( get_rec_from_value%ROWCOUNT = 1 ) THEN
948 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
949 ELSE
950 x_return_status := FND_API.G_RET_STS_ERROR;
951 x_msg_data := 'AHL_PP_TOO_MANY_MC_ITM_GRP';
952 x_item_group_id := NULL;
953 END IF;
954 CLOSE get_rec_from_value;
955 RETURN;
956 END IF;
957 EXCEPTION
958 WHEN OTHERS THEN
959 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
960 RAISE;
961 END Get_item_group_id;
962 --Procedure to get inventory_item_id from id or value based item group
963 PROCEDURE Get_item_Id_from_item_group
964 (p_item_group_id IN NUMBER,
965 p_inventory_item_id IN NUMBER,
966 p_concatenated_segments IN VARCHAR2,
967 p_organization_id IN NUMBER,
968 x_inventory_item_id OUT NOCOPY NUMBER,
969 x_return_status OUT NOCOPY VARCHAR2,
970 x_msg_data OUT NOCOPY VARCHAR2
971 ) IS
972 CURSOR Get_rec_from_id (c_inventory_item_id NUMBER, c_item_group_id NUMBER, c_organization_id NUMBER)
973 IS
974 SELECT DISTINCT mtl.inventory_item_id
975 FROM mtl_system_items_kfv mtl,
976 ahl_item_groups_vl aig,
977 ahl_item_associations_b ais
978 WHERE mtl.organization_id = c_organization_id --org.organization_id
979 AND nvl(mtl.enabled_flag,'N') = 'Y'
980 AND mtl.inventory_item_flag = 'Y'
981 AND mtl.stock_enabled_flag = 'Y'
982 AND mtl.mtl_transactions_enabled_flag = 'Y'
983 AND trunc(sysdate) BETWEEN trunc(nvl(mtl.start_date_active, sysdate))
984 AND trunc(nvl(mtl.end_date_active, sysdate))
985 AND aig.item_group_id = c_item_group_id
986 AND ais.item_group_id = aig.item_group_id
987 AND mtl.inventory_item_id = ais.inventory_item_id
988 AND mtl.inventory_item_id = c_inventory_item_id;
989 CURSOR Get_rec_from_value (c_concatenated_segments VARCHAR2, c_item_group_id NUMBER, c_organization_id NUMBER)
990 IS
991 SELECT DISTINCT mtl.inventory_item_id
992 FROM mtl_system_items_kfv mtl,
993 ahl_item_groups_vl aig,
994 ahl_item_associations_b ais
995 WHERE mtl.organization_id = c_organization_id --org.organization_id
996 AND nvl(mtl.enabled_flag,'N') = 'Y'
997 AND mtl.inventory_item_flag = 'Y'
998 AND mtl.stock_enabled_flag = 'Y'
999 AND mtl.mtl_transactions_enabled_flag = 'Y'
1000 AND trunc(sysdate) BETWEEN trunc(nvl(mtl.start_date_active, sysdate))
1001 AND trunc(nvl(mtl.end_date_active, sysdate))
1002 AND aig.item_group_id = c_item_group_id
1003 AND ais.item_group_id = aig.item_group_id
1004 AND mtl.inventory_item_id = ais.inventory_item_id
1005 AND mtl.concatenated_segments = c_concatenated_segments;
1006 BEGIN
1007 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1008 IF (p_inventory_item_id IS NOT NULL AND
1009 p_inventory_item_id <> FND_API.G_MISS_NUM) THEN
1010 --
1011 OPEN Get_rec_from_id(p_inventory_item_id, p_item_group_id, p_organization_id );
1012 FETCH Get_rec_from_id INTO
1013 x_inventory_item_id;
1014 IF Get_rec_from_id%NOTFOUND THEN
1015 x_return_status := FND_API.G_RET_STS_ERROR;
1016 x_msg_data := 'AHL_PP_INVALID_MC_GRP_ITEM';
1017 END IF;
1018 CLOSE Get_rec_from_id;
1019 RETURN;
1020 ELSE
1021 --
1022 OPEN Get_rec_from_value(p_concatenated_segments, p_item_group_id, p_organization_id );
1023 LOOP
1024 FETCH get_rec_from_value INTO x_inventory_item_id;
1025 EXIT WHEN get_rec_from_value%NOTFOUND;
1026 END LOOP;
1027 IF ( get_rec_from_value%ROWCOUNT = 0 ) THEN
1028 x_return_status := FND_API.G_RET_STS_ERROR;
1029 x_msg_data := 'AHL_PP_INVALID_MC_GRP_ITEM';
1030 ELSIF ( get_rec_from_value%ROWCOUNT = 1 ) THEN
1031 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1032 ELSE
1033 x_return_status := FND_API.G_RET_STS_ERROR;
1034 x_msg_data := 'AHL_PP_TOO_MANY_MC_GRP_ITEM';
1035 x_inventory_item_id := NULL;
1036 END IF;
1037 CLOSE get_rec_from_value;
1038 RETURN;
1039 END IF;
1040 EXCEPTION
1041 WHEN OTHERS THEN
1042 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
1043 RAISE;
1044 END Get_item_Id_from_item_group;
1045
1046 PROCEDURE Get_item_Id_from_mc_pos
1047 (p_relationship_id IN NUMBER,
1048 p_inventory_item_id IN NUMBER,
1049 p_concatenated_segments IN VARCHAR2,
1050 p_organization_id IN NUMBER,
1051 x_inventory_item_id OUT NOCOPY NUMBER,
1052 x_return_status OUT NOCOPY VARCHAR2,
1053 x_msg_data OUT NOCOPY VARCHAR2
1054 )
1055 IS
1056 CURSOR Get_rec_from_id (c_inventory_item_id NUMBER, c_relationship_id NUMBER, c_organization_id NUMBER)
1057 IS
1058 SELECT DISTINCT MSI.INVENTORY_ITEM_ID
1059 FROM
1060 (SELECT RELATIONSHIP_ID PARENT_REL_ID,RELATIONSHIP_ID CHILD_REL_ID, MC_HEADER_ID MC_HEADER_ID,
1061 ITEM_GROUP_ID, POSITION_REF_CODE, POSITION_KEY
1062 FROM
1063 AHL_MC_RELATIONSHIPS
1064 WHERE RELATIONSHIP_ID = c_relationship_id
1065 UNION
1066 SELECT AMCR.RELATIONSHIP_ID PARENT_REL_ID, AMR.RELATIONSHIP_ID CHILD_REL_ID,
1067 AMCR.MC_HEADER_ID MC_HEADER_ID,
1068 AMR.ITEM_GROUP_ID CHILD_ITEM_GROUP_ID,AMR.POSITION_REF_CODE,AMR.POSITION_KEY
1069 FROM AHL_MC_RELATIONSHIPS AMR, AHL_MC_CONFIG_RELATIONS AMCR
1070 WHERE
1071 AMR.MC_HEADER_ID = AMCR.MC_HEADER_ID AND
1072 NVL(AMCR.ACTIVE_END_DATE,SYSDATE + 1) > SYSDATE AND
1073 AMR.PARENT_RELATIONSHIP_ID IS NULL AND
1074 AMCR.RELATIONSHIP_ID = c_relationship_id
1075 ) MC_REL, AHL_ITEM_GROUPS_VL AIG, MTL_SYSTEM_ITEMS_KFV MSI,
1076 AHL_ITEM_ASSOCIATIONS_B AIS
1077 WHERE
1078 AIG.STATUS_CODE = 'COMPLETE' AND
1079 MC_REL.ITEM_GROUP_ID = AIG.ITEM_GROUP_ID AND
1080 AIS.ITEM_GROUP_ID = AIG.ITEM_GROUP_ID AND
1081 AIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID AND
1082 NVL(MSI.ENABLED_FLAG,'N') = 'Y' AND
1083 NVL(MSI.INVENTORY_ITEM_FLAG,'N') = 'Y' AND
1084 NVL(MSI.STOCK_ENABLED_FLAG, 'N') = 'Y' AND
1085 NVL(MSI.MTL_TRANSACTIONS_ENABLED_FLAG,'N') = 'Y' AND
1086 TRUNC(SYSDATE) BETWEEN TRUNC(NVL(MSI.START_DATE_ACTIVE, SYSDATE)) AND
1087 TRUNC(NVL(MSI.END_DATE_ACTIVE, SYSDATE)) AND
1088 MSI.ORGANIZATION_ID = c_organization_id AND
1089 MSI.INVENTORY_ITEM_ID = c_inventory_item_id;
1090
1091 CURSOR Get_rec_from_value (c_concatenated_segments VARCHAR2, c_relationship_id NUMBER, c_organization_id NUMBER)
1092 IS
1093 SELECT DISTINCT MSI.INVENTORY_ITEM_ID
1094 FROM
1095 (SELECT RELATIONSHIP_ID PARENT_REL_ID,RELATIONSHIP_ID CHILD_REL_ID, MC_HEADER_ID MC_HEADER_ID,
1096 ITEM_GROUP_ID, POSITION_REF_CODE, POSITION_KEY
1097 FROM
1098 AHL_MC_RELATIONSHIPS
1099 WHERE RELATIONSHIP_ID = c_relationship_id
1100 UNION
1101 SELECT AMCR.RELATIONSHIP_ID PARENT_REL_ID, AMR.RELATIONSHIP_ID CHILD_REL_ID,
1102 AMCR.MC_HEADER_ID MC_HEADER_ID,
1103 AMR.ITEM_GROUP_ID CHILD_ITEM_GROUP_ID,AMR.POSITION_REF_CODE,AMR.POSITION_KEY
1104 FROM AHL_MC_RELATIONSHIPS AMR, AHL_MC_CONFIG_RELATIONS AMCR
1105 WHERE
1106 AMR.MC_HEADER_ID = AMCR.MC_HEADER_ID AND
1107 NVL(AMCR.ACTIVE_END_DATE,SYSDATE + 1) > SYSDATE AND
1108 AMR.PARENT_RELATIONSHIP_ID IS NULL AND
1109 AMCR.RELATIONSHIP_ID = c_relationship_id
1110 ) MC_REL, AHL_ITEM_GROUPS_VL AIG, MTL_SYSTEM_ITEMS_KFV MSI,
1111 AHL_ITEM_ASSOCIATIONS_B AIS
1112 WHERE
1113 AIG.STATUS_CODE = 'COMPLETE' AND
1114 MC_REL.ITEM_GROUP_ID = AIG.ITEM_GROUP_ID AND
1115 AIS.ITEM_GROUP_ID = AIG.ITEM_GROUP_ID AND
1116 AIS.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID AND
1117 NVL(MSI.ENABLED_FLAG,'N') = 'Y' AND
1118 NVL(MSI.INVENTORY_ITEM_FLAG,'N') = 'Y' AND
1119 NVL(MSI.STOCK_ENABLED_FLAG, 'N') = 'Y' AND
1120 NVL(MSI.MTL_TRANSACTIONS_ENABLED_FLAG,'N') = 'Y' AND
1121 TRUNC(SYSDATE) BETWEEN TRUNC(NVL(MSI.START_DATE_ACTIVE, SYSDATE)) AND
1122 TRUNC(NVL(MSI.END_DATE_ACTIVE, SYSDATE)) AND
1123 MSI.ORGANIZATION_ID = c_organization_id AND
1124 MSI.CONCATENATED_SEGMENTS = c_concatenated_segments;
1125 BEGIN
1126 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1127 IF (p_inventory_item_id IS NOT NULL AND
1128 p_inventory_item_id <> FND_API.G_MISS_NUM) THEN
1129 --
1130 OPEN Get_rec_from_id(p_inventory_item_id, p_relationship_id, p_organization_id );
1131 FETCH Get_rec_from_id INTO
1132 x_inventory_item_id;
1133 IF Get_rec_from_id%NOTFOUND THEN
1134 x_return_status := FND_API.G_RET_STS_ERROR;
1135 x_msg_data := 'AHL_PP_INVALID_MC_GRP_ITEM';
1136 END IF;
1137 CLOSE Get_rec_from_id;
1138 RETURN;
1139 ELSE
1140 --
1141 OPEN Get_rec_from_value(p_concatenated_segments, p_relationship_id, p_organization_id );
1142 LOOP
1143 FETCH get_rec_from_value INTO x_inventory_item_id;
1144 EXIT WHEN get_rec_from_value%NOTFOUND;
1145 END LOOP;
1146 IF ( get_rec_from_value%ROWCOUNT = 0 ) THEN
1147 x_return_status := FND_API.G_RET_STS_ERROR;
1148 x_msg_data := 'AHL_PP_INVALID_MC_GRP_ITEM';
1149 ELSIF ( get_rec_from_value%ROWCOUNT = 1 ) THEN
1150 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1151 ELSE
1152 x_return_status := FND_API.G_RET_STS_ERROR;
1153 x_msg_data := 'AHL_PP_TOO_MANY_MC_GRP_ITEM';
1154 x_inventory_item_id := NULL;
1155 END IF;
1156 CLOSE get_rec_from_value;
1157 RETURN;
1158 END IF;
1159 EXCEPTION
1160 WHEN OTHERS THEN
1161 x_return_status:= Fnd_Api.G_RET_STS_UNEXP_ERROR;
1162 RAISE;
1163 END Get_item_Id_from_mc_pos;
1164
1165 PROCEDURE Validate_mat_req_record( p_mc_header_id IN NUMBER,
1166 p_mc_position_key IN NUMBER,
1167 p_item_group_id IN NUMBER,
1168 p_inventory_item_id IN NUMBER,
1169 x_return_status OUT NOCOPY VARCHAR2,
1170 x_msg_data OUT NOCOPY VARCHAR2
1171 )
1172 IS
1173 BEGIN
1174 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
1175 IF ( (p_mc_header_id IS NOT NULL AND p_mc_header_id <> Fnd_Api.G_MISS_NUM) OR
1176 (p_mc_position_key IS NOT NULL AND p_mc_position_key <> Fnd_Api.G_MISS_NUM)) THEN
1177 --for position based mat. req. mc-pos and item must be present.
1178 IF ((p_mc_header_id IS NULL OR p_mc_header_id = Fnd_Api.G_MISS_NUM) OR
1179 (p_mc_position_key IS NULL OR p_mc_position_key = Fnd_Api.G_MISS_NUM) OR
1180 (p_item_group_id IS NOT NULL AND p_item_group_id <> Fnd_Api.G_MISS_NUM) OR
1181 (p_inventory_item_id IS NULL OR p_inventory_item_id = Fnd_Api.G_MISS_NUM)) THEN
1182 x_return_status := Fnd_Api.G_RET_STS_ERROR;
1183 x_msg_data := 'AHL_PP_INVLD_MAT_REQ_COMB';
1184 END IF;
1185 END IF;
1186 END Validate_mat_req_record;
1187 --sukhwsin: procedures added for SB Effectivity - ends
1188 --
1189 -- Start of Comments --
1190 -- Procedure name : Create_Material_Reqst
1191 -- Type : Private
1192 -- Function : Validates Material Information and inserts records into
1193 -- Schedule Material table for non routine jobs Calls AHL_WIP_JOB_PVT.
1194 -- update_wip_job api
1195 -- Pre-reqs :
1196 -- Parameters :
1197 --
1198 -- Standard IN Parameters :
1199 -- p_api_version IN NUMBER Required
1200 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
1201 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
1202 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
1203 -- p_module_type IN VARCHAR2 Default NULL
1204 -- p_interface_flag IN VARCHAR2,
1205 --
1206 -- Standard OUT Parameters :
1207 -- x_return_status OUT VARCHAR2 Required
1208 -- x_msg_count OUT NUMBER Required
1209 -- x_msg_data OUT VARCHAR2 Required
1210 --
1211 -- Create Material Request Parameters:
1212 -- p_x_req_material_tbl IN OUT NOCOPY Req_Material_Tbl_Type,
1213 -- Contains material information to perform material reservation
1214 --
1215 -- Version :
1216 -- Initial Version 1.0
1217 -- MANESING::NR Analysis, 03-Jun-2011, modified API signature to include IN parameter p_module_type
1218 --
1219 -- End of Comments.
1220 PROCEDURE Create_Material_Reqst (
1221 p_api_version IN NUMBER,
1222 p_init_msg_list IN VARCHAR2 := Fnd_Api.G_FALSE,
1223 p_commit IN VARCHAR2 := Fnd_Api.G_FALSE,
1224 p_validation_level IN NUMBER := Fnd_Api.G_VALID_LEVEL_FULL,
1225 p_module_type IN VARCHAR2 := NULL,
1226 p_interface_flag IN VARCHAR2 ,
1227 p_x_req_material_tbl IN OUT NOCOPY Req_Material_Tbl_Type,
1228 x_job_return_status OUT NOCOPY VARCHAR2,
1229 x_return_status OUT NOCOPY VARCHAR2,
1230 x_msg_count OUT NOCOPY NUMBER,
1231 x_msg_data OUT NOCOPY VARCHAR2
1232 )
1233 IS
1234 --Check for unique constraint
1235 CURSOR Check_unique_cur(c_item_id IN NUMBER,
1236 c_operation_id IN NUMBER,
1237 c_org_id IN NUMBER,
1238 c_sequence_id IN NUMBER)
1239 IS
1240 SELECT 1
1241 FROM AHL_SCHEDULE_MATERIALS
1242 WHERE inventory_item_id = c_item_id
1243 AND workorder_operation_id = c_operation_id
1244 AND organization_id = c_org_id
1245 AND operation_sequence = c_sequence_id
1246 AND requested_quantity <> 0
1247 AND status IN ('ACTIVE','IN-SERVICE');
1248 -- Get job number details
1249 CURSOR Get_job_number(c_workorder_id IN NUMBER)
1250 IS
1251 SELECT workorder_name job_number,
1252 wip_entity_id
1253 FROM ahl_workorders
1254 WHERE workorder_id = c_workorder_id;
1255 -- Fix for bug# 6594189. Allow for statuses all statuses other than closed,
1256 -- cancelled, parts hold etc.
1257 --Check for status
1258 CURSOR Check_wo_status_cur(c_workorder_id IN NUMBER)
1259 IS
1260 SELECT 1 FROM ahl_workorders
1261 WHERE workorder_id = c_workorder_id
1262 /*
1263 AND (status_code = 3 or
1264 status_code = 1);
1265 */
1266 AND status_code NOT IN ('12','5','6','7','17','22','19');
1267
1268 /* MANESING::NR Analysis, 03-Jun-2011,
1269 * Cursor for checking whether the workorder is a Stage workorder and is in Draft status.
1270 */
1271 CURSOR Check_stg_workorder_csr (c_workorder_id NUMBER)
1272 IS
1273 SELECT 1
1274 FROM AHL_WORKORDERS AHLW,
1275 AHL_VISIT_TASKS_B AVTB
1276
1277 WHERE AHLW.workorder_id = c_workorder_id
1278 AND AHLW.status_code = '17'
1279 AND AHLW.visit_task_id = AVTB.visit_task_id
1280 AND AVTB.task_type_code = 'STAGE';
1281
1282 --Check for Route item
1283 CURSOR Get_rt_mat_cur (c_visit_task_id IN NUMBER,
1284 c_rt_oper_mat_id IN NUMBER,
1285 --sukhwsin::SB Effectivity - control position change
1286 c_mc_position_key IN NUMBER)
1287 IS
1288 SELECT *
1289 FROM ahl_schedule_materials
1290 WHERE rt_oper_material_id = c_rt_oper_mat_id
1291 AND visit_task_id = c_visit_task_id
1292 --sukhwsin::SB Effectivity - control position change
1293 AND nvl(position_key,-1) = nvl(c_mc_position_key,-1)
1294 AND requested_quantity <> 0
1295 AND status IN ('ACTIVE','IN-SERVICE');
1296 --Check to calidate for dates
1297 CURSOR Get_sch_dates_cur(c_wo_operation_id IN NUMBER,
1298 c_req_date IN DATE)
1299 IS
1300 SELECT 1
1301 FROM ahl_workorder_operations_v
1302 WHERE workorder_operation_id = c_wo_operation_id
1303 AND c_req_date between trunc(scheduled_start_date)
1304 and trunc(scheduled_end_date) ;
1305 -- TO Get uom code for meaning
1306 CURSOR Uom_cur (uom_mean IN VARCHAR2) IS
1307 SELECT UOM_CODE
1308 FROM MTL_UNITS_OF_MEASURE
1309 WHERE UNIT_OF_MEASURE = uom_mean;
1310 -- Get Primary Uom Code
1311 CURSOR Primary_Uom_cur (c_item_id IN NUMBER,
1312 c_org_id IN NUMBER) IS
1313 SELECT primary_uom_code
1314 FROM MTL_SYSTEM_ITEMS_VL
1315 WHERE inventory_item_id = c_item_id
1316 AND organization_id = c_org_id;
1317 --Get operation sequnece
1318 CURSOR Get_Operation_Seq_cur(c_operation_id IN NUMBER)
1319 IS
1320 SELECT operation_sequence_num
1321 FROM ahl_workorder_operations
1322 WHERE workorder_operation_id = c_operation_id;
1323 -- sracha: added for bug# 6802777.
1324 -- derive dept. from wip-operations.
1325 CURSOR get_oper_dept(c_wip_entity_id IN NUMBER,
1326 c_oper_seq_num IN NUMBER)
1327 IS
1328 SELECT wo.department_id
1329 FROM WIP_OPERATIONS WO
1330 WHERE wo.wip_entity_id = c_wip_entity_id
1331 AND wo.operation_seq_num = c_oper_seq_num;
1332 --sukhwsin: SB Effectivity - Added Cursor to get uc_header_id
1333 CURSOR Get_Wo_Uc_Header_Id(c_workorder_id IN NUMBER)
1334 IS
1335 SELECT uc_header_id
1336 FROM AHL_WORKORDER_TASKS_V
1337 WHERE workorder_id = c_workorder_id;
1338
1339 -- pdoki modified the query to check for position based material reqs along with item group based reqs
1340 -- sukhwsin::VCP Integration - Added cursor to get material req count that contains item group
1341 CURSOR Get_Alt_Mat_Requirment_Count(c_workorder_id IN NUMBER)
1342 IS
1343 SELECT COUNT(scheduled_material_id)
1344 FROM AHL_SCHEDULE_MATERIALS MAT,
1345 AHL_WORKORDERS WO
1346 WHERE WO.WORKORDER_ID = c_workorder_id
1347 AND WO.VISIT_TASK_ID = MAT.VISIT_TASK_ID
1348 AND NVL(MAT.STATUS,'NOTDEL') <> 'DELETED'
1349 AND
1350 (
1351 (
1352 MAT.ITEM_GROUP_ID IS NOT NULL
1353 AND MAT.INVENTORY_ITEM_ID IS NOT NULL
1354 )
1355 OR
1356 (
1357 MAT.MC_HEADER_ID IS NOT NULL
1358 AND MAT.POSITION_KEY IS NOT NULL
1359 )
1360 );
1361
1362 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_MATERIAL_REQST';
1363 l_api_version CONSTANT NUMBER := 1.0;
1364 l_msg_count NUMBER;
1365 l_return_status VARCHAR2(1);
1366 l_msg_data VARCHAR2(2000);
1367 l_dummy NUMBER;
1368 l_junk NUMBER;
1369 l_return_staus VARCHAR2(1);
1370 --
1371 l_visit_task_id NUMBER;
1372 l_inventory_item_id NUMBER;
1373 l_visit_id NUMBER;
1374 l_organization_id NUMBER;
1375 l_department_id NUMBER;
1376 l_project_task_id NUMBER;
1377 l_project_id NUMBER;
1378 l_schedule_material_id NUMBER;
1379 l_schedule_designator VARCHAR2(10);
1380 l_workorder_id NUMBER;
1381 l_workorder_name VARCHAR2(80);
1382 l_wip_entity_id NUMBER;
1383 l_workorder_operation_id NUMBER;
1384 l_wo_organization_id NUMBER;
1385 l_object_version_number NUMBER;
1386 l_init_msg_list VARCHAR2(1) := FND_API.G_TRUE;
1387 l_Req_Material_Tbl Req_Material_Tbl_Type;
1388 l_default VARCHAR2(30);
1389 l_wo_operation_txn_id NUMBER;
1390 l_schedule_start_date DATE;
1391 l_schedule_end_date DATE;
1392 --
1393 l_record_loaded VARCHAR2(1);
1394 l_transaction_id NUMBER;
1395 l_module_type VARCHAR2(10);
1396 l_material_rec Get_rt_mat_cur%ROWTYPE;
1397 j NUMBER;
1398 l_mrp_net_flag NUMBER;
1399 dff_default_values dff_default_values_type;
1400 --sukhwsin: Added variables for SB Effectivity changes - starts
1401 l_mc_header_id NUMBER;
1402 l_mc_position_key NUMBER;
1403 l_item_group_id NUMBER;
1404 l_uc_header_id NUMBER;
1405 Type Num_Tab_Ty IS Table of Number index by binary_integer;
1406 l_relationship_tbl Num_Tab_Ty;
1407 --sukhwsin: Added variables for SB Effectivity changes - ends
1408 --sukhwsin::VCP Integration variable declaration - starts
1409 l_WorkOrders_Table Num_Tab_Ty;
1410 l_WO_found VARCHAR2(1);
1411 l_alt_mat_req_count NUMBER;
1412 --sukhwsin::VCP Integration variable declaration - end
1413 l_error_flag BOOLEAN := TRUE;
1414 BEGIN
1415 --------------------Initialize ----------------------------------
1416 -- Standard Start of API savepoint
1417 SAVEPOINT create_material_reqst;
1418 -- Check if API is called in debug mode. If yes, enable debug.
1419 IF G_DEBUG='Y' THEN
1420 AHL_DEBUG_PUB.enable_debug;
1421 END IF;
1422 -- Debug info.
1423 IF G_DEBUG='Y' THEN
1424 AHL_DEBUG_PUB.debug( 'enter ahl_pp_materias_pvt. create material reqst','+PPMRP+');
1425 AHL_DEBUG_PUB.debug( 'INTERAFCE FALG'||p_interface_flag);
1426 AHL_DEBUG_PUB.debug( 'Total Number Records:'||p_x_req_material_tbl.COUNT);
1427 END IF;
1428 -- Standard call to check for call compatibility.
1429 IF FND_API.to_boolean(l_init_msg_list)
1430 THEN
1431 FND_MSG_PUB.initialize;
1432 END IF;
1433 -- Initialize API return status to success
1434 x_return_status := FND_API.G_RET_STS_SUCCESS;
1435 -- Initialize message list if p_init_msg_list is set to TRUE.
1436 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
1437 p_api_version,
1438 l_api_name,G_PKG_NAME)
1439 THEN
1440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1441 END IF;
1442 --------------------Start of API Body-----------------------------------
1443 IF p_x_req_material_tbl.COUNT > 0 THEN
1444 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
1445 LOOP
1446 -- Value to ID Conversion
1447 IF G_DEBUG='Y' THEN
1448 AHL_DEBUG_PUB.debug( 'WOID 1:'||p_x_req_material_tbl(i).workorder_id);
1449 AHL_DEBUG_PUB.debug( 'OPFLAG 1:'||p_x_req_material_tbl(i).operation_flag);
1450 AHL_DEBUG_PUB.debug( 'ITEM:'||i||'-'||p_x_req_material_tbl(i).concatenated_segments);
1451 END IF;
1452 IF ( ( p_x_req_material_tbl(i).workorder_id IS NOT NULL AND
1453 p_x_req_material_tbl(i).workorder_id <> FND_API.G_MISS_NUM ) OR
1454 ( p_x_req_material_tbl(i).job_number IS NOT NULL AND
1455 p_x_req_material_tbl(i).job_number <> FND_API.G_MISS_CHAR ) )
1456 THEN
1457 --
1458 IF G_DEBUG='Y' THEN
1459 AHL_DEBUG_PUB.debug( 'WOID 2:'||p_x_req_material_tbl(i).workorder_id);
1460 END IF;
1461 --
1462 Get_workorder_id
1463 (p_workorder_id => p_x_req_material_tbl(i).workorder_id,
1464 p_job_number => p_x_req_material_tbl(i).job_number,
1465 x_workorder_id => l_workorder_id,
1466 x_return_status => l_return_status,
1467 x_error_msg_code => l_msg_data);
1468 IF NVL(l_return_status,'x') <> 'S'
1469 THEN
1470 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_ORD_NOT_EXISTS');
1471 Fnd_Msg_Pub.ADD;
1472 END IF;
1473 --
1474 END IF;
1475 -- rroy
1476 -- ACL Changes
1477 --Get Job Number
1478 OPEN Get_job_number(p_x_req_material_tbl(i).workorder_id);
1479 FETCH Get_job_number INTO l_workorder_name,l_wip_entity_id;
1480 CLOSE Get_job_number;
1481 l_return_status := AHL_PRD_UTIL_PKG.Is_Unit_Locked
1482 (
1483 p_workorder_id => nvl(p_x_req_material_tbl(i).workorder_id,l_workorder_id),
1484 p_ue_id => NULL,
1485 p_visit_id => NULL,
1486 p_item_instance_id => NULL
1487 );
1488 IF l_return_status = FND_API.G_TRUE THEN
1489 FND_MESSAGE.Set_Name('AHL', 'AHL_PP_CRT_MTL_UNTLCKD');
1490 FND_MESSAGE.Set_Token('WO_NAME', l_workorder_name);
1491 FND_MSG_PUB.ADD;
1492 RAISE FND_API.G_EXC_ERROR;
1493 END IF;
1494 -- rroy
1495 -- ACL Changes
1496 --
1497 p_x_req_material_tbl(i).workorder_id := nvl(p_x_req_material_tbl(i).workorder_id,l_workorder_id);
1498 --Get visit task id
1499 IF (p_x_req_material_tbl(i).workorder_id IS NOT NULL AND
1500 p_x_req_material_tbl(i).workorder_id <> Fnd_Api.G_MISS_NUM )
1501 THEN
1502 Get_visit_task_Id
1503 (p_workorder_id => p_x_req_material_tbl(i).workorder_id,
1504 x_visit_task_id => l_visit_task_id,
1505 x_return_status => l_return_status,
1506 x_error_msg_code => l_msg_data);
1507 IF NVL(l_return_status,'x') <> 'S'
1508 THEN
1509 Fnd_Message.SET_NAME('AHL','AHL_PP_VISIT_TASK_NOT_EXIST');
1510 Fnd_Msg_Pub.ADD;
1511 END IF;
1512 END IF;
1513 -- Assign
1514 p_x_req_material_tbl(i).visit_task_id := l_visit_task_id;
1515 IF G_DEBUG='Y' THEN
1516 AHL_DEBUG_PUB.debug( 'VTID'||p_x_req_material_tbl(i).visit_task_id);
1517 AHL_DEBUG_PUB.debug( 'Job Number:'||p_x_req_material_tbl(i).job_number);
1518 END IF;
1519 -- Validate for organization,department,project_task_id
1520 Get_visit_task_details
1521 ( p_visit_task_id => l_visit_task_id,
1522 x_visit_id => l_visit_id,
1523 x_organization_id => l_organization_id,
1524 x_department_id => l_department_id,
1525 x_project_task_id => l_project_task_id,
1526 x_project_id => l_project_id
1527 );
1528 -- Validate for organization
1529 IF l_organization_id IS NULL THEN
1530 Fnd_Message.SET_NAME('AHL','AHL_PP_ORG_ID_NOT_EXISTS');
1531 Fnd_Msg_Pub.ADD;
1532 END IF;
1533 -- rroy
1534 -- ACL Changes
1535 /*--Get Job Number
1536 OPEN Get_job_number(p_x_req_material_tbl(i).workorder_id);
1537 FETCH Get_job_number INTO l_workorder_name,l_wip_entity_id;
1538 CLOSE Get_job_number;
1539 */
1540 -- rroy
1541 -- ACL Changes
1542 --Assign
1543 p_x_req_material_tbl(i).job_number := l_workorder_name;
1544 -- Validate for project task
1545 IF (p_interface_flag = 'Y'OR p_interface_flag IS NULL) THEN
1546 --Check for workorder status
1547 --
1548 OPEN Check_wo_status_cur(p_x_req_material_tbl(i).workorder_id);
1549 FETCH Check_wo_status_cur INTO l_dummy;
1550 IF Check_wo_status_cur%NOTFOUND THEN
1551 --
1552 /* MANESING::NR Analysis, 03-Jun-2011,
1553 * With the introduction of the concept of Stage workorders,
1554 * Material Requirements can be created for these workorders even when they are in the Draft ('17') status.
1555 * But this is allowed only if this API is called from the VWP flow.
1556 */
1557 IF ( p_module_type = 'VWP' ) THEN
1558 OPEN Check_stg_workorder_csr (p_x_req_material_tbl(i).workorder_id);
1559 FETCH Check_stg_workorder_csr INTO l_dummy;
1560 IF ( Check_stg_workorder_csr%FOUND ) THEN
1561 l_error_flag := FALSE;
1562 END IF;
1563 CLOSE Check_stg_workorder_csr;
1564 END IF;
1565
1566 IF ( l_error_flag ) THEN
1567 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_STATUS_INVALID');
1568 Fnd_Msg_Pub.ADD;
1569 END IF;
1570 END IF;
1571 --
1572 CLOSE Check_wo_status_cur;
1573 --
1574 END IF;--Condition for interface flag
1575 --
1576 p_x_req_material_tbl(i).organization_id := l_organization_id;
1577 p_x_req_material_tbl(i).department_id := l_department_id;
1578 p_x_req_material_tbl(i).visit_id := l_visit_id;
1579 p_x_req_material_tbl(i).project_task_id := l_project_task_id;
1580 p_x_req_material_tbl(i).project_id := l_project_id;
1581 --
1582 IF G_DEBUG='Y' THEN
1583 AHL_DEBUG_PUB.debug( 'ORID'||p_x_req_material_tbl(i).organization_id);
1584 AHL_DEBUG_PUB.debug( 'DEID'||p_x_req_material_tbl(i).department_id);
1585 AHL_DEBUG_PUB.debug( 'PTID'||p_x_req_material_tbl(i).project_task_id);
1586 AHL_DEBUG_PUB.debug( 'PJID'||p_x_req_material_tbl(i).project_id);
1587 AHL_DEBUG_PUB.debug( 'CITEM:'||p_x_req_material_tbl(i).concatenated_segments);
1588 END IF;
1589 --sukhwsin: Code Changes for SB Effectivity - starts
1590 --Assign null to relationship_id
1591 l_relationship_tbl(i) := null;
1592 --Get mc_header_id from mc_name
1593 IF (p_x_req_material_tbl(i).mc_name IS NOT NULL AND
1594 p_x_req_material_tbl(i).mc_name <> Fnd_Api.G_MISS_CHAR ) OR
1595 (p_x_req_material_tbl(i).mc_header_id IS NOT NULL AND
1596 p_x_req_material_tbl(i).mc_header_id <> Fnd_Api.G_MISS_NUM) THEN
1597 Get_mc_header_id(p_mc_header_id => p_x_req_material_tbl(i).mc_header_id,
1598 p_mc_name => p_x_req_material_tbl(i).mc_name,
1599 p_workorder_id => p_x_req_material_tbl(i).workorder_id,
1600 x_mc_header_id => l_mc_header_id,
1601 x_return_status => l_return_status,
1602 x_msg_data => l_msg_data );
1603 IF NVL(l_return_status,'x') <> 'S'
1604 THEN
1605 Fnd_Message.SET_NAME('AHL',l_msg_data);
1606 IF ( p_x_req_material_tbl(i).mc_name IS NULL OR
1607 p_x_req_material_tbl(i).mc_name = FND_API.G_MISS_CHAR ) THEN
1608 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).mc_header_id );
1609 ELSE
1610 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).mc_name );
1611 END IF;
1612 Fnd_Msg_Pub.ADD;
1613 END IF;
1614 --Assign the returned value
1615 p_x_req_material_tbl(i).mc_header_id := l_mc_header_id;
1616 END IF;
1617 --Get mc_position_key from position_ref_code
1618 IF (p_x_req_material_tbl(i).mc_position IS NOT NULL AND
1619 p_x_req_material_tbl(i).mc_position <> Fnd_Api.G_MISS_CHAR ) OR
1620 (p_x_req_material_tbl(i).mc_position_key IS NOT NULL AND
1621 p_x_req_material_tbl(i).mc_position_key <> Fnd_Api.G_MISS_NUM) THEN
1622 Get_mc_position_key(p_mc_header_id => p_x_req_material_tbl(i).mc_header_id,
1623 p_mc_position => p_x_req_material_tbl(i).mc_position,
1624 p_mc_position_key => p_x_req_material_tbl(i).mc_position_key,
1625 x_mc_position_key => l_mc_position_key,
1626 x_relationship_id => l_relationship_tbl(i),
1627 x_return_status => l_return_status,
1628 x_msg_data => l_msg_data );
1629 IF NVL(l_return_status,'x') <> 'S'
1630 THEN
1631 Fnd_Message.SET_NAME('AHL',l_msg_data);
1632 IF ( p_x_req_material_tbl(i).mc_position IS NULL OR
1633 p_x_req_material_tbl(i).mc_position = FND_API.G_MISS_CHAR ) THEN
1634 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).mc_position_key );
1635 ELSE
1636 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).mc_position );
1637 END IF;
1638 Fnd_Msg_Pub.ADD;
1639 END IF;
1640 --Assign the returned value
1641 p_x_req_material_tbl(i).mc_position_key := l_mc_position_key;
1642 END IF;
1643 --Get item_group_id from item_group_name only if mc or position is given
1644 IF ((p_x_req_material_tbl(i).item_group_name IS NOT NULL AND
1645 p_x_req_material_tbl(i).item_group_name <> Fnd_Api.G_MISS_CHAR ) OR
1646 (p_x_req_material_tbl(i).item_group_id IS NOT NULL AND
1647 p_x_req_material_tbl(i).item_group_id <> Fnd_Api.G_MISS_NUM ))
1648 THEN
1649 Get_item_group_id(p_item_group_name => p_x_req_material_tbl(i).item_group_name,
1650 p_item_group_id => p_x_req_material_tbl(i).item_group_id,
1651 x_item_group_id => l_item_group_id,
1652 x_return_status => l_return_status,
1653 x_msg_data => l_msg_data );
1654 IF NVL(l_return_status,'x') <> 'S'
1655 THEN
1656 Fnd_Message.SET_NAME('AHL',l_msg_data);
1657 IF ( p_x_req_material_tbl(i).item_group_name IS NULL OR
1658 p_x_req_material_tbl(i).item_group_name = FND_API.G_MISS_CHAR ) THEN
1659 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).item_group_id );
1660 ELSE
1661 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).item_group_name );
1662 END IF;
1663 Fnd_Msg_Pub.ADD;
1664 END IF;
1665 --Assign the returned value
1666 p_x_req_material_tbl(i).item_group_id := l_item_group_id;
1667 END IF;
1668
1669 -- Convert concatenated segments to Item ID
1670 IF (p_x_req_material_tbl(i).concatenated_segments IS NOT NULL AND
1671 p_x_req_material_tbl(i).concatenated_segments <> Fnd_Api.G_MISS_CHAR ) OR
1672 (p_x_req_material_tbl(i).inventory_item_id IS NOT NULL AND
1673 p_x_req_material_tbl(i).inventory_item_id <> Fnd_Api.G_MISS_NUM) THEN
1674
1675 IF(l_relationship_tbl(i) IS NOT NULL) THEN
1676 --Get Item for position based material requirements i.e. against relationship_id
1677 Get_item_Id_from_mc_pos
1678 (p_relationship_id => l_relationship_tbl(i),
1679 p_inventory_item_id => p_x_req_material_tbl(i).inventory_item_id,
1680 p_concatenated_segments => p_x_req_material_tbl(i).concatenated_segments,
1681 p_organization_id => l_organization_id,
1682 x_inventory_item_id => l_inventory_item_id,
1683 x_return_status => l_return_status,
1684 x_msg_data => l_msg_data
1685 );
1686
1687 ELSIF (p_x_req_material_tbl(i).item_group_id IS NOT NULL AND
1688 p_x_req_material_tbl(i).item_group_id <> Fnd_Api.G_MISS_NUM ) THEN
1689 --if item group is present then validate item against item group
1690 Get_item_Id_from_item_group
1691 (p_item_group_id => p_x_req_material_tbl(i).item_group_id,
1692 p_inventory_item_id => p_x_req_material_tbl(i).inventory_item_id,
1693 p_concatenated_segments => p_x_req_material_tbl(i).concatenated_segments,
1694 p_organization_id => l_organization_id,
1695 x_inventory_item_id => l_inventory_item_id,
1696 x_return_status => l_return_status,
1697 x_msg_data => l_msg_data);
1698 IF NVL(l_return_status,'x') <> 'S'
1699 THEN
1700 Fnd_Message.SET_NAME('AHL',l_msg_data);
1701 IF ( p_x_req_material_tbl(i).concatenated_segments IS NULL OR
1702 p_x_req_material_tbl(i).concatenated_segments = FND_API.G_MISS_CHAR ) THEN
1703 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).inventory_item_id );
1704 ELSE
1705 FND_MESSAGE.set_token( 'FIELD', p_x_req_material_tbl(i).concatenated_segments );
1706 END IF;
1707 Fnd_Msg_Pub.ADD;
1708 END IF;
1709 ELSE
1710 --validate item only againt organization id.
1711 Get_inventory_item_Id
1712 (p_inventory_item_id => p_x_req_material_tbl(i).inventory_item_id,
1713 p_concatenated_segments => p_x_req_material_tbl(i).concatenated_segments,
1714 p_organization_id => l_organization_id,
1715 x_inventory_item_id => l_inventory_item_id,
1716 x_return_status => l_return_status,
1717 x_error_msg_code => l_msg_data);
1718 IF NVL(l_return_status,'x') <> 'S'
1719 THEN
1720 Fnd_Message.SET_NAME('AHL','AHL_PP_INVALID_ITEM');
1721 Fnd_Msg_Pub.ADD;
1722 END IF;
1723 END IF;
1724 ELSE
1725 Fnd_Message.SET_NAME('AHL','AHL_PP_INV_ID_REQUIRED');
1726 Fnd_Msg_Pub.ADD;
1727 END IF;
1728 --Assign the returned value
1729 p_x_req_material_tbl(i).inventory_item_id := l_inventory_item_id;
1730 --validate record
1731 Validate_mat_req_record( p_mc_header_id => p_x_req_material_tbl(i).mc_header_id,
1732 p_mc_position_key => p_x_req_material_tbl(i).mc_position_key,
1733 p_item_group_id => p_x_req_material_tbl(i).item_group_id,
1734 p_inventory_item_id => p_x_req_material_tbl(i).inventory_item_id,
1735 x_return_status => l_return_status,
1736 x_msg_data => l_msg_data
1737 );
1738 IF NVL(l_return_status,'x') <> 'S'
1739 THEN
1740 Fnd_Message.SET_NAME('AHL',l_msg_data);
1741 Fnd_Msg_Pub.ADD;
1742 END IF;
1743 --ALSO ONLY IN CASE P_INTERFACE_FLAG IS NULL OR Y.
1744 l_uc_header_id := null;
1745 OPEN Get_Wo_Uc_Header_Id(p_x_req_material_tbl(i).workorder_id);
1746 FETCH Get_Wo_Uc_Header_Id INTO l_uc_header_id;
1747 CLOSE Get_Wo_Uc_Header_Id;
1748 --Call Validate item procedure only for position based requirement.
1749 --If rt_oper_material_id is present, it means mat requirements is created when new operation is added to workorder.
1750 --in this case do not call sb rule validation as this is already done while deriving item for position based mat req.
1751 IF (p_x_req_material_tbl(i).mc_header_id IS NOT NULL AND p_x_req_material_tbl(i).mc_header_id <> Fnd_Api.G_MISS_NUM AND
1752 p_x_req_material_tbl(i).mc_position_key IS NOT NULL AND p_x_req_material_tbl(i).mc_position_key <> Fnd_Api.G_MISS_NUM AND
1753 p_x_req_material_tbl(i).inventory_item_id IS NOT NULL AND p_x_req_material_tbl(i).inventory_item_id <> Fnd_Api.G_MISS_NUM AND
1754 (p_x_req_material_tbl(i).RT_OPER_MATERIAL_ID IS NULL OR p_x_req_material_tbl(i).RT_OPER_MATERIAL_ID = Fnd_Api.G_MISS_NUM) AND
1755 l_uc_header_id IS NOT NULL
1756 ) THEN
1757 --Following procedure valid position based requirement against SB rules and
1758 --insert error messages in Fnd_Msg_Pub... hence increase message count in case of error.
1759 AHL_SB_RULES_PVT.Evaluate_Rules_For_Pos (
1760 p_mc_header_id => p_x_req_material_tbl(i).mc_header_id,
1761 p_mc_pos_key => p_x_req_material_tbl(i).mc_position_key,
1762 p_inv_item_id => p_x_req_material_tbl(i).inventory_item_id,
1763 p_inv_org_id => l_organization_id,
1764 p_uc_header_id => l_uc_header_id
1765 );
1766 END IF;
1767 --sukhwsin: Code Changes for SB Effectivity - ends
1768 IF G_DEBUG='Y' THEN
1769 AHL_DEBUG_PUB.debug( 'IVID'||p_x_req_material_tbl(i).requested_quantity);
1770 END IF;
1771 -- Validate for Requested Quantity
1772 IF (p_x_req_material_tbl(i).requested_quantity IS NULL OR
1773 p_x_req_material_tbl(i).requested_quantity = FND_API.G_MISS_NUM ) THEN
1774 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_QUANTITY_REQUIRED');
1775 Fnd_Msg_Pub.ADD;
1776 ELSIF (p_x_req_material_tbl(i).requested_quantity IS NOT NULL AND
1777 p_x_req_material_tbl(i).requested_quantity <> FND_API.G_MISS_NUM) THEN
1778 -- Fix for FP bug# 6642084. -- Allow 0 quantity.
1779 IF p_x_req_material_tbl(i).requested_quantity < 0 THEN
1780 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_QUANTITY_INVALID');
1781 Fnd_Msg_Pub.ADD;
1782 END IF;
1783 END IF;
1784 --
1785
1786 -- MANESING::NR Analysis, 03-Jun-2011, Validate for Scheduled Quantity
1787 IF ( G_DEBUG = 'Y' ) THEN
1788 AHL_DEBUG_PUB.debug('Scheduled Quantity: ' || p_x_req_material_tbl(i).scheduled_quantity);
1789 END IF;
1790
1791 IF ( p_x_req_material_tbl(i).scheduled_quantity IS NOT NULL AND
1792 p_x_req_material_tbl(i).scheduled_quantity <> FND_API.G_MISS_NUM ) THEN
1793
1794 IF ( p_x_req_material_tbl(i).scheduled_quantity < 0 ) THEN
1795 FND_MESSAGE.set_name('AHL', 'AHL_PP_SCHLD_QUANTITY_INVLD');
1796 FND_MSG_PUB.add;
1797 END IF;
1798
1799 END IF;
1800
1801 IF G_DEBUG='Y' THEN
1802 AHL_DEBUG_PUB.debug( 'RDATE1:'||p_x_req_material_tbl(i).requested_date);
1803 END IF;
1804 --
1805 -- bug 14137417 :: added module type condition by tchimira
1806 -- following validation should not occur for VWP flows
1807 IF ((p_interface_flag = 'Y' OR p_interface_flag is null ) AND (p_module_type <> 'VWP'))THEN
1808 -- Validate for Requested Date
1809 IF (p_x_req_material_tbl(i).requested_date IS NULL OR
1810 p_x_req_material_tbl(i).requested_date = FND_API.G_MISS_DATE ) THEN
1811 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_DATE_REQUIRED');
1812 Fnd_Msg_Pub.ADD;
1813 ELSIF (p_x_req_material_tbl(i).requested_date IS NOT NULL AND
1814 p_x_req_material_tbl(i).requested_date <> FND_API.G_MISS_DATE) THEN
1815 IF p_x_req_material_tbl(i).requested_date < trunc(SYSDATE) THEN
1816 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_DATE_GT_SYSD');
1817 Fnd_Msg_Pub.ADD;
1818 END IF;
1819 END IF;
1820 END IF;
1821 --
1822 IF G_DEBUG='Y' THEN
1823 AHL_DEBUG_PUB.debug( 'RDATE'||p_x_req_material_tbl(i).requested_date);
1824 AHL_DEBUG_PUB.debug( 'OSID'||p_x_req_material_tbl(i).operation_sequence);
1825 END IF;
1826 --Check for operation sequence
1827 IF( p_x_req_material_tbl(i).operation_sequence IS NULL OR
1828 p_x_req_material_tbl(i).operation_sequence = FND_API.G_MISS_NUM)
1829 THEN
1830 IF (p_x_req_material_tbl(i).workorder_operation_id IS NOT NULL AND
1831 p_x_req_material_tbl(i).workorder_operation_id <> FND_API.G_MISS_NUM)
1832 THEN
1833 --
1834 OPEN Get_Operation_Seq_cur(p_x_req_material_tbl(i).workorder_operation_id);
1835 FETCH Get_Operation_Seq_cur INTO p_x_req_material_tbl(i).operation_sequence;
1836 IF Get_Operation_Seq_cur%NOTFOUND THEN
1837 Fnd_Message.SET_NAME('AHL','AHL_PP_OPER_SEQ_REQD');
1838 Fnd_Msg_Pub.ADD;
1839 END IF;
1840 CLOSE Get_Operation_Seq_cur;
1841 END IF;
1842 END IF;
1843 --
1844 -- dbms_output.put_line( 'after fetch:'||p_x_req_material_tbl(i).operation_sequence);
1845 -- dbms_output.put_line( 'after fetch:'||p_x_req_material_tbl(i).workorder_operation_id);
1846 -- dbms_output.put_line( 'interface flag:'||p_interface_flag);
1847 -- Check for workorder operation ID
1848 IF G_DEBUG='Y' THEN
1849 AHL_DEBUG_PUB.debug('OPID'||p_x_req_material_tbl(i).workorder_operation_id);
1850 END IF;
1851 --
1852 IF (p_x_req_material_tbl(i).workorder_operation_id IS NULL OR
1853 p_x_req_material_tbl(i).workorder_operation_id = FND_API.G_MISS_NUM)
1854 THEN
1855 -- Validate for workorder operation
1856 IF (p_x_req_material_tbl(i).operation_sequence IS NOT NULL AND
1857 p_x_req_material_tbl(i).operation_sequence <> FND_API.G_MISS_NUM) THEN
1858 --
1859 Get_workorder_operation_Id
1860 (p_workorder_id => p_x_req_material_tbl(i).workorder_id,
1861 p_operation_sequence => p_x_req_material_tbl(i).operation_sequence,
1862 x_workorder_operation_id => l_workorder_operation_id,
1863 x_return_status => l_return_status,
1864 x_error_msg_code => l_msg_data);
1865 IF NVL(l_return_status,'x') <> 'S'
1866 THEN
1867 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_OP_ID_NOT_EXIST');
1868 Fnd_Msg_Pub.ADD;
1869 --
1870 END IF;
1871 END IF;
1872 END IF;
1873 -- Assigns operation id when called from UI
1874 IF (p_x_req_material_tbl(i).workorder_operation_id <> FND_API.G_MISS_NUM OR
1875 p_x_req_material_tbl(i).workorder_operation_id IS NULL )
1876 THEN
1877 --
1878 p_x_req_material_tbl(i).workorder_operation_id := NVL(p_x_req_material_tbl(i).workorder_operation_id,l_workorder_operation_id);
1879 ELSE
1880 p_x_req_material_tbl(i).workorder_operation_id := l_workorder_operation_id;
1881 END IF;
1882 --
1883 /* sracha: Fix bug#6594189.
1884 * commented out date validation against workorder scheduled dates.
1885 * we should allow creation of material requirements irrespective of
1886 * workorder
1887 * scheduled dates. Note: This validation is triggered only when creating
1888 * material requirement.
1889 IF (
1890 (
1891 p_interface_flag = 'Y' or p_interface_flag IS NULL
1892 )
1893 AND
1894 (
1895 -- Check added by balaji for bug # 4093650
1896 -- When workorder_operation_id is null or g_miss then date check should not
1897 -- be performed.
1898 p_x_req_material_tbl(i).workorder_operation_id IS NOT NULL AND
1899 p_x_req_material_tbl(i).workorder_operation_id <> FND_API.G_MISS_NUM
1900 )
1901 )
1902 THEN
1903 --Check for requested date should be in schedule start date schedule end date
1904 OPEN Get_sch_dates_cur(p_x_req_material_tbl(i).workorder_operation_id,
1905 trunc(p_x_req_material_tbl(i).requested_date)) ;
1906 FETCH Get_sch_dates_cur INTO l_dummy;
1907 --
1908 IF Get_sch_dates_cur%NOTFOUND THEN
1909 Fnd_Message.SET_NAME('AHL','AHL_PP_RE_DATE_SCH_DATE');
1910 Fnd_Msg_Pub.ADD;
1911 END IF;
1912 --
1913 CLOSE Get_sch_dates_cur;
1914 --
1915 END IF;
1916 */
1917 IF G_DEBUG='Y' THEN
1918 AHL_DEBUG_PUB.debug('Local OPID:'||l_workorder_operation_id);
1919 AHL_DEBUG_PUB.debug('OPID2 :'||p_x_req_material_tbl(i).workorder_operation_id);
1920 END IF;
1921 --Check for operation sequence
1922 -- dbms_output.put_line( 'before uinque check:'||p_x_req_material_tbl(i).inventory_item_id);
1923 -- dbms_output.put_line( 'before unique check:'||p_x_req_material_tbl(i).organization_id);
1924 -- dbms_output.put_line( 'before uinque check:'||p_x_req_material_tbl(i).workorder_operation_id);
1925 -- dbms_output.put_line( 'before unique check:'||p_x_req_material_tbl(i).operation_sequence);
1926 -- dbms_output.put_line( 'before unique check:'||p_x_req_material_tbl(i).requested_date);
1927 --Check for record exists in schedule materials entity
1928 OPEN Check_unique_cur(p_x_req_material_tbl(i).inventory_item_id,
1929 p_x_req_material_tbl(i).workorder_operation_id,
1930 p_x_req_material_tbl(i).organization_id,
1931 p_x_req_material_tbl(i).operation_sequence);
1932 FETCH Check_unique_cur INTO l_dummy;
1933 --
1934 IF Check_unique_cur%FOUND THEN
1935 Fnd_Message.SET_NAME('AHL','AHL_MAT_RECORD_EXIST');
1936 FND_MESSAGE.SET_TOKEN('ITEM',p_x_req_material_tbl(i).concatenated_segments,false);
1937 Fnd_Msg_Pub.ADD;
1938 END IF;
1939 --
1940 CLOSE Check_unique_cur;
1941 --
1942 --dbms_output.put_line( 'before uom conversion:'||p_x_req_material_tbl(i).inventory_item_id);
1943 -- dbms_output.put_line( 'before uom conversion:'||p_x_req_material_tbl(i).organization_id);
1944 -- dbms_output.put_line( 'before uom WO:'||p_x_req_material_tbl(i).workorder_id);
1945 -- Convert Uom code
1946 IF (p_x_req_material_tbl(i).UOM_MEANING IS NOT NULL AND p_x_req_material_tbl(i).UOM_MEANING <> FND_API.G_MISS_CHAR)
1947 THEN
1948 --
1949 OPEN Uom_cur(p_x_req_material_tbl(i).UOM_MEANING);
1950 FETCH Uom_cur INTO p_x_req_material_tbl(i).UOM_CODE;
1951 CLOSE Uom_cur;
1952 -- Get the primary UOM
1953 ELSE
1954 OPEN Primary_Uom_cur(p_x_req_material_tbl(i).inventory_item_id,
1955 p_x_req_material_tbl(i).organization_id);
1956 FETCH Primary_Uom_cur INTO p_x_req_material_tbl(i).uom_code;
1957 CLOSE Primary_Uom_cur;
1958 END IF;
1959 -- OGMA issue # 105 - begin
1960 IF (
1961 p_x_req_material_tbl(i).REPAIR_ITEM IS NOT NULL AND
1962 p_x_req_material_tbl(i).REPAIR_ITEM = 'Y'
1963 )
1964 THEN
1965 p_x_req_material_tbl(i).STATUS := 'IN-SERVICE';
1966 END IF;
1967 -- OGMA issue # 105 - end
1968 -- dbms_output.put_line( 'after uom conversion UOM:'||p_x_req_material_tbl(i).uom_code);
1969 -- Standard call to get message count and if count is get message info.
1970 l_msg_count := FND_MSG_PUB.count_msg;
1971 IF l_msg_count > 0 THEN
1972 X_msg_count := l_msg_count;
1973 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1974 RAISE FND_API.G_EXC_ERROR;
1975 END IF;
1976 END LOOP;
1977 END IF;
1978 -- dbms_output.put_line( 'before wip jobs:'||p_x_req_material_tbl.COUNT);
1979 -- dbms_output.put_line( 'before wip jobs flag:'||p_interface_flag);
1980 -- Calling Wip job api
1981 IF (p_interface_flag = 'Y' OR p_interface_flag IS NULL )THEN
1982 --
1983 -- dbms_output.put_line( 'inside:'||p_interface_flag);
1984 -- IF G_DEBUG='Y' THEN
1985 -- AHL_DEBUG_PUB.debug('after interface flag yes or null call:'||p_x_req_material_tbl(1).workorder_id);
1986 -- END IF;
1987 --
1988 -- dbms_output.put_line( 'inside:'||p_interface_flag);
1989 IF p_x_req_material_tbl.COUNT >0
1990 THEN
1991 j := 1;
1992 FOR i in p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
1993 LOOP
1994 --
1995 OPEN Get_job_number(p_x_req_material_tbl(i).workorder_id);
1996 FETCH Get_job_number INTO l_workorder_name,l_wip_entity_id;
1997 CLOSE Get_job_number;
1998 --
1999 -- sracha: Fix for FP bug# 6802777.
2000 -- derive dept. ID for the operation.
2001 OPEN get_oper_dept(l_wip_entity_id, p_x_req_material_tbl(i).operation_sequence);
2002 FETCH get_oper_dept INTO l_department_id;
2003 IF (get_oper_dept%FOUND) THEN
2004 p_x_req_material_tbl(i).department_id := l_department_id;
2005 END IF;
2006 CLOSE get_oper_dept;
2007 --
2008 l_req_material_tbl(j).JOB_NUMBER := l_workorder_name;
2009 l_req_material_tbl(j).WIP_ENTITY_ID := l_wip_entity_id;
2010 l_req_material_tbl(j).WORKORDER_ID := p_x_req_material_tbl(i).workorder_id;
2011 l_req_material_tbl(j).OPERATION_SEQUENCE :=p_x_req_material_tbl(i).operation_sequence;
2012 l_req_material_tbl(j).INVENTORY_ITEM_ID :=p_x_req_material_tbl(i).inventory_item_id;
2013 l_req_material_tbl(j).UOM_CODE :=p_x_req_material_tbl(i).uom_code;
2014 l_req_material_tbl(j).ORGANIZATION_ID :=p_x_req_material_tbl(i).organization_id;
2015 -- fix for bug# 5549135.
2016 --l_req_material_tbl(j).MRP_NET_FLAG :=1;
2017 l_req_material_tbl(j).MRP_NET_FLAG :=2;
2018 l_req_material_tbl(j).QUANTITY_PER_ASSEMBLY :=p_x_req_material_tbl(i).requested_quantity;
2019 l_req_material_tbl(j).REQUESTED_QUANTITY :=p_x_req_material_tbl(i).requested_quantity;
2020 l_req_material_tbl(j).SUPPLY_TYPE :=NULL;
2021 l_req_material_tbl(j).LOCATION :=NULL;
2022 l_req_material_tbl(j).SUB_INVENTORY :=NULL;
2023 l_req_material_tbl(j).REQUESTED_DATE :=p_x_req_material_tbl(i).requested_date;
2024 l_req_material_tbl(j).OPERATION_FLAG :='C';
2025 -- sracha: Fix for FP bug# 6802777.
2026 l_req_material_tbl(j).DEPARTMENT_ID := p_x_req_material_tbl(i).department_id;
2027 --
2028 IF G_DEBUG='Y' THEN
2029 AHL_DEBUG_PUB.debug('Before Eam job pvt.InentoryItemID:'||l_req_material_tbl(j).INVENTORY_ITEM_ID);
2030 AHL_DEBUG_PUB.debug('Before Eam job pvt.Quantity:'||l_req_material_tbl(j).REQUESTED_QUANTITY);
2031 AHL_DEBUG_PUB.debug('Before Eam job pvt.Uom:'||l_req_material_tbl(j).UOM_CODE);
2032 AHL_DEBUG_PUB.debug('Before Eam job pvt.WorkorderID:'||l_req_material_tbl(j).WORKORDER_ID);
2033 AHL_DEBUG_PUB.debug('Before Eam job pvt.WipentityID:'||l_req_material_tbl(j).WIP_ENTITY_ID);
2034 AHL_DEBUG_PUB.debug('Before Eam job pvt.OrganizationID:'||l_req_material_tbl(j).ORGANIZATION_ID);
2035 AHL_DEBUG_PUB.debug('Before Eam job pvt.Jobmumber:'||l_req_material_tbl(j).JOB_NUMBER);
2036 AHL_DEBUG_PUB.debug('Before Eam job pvt.OperationSequence:'||l_req_material_tbl(j).OPERATION_SEQUENCE);
2037 END IF;
2038 -- dbms_output.put_line( 'Before Eam job pvt.InentoryItemID:'||l_req_material_tbl(j).INVENTORY_ITEM_ID);
2039 -- dbms_output.put_line( 'Before Eam job pvt.quantity:'||l_req_material_tbl(j).REQUESTED_QUANTITY);
2040 -- dbms_output.put_line( 'Before Eam job pvt.uom:'||l_req_material_tbl(j).UOM_CODE);
2041 -- dbms_output.put_line( 'Before Eam job pvt.workorderID:'||l_req_material_tbl(j).WORKORDER_ID);
2042 -- dbms_output.put_line( 'Before Eam job pvt.wip entity:'||l_req_material_tbl(j).WIP_ENTITY_ID);
2043 -- dbms_output.put_line( 'Before Eam job pvt.OPERATION SEQ:'||l_req_material_tbl(j).OPERATION_SEQUENCE);
2044 -- dbms_output.put_line( 'Before Eam job pvt.date:'||l_req_material_tbl(j).REQUESTED_DATE);
2045 j := j+1;
2046 --
2047 END LOOP;
2048 END IF; --Material tbl
2049 --
2050 -- dbms_output.put_line( 'before wip jobs:');
2051 IF G_DEBUG='Y' THEN
2052 AHL_DEBUG_PUB.debug('before wip job call');
2053 END IF;
2054 -- Before Ahl Eam job Call
2055 AHL_EAM_JOB_PVT.process_material_req
2056 (
2057 p_api_version => l_api_version,
2058 p_init_msg_list => l_init_msg_list,
2059 p_commit => p_commit,
2060 p_validation_level => p_validation_level,
2061 p_default => l_default,
2062 p_module_type => l_module_type,
2063 x_return_status => l_return_status,
2064 x_msg_count => l_msg_count,
2065 x_msg_data => l_msg_data,
2066 p_material_req_tbl => l_req_material_tbl);
2067 -- dbms_output.put_line( 'after wip jobs:'||l_return_status);
2068 IF G_DEBUG='Y' THEN
2069 AHL_DEBUG_PUB.debug('after wip job call:'||l_return_status);
2070 AHL_DEBUG_PUB.debug('after wip job call:'||l_msg_count);
2071 AHL_DEBUG_PUB.debug('after wip job call:'||l_msg_data);
2072 END IF;
2073 --
2074 l_msg_count := FND_MSG_PUB.count_msg;
2075 --
2076 IF l_msg_count > 0 THEN
2077 X_msg_count := l_msg_count;
2078 X_msg_data := l_msg_data;
2079 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2080 RAISE FND_API.G_EXC_ERROR;
2081 END IF;
2082 END IF;
2083 --
2084 IF G_DEBUG='Y' THEN
2085 AHL_DEBUG_PUB.debug('Before insert status call');
2086 END IF;
2087 -- dbms_output.put_line( 'after wip jobs:');
2088 --
2089 IF l_return_status ='S' THEN
2090 --Change made on Nov 17, 2005 by jeli due to bug 4742895.
2091 --Ignore messages in stack if return status is S after calls to EAM APIs.
2092 FND_MSG_PUB.initialize;
2093 -- dbms_output.put_line( 'inside return status success:');
2094 IF p_x_req_material_tbl.COUNT > 0 THEN
2095 --
2096 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
2097 LOOP
2098 --
2099 IF (p_x_req_material_tbl(i).schedule_material_id = FND_API.G_MISS_NUM OR
2100 p_x_req_material_tbl(i).schedule_material_id IS NULL )
2101 THEN
2102 -- Thease conditions are required for optional fields
2103 IF p_x_req_material_tbl(i).visit_start_date = FND_API.G_MISS_DATE
2104 THEN
2105 l_Req_Material_Tbl(i).visit_start_date := NULL;
2106 ELSE
2107 l_Req_Material_Tbl(i).visit_start_date := p_x_req_material_tbl(i).visit_start_date;
2108 END IF;
2109 -- Scheduled Date
2110 IF p_x_req_material_tbl(i).scheduled_date = FND_API.G_MISS_DATE
2111 THEN
2112 l_Req_Material_Tbl(i).scheduled_date := NULL;
2113 ELSE
2114 l_Req_Material_Tbl(i).scheduled_date := p_x_req_material_tbl(i).scheduled_date;
2115 END IF;
2116 -- Request ID
2117 IF p_x_req_material_tbl(i).request_id = FND_API.G_MISS_NUM
2118 THEN
2119 l_Req_Material_Tbl(i).request_id := NULL;
2120 ELSE
2121 l_Req_Material_Tbl(i).request_id := p_x_req_material_tbl(i).request_id;
2122 END IF;
2123 --Scheduled quantity
2124 IF p_x_req_material_tbl(i).scheduled_quantity = FND_API.G_MISS_NUM
2125 THEN
2126 l_Req_Material_Tbl(i).scheduled_quantity := NULL;
2127 ELSE
2128 l_Req_Material_Tbl(i).scheduled_quantity := p_x_req_material_tbl(i).scheduled_quantity;
2129 END IF;
2130 -- Operation Sequence
2131 IF p_x_req_material_tbl(i).operation_sequence = FND_API.G_MISS_NUM
2132 THEN
2133 l_Req_Material_Tbl(i).operation_sequence := NULL;
2134 ELSE
2135 l_Req_Material_Tbl(i).operation_sequence := p_x_req_material_tbl(i).operation_sequence;
2136 END IF;
2137 -- UOM
2138 IF p_x_req_material_tbl(i).uom_code = FND_API.G_MISS_CHAR
2139 THEN
2140 l_Req_Material_Tbl(i).uom_code := NULL;
2141 ELSE
2142 l_Req_Material_Tbl(i).uom_code := p_x_req_material_tbl(i).uom_code;
2143 END IF;
2144 -- Status
2145 IF p_x_req_material_tbl(i).status = FND_API.G_MISS_CHAR
2146 THEN
2147 l_Req_Material_Tbl(i).status := NULL;
2148 ELSE
2149 l_Req_Material_Tbl(i).status := p_x_req_material_tbl(i).status;
2150 END IF;
2151 -- Operation code
2152 IF p_x_req_material_tbl(i).operation_code = FND_API.G_MISS_CHAR
2153 THEN
2154 l_Req_Material_Tbl(i).operation_code := NULL;
2155 ELSE
2156 l_Req_Material_Tbl(i).operation_code := p_x_req_material_tbl(i).operation_code;
2157 END IF;
2158 -- Transaction ID
2159 IF p_x_req_material_tbl(i).transaction_id = FND_API.G_MISS_NUM
2160 THEN
2161 l_Req_Material_Tbl(i).transaction_id := NULL;
2162 ELSE
2163 l_Req_Material_Tbl(i).transaction_id := p_x_req_material_tbl(i).transaction_id;
2164 END IF;
2165 -- Rt Oper Material ID
2166 IF p_x_req_material_tbl(i).rt_oper_material_id = FND_API.G_MISS_NUM
2167 THEN
2168 l_Req_Material_Tbl(i).rt_oper_material_id := NULL;
2169 ELSE
2170 l_Req_Material_Tbl(i).rt_oper_material_id := p_x_req_material_tbl(i).rt_oper_material_id;
2171 END IF;
2172 -- Program ID
2173 IF p_x_req_material_tbl(i).program_id = FND_API.G_MISS_NUM
2174 THEN
2175 l_Req_Material_Tbl(i).program_id := NULL;
2176 ELSE
2177 l_Req_Material_Tbl(i).program_id := p_x_req_material_tbl(i).program_id;
2178 END IF;
2179 -- Item group ID
2180 IF p_x_req_material_tbl(i).item_group_id = FND_API.G_MISS_NUM
2181 THEN
2182 l_Req_Material_Tbl(i).item_group_id := NULL;
2183 ELSE
2184 l_Req_Material_Tbl(i).item_group_id := p_x_req_material_tbl(i).item_group_id;
2185 END IF;
2186 -- Program Update Date
2187 IF p_x_req_material_tbl(i).program_update_date = FND_API.G_MISS_DATE
2188 THEN
2189 l_Req_Material_Tbl(i).program_update_date := NULL;
2190 ELSE
2191 l_Req_Material_Tbl(i).program_update_date := p_x_req_material_tbl(i).program_update_date;
2192 END IF;
2193 -- Last Updated Date
2194 IF p_x_req_material_tbl(i).last_updated_date = FND_API.G_MISS_DATE
2195 THEN
2196 l_Req_Material_Tbl(i).last_updated_date := NULL;
2197 ELSE
2198 l_Req_Material_Tbl(i).last_updated_date := p_x_req_material_tbl(i).last_updated_date;
2199 END IF;
2200 --sukhwsin: SB Effectivity Code chanages - starts
2201 --mc_header_id
2202 IF p_x_req_material_tbl(i).mc_header_id = FND_API.G_MISS_NUM
2203 THEN
2204 l_Req_Material_Tbl(i).mc_header_id := NULL;
2205 ELSE
2206 l_Req_Material_Tbl(i).mc_header_id := p_x_req_material_tbl(i).mc_header_id;
2207 END IF;
2208 --mc_name
2209 IF p_x_req_material_tbl(i).mc_name = FND_API.G_MISS_CHAR
2210 THEN
2211 l_Req_Material_Tbl(i).mc_name := NULL;
2212 ELSE
2213 l_Req_Material_Tbl(i).mc_name := p_x_req_material_tbl(i).mc_name;
2214 END IF;
2215 --mc_position_key
2216 IF p_x_req_material_tbl(i).mc_position_key = FND_API.G_MISS_NUM
2217 THEN
2218 l_Req_Material_Tbl(i).mc_position_key := NULL;
2219 ELSE
2220 l_Req_Material_Tbl(i).mc_position_key := p_x_req_material_tbl(i).mc_position_key;
2221 END IF;
2222 --mc_position
2223 IF p_x_req_material_tbl(i).mc_position = FND_API.G_MISS_CHAR
2224 THEN
2225 l_Req_Material_Tbl(i).mc_position := NULL;
2226 ELSE
2227 l_Req_Material_Tbl(i).mc_position := p_x_req_material_tbl(i).mc_position;
2228 END IF;
2229 --sukhwsin: SB Effectivity Code chanages - ends
2230 IF G_DEBUG='Y' THEN
2231 AHL_DEBUG_PUB.debug('fetching dff_default_values');
2232 END IF;
2233 get_dff_default_values
2234 (
2235 p_req_material_rec => p_x_req_material_tbl(i),
2236 flex_fields_defaults => dff_default_values
2237 );
2238 IF G_DEBUG='Y' THEN
2239 AHL_DEBUG_PUB.debug('dff_default_values have been fetched');
2240 END IF;
2241 -- Attribte Category
2242 IF p_x_req_material_tbl(i).attribute_category = FND_API.G_MISS_CHAR
2243 THEN
2244 l_Req_Material_Tbl(i).attribute_category := NULL;
2245 ELSIF p_x_req_material_tbl(i).attribute_category IS NULL THEN
2246 l_Req_Material_Tbl(i).attribute_category := dff_default_values.attribute_category;
2247 ELSE
2248 l_Req_Material_Tbl(i).attribute_category := p_x_req_material_tbl(i).attribute_category;
2249 END IF;
2250 -- Attribte1
2251 IF p_x_req_material_tbl(i).attribute1 = FND_API.G_MISS_CHAR
2252 THEN
2253 l_Req_Material_Tbl(i).attribute1 := NULL;
2254 ELSIF p_x_req_material_tbl(i).attribute1 IS NULL THEN
2255 l_Req_Material_Tbl(i).attribute1 := dff_default_values.attribute1;
2256 ELSE
2257 l_Req_Material_Tbl(i).attribute1 := p_x_req_material_tbl(i).attribute1;
2258 END IF;
2259 -- Attribte2
2260 IF p_x_req_material_tbl(i).attribute2 = FND_API.G_MISS_CHAR
2261 THEN
2262 l_Req_Material_Tbl(i).attribute2 := NULL;
2263 ELSIF p_x_req_material_tbl(i).attribute2 IS NULL THEN
2264 l_Req_Material_Tbl(i).attribute2 := dff_default_values.attribute2;
2265 ELSE
2266 l_Req_Material_Tbl(i).attribute2 := p_x_req_material_tbl(i).attribute2;
2267 END IF;
2268 -- Attribte3
2269 IF p_x_req_material_tbl(i).attribute3 = FND_API.G_MISS_CHAR
2270 THEN
2271 l_Req_Material_Tbl(i).attribute3 := NULL;
2272 ELSIF p_x_req_material_tbl(i).attribute3 IS NULL THEN
2273 l_Req_Material_Tbl(i).attribute3 := dff_default_values.attribute3;
2274 ELSE
2275 l_Req_Material_Tbl(i).attribute3 := p_x_req_material_tbl(i).attribute3;
2276 END IF;
2277 -- Attribte4
2278 IF p_x_req_material_tbl(i).attribute4 = FND_API.G_MISS_CHAR
2279 THEN
2280 l_Req_Material_Tbl(i).attribute4 := NULL;
2281 ELSIF p_x_req_material_tbl(i).attribute4 IS NULL THEN
2282 l_Req_Material_Tbl(i).attribute4 := dff_default_values.attribute4;
2283 ELSE
2284 l_Req_Material_Tbl(i).attribute4 := p_x_req_material_tbl(i).attribute4;
2285 END IF;
2286 -- Attribte5
2287 IF p_x_req_material_tbl(i).attribute5 = FND_API.G_MISS_CHAR
2288 THEN
2289 l_Req_Material_Tbl(i).attribute5 := NULL;
2290 ELSIF p_x_req_material_tbl(i).attribute5 IS NULL THEN
2291 l_Req_Material_Tbl(i).attribute5 := dff_default_values.attribute5;
2292 ELSE
2293 l_Req_Material_Tbl(i).attribute5 := p_x_req_material_tbl(i).attribute5;
2294 END IF;
2295 -- Attribte6
2296 IF p_x_req_material_tbl(i).attribute6 = FND_API.G_MISS_CHAR
2297 THEN
2298 l_Req_Material_Tbl(i).attribute6 := NULL;
2299 ELSIF p_x_req_material_tbl(i).attribute6 IS NULL THEN
2300 l_Req_Material_Tbl(i).attribute6 := dff_default_values.attribute6;
2301 ELSE
2302 l_Req_Material_Tbl(i).attribute6 := p_x_req_material_tbl(i).attribute6;
2303 END IF;
2304 -- Attribte7
2305 IF p_x_req_material_tbl(i).attribute7 = FND_API.G_MISS_CHAR
2306 THEN
2307 l_Req_Material_Tbl(i).attribute7 := NULL;
2308 ELSIF p_x_req_material_tbl(i).attribute7 IS NULL THEN
2309 l_Req_Material_Tbl(i).attribute7 := dff_default_values.attribute7;
2310 ELSE
2311 l_Req_Material_Tbl(i).attribute7 := p_x_req_material_tbl(i).attribute7;
2312 END IF;
2313 -- Attribte8
2314 IF p_x_req_material_tbl(i).attribute8 = FND_API.G_MISS_CHAR
2315 THEN
2316 l_Req_Material_Tbl(i).attribute8 := NULL;
2317 ELSIF p_x_req_material_tbl(i).attribute8 IS NULL THEN
2318 l_Req_Material_Tbl(i).attribute8 := dff_default_values.attribute8;
2319 ELSE
2320 l_Req_Material_Tbl(i).attribute8 := p_x_req_material_tbl(i).attribute8;
2321 END IF;
2322 -- Attribte9
2323 IF p_x_req_material_tbl(i).attribute9 = FND_API.G_MISS_CHAR
2324 THEN
2325 l_Req_Material_Tbl(i).attribute9 := NULL;
2326 ELSIF p_x_req_material_tbl(i).attribute9 IS NULL THEN
2327 l_Req_Material_Tbl(i).attribute9 := dff_default_values.attribute9;
2328 ELSE
2329 l_Req_Material_Tbl(i).attribute9 := p_x_req_material_tbl(i).attribute9;
2330 END IF;
2331 -- Attribte10
2332 IF p_x_req_material_tbl(i).attribute10 = FND_API.G_MISS_CHAR
2333 THEN
2334 l_Req_Material_Tbl(i).attribute10 := NULL;
2335 ELSIF p_x_req_material_tbl(i).attribute10 IS NULL THEN
2336 l_Req_Material_Tbl(i).attribute10 := dff_default_values.attribute10;
2337 ELSE
2338 l_Req_Material_Tbl(i).attribute10 := p_x_req_material_tbl(i).attribute10;
2339 END IF;
2340 -- Attribte11
2341 IF p_x_req_material_tbl(i).attribute11 = FND_API.G_MISS_CHAR
2342 THEN
2343 l_Req_Material_Tbl(i).attribute11 := NULL;
2344 ELSIF p_x_req_material_tbl(i).attribute11 IS NULL THEN
2345 l_Req_Material_Tbl(i).attribute11 := dff_default_values.attribute11;
2346 ELSE
2347 l_Req_Material_Tbl(i).attribute11 := p_x_req_material_tbl(i).attribute11;
2348 END IF;
2349 -- Attribte12
2350 IF p_x_req_material_tbl(i).attribute12 = FND_API.G_MISS_CHAR
2351 THEN
2352 l_Req_Material_Tbl(i).attribute12 := NULL;
2353 ELSIF p_x_req_material_tbl(i).attribute12 IS NULL THEN
2354 l_Req_Material_Tbl(i).attribute12 := dff_default_values.attribute12;
2355 ELSE
2356 l_Req_Material_Tbl(i).attribute12 := p_x_req_material_tbl(i).attribute12;
2357 END IF;
2358 -- Attribte13
2359 IF p_x_req_material_tbl(i).attribute13 = FND_API.G_MISS_CHAR
2360 THEN
2361 l_Req_Material_Tbl(i).attribute13 := NULL;
2362 ELSIF p_x_req_material_tbl(i).attribute13 IS NULL THEN
2363 l_Req_Material_Tbl(i).attribute13 := dff_default_values.attribute13;
2364 ELSE
2365 l_Req_Material_Tbl(i).attribute13 := p_x_req_material_tbl(i).attribute13;
2366 END IF;
2367 -- Attribte14
2368 IF p_x_req_material_tbl(i).attribute14 = FND_API.G_MISS_CHAR
2369 THEN
2370 l_Req_Material_Tbl(i).attribute14 := NULL;
2371 ELSIF p_x_req_material_tbl(i).attribute14 IS NULL THEN
2372 l_Req_Material_Tbl(i).attribute14 := dff_default_values.attribute14;
2373 ELSE
2374 l_Req_Material_Tbl(i).attribute14 := p_x_req_material_tbl(i).attribute14;
2375 END IF;
2376 -- Attribte15
2377 IF p_x_req_material_tbl(i).attribute15 = FND_API.G_MISS_CHAR
2378 THEN
2379 l_Req_Material_Tbl(i).attribute15 := NULL;
2380 ELSIF p_x_req_material_tbl(i).attribute15 IS NULL THEN
2381 l_Req_Material_Tbl(i).attribute15 := dff_default_values.attribute15;
2382 ELSE
2383 l_Req_Material_Tbl(i).attribute15 := p_x_req_material_tbl(i).attribute15;
2384 END IF;
2385 --
2386 -- debadey: Marshalling FDD section 5.15 (update aog flag in workorder), 2/11/11
2387 -- AOG Flag
2388 IF p_x_req_material_tbl(i).aog_flag = FND_API.G_MISS_CHAR
2389 THEN
2390 l_Req_Material_Tbl(i).aog_flag := NULL;
2391 ELSE
2392 l_Req_Material_Tbl(i).aog_flag := p_x_req_material_tbl(i).aog_flag;
2393 END IF;
2394 -- end of changes by debadey for Marshalling
2395 -- Get Sequence Number for schedule material ID
2396 SELECT ahl_schedule_materials_s.NEXTVAL
2397 INTO l_schedule_material_id FROM DUAL;
2398 --
2399 --
2400 IF G_DEBUG='Y' THEN
2401 AHL_DEBUG_PUB.debug( 'before interface flag:'||p_x_req_material_tbl(i).rt_oper_material_id);
2402 AHL_DEBUG_PUB.debug( 'before interface flag:'||p_interface_flag);
2403 END IF;
2404 --Check for materials added from route.Already in scheudle material entity
2405 -- were schedule during LTP process
2406 IF (p_interface_flag = 'N' or p_interface_flag = 'n') THEN
2407 --
2408 IF G_DEBUG='Y' THEN
2409 AHL_DEBUG_PUB.debug( 'FLAG=N RTID:'||p_x_req_material_tbl(i).rt_oper_material_id);
2410 AHL_DEBUG_PUB.debug( 'FLAG=N VTID:'||p_x_req_material_tbl(i).visit_task_id);
2411 AHL_DEBUG_PUB.debug( 'FLAG=N ITID:'||p_x_req_material_tbl(i).inventory_item_id);
2412 END IF;
2413 IF (p_x_req_material_tbl(i).rt_oper_material_id IS NOT NULL AND
2414 p_x_req_material_tbl(i).rt_oper_material_id <> FND_API.G_MISS_NUM)
2415 THEN
2416 --
2417 OPEN Get_rt_mat_cur (p_x_req_material_tbl(i).visit_task_id,
2418 p_x_req_material_tbl(i).rt_oper_material_id,
2419 --sukhwsin::SB Effectivity - control position change
2420 p_x_req_material_tbl(i).mc_position_key);
2421 FETCH Get_rt_mat_cur INTO l_material_rec;
2422 CLOSE Get_rt_mat_cur;
2423 --
2424 IF G_DEBUG='Y' THEN
2425 AHL_DEBUG_PUB.debug( 'Inside MATID:'||l_material_rec.scheduled_material_id);
2426 AHL_DEBUG_PUB.debug( 'inside VTID:'||l_material_rec.visit_task_id);
2427 AHL_DEBUG_PUB.debug( 'inside ITID:'||l_material_rec.inventory_item_id);
2428 AHL_DEBUG_PUB.debug( 'inside DES:'||l_schedule_designator);
2429 END IF;
2430 --
2431 IF ( l_material_rec.scheduled_material_id IS NOT NULL
2432 --Adithya added for FP Bug# 6366740
2433 AND p_x_req_material_tbl(i).workorder_operation_id = l_material_rec.workorder_operation_id )
2434 THEN
2435 -- UPDATE ahl schedule materials table with operation id, operation sequence
2436 UPDATE ahl_schedule_materials
2437 SET workorder_operation_id = p_x_req_material_tbl(i).workorder_operation_id,
2438 operation_code = p_x_req_material_tbl(i).operation_code,
2439 operation_sequence = p_x_req_material_tbl(i).operation_sequence,
2440 object_version_number =l_material_rec.object_version_number +1
2441 WHERE scheduled_material_id = l_material_rec.scheduled_material_id;
2442 --Assign out parameter
2443 p_x_req_material_tbl(i).schedule_material_id := l_material_rec.scheduled_material_id;
2444 p_x_req_material_tbl(i).requested_quantity := l_material_rec.requested_quantity;
2445 p_x_req_material_tbl(i).requested_date := l_material_rec.requested_date;
2446 p_x_req_material_tbl(i).uom_code := l_material_rec.uom;
2447 -- fix for bug# 5549135.
2448 --p_x_req_material_tbl(i).mrp_net_flag := 1;
2449 p_x_req_material_tbl(i).mrp_net_flag := 2;
2450 IF G_DEBUG='Y' THEN
2451 AHL_DEBUG_PUB.debug( 'p_x_req_material_tbl(i).mrp_net_flag:'||p_x_req_material_tbl(i).mrp_net_flag);
2452 END IF;
2453 ELSE
2454 IF G_DEBUG='Y' THEN
2455 AHL_DEBUG_PUB.debug( 'else flag Mat id:'||l_schedule_material_id);
2456 END IF;
2457 -- Create Record in schedule materials
2458 Insert_Row (
2459 X_SCHEDULED_MATERIAL_ID => l_schedule_material_id,
2460 X_OBJECT_VERSION_NUMBER => 1,
2461 X_INVENTORY_ITEM_ID => p_x_req_material_tbl(i).inventory_item_id,
2462 X_SCHEDULE_DESIGNATOR => l_schedule_designator,
2463 X_VISIT_ID => l_visit_id,
2464 X_VISIT_START_DATE => l_Req_Material_Tbl(i).visit_start_date,
2465 X_VISIT_TASK_ID => p_x_req_material_tbl(i).visit_task_id,
2466 X_ORGANIZATION_ID => p_x_req_material_tbl(i).organization_id,
2467 X_SCHEDULED_DATE => l_Req_Material_Tbl(i).scheduled_date,
2468 X_REQUEST_ID => l_Req_Material_Tbl(i).request_id,
2469 X_REQUESTED_DATE => p_x_req_material_tbl(i).requested_date,
2470 X_SCHEDULED_QUANTITY => l_Req_Material_Tbl(i).scheduled_quantity,
2471 X_PROCESS_STATUS => null,
2472 X_ERROR_MESSAGE => null,
2473 X_TRANSACTION_ID => l_Req_Material_Tbl(i).transaction_id,
2474 X_UOM => l_Req_Material_Tbl(i).uom_code,
2475 X_RT_OPER_MATERIAL_ID => l_Req_Material_Tbl(i).rt_oper_material_id,
2476 X_OPERATION_CODE => l_Req_Material_Tbl(i).operation_code,
2477 X_OPERATION_SEQUENCE => l_Req_Material_Tbl(i).operation_sequence,
2478 X_ITEM_GROUP_ID => l_Req_Material_Tbl(i).item_group_id,
2479 X_REQUESTED_QUANTITY => p_x_req_material_tbl(i).requested_quantity,
2480 X_PROGRAM_ID => l_Req_Material_Tbl(i).program_id,
2481 X_PROGRAM_UPDATE_DATE => l_Req_Material_Tbl(i).program_update_date,
2482 X_LAST_UPDATED_DATE => l_Req_Material_Tbl(i).last_updated_date,
2483 X_WORKORDER_OPERATION_ID => p_x_req_material_tbl(i).workorder_operation_id,
2484 X_MATERIAL_REQUEST_TYPE => 'UNPLANNED',
2485 X_STATUS => nvl(l_Req_Material_Tbl(i).status, 'ACTIVE'),
2486 X_ATTRIBUTE_CATEGORY => l_Req_Material_Tbl(i).attribute_category,
2487 X_ATTRIBUTE1 => l_Req_Material_Tbl(i).attribute1,
2488 X_ATTRIBUTE2 => l_Req_Material_Tbl(i).attribute2,
2489 X_ATTRIBUTE3 => l_Req_Material_Tbl(i).attribute3,
2490 X_ATTRIBUTE4 => l_Req_Material_Tbl(i).attribute4,
2491 X_ATTRIBUTE5 => l_Req_Material_Tbl(i).attribute5,
2492 X_ATTRIBUTE6 => l_Req_Material_Tbl(i).attribute6,
2493 X_ATTRIBUTE7 => l_Req_Material_Tbl(i).attribute7,
2494 X_ATTRIBUTE8 => l_Req_Material_Tbl(i).attribute8,
2495 X_ATTRIBUTE9 => l_Req_Material_Tbl(i).attribute9,
2496 X_ATTRIBUTE10 => l_Req_Material_Tbl(i).attribute10,
2497 X_ATTRIBUTE11 => l_Req_Material_Tbl(i).attribute11,
2498 X_ATTRIBUTE12 => l_Req_Material_Tbl(i).attribute12,
2499 X_ATTRIBUTE13 => l_Req_Material_Tbl(i).attribute13,
2500 X_ATTRIBUTE14 => l_Req_Material_Tbl(i).attribute14,
2501 X_ATTRIBUTE15 => l_Req_Material_Tbl(i).attribute15,
2502 X_CREATION_DATE => SYSDATE,
2503 X_CREATED_BY => fnd_global.user_id,
2504 X_LAST_UPDATE_DATE => SYSDATE,
2505 X_LAST_UPDATED_BY => fnd_global.user_id,
2506 X_LAST_UPDATE_LOGIN => fnd_global.login_id,
2507 --sukhwsin: Code changes for SB effectivity - starts
2508 X_MC_HEADER_ID => l_Req_Material_Tbl(i).mc_header_id,
2509 X_POSITION_KEY => l_Req_Material_Tbl(i).mc_position_key,
2510 X_RELATIONSHIP_ID => l_relationship_tbl(i),
2511 --sukhwsin: Code changes for SB effectivity - ends
2512 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
2513 X_AOG_FLAG => l_Req_Material_Tbl(i).aog_flag
2514 );
2515 --Assign out parameter
2516 p_x_req_material_tbl(i).schedule_material_id := l_schedule_material_id;
2517 -- fix for bug# 5549135.
2518 --p_x_req_material_tbl(i).mrp_net_flag := 1;
2519 p_x_req_material_tbl(i).mrp_net_flag := 2;
2520 --
2521 END IF; --Get_rt_mat_cur
2522 -- Get Project and Task id
2523 IF G_DEBUG='Y' THEN
2524 AHL_DEBUG_PUB.debug( 'schedule material id 5:'||l_schedule_material_id);
2525 END IF;
2526 ELSE
2527 IF G_DEBUG='Y' THEN
2528 AHL_DEBUG_PUB.debug( 'schedule material id 6:'||l_schedule_material_id);
2529 END IF;
2530 -- Create Record in schedule materials
2531 Insert_Row (
2532 X_SCHEDULED_MATERIAL_ID => l_schedule_material_id,
2533 X_OBJECT_VERSION_NUMBER => 1,
2534 X_INVENTORY_ITEM_ID => p_x_req_material_tbl(i).inventory_item_id,
2535 X_SCHEDULE_DESIGNATOR => l_schedule_designator,
2536 X_VISIT_ID => l_visit_id,
2537 X_VISIT_START_DATE => l_Req_Material_Tbl(i).visit_start_date,
2538 X_VISIT_TASK_ID => p_x_req_material_tbl(i).visit_task_id,
2539 X_ORGANIZATION_ID => p_x_req_material_tbl(i).organization_id,
2540 X_SCHEDULED_DATE => l_Req_Material_Tbl(i).scheduled_date,
2541 X_REQUEST_ID => l_Req_Material_Tbl(i).request_id,
2542 X_REQUESTED_DATE => p_x_req_material_tbl(i).requested_date,
2543 X_SCHEDULED_QUANTITY => l_Req_Material_Tbl(i).scheduled_quantity,
2544 X_PROCESS_STATUS => null,
2545 X_ERROR_MESSAGE => null,
2546 X_TRANSACTION_ID => l_Req_Material_Tbl(i).transaction_id,
2547 X_UOM => l_Req_Material_Tbl(i).uom_code,
2548 X_RT_OPER_MATERIAL_ID => l_Req_Material_Tbl(i).rt_oper_material_id,
2549 X_OPERATION_CODE => l_Req_Material_Tbl(i).operation_code,
2550 X_OPERATION_SEQUENCE => l_Req_Material_Tbl(i).operation_sequence,
2551 X_ITEM_GROUP_ID => l_Req_Material_Tbl(i).item_group_id,
2552 X_REQUESTED_QUANTITY => p_x_req_material_tbl(i).requested_quantity,
2553 X_PROGRAM_ID => l_Req_Material_Tbl(i).program_id,
2554 X_PROGRAM_UPDATE_DATE => l_Req_Material_Tbl(i).program_update_date,
2555 X_LAST_UPDATED_DATE => l_Req_Material_Tbl(i).last_updated_date,
2556 X_WORKORDER_OPERATION_ID => p_x_req_material_tbl(i).workorder_operation_id,
2557 X_MATERIAL_REQUEST_TYPE => 'UNPLANNED',
2558 X_STATUS => 'ACTIVE',
2559 X_ATTRIBUTE_CATEGORY => l_Req_Material_Tbl(i).attribute_category,
2560 X_ATTRIBUTE1 => l_Req_Material_Tbl(i).attribute1,
2561 X_ATTRIBUTE2 => l_Req_Material_Tbl(i).attribute2,
2562 X_ATTRIBUTE3 => l_Req_Material_Tbl(i).attribute3,
2563 X_ATTRIBUTE4 => l_Req_Material_Tbl(i).attribute4,
2564 X_ATTRIBUTE5 => l_Req_Material_Tbl(i).attribute5,
2565 X_ATTRIBUTE6 => l_Req_Material_Tbl(i).attribute6,
2566 X_ATTRIBUTE7 => l_Req_Material_Tbl(i).attribute7,
2567 X_ATTRIBUTE8 => l_Req_Material_Tbl(i).attribute8,
2568 X_ATTRIBUTE9 => l_Req_Material_Tbl(i).attribute9,
2569 X_ATTRIBUTE10 => l_Req_Material_Tbl(i).attribute10,
2570 X_ATTRIBUTE11 => l_Req_Material_Tbl(i).attribute11,
2571 X_ATTRIBUTE12 => l_Req_Material_Tbl(i).attribute12,
2572 X_ATTRIBUTE13 => l_Req_Material_Tbl(i).attribute13,
2573 X_ATTRIBUTE14 => l_Req_Material_Tbl(i).attribute14,
2574 X_ATTRIBUTE15 => l_Req_Material_Tbl(i).attribute15,
2575 X_CREATION_DATE => SYSDATE,
2576 X_CREATED_BY => fnd_global.user_id,
2577 X_LAST_UPDATE_DATE => SYSDATE,
2578 X_LAST_UPDATED_BY => fnd_global.user_id,
2579 X_LAST_UPDATE_LOGIN => fnd_global.login_id,
2580 --sukhwsin: SB Effectivity Code changes - starts
2581 X_MC_HEADER_ID => l_Req_Material_Tbl(i).mc_header_id,
2582 X_POSITION_KEY => l_Req_Material_Tbl(i).mc_position_key,
2583 X_RELATIONSHIP_ID => l_relationship_tbl(i),
2584 --sukhwsin: SB Effectivity Code changes - ends
2585 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
2586 X_AOG_FLAG => l_Req_Material_Tbl(i).aog_flag
2587 );
2588 --Assign out parameter
2589 --
2590 p_x_req_material_tbl(i).schedule_material_id := l_schedule_material_id;
2591 -- fix for bug# 5549135.
2592 --p_x_req_material_tbl(i).mrp_net_flag := 1;
2593 p_x_req_material_tbl(i).mrp_net_flag := 2;
2594 --
2595 END IF; -- --rt oper id not null
2596 IF G_DEBUG='Y' THEN
2597 AHL_DEBUG_PUB.debug( 'after rt oper material id:'||l_schedule_material_id);
2598 END IF;
2599 --
2600 END IF; -- --Interface flag
2601 --
2602 IF G_DEBUG='Y' THEN
2603 AHL_DEBUG_PUB.debug( 'schedule material id:'||l_schedule_material_id);
2604 END IF;
2605 --
2606 END IF; --Material id g_miss_num
2607 --
2608 SELECT AHL_WO_OPERATIONS_TXNS_S.NEXTVAL INTO l_wo_operation_txn_id
2609 FROM DUAL;
2610 --
2611 IF G_DEBUG='Y' THEN
2612 AHL_DEBUG_PUB.debug( 'before calling log record l_wo_operation_txn_id:'||l_wo_operation_txn_id);
2613 END IF;
2614 --Create Record in transactions table
2615 Log_Transaction_Record
2616 ( p_wo_operation_txn_id => l_wo_operation_txn_id,
2617 p_object_version_number => 1,
2618 p_last_update_date => sysdate,
2619 p_last_updated_by => fnd_global.user_id,
2620 p_creation_date => sysdate,
2621 p_created_by => fnd_global.user_id,
2622 p_last_update_login => fnd_global.login_id,
2623 p_load_type_code => 2,
2624 p_transaction_type_code => 1,
2625 p_workorder_operation_id => p_x_req_material_tbl(i).workorder_operation_id,
2626 p_schedule_material_id => p_x_req_material_tbl(i).schedule_material_id,
2627 p_inventory_item_id => p_x_req_material_tbl(i).inventory_item_id,
2628 p_required_quantity => p_x_req_material_tbl(i).requested_quantity,
2629 p_date_required => p_x_req_material_tbl(i).requested_date
2630 );
2631 --Call MRP Process
2632 --
2633 IF G_DEBUG='Y' THEN
2634 AHL_DEBUG_PUB.debug( 'before calling MRP l_schedule_designator:'||l_schedule_designator);
2635 END IF;
2636 IF (p_interface_flag IS NULL OR p_interface_flag = 'Y') THEN
2637 -- Create Record in schedule materials
2638 Insert_Row (
2639 X_SCHEDULED_MATERIAL_ID => l_schedule_material_id,
2640 X_OBJECT_VERSION_NUMBER => 1,
2641 X_INVENTORY_ITEM_ID => p_x_req_material_tbl(i).inventory_item_id,
2642 X_SCHEDULE_DESIGNATOR => l_schedule_designator,
2643 X_VISIT_ID => l_visit_id,
2644 X_VISIT_START_DATE => l_Req_Material_Tbl(i).visit_start_date,
2645 X_VISIT_TASK_ID => p_x_req_material_tbl(i).visit_task_id,
2646 X_ORGANIZATION_ID => p_x_req_material_tbl(i).organization_id,
2647 X_SCHEDULED_DATE => l_Req_Material_Tbl(i).scheduled_date,
2648 X_REQUEST_ID => l_Req_Material_Tbl(i).request_id,
2649 X_REQUESTED_DATE => p_x_req_material_tbl(i).requested_date,
2650 X_SCHEDULED_QUANTITY => l_Req_Material_Tbl(i).scheduled_quantity,
2651 X_PROCESS_STATUS => null,
2652 X_ERROR_MESSAGE => null,
2653 X_TRANSACTION_ID => l_Req_Material_Tbl(i).transaction_id,
2654 X_UOM => l_Req_Material_Tbl(i).uom_code,
2655 X_RT_OPER_MATERIAL_ID => l_Req_Material_Tbl(i).rt_oper_material_id,
2656 X_OPERATION_CODE => l_Req_Material_Tbl(i).operation_code,
2657 X_OPERATION_SEQUENCE => l_Req_Material_Tbl(i).operation_sequence,
2658 X_ITEM_GROUP_ID => l_Req_Material_Tbl(i).item_group_id,
2659 X_REQUESTED_QUANTITY => p_x_req_material_tbl(i).requested_quantity,
2660 X_PROGRAM_ID => l_Req_Material_Tbl(i).program_id,
2661 X_PROGRAM_UPDATE_DATE => l_Req_Material_Tbl(i).program_update_date,
2662 X_LAST_UPDATED_DATE => l_Req_Material_Tbl(i).last_updated_date,
2663 X_WORKORDER_OPERATION_ID => p_x_req_material_tbl(i).workorder_operation_id,
2664 X_MATERIAL_REQUEST_TYPE => 'UNPLANNED',
2665 X_STATUS => nvl(l_Req_Material_Tbl(i).status,'ACTIVE'),
2666 X_ATTRIBUTE_CATEGORY => l_Req_Material_Tbl(i).attribute_category,
2667 X_ATTRIBUTE1 => l_Req_Material_Tbl(i).attribute1,
2668 X_ATTRIBUTE2 => l_Req_Material_Tbl(i).attribute2,
2669 X_ATTRIBUTE3 => l_Req_Material_Tbl(i).attribute3,
2670 X_ATTRIBUTE4 => l_Req_Material_Tbl(i).attribute4,
2671 X_ATTRIBUTE5 => l_Req_Material_Tbl(i).attribute5,
2672 X_ATTRIBUTE6 => l_Req_Material_Tbl(i).attribute6,
2673 X_ATTRIBUTE7 => l_Req_Material_Tbl(i).attribute7,
2674 X_ATTRIBUTE8 => l_Req_Material_Tbl(i).attribute8,
2675 X_ATTRIBUTE9 => l_Req_Material_Tbl(i).attribute9,
2676 X_ATTRIBUTE10 => l_Req_Material_Tbl(i).attribute10,
2677 X_ATTRIBUTE11 => l_Req_Material_Tbl(i).attribute11,
2678 X_ATTRIBUTE12 => l_Req_Material_Tbl(i).attribute12,
2679 X_ATTRIBUTE13 => l_Req_Material_Tbl(i).attribute13,
2680 X_ATTRIBUTE14 => l_Req_Material_Tbl(i).attribute14,
2681 X_ATTRIBUTE15 => l_Req_Material_Tbl(i).attribute15,
2682 X_CREATION_DATE => SYSDATE,
2683 X_CREATED_BY => fnd_global.user_id,
2684 X_LAST_UPDATE_DATE => SYSDATE,
2685 X_LAST_UPDATED_BY => fnd_global.user_id,
2686 X_LAST_UPDATE_LOGIN => fnd_global.login_id,
2687 --sukhwsin: SB Effectivity Code changes - starts
2688 X_MC_HEADER_ID => l_Req_Material_Tbl(i).mc_header_id,
2689 X_POSITION_KEY => l_Req_Material_Tbl(i).mc_position_key,
2690 X_RELATIONSHIP_ID => l_relationship_tbl(i),
2691 --sukhwsin: SB Effectivity Code changes - ends
2692 --debadey: Marshalling FDD sction 5.15 - AOG flag addition
2693 X_AOG_FLAG => l_Req_Material_Tbl(i).aog_flag
2694 );
2695 --Assign out parameter
2696 p_x_req_material_tbl(i).schedule_material_id := l_schedule_material_id;
2697 --
2698 END IF; -- Interface flag Is null condiiton
2699 --
2700 END LOOP;
2701 END IF; --Count
2702 --
2703 X_return_status := 'S';
2704 x_job_return_status := 'S';
2705 ELSE
2706 x_job_return_status := 'E';
2707 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2708 RAISE Fnd_Api.G_EXC_ERROR;
2709 END IF; --status condition
2710 --Call notification API
2711 --Send Material Notification
2712 IF X_return_status = 'S' THEN
2713 --Check for Profile Option value If 'Y' Call
2714 IF FND_PROFILE.value( 'AHL_MTL_REQ_NOTIFICATION_ENABLED') = 'Y' THEN
2715 --
2716 MATERIAL_NOTIFICATION
2717 (
2718 p_api_version => p_api_version,
2719 p_init_msg_list => p_init_msg_list,
2720 p_commit => p_commit,
2721 p_validation_level => p_validation_level,
2722 p_Req_Material_Tbl => p_x_req_material_tbl,
2723 x_return_status => l_return_status,
2724 x_msg_count => l_msg_count,
2725 x_msg_data => l_msg_data);
2726 END IF;
2727 END IF;
2728 -- dbms_output.put_line( 'end of API:');
2729 --sukhwsin::VCP Integration - Code Changes starts
2730 --Construct Workorder table that contains unique workorders
2731 IF p_x_req_material_tbl.COUNT > 0 THEN
2732 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
2733 LOOP
2734 l_WO_found := 'N';
2735 IF (l_WorkOrders_Table.count > 0) THEN
2736 FOR j in l_WorkOrders_Table.FIRST..l_WorkOrders_Table.LAST
2737 LOOP
2738 IF (l_WorkOrders_Table(j) = p_x_req_material_tbl(i).workorder_id) THEN
2739 l_WO_found := 'Y';
2740 EXIT;
2741 END IF;
2742 END LOOP;
2743 END IF;
2744 IF (l_WO_found = 'N') THEN
2745 l_WorkOrders_Table(nvl(l_WorkOrders_Table.LAST,-1) + 1) := p_x_req_material_tbl(i).workorder_id;
2746 END IF;
2747 END LOOP;
2748 END IF;
2749 --change set ITEM_ALTERNATES_EXIST to Y in AHL_WORKORDERS if workorder contains
2750 --item group based or position based material requirements
2751 IF ( l_WorkOrders_Table.COUNT > 0 ) THEN
2752 FOR i IN l_WorkOrders_Table.FIRST..l_WorkOrders_Table.LAST
2753 LOOP
2754 l_alt_mat_req_count := 0;
2755 OPEN Get_Alt_Mat_Requirment_Count(l_WorkOrders_Table(i));
2756 FETCH Get_Alt_Mat_Requirment_Count INTO l_alt_mat_req_count;
2757 CLOSE Get_Alt_Mat_Requirment_Count;
2758 IF (l_alt_mat_req_count > 0) THEN
2759 UPDATE AHL_WORKORDERS
2760 SET ITEM_ALTERNATES_EXIST = 'Y'
2761 WHERE WORKORDER_ID = l_WorkOrders_Table(i);
2762 END IF;
2763 END LOOP;
2764 END IF;
2765 --sukhwsin::VCP Integration - Code Changes ends
2766 ------------------------End of Body---------------------------------------
2767 --Standard check to count messages
2768 l_msg_count := Fnd_Msg_Pub.count_msg;
2769 IF l_msg_count > 0 THEN
2770 X_msg_count := l_msg_count;
2771 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
2772 RAISE Fnd_Api.G_EXC_ERROR;
2773 END IF;
2774 --Standard check for commit
2775 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
2776 COMMIT;
2777 END IF;
2778 -- Debug info
2779 IF G_DEBUG='Y' THEN
2780 Ahl_Debug_Pub.debug( 'End of public api Create Material Reqst','+PPMRP+');
2781 -- Check if API is called in debug mode. If yes, disable debug.
2782 Ahl_Debug_Pub.disable_debug;
2783 END IF;
2784 EXCEPTION
2785 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2786 ROLLBACK TO create_material_reqst;
2787 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2788 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
2789 p_count => x_msg_count,
2790 p_data => x_msg_data);
2791 IF G_DEBUG='Y' THEN
2792 AHL_DEBUG_PUB.log_app_messages (
2793 x_msg_count, x_msg_data, 'ERROR' );
2794 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Create Material Reqst','+PPMRP+');
2795 -- Check if API is called in debug mode. If yes, disable debug.
2796 AHL_DEBUG_PUB.disable_debug;
2797 END IF;
2798 WHEN FND_API.G_EXC_ERROR THEN
2799 ROLLBACK TO create_material_reqst;
2800 X_return_status := FND_API.G_RET_STS_ERROR;
2801 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
2802 p_count => x_msg_count,
2803 p_data => X_msg_data);
2804 IF G_DEBUG='Y' THEN
2805 -- Debug info.
2806 AHL_DEBUG_PUB.log_app_messages (
2807 x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
2808 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Create Material Reqst','+PPMRP+');
2809 -- Check if API is called in debug mode. If yes, disable debug.
2810 AHL_DEBUG_PUB.disable_debug;
2811 END IF;
2812 WHEN OTHERS THEN
2813 ROLLBACK TO create_material_reqst;
2814 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2815 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2816 THEN
2817 fnd_msg_pub.add_exc_msg(p_pkg_name => 'AHL_PP_MATERIALS_PVT',
2818 p_procedure_name => 'CREATE_MATERIAL_REQST',
2819 p_error_text => SUBSTR(SQLERRM,1,240));
2820 END IF;
2821 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
2822 p_count => x_msg_count,
2823 p_data => X_msg_data);
2824 IF G_DEBUG='Y' THEN
2825 -- Debug info.
2826 AHL_DEBUG_PUB.log_app_messages (
2827 x_msg_count, x_msg_data, 'SQL ERROR' );
2828 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Create Material Reqst','+PPMRP+');
2829 -- Check if API is called in debug mode. If yes, disable debug.
2830 AHL_DEBUG_PUB.disable_debug;
2831 END IF;
2832 END Create_Material_Reqst;
2833 --
2834 -- Start of Comments --
2835 -- Procedure name : Update_Material_Reqst
2836 -- Type : Private
2837 -- Function : Updates schedule material table with requested fields, before
2838 -- it calls Eam Api
2839 -- Pre-reqs :
2840 -- Parameters :
2841 --
2842 -- Standard IN Parameters :
2843 -- p_api_version IN NUMBER Required
2844 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
2845 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
2846 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
2847 -- p_default IN VARCHAR2 Default FND_API.G_TRUE
2848 -- p_module_type IN VARCHAR2 Default NULL.
2849 --
2850 -- Standard OUT Parameters :
2851 -- x_return_status OUT VARCHAR2 Required
2852 -- x_msg_count OUT NUMBER Required
2853 -- x_msg_data OUT VARCHAR2 Required
2854 --
2855 -- Update Material Request Parameters:
2856 -- p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
2857 -- Contains material information to perform material reservation
2858 --
2859 -- Version :
2860 -- Initial Version 1.0
2861 --
2862 -- End of Comments.
2863 PROCEDURE Update_Material_Reqst (
2864 p_api_version IN NUMBER,
2865 p_init_msg_list IN VARCHAR2 := Fnd_Api.G_FALSE,
2866 p_commit IN VARCHAR2 := Fnd_Api.G_FALSE,
2867 p_validation_level IN NUMBER := Fnd_Api.G_VALID_LEVEL_FULL,
2868 p_module_type IN VARCHAR2 := NULL,
2869 p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
2870 x_return_status OUT NOCOPY VARCHAR2,
2871 x_msg_count OUT NOCOPY NUMBER,
2872 x_msg_data OUT NOCOPY VARCHAR2
2873 )
2874 IS
2875 --
2876 CURSOR Get_Req_Matrl_cur (c_schedule_material_id IN NUMBER)
2877 IS
2878 SELECT B.scheduled_material_id,
2879 B.inventory_item_id,
2880 B.object_version_number,
2881 B.requested_date,
2882 B.organization_id,
2883 B.visit_id,
2884 B.visit_task_id,
2885 B.requested_quantity,
2886 -- MANESING::NR Analysis, 03-Jun-2011, fetch schedule quantity also
2887 B.schedule_quantity scheduled_quantity,
2888 B.workorder_operation_id,
2889 B.operation_sequence,
2890 B.item_group_id,
2891 B.uom,
2892 B.rt_oper_material_id,
2893 -- modified for FP bug# 6802777
2894 --B.department_id,
2895 WO.department_id,
2896 B.workorder_name,
2897 B.wip_entity_id,
2898 A.attribute_category,
2899 A.attribute1,
2900 A.attribute2,
2901 A.attribute3,
2902 A.attribute4,
2903 A.attribute5,
2904 A.attribute6,
2905 A.attribute7,
2906 A.attribute8,
2907 A.attribute9,
2908 A.attribute10,
2909 A.attribute11,
2910 A.attribute12,
2911 A.attribute13,
2912 A.attribute14,
2913 A.attribute15,
2914 A.completed_quantity,
2915 A.requested_date old_requested_date, -- added to fix bug# 5182334.
2916 --sukhwsin: SB Effectivity code changes - starts
2917 A.mc_header_id,
2918 A.position_key,
2919 --sukhwsin: SB Effectivity code changes - ends
2920 --debadey; Marshalling FDD section 5.15
2921 A.aog_flag
2922 FROM AHL_SCHEDULE_MATERIALS A,
2923 AHL_JOB_OPER_MATERIALS_V B, WIP_OPERATIONS WO
2924 WHERE A.SCHEDULED_MATERIAL_ID = B.SCHEDULED_MATERIAL_ID
2925 AND B.WIP_ENTITY_ID = WO.WIP_ENTITY_ID
2926 AND B.OPERATION_SEQUENCE = WO.OPERATION_SEQ_NUM
2927 AND A.SCHEDULED_MATERIAL_ID = c_schedule_material_id
2928 FOR UPDATE OF A.OBJECT_VERSION_NUMBER;
2929 -- Get transaction log
2930 CURSOR Get_trans_log_cur(c_wo_trans_id IN NUMBER)
2931 IS
2932 SELECT inventory_item_id,
2933 schedule_material_id,
2934 date_required,
2935 required_quantity
2936 FROM ahl_wo_operations_txns
2937 WHERE wo_operation_txn_id = c_wo_trans_id;
2938 --
2939 --Check for status Released or Unreleased
2940 /* MANESING::NR Analysis, 03-Jun-2011,
2941 * With the introduction of the concept of Stage workorders,
2942 * Material Requirements can be updated for any workorder even when it is in the Draft ('17') status.
2943 * But this is allowed only if this API is called from the VWP flow.
2944 */
2945 CURSOR Check_wo_status_cur(c_workorder_id IN NUMBER,
2946 c_module_type IN VARCHAR2)
2947 IS
2948 SELECT 1
2949 FROM ahl_workorders
2950 WHERE workorder_id = c_workorder_id
2951 AND (status_code = 3 or status_code = 1 or
2952 (c_module_type = 'VWP' and status_code = 17));
2953
2954 --Get wo transaction id
2955 CURSOR Get_wo_transaction_id(c_sch_material_id IN NUMBER)
2956 IS
2957 SELECT max(wo_operation_txn_id)
2958 FROM ahl_wo_operations_txns
2959 WHERE schedule_material_id = c_sch_material_id;
2960 -- rroy
2961 -- ACL Changes
2962 -- Get job number details
2963 CURSOR Get_job_number(c_workorder_id IN NUMBER)
2964 IS
2965 SELECT workorder_name
2966 FROM ahl_workorders
2967 WHERE workorder_id = c_workorder_id;
2968 -- rroy
2969 -- ACL Changes
2970 -- R12: Serial Reservation changes.
2971 -- get count on existing reservations.
2972 CURSOR get_count_resrv_cur (c_item_id IN NUMBER,
2973 c_org_id IN NUMBER,
2974 c_wip_entity_id IN NUMBER,
2975 c_oper_seq_num IN NUMBER) IS
2976 SELECT nvl(SUM(mrv.primary_reservation_quantity), 0) reserved_quantity
2977 FROM mtl_reservations MRV
2978 WHERE MRV.INVENTORY_ITEM_ID = c_item_id
2979 AND MRV.EXTERNAL_SOURCE_CODE = 'AHL'
2980 AND MRV.DEMAND_SOURCE_HEADER_ID = c_wip_entity_id
2981 AND MRV.DEMAND_SOURCE_LINE_ID = c_oper_seq_num;
2982 --
2983 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_MATERIAL_REQST';
2984 l_api_version CONSTANT NUMBER := 1.0;
2985 l_msg_count NUMBER;
2986 l_return_status VARCHAR2(1);
2987 l_msg_data VARCHAR2(2000);
2988 l_dummy NUMBER;
2989 l_scheduled VARCHAR2(1);
2990 --
2991 l_get_trans_log_rec get_trans_log_cur%ROWTYPE;
2992 --
2993 l_workorder_id NUMBER;
2994 l_new_inventory_id NUMBER;
2995 l_default VARCHAR2(30);
2996 --
2997 l_req_material_tbl Req_Material_Tbl_Type;
2998 l_object_version_number NUMBER;
2999 l_req_material_rec Get_Req_Matrl_cur%ROWTYPE;
3000 --
3001 l_workorder_name VARCHAR2(80);
3002 l_wo_organization_id NUMBER;
3003 l_wo_transaction_id NUMBER;
3004 l_reserved_quantity NUMBER := 0;
3005 --
3006 -- Variables required for wip jobs call
3007 l_wo_operation_txn_id NUMBER;
3008 l_inventory_item_old NUMBER;
3009 j NUMBER;
3010 --
3011 BEGIN
3012 --------------------Initialize ----------------------------------
3013 -- Standard Start of API savepoint
3014 SAVEPOINT update_material_reqst;
3015 -- Check if API is called in debug mode. If yes, enable debug.
3016 IF G_DEBUG='Y' THEN
3017 AHL_DEBUG_PUB.enable_debug;
3018 -- Debug info.
3019 AHL_DEBUG_PUB.debug( 'enter ahl_pp_materias_pvt. update material reqst','+PPMRP+');
3020 END IF;
3021 -- Standard call to check for call compatibility.
3022 IF FND_API.to_boolean(p_init_msg_list)
3023 THEN
3024 FND_MSG_PUB.initialize;
3025 END IF;
3026 -- Initialize API return status to success
3027 x_return_status := FND_API.G_RET_STS_SUCCESS;
3028 -- Initialize message list if p_init_msg_list is set to TRUE.
3029 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
3030 p_api_version,
3031 l_api_name,G_PKG_NAME)
3032 THEN
3033 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3034 END IF;
3035 --------------------Start of API Body-----------------------------------
3036 IF p_x_req_material_tbl.COUNT > 0 THEN
3037 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
3038 LOOP
3039 IF p_module_type <> 'API' THEN
3040 -- Value to ID Conversion
3041 IF ( ( p_x_req_material_tbl(i).workorder_id IS NOT NULL AND
3042 p_x_req_material_tbl(i).workorder_id <> FND_API.G_MISS_NUM ) OR
3043 ( p_x_req_material_tbl(i).job_number IS NOT NULL AND
3044 p_x_req_material_tbl(i).job_number <> FND_API.G_MISS_CHAR ) )
3045 THEN
3046 --
3047 IF G_DEBUG='Y' THEN
3048 AHL_DEBUG_PUB.debug( 'WOID :'||p_x_req_material_tbl(i).workorder_id);
3049 END IF;
3050 --
3051 Get_workorder_id
3052 (p_workorder_id => p_x_req_material_tbl(i).workorder_id,
3053 p_job_number => p_x_req_material_tbl(i).job_number,
3054 x_workorder_id => l_workorder_id,
3055 x_return_status => l_return_status,
3056 x_error_msg_code => l_msg_data);
3057 IF NVL(l_return_status,'x') <> 'S'
3058 THEN
3059 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_ORD_NOT_EXISTS');
3060 Fnd_Msg_Pub.ADD;
3061 END IF;
3062 --
3063 ELSE
3064 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_ORD_REQUIRED');
3065 Fnd_Msg_Pub.ADD;
3066 END IF;
3067 --
3068 p_x_req_material_tbl(i).workorder_id := l_workorder_id;
3069 -- rroy
3070 -- ACL Changes
3071 l_return_status := AHL_PRD_UTIL_PKG.Is_Unit_Locked(
3072 p_workorder_id => p_x_req_material_tbl(i).workorder_id,
3073 p_ue_id => NULL,
3074 p_visit_id => NULL,
3075 p_item_instance_id => NULL);
3076 IF l_return_status = FND_API.G_TRUE THEN
3077 OPEN get_job_number(p_x_req_material_tbl(i).workorder_id);
3078 FETCH get_job_number INTO l_workorder_name;
3079 CLOSE get_job_number;
3080 FND_MESSAGE.Set_Name('AHL', 'AHL_PP_UPD_MTL_UNTLCKD');
3081 FND_MESSAGE.Set_Token('WO_NAME', l_workorder_name);
3082 FND_MSG_PUB.ADD;
3083 RAISE FND_API.G_EXC_ERROR;
3084 END IF;
3085 -- rroy
3086 -- ACL Changes
3087 --
3088 IF G_DEBUG='Y' THEN
3089 AHL_DEBUG_PUB.debug( 'WOID 2:'||p_x_req_material_tbl(i).workorder_id);
3090 END IF;
3091 END IF; --Module type
3092 --Get Requirement operation details
3093 OPEN Get_Req_Matrl_cur(p_x_req_material_tbl(i).schedule_material_id);
3094 FETCH Get_Req_Matrl_cur INTO l_req_material_rec;
3095 CLOSE Get_Req_Matrl_cur;
3096 -- Assign workorder operation id if null
3097 p_x_req_material_tbl(i).workorder_operation_id := l_req_material_rec.workorder_operation_id;
3098 p_x_req_material_tbl(i).operation_sequence := l_req_material_rec.operation_sequence;
3099 p_x_req_material_tbl(i).job_number := l_req_material_rec.workorder_name;
3100 p_x_req_material_tbl(i).wip_entity_id := l_req_material_rec.wip_entity_id;
3101 p_x_req_material_tbl(i).organization_id := l_req_material_rec.organization_id;
3102 p_x_req_material_tbl(i).department_id := l_req_material_rec.department_id;
3103 p_x_req_material_tbl(i).inventory_item_id := l_req_material_rec.inventory_item_id;
3104 p_x_req_material_tbl(i).visit_id := l_req_material_rec.visit_id;
3105 p_x_req_material_tbl(i).visit_task_id := l_req_material_rec.visit_task_id;
3106 --sukhwsin: SB Effectivity code changes - starts
3107 p_x_req_material_tbl(i).item_group_id := l_req_material_rec.item_group_id;
3108 p_x_req_material_tbl(i).mc_header_id := l_req_material_rec.mc_header_id;
3109 p_x_req_material_tbl(i).mc_position_key := l_req_material_rec.position_key;
3110 --sukhwsin: SB Effectivity code changes - ends
3111 --pdoki added for Bug 7712916
3112 p_x_req_material_tbl(i).rt_oper_material_id := l_req_material_rec.rt_oper_material_id;
3113 IF G_DEBUG='Y' THEN
3114 AHL_DEBUG_PUB.debug( 'INVID :'||p_x_req_material_tbl(i).inventory_item_id);
3115 END IF;
3116 -- Validate for Requested Quantity
3117 IF (p_x_req_material_tbl(i).requested_quantity IS NULL OR
3118 p_x_req_material_tbl(i).requested_quantity = FND_API.G_MISS_NUM) THEN
3119 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_QUANTITY_REQUIRED');
3120 Fnd_Msg_Pub.ADD;
3121 ELSIF (p_x_req_material_tbl(i).requested_quantity IS NOT NULL AND
3122 p_x_req_material_tbl(i).requested_quantity <> FND_API.G_MISS_NUM) THEN
3123 IF p_x_req_material_tbl(i).requested_quantity < 0 THEN
3124 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_QUANTITY_INVALID');
3125 Fnd_Msg_Pub.ADD;
3126 END IF;
3127 -- added in R12: Serial Reservation project.
3128 -- If requested quantity changed -
3129 IF (p_x_req_material_tbl(i).requested_quantity <>
3130 l_req_material_rec.requested_quantity)
3131 THEN
3132 -- check for reservations, if any.
3133 OPEN get_count_resrv_cur(l_req_material_rec.inventory_item_id,
3134 l_req_material_rec.organization_id,
3135 l_req_material_rec.wip_entity_id,
3136 l_req_material_rec.operation_sequence);
3137 FETCH get_count_resrv_cur INTO l_reserved_quantity;
3138 CLOSE get_count_resrv_cur;
3139 IF (p_x_req_material_tbl(i).requested_quantity < l_reserved_quantity)
3140 THEN
3141 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_RESRV_QTY');
3142 Fnd_Message.SET_TOKEN('REQ_QTY',p_x_req_material_tbl(i).requested_quantity);
3143 Fnd_Message.SET_TOKEN('RRV_QTY',l_reserved_quantity);
3144 Fnd_Msg_Pub.ADD;
3145 END IF;-- p_x_req_material_tbl(i).requested_quantity <
3146 END IF; --p_x_req_material_tbl(i).requested_quantity <>
3147 END IF;
3148 IF G_DEBUG='Y' THEN
3149 AHL_DEBUG_PUB.debug( 'QTY :'||p_x_req_material_tbl(i).requested_quantity);
3150 END IF;
3151
3152 -- MANESING::NR Analysis, 03-Jun-2011, Validate for Scheduled Quantity
3153 IF ( p_x_req_material_tbl(i).scheduled_quantity IS NOT NULL AND
3154 p_x_req_material_tbl(i).scheduled_quantity <> FND_API.G_MISS_NUM ) THEN
3155
3156 IF ( p_x_req_material_tbl(i).scheduled_quantity < 0 ) THEN
3157 FND_MESSAGE.set_name('AHL', 'AHL_PP_SCHLD_QUANTITY_INVLD');
3158 FND_MSG_PUB.add;
3159 END IF;
3160
3161 -- If scheduled quantity is changed, then check for reservations if any.
3162 IF ( p_x_req_material_tbl(i).scheduled_quantity <> l_req_material_rec.scheduled_quantity ) THEN
3163
3164 /* In case the reservations are not already queried from the requested quantity validation
3165 * check that is placed above, then find them.
3166 */
3167 IF ( l_reserved_quantity = 0 ) THEN
3168 OPEN get_count_resrv_cur( l_req_material_rec.inventory_item_id,
3169 l_req_material_rec.organization_id,
3170 l_req_material_rec.wip_entity_id,
3171 l_req_material_rec.operation_sequence );
3172 FETCH get_count_resrv_cur INTO l_reserved_quantity;
3173 CLOSE get_count_resrv_cur;
3174 END IF;
3175
3176 IF ( p_x_req_material_tbl(i).scheduled_quantity < l_reserved_quantity ) THEN
3177 FND_MESSAGE.set_name('AHL', 'AHL_PP_SCHLD_RESRV_QTY');
3178 FND_MESSAGE.set_token('SCHLD_QTY', p_x_req_material_tbl(i).scheduled_quantity);
3179 FND_MESSAGE.set_token('RRV_QTY' , l_reserved_quantity);
3180 FND_MSG_PUB.add;
3181 END IF;
3182
3183 END IF; -- p_x_req_material_tbl(i).scheduled_quantity <> l_req_material_rec.scheduled_quantity
3184
3185 END IF; -- p_x_req_material_tbl(i).scheduled_quantity IS NOT NULL
3186
3187 IF ( G_DEBUG = 'Y' ) THEN
3188 AHL_DEBUG_PUB.debug( 'Scheduled Quantity: ' || p_x_req_material_tbl(i).scheduled_quantity);
3189 END IF;
3190
3191 IF p_module_type NOT IN ('API', 'VWP') THEN --bug 14137417 :: added VWP by tchimira :: below validation should not occur for VWP flows
3192 -- Validate for Requested Date
3193 IF (p_x_req_material_tbl(i).requested_date IS NULL OR
3194 p_x_req_material_tbl(i).requested_date = FND_API.G_MISS_DATE) THEN
3195 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_DATE_REQUIRED');
3196 Fnd_Msg_Pub.ADD;
3197 ELSIF (p_x_req_material_tbl(i).requested_date IS NOT NULL AND
3198 P_X_REQ_MATERIAL_TBL(I).REQUESTED_DATE <> FND_API.G_MISS_DATE) THEN
3199
3200 -- Included by sansatpa for bug - 14023722 - CERTAF: CANNOT UPDATE MATERIAL REQ WITH AOG FLAG WHEN REQ DATE < SYS DATE
3201 IF(( P_X_REQ_MATERIAL_TBL(I).AOG_FLAG = L_REQ_MATERIAL_REC.AOG_FLAG ) AND
3202 ( P_X_REQ_MATERIAL_TBL(I).REQUESTED_DATE < TRUNC(SYSDATE) ) AND
3203 (( P_X_REQ_MATERIAL_TBL(I).REQUESTED_QUANTITY <> L_REQ_MATERIAL_REC.REQUESTED_QUANTITY ) OR
3204 ( P_X_REQ_MATERIAL_TBL(I).REQUESTED_DATE <> L_REQ_MATERIAL_REC.REQUESTED_DATE ))) THEN
3205 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_DATE_GT_EQ_SYSD');
3206 Fnd_Msg_Pub.ADD;
3207 END IF;
3208 END IF;
3209 IF G_DEBUG='Y' THEN
3210 AHL_DEBUG_PUB.debug( 'DATE :'||p_x_req_material_tbl(i).requested_date);
3211 END IF;
3212 -- Validate for Schedule Material ID
3213 IF (p_x_req_material_tbl(i).schedule_material_id IS NULL AND
3214 p_x_req_material_tbl(i).schedule_material_id = FND_API.G_MISS_NUM) THEN
3215 Fnd_Message.SET_NAME('AHL','AHL_PP_SCH_MATRL_REQUIRED');
3216 Fnd_Msg_Pub.ADD;
3217 END IF;
3218 IF G_DEBUG='Y' THEN
3219 AHL_DEBUG_PUB.debug( 'SCHID :'||p_x_req_material_tbl(i).schedule_material_id);
3220 AHL_DEBUG_PUB.debug( 'OSID'||p_x_req_material_tbl(i).operation_sequence);
3221 END IF;
3222 --Check for workorder status
3223 OPEN Check_wo_status_cur(p_x_req_material_tbl(i).workorder_id, p_module_type);
3224 FETCH Check_wo_status_cur INTO l_dummy;
3225 IF Check_wo_status_cur%NOTFOUND THEN
3226 --
3227 /* MANESING::NR Analysis, 03-Jun-2011,
3228 * give appropriate error message based on the flow in which this API is called.
3229 */
3230 IF ( p_module_type = 'VWP' ) THEN
3231 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_STATUS_INVLD');
3232 ELSE
3233 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_STATUS_INVALID');
3234 END IF;
3235
3236 Fnd_Msg_Pub.ADD;
3237 END IF;
3238 --
3239 CLOSE Check_wo_status_cur;
3240 --
3241 ELSE
3242 p_x_req_material_tbl(i).requested_date := l_req_material_rec.requested_date;
3243 END IF; --Module type
3244 --Standard check to count messages
3245 l_msg_count := Fnd_Msg_Pub.count_msg;
3246 IF l_msg_count > 0 THEN
3247 X_msg_count := l_msg_count;
3248 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
3249 RAISE Fnd_Api.G_EXC_ERROR;
3250 END IF;
3251 END LOOP; --for loop
3252 END IF;
3253 -- Calling Wip job api
3254 --
3255 IF G_DEBUG='Y' THEN
3256 AHL_DEBUG_PUB.debug( 'End of validations');
3257 AHL_DEBUG_PUB.debug('Before processing updates');
3258 END IF;
3259 --
3260 --IF p_module_type <> 'API' THEN
3261 IF p_x_req_material_tbl.COUNT >0
3262 THEN
3263 j := 1;
3264 FOR i in p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
3265 LOOP
3266 --Get the latest record
3267 OPEN Get_wo_transaction_id(p_x_req_material_tbl(i).schedule_material_id);
3268 FETCH get_wo_transaction_id INTO l_wo_transaction_id;
3269 CLOSE get_wo_transaction_id;
3270 --Get the transaction log record from ahl_wo_operation_txns table
3271 OPEN Get_trans_log_cur(l_wo_transaction_id);
3272 FETCH Get_trans_log_cur INTO l_get_trans_log_rec;
3273 CLOSE Get_trans_log_cur;
3274 --
3275 OPEN Get_Req_Matrl_cur(p_x_req_material_tbl(i).schedule_material_id);
3276 FETCH Get_Req_Matrl_cur INTO l_req_material_rec;
3277 CLOSE Get_Req_Matrl_cur;
3278 --Check for item id
3279 IF l_get_trans_log_rec.inventory_item_id <> p_x_req_material_tbl(i).inventory_item_id
3280 THEN
3281 l_inventory_item_old := l_get_trans_log_rec.inventory_item_id;
3282 ELSE
3283 l_inventory_item_old := p_x_req_material_tbl(i).inventory_item_id;
3284 END IF;
3285 -- Assign workorder operation id if null
3286 p_x_req_material_tbl(i).workorder_operation_id := l_req_material_rec.workorder_operation_id;
3287 --
3288 --Call transaction log to create record ahl_wo_operations_txns
3289 SELECT AHL_WO_OPERATIONS_TXNS_S.NEXTVAL INTO l_wo_operation_txn_id
3290 FROM DUAL;
3291 --
3292 IF G_DEBUG='Y' THEN
3293 AHL_DEBUG_PUB.debug( 'before calling log record l_wo_operation_txn_id:'||l_wo_operation_txn_id);
3294 END IF;
3295 Log_Transaction_Record
3296 ( p_wo_operation_txn_id => l_wo_operation_txn_id,
3297 p_object_version_number => 1,
3298 p_last_update_date => sysdate,
3299 p_last_updated_by => fnd_global.user_id,
3300 p_creation_date => sysdate,
3301 p_created_by => fnd_global.user_id,
3302 p_last_update_login => fnd_global.login_id,
3303 p_load_type_code => 2,
3304 p_transaction_type_code => 1,
3305 p_workorder_operation_id => p_x_req_material_tbl(i).workorder_operation_id,
3306 p_schedule_material_id => p_x_req_material_tbl(i).schedule_material_id,
3307 p_inventory_item_id => p_x_req_material_tbl(i).inventory_item_id,
3308 p_required_quantity => p_x_req_material_tbl(i).requested_quantity,
3309 p_date_required => p_x_req_material_tbl(i).requested_date
3310 );
3311 --Assign to output
3312 l_req_material_tbl(j).JOB_NUMBER := p_x_req_material_tbl(i).job_number;
3313 l_req_material_tbl(j).WIP_ENTITY_ID := p_x_req_material_tbl(i).wip_entity_id;
3314 l_req_material_tbl(j).WORKORDER_ID := p_x_req_material_tbl(i).workorder_id;
3315 l_req_material_tbl(j).OPERATION_SEQUENCE := l_req_material_rec.operation_sequence;
3316 l_req_material_tbl(j).UOM_CODE := l_req_material_rec.uom;
3317 l_req_material_tbl(j).INVENTORY_ITEM_ID := p_x_req_material_tbl(i).inventory_item_id;
3318 l_req_material_tbl(j).ORGANIZATION_ID := p_x_req_material_tbl(i).organization_id;
3319 l_req_material_tbl(j).DEPARTMENT_ID := p_x_req_material_tbl(i).department_id;
3320 -- fix for bug# 5549135
3321 --l_req_material_tbl(j).MRP_NET_FLAG := 1;
3322 l_req_material_tbl(j).MRP_NET_FLAG := 2;
3323 l_req_material_tbl(j).QUANTITY_PER_ASSEMBLY := p_x_req_material_tbl(i).requested_quantity;
3324 l_req_material_tbl(j).REQUESTED_QUANTITY := p_x_req_material_tbl(i).requested_quantity;
3325 l_req_material_tbl(j).SUPPLY_TYPE := NULL;
3326 l_req_material_tbl(j).LOCATION := NULL;
3327 l_req_material_tbl(j).SUB_INVENTORY := NULL;
3328 l_req_material_tbl(j).REQUESTED_DATE := p_x_req_material_tbl(i).requested_date;
3329 l_req_material_tbl(j).OPERATION_FLAG := 'U';
3330 j := j + 1;
3331 IF G_DEBUG='Y' THEN
3332 AHL_DEBUG_PUB.debug('Request Date from DB for sch. Mat ID:1:' || l_req_material_rec.old_requested_date || ':' || p_x_req_material_tbl(i).schedule_material_id);
3333 AHL_DEBUG_PUB.debug('Changed Request Date :' || p_x_req_material_tbl(i).requested_date );
3334 END IF;
3335 --
3336 END LOOP;
3337 END IF; --Material tbl
3338 IF G_DEBUG='Y' THEN
3339 AHL_DEBUG_PUB.debug('beforer wip job record assign');
3340 END IF;
3341 IF l_req_material_tbl.COUNT > 0 THEN
3342 --
3343 IF G_DEBUG='Y' THEN
3344 AHL_DEBUG_PUB.debug('before Eam Workorder job call');
3345 AHL_DEBUG_PUB.debug('before Eam Api jobs call''count :'||l_req_material_tbl.count);
3346 END IF;
3347 -- Call wip job api
3348 --
3349 AHL_EAM_JOB_PVT.process_material_req
3350 (
3351 p_api_version => l_api_version,
3352 p_init_msg_list => p_init_msg_list,
3353 p_commit => p_commit,
3354 p_validation_level => p_validation_level,
3355 p_default => l_default,
3356 p_module_type => p_module_type,
3357 x_return_status => l_return_status,
3358 x_msg_count => l_msg_count,
3359 x_msg_data => l_msg_data,
3360 p_material_req_tbl => l_req_material_tbl
3361 );
3362 --
3363 END IF; --Eam table count > 0
3364 IF G_DEBUG='Y' THEN
3365 AHL_DEBUG_PUB.debug('AHLVPPMB: after wip job call'||l_return_status);
3366 END IF;
3367 --END IF; --Module type null
3368 IF l_return_status ='S' THEN
3369 --
3370 IF p_x_req_material_tbl.COUNT > 0
3371 THEN
3372 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
3373 LOOP
3374 OPEN Get_Req_Matrl_cur(p_x_req_material_tbl(i).schedule_material_id);
3375 FETCH Get_Req_Matrl_cur INTO l_req_material_rec;
3376 CLOSE Get_Req_Matrl_cur;
3377 IF p_x_req_material_tbl(i).schedule_material_id IS NOT NULL
3378 THEN
3379 --
3380 -- Added for R12 serial reservations enhancements - ER# 4295982.
3381 -- If requested date is changed, then call reservations api to change the
3382 -- requested date in WMS.
3383 IF G_DEBUG='Y' THEN
3384 AHL_DEBUG_PUB.debug('Request Date from DB for sch. Mat ID:2:' || l_req_material_rec.old_requested_date
3385 || ':' || p_x_req_material_tbl(i).schedule_material_id);
3386 AHL_DEBUG_PUB.debug('Changed Request Date :' || p_x_req_material_tbl(i).requested_date );
3387 END IF;
3388 IF (trunc(p_x_req_material_tbl(i).requested_date) <> trunc(l_req_material_rec.old_requested_date))
3389 THEN
3390 IF G_DEBUG='Y' THEN
3391 AHL_DEBUG_PUB.debug('Before Call to Upd RSV ') ;
3392 END IF;
3393 -- call update reservations api.
3394 AHL_RSV_RESERVATIONS_PVT.Update_Reservation(
3395 p_api_version => 1.0,
3396 p_init_msg_list => FND_API.G_FALSE,
3397 p_commit => FND_API.G_FALSE,
3398 p_module_type => NULL,
3399 x_return_status => x_return_status,
3400 x_msg_count => x_msg_count,
3401 x_msg_data => x_msg_data,
3402 p_scheduled_material_id => p_x_req_material_tbl(i).schedule_material_id,
3403 p_requested_date => p_x_req_material_tbl(i).requested_date);
3404 IF G_DEBUG='Y' THEN
3405 AHL_DEBUG_PUB.debug('After Call to Upd RSV- Return Status:' || x_return_status);
3406 END IF;
3407 -- Raise error if exceptions occur
3408 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3409 RAISE FND_API.G_EXC_ERROR;
3410 END IF;
3411 END IF; -- p_x_req_material_tbl(i).requested_date <>
3412 --
3413 --
3414 -- The following conditions compare the new record value with old record
3415 -- value, if its different then assign the new value else continue
3416 IF NVL(p_x_req_material_tbl(i).inventory_item_id, 0) <> FND_API.G_MISS_NUM
3417 THEN
3418 l_req_material_rec.inventory_item_id := p_x_req_material_tbl(i).inventory_item_id;
3419 END IF;
3420 --
3421 IF NVL(p_x_req_material_tbl(i).requested_date,sysdate) <> FND_API.G_MISS_DATE
3422 THEN
3423 l_req_material_rec.requested_date := p_x_req_material_tbl(i).requested_date;
3424 END IF;
3425 --
3426 IF NVL(p_x_req_material_tbl(i).requested_quantity, 0) <> FND_API.G_MISS_NUM
3427 THEN
3428 l_req_material_rec.requested_quantity := p_x_req_material_tbl(i).requested_quantity;
3429 END IF;
3430 --
3431 -- MANESING::NR Analysis, 03-Jun-2011, add scheduled quantity also to local record
3432 IF NVL(p_x_req_material_tbl(i).scheduled_quantity, 0) <> FND_API.G_MISS_NUM
3433 THEN
3434 l_req_material_rec.scheduled_quantity := p_x_req_material_tbl(i).scheduled_quantity;
3435 END IF;
3436 --
3437 IF NVL(p_x_req_material_tbl(i).organization_id, 0) <> FND_API.G_MISS_NUM
3438 THEN
3439 l_req_material_rec.organization_id := p_x_req_material_tbl(i).organization_id;
3440 END IF;
3441 --
3442 IF NVL(p_x_req_material_tbl(i).visit_id, 0) <> FND_API.G_MISS_NUM
3443 THEN
3444 l_req_material_rec.visit_id := p_x_req_material_tbl(i).visit_id;
3445 END IF;
3446 --
3447 IF NVL(p_x_req_material_tbl(i).visit_task_id, 0) <> FND_API.G_MISS_NUM
3448 THEN
3449 l_req_material_rec.visit_task_id := p_x_req_material_tbl(i).visit_task_id;
3450 END IF;
3451 --
3452 IF NVL(p_x_req_material_tbl(i).item_group_id, 0) <> FND_API.G_MISS_NUM
3453 THEN
3454 l_req_material_rec.item_group_id := p_x_req_material_tbl(i).item_group_id;
3455 END IF;
3456 --
3457 IF NVL(p_x_req_material_tbl(i).rt_oper_material_id, 0) <> FND_API.G_MISS_NUM
3458 THEN
3459 l_req_material_rec.rt_oper_material_id := p_x_req_material_tbl(i).rt_oper_material_id;
3460 END IF;
3461 --sukhwsin: SB Effectivity Code changes - starts
3462 --
3463 IF NVL(p_x_req_material_tbl(i).mc_header_id, 0) <> FND_API.G_MISS_NUM
3464 THEN
3465 l_req_material_rec.mc_header_id := p_x_req_material_tbl(i).mc_header_id;
3466 END IF;
3467 --
3468 IF NVL(p_x_req_material_tbl(i).mc_position_key, 0) <> FND_API.G_MISS_NUM
3469 THEN
3470 l_req_material_rec.position_key := p_x_req_material_tbl(i).mc_position_key;
3471 END IF;
3472 --sukhwsin: SB Effectivity Code changes - ends
3473 --
3474 IF p_x_req_material_tbl(i).attribute_category IS NOT NULL AND
3475 p_x_req_material_tbl(i).attribute_category <> FND_API.G_MISS_CHAR
3476 THEN
3477 l_req_material_rec.attribute_category := p_x_req_material_tbl(i).attribute_category;
3478 ELSIF p_x_req_material_tbl(i).attribute_category = FND_API.G_MISS_CHAR THEN
3479 l_req_material_rec.attribute_category := NULL;
3480 END IF;
3481 --
3482 IF p_x_req_material_tbl(i).attribute1 IS NOT NULL AND
3483 p_x_req_material_tbl(i).attribute1 <> FND_API.G_MISS_CHAR
3484 THEN
3485 l_req_material_rec.attribute1 := p_x_req_material_tbl(i).attribute1;
3486 ELSIF p_x_req_material_tbl(i).attribute1 = FND_API.G_MISS_CHAR THEN
3487 l_req_material_rec.attribute1 := NULL;
3488 END IF;
3489 --
3490 IF p_x_req_material_tbl(i).attribute2 IS NOT NULL AND
3491 p_x_req_material_tbl(i).attribute2 <> FND_API.G_MISS_CHAR
3492 THEN
3493 l_req_material_rec.attribute2 := p_x_req_material_tbl(i).attribute2;
3494 ELSIF p_x_req_material_tbl(i).attribute2 = FND_API.G_MISS_CHAR THEN
3495 l_req_material_rec.attribute2 := NULL;
3496 END IF;
3497 --
3498 IF p_x_req_material_tbl(i).attribute3 IS NOT NULL AND
3499 p_x_req_material_tbl(i).attribute3 <> FND_API.G_MISS_CHAR
3500 THEN
3501 l_req_material_rec.attribute3 := p_x_req_material_tbl(i).attribute3;
3502 ELSIF p_x_req_material_tbl(i).attribute3 = FND_API.G_MISS_CHAR THEN
3503 l_req_material_rec.attribute3 := NULL;
3504 END IF;
3505 --
3506 IF p_x_req_material_tbl(i).attribute4 IS NOT NULL AND
3507 p_x_req_material_tbl(i).attribute4 <> FND_API.G_MISS_CHAR
3508 THEN
3509 l_req_material_rec.attribute4 := p_x_req_material_tbl(i).attribute4;
3510 ELSIF p_x_req_material_tbl(i).attribute4 = FND_API.G_MISS_CHAR THEN
3511 l_req_material_rec.attribute4 := NULL;
3512 END IF;
3513 --
3514 IF p_x_req_material_tbl(i).attribute5 IS NOT NULL AND
3515 p_x_req_material_tbl(i).attribute5 <> FND_API.G_MISS_CHAR
3516 THEN
3517 l_req_material_rec.attribute5 := p_x_req_material_tbl(i).attribute5;
3518 ELSIF p_x_req_material_tbl(i).attribute5 = FND_API.G_MISS_CHAR THEN
3519 l_req_material_rec.attribute5 := NULL;
3520 END IF;
3521 --
3522 IF p_x_req_material_tbl(i).attribute6 IS NOT NULL AND
3523 p_x_req_material_tbl(i).attribute6 <> FND_API.G_MISS_CHAR
3524 THEN
3525 l_req_material_rec.attribute6 := p_x_req_material_tbl(i).attribute6;
3526 ELSIF p_x_req_material_tbl(i).attribute6 = FND_API.G_MISS_CHAR THEN
3527 l_req_material_rec.attribute6 := NULL;
3528 END IF;
3529 --
3530 IF p_x_req_material_tbl(i).attribute7 IS NOT NULL AND
3531 p_x_req_material_tbl(i).attribute7 <> FND_API.G_MISS_CHAR
3532 THEN
3533 l_req_material_rec.attribute7 := p_x_req_material_tbl(i).attribute7;
3534 ELSIF p_x_req_material_tbl(i).attribute7 = FND_API.G_MISS_CHAR THEN
3535 l_req_material_rec.attribute7 := NULL;
3536 END IF;
3537 --
3538 IF p_x_req_material_tbl(i).attribute8 IS NOT NULL AND
3539 p_x_req_material_tbl(i).attribute8 <> FND_API.G_MISS_CHAR
3540 THEN
3541 l_req_material_rec.attribute8 := p_x_req_material_tbl(i).attribute8;
3542 ELSIF p_x_req_material_tbl(i).attribute8 = FND_API.G_MISS_CHAR THEN
3543 l_req_material_rec.attribute8 := NULL;
3544 END IF;
3545 --
3546 IF p_x_req_material_tbl(i).attribute9 IS NOT NULL AND
3547 p_x_req_material_tbl(i).attribute9 <> FND_API.G_MISS_CHAR
3548 THEN
3549 l_req_material_rec.attribute9 := p_x_req_material_tbl(i).attribute9;
3550 ELSIF p_x_req_material_tbl(i).attribute9 = FND_API.G_MISS_CHAR THEN
3551 l_req_material_rec.attribute9 := NULL;
3552 END IF;
3553 --
3554 IF p_x_req_material_tbl(i).attribute10 IS NOT NULL AND
3555 p_x_req_material_tbl(i).attribute10 <> FND_API.G_MISS_CHAR
3556 THEN
3557 l_req_material_rec.attribute10 := p_x_req_material_tbl(i).attribute10;
3558 ELSIF p_x_req_material_tbl(i).attribute10 = FND_API.G_MISS_CHAR THEN
3559 l_req_material_rec.attribute10 := NULL;
3560 END IF;
3561 --
3562 IF p_x_req_material_tbl(i).attribute11 IS NOT NULL AND
3563 p_x_req_material_tbl(i).attribute11 <> FND_API.G_MISS_CHAR
3564 THEN
3565 l_req_material_rec.attribute11 := p_x_req_material_tbl(i).attribute11;
3566 ELSIF p_x_req_material_tbl(i).attribute11 = FND_API.G_MISS_CHAR THEN
3567 l_req_material_rec.attribute11 := NULL;
3568 END IF;
3569 --
3570 IF p_x_req_material_tbl(i).attribute12 IS NOT NULL AND
3571 p_x_req_material_tbl(i).attribute12 <> FND_API.G_MISS_CHAR
3572 THEN
3573 l_req_material_rec.attribute12 := p_x_req_material_tbl(i).attribute12;
3574 ELSIF p_x_req_material_tbl(i).attribute12 = FND_API.G_MISS_CHAR THEN
3575 l_req_material_rec.attribute12 := NULL;
3576 END IF;
3577 --
3578 IF p_x_req_material_tbl(i).attribute13 IS NOT NULL AND
3579 p_x_req_material_tbl(i).attribute13 <> FND_API.G_MISS_CHAR
3580 THEN
3581 l_req_material_rec.attribute13 := p_x_req_material_tbl(i).attribute13;
3582 ELSIF p_x_req_material_tbl(i).attribute13 = FND_API.G_MISS_CHAR THEN
3583 l_req_material_rec.attribute13 := NULL;
3584 END IF;
3585 --
3586 IF p_x_req_material_tbl(i).attribute14 IS NOT NULL AND
3587 p_x_req_material_tbl(i).attribute14 <> FND_API.G_MISS_CHAR
3588 THEN
3589 l_req_material_rec.attribute14 := p_x_req_material_tbl(i).attribute14;
3590 ELSIF p_x_req_material_tbl(i).attribute14 = FND_API.G_MISS_CHAR THEN
3591 l_req_material_rec.attribute14 := NULL;
3592 END IF;
3593 --
3594 IF p_x_req_material_tbl(i).attribute15 IS NOT NULL AND
3595 p_x_req_material_tbl(i).attribute15 <> FND_API.G_MISS_CHAR
3596 THEN
3597 l_req_material_rec.attribute15 := p_x_req_material_tbl(i).attribute15;
3598 ELSIF p_x_req_material_tbl(i).attribute15 = FND_API.G_MISS_CHAR THEN
3599 l_req_material_rec.attribute15 := NULL;
3600 END IF;
3601
3602 -- debadey: Start of changes for Marshalling FDD section 5.15
3603 -- AOG Flag
3604 IF p_x_req_material_tbl(i).aog_flag IS NOT NULL AND
3605 p_x_req_material_tbl(i).aog_flag <> FND_API.G_MISS_CHAR
3606 THEN
3607 l_req_material_rec.aog_flag := p_x_req_material_tbl(i).aog_flag;
3608 ELSIF p_x_req_material_tbl(i).aog_flag = FND_API.G_MISS_CHAR
3609 THEN
3610 l_req_material_rec.aog_flag := NULL;
3611 END IF;
3612 -- end of changes by debadey for Marshalling
3613 --
3614 --Update schedule material table
3615 UPDATE AHL_SCHEDULE_MATERIALS
3616 SET inventory_item_id = l_req_material_rec.inventory_item_id,
3617 -- AnRaj: truncating Requested Date for Material Requirement based on discussions with PM
3618 requested_date = trunc(l_req_material_rec.requested_date),
3619 requested_quantity = l_req_material_rec.requested_quantity,
3620 -- MANESING::NR Analysis, 03-Jun-2011, update scheduled quantity also
3621 scheduled_quantity = l_req_material_rec.scheduled_quantity,
3622 object_version_number = l_req_material_rec.object_version_number+1,
3623 visit_id = l_req_material_rec.visit_id,
3624 visit_task_id = l_req_material_rec.visit_task_id,
3625 organization_id = l_req_material_rec.organization_id,
3626 item_group_id = l_req_material_rec.item_group_id,
3627 rt_oper_material_id = l_req_material_rec.rt_oper_material_id,
3628 workorder_operation_id = l_req_material_rec.workorder_operation_id,
3629 attribute_category = l_req_material_rec.attribute_category,
3630 attribute1 = l_req_material_rec.attribute1,
3631 attribute2 = l_req_material_rec.attribute2,
3632 attribute3 = l_req_material_rec.attribute3,
3633 attribute4 = l_req_material_rec.attribute4,
3634 attribute5 = l_req_material_rec.attribute5,
3635 attribute6 = l_req_material_rec.attribute6,
3636 attribute7 = l_req_material_rec.attribute7,
3637 attribute8 = l_req_material_rec.attribute8,
3638 attribute9 = l_req_material_rec.attribute9,
3639 attribute10 = l_req_material_rec.attribute10,
3640 attribute11 = l_req_material_rec.attribute11,
3641 attribute12 = l_req_material_rec.attribute12,
3642 attribute13 = l_req_material_rec.attribute13,
3643 attribute14 = l_req_material_rec.attribute14,
3644 attribute15 = l_req_material_rec.attribute15,
3645 last_update_date = sysdate,
3646 last_updated_by = fnd_global.user_id,
3647 last_update_login = fnd_global.login_id,
3648 --sukhwsin: SB Effectivity code changes - starts
3649 mc_header_id = l_req_material_rec.mc_header_id,
3650 position_key = l_req_material_rec.position_key,
3651 --sukhwsin: SB Effectivity code changes - ends
3652 -- debadey: Start of changes for Marshalling FDD section 5.15
3653 -- AOG Flag
3654 aog_flag = l_req_material_rec.aog_flag
3655 WHERE scheduled_material_id = p_x_req_material_tbl(i).schedule_material_id;
3656 --
3657 END IF; -- p_x_req_material_tbl(i).schedule_material_id
3658 END LOOP;
3659 END IF; -- p_x_req_material_tbl.COUNT
3660 --
3661 ELSE
3662 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
3663 RAISE Fnd_Api.G_EXC_ERROR;
3664 END IF;-- Return status
3665 IF X_return_status = 'S' THEN
3666 --Check for Profile Option value If 'Y' Call
3667 IF FND_PROFILE.value( 'AHL_MTL_REQ_NOTIFICATION_ENABLED') = 'Y' THEN
3668 --Send Materil Notification
3669 MATERIAL_NOTIFICATION
3670 (
3671 p_api_version => p_api_version,
3672 p_init_msg_list => p_init_msg_list,
3673 p_commit => p_commit,
3674 p_validation_level => p_validation_level,
3675 p_Req_Material_Tbl => p_x_req_material_tbl,
3676 x_return_status => l_return_status,
3677 x_msg_count => l_msg_count,
3678 x_msg_data => l_msg_data);
3679 END IF;
3680 END IF;
3681 IF G_DEBUG='Y' THEN
3682 AHL_DEBUG_PUB.debug( 'END OF UPDATE PROCESS');
3683 END IF;
3684 --
3685 ------------------------End of Body---------------------------------------
3686 --Standard check to count messages
3687 l_msg_count := Fnd_Msg_Pub.count_msg;
3688 --Change made on Nov 17, 2005 by jeli due to bug 4742895.
3689 --Ignore messages in stack if return status is S after calls to EAM APIs.
3690 /*
3691 IF l_msg_count > 0 THEN
3692 X_msg_count := l_msg_count;
3693 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
3694 RAISE Fnd_Api.G_EXC_ERROR;
3695 END IF;
3696 */
3697 --Standard check for commit
3698 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
3699 COMMIT;
3700 END IF;
3701 -- Debug info
3702 IF G_DEBUG='Y' THEN
3703 Ahl_Debug_Pub.debug( 'End of public api Update Material Reqst','+PPMRP+');
3704 -- Check if API is called in debug mode. If yes, disable debug.
3705 Ahl_Debug_Pub.disable_debug;
3706 END IF;
3707 EXCEPTION
3708 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3709 ROLLBACK TO update_material_reqst;
3710 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3711 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
3712 p_count => x_msg_count,
3713 p_data => x_msg_data);
3714 IF G_DEBUG='Y' THEN
3715 AHL_DEBUG_PUB.log_app_messages (
3716 x_msg_count, x_msg_data, 'ERROR' );
3717 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Update Material Reqst','+PPMRP+');
3718 -- Check if API is called in debug mode. If yes, disable debug.
3719 AHL_DEBUG_PUB.disable_debug;
3720 END IF;
3721 WHEN FND_API.G_EXC_ERROR THEN
3722 ROLLBACK TO update_material_reqst;
3723 X_return_status := FND_API.G_RET_STS_ERROR;
3724 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
3725 p_count => x_msg_count,
3726 p_data => X_msg_data);
3727 IF G_DEBUG='Y' THEN
3728 -- Debug info.
3729 AHL_DEBUG_PUB.log_app_messages (
3730 x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
3731 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Update Material Reqst','+PPMRP+');
3732 -- Check if API is called in debug mode. If yes, disable debug.
3733 AHL_DEBUG_PUB.disable_debug;
3734 END IF;
3735 WHEN OTHERS THEN
3736 ROLLBACK TO update_material_reqst;
3737 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3738 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3739 THEN
3740 fnd_msg_pub.add_exc_msg(p_pkg_name => 'AHL_PP_MATERIALS_PVT',
3741 p_procedure_name => 'UPDATE_MATERIAL_REQST',
3742 p_error_text => SUBSTR(SQLERRM,1,240));
3743 END IF;
3744 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
3745 p_count => x_msg_count,
3746 p_data => X_msg_data);
3747 IF G_DEBUG='Y' THEN
3748 -- Debug info.
3749 AHL_DEBUG_PUB.log_app_messages (
3750 x_msg_count, x_msg_data, 'SQL ERROR' );
3751 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Update Material Reqst','+PPMRP+');
3752 -- Check if API is called in debug mode. If yes, disable debug.
3753 AHL_DEBUG_PUB.disable_debug;
3754 END IF;
3755 END Update_Material_Reqst;
3756 -- Start of Comments --
3757 -- Procedure name : Remove_Material_Reqst
3758 -- Type : Private
3759 -- Function : Updates schedule material table with request quantity to zero,
3760 -- Calls Eam APi to remove material request
3761 -- Pre-reqs :
3762 -- Parameters :
3763 --
3764 -- Standard IN Parameters :
3765 -- p_api_version IN NUMBER Required
3766 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
3767 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
3768 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
3769 -- p_default IN VARCHAR2 Default FND_API.G_TRUE
3770 -- p_module_type IN VARCHAR2 Default NULL.
3771 --
3772 -- Standard OUT Parameters :
3773 -- x_return_status OUT VARCHAR2 Required
3774 -- x_msg_count OUT NUMBER Required
3775 -- x_msg_data OUT VARCHAR2 Required
3776 --
3777 -- Remove Material Request Parameters:
3778 -- p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
3779 -- Contains material information to perform material reservation
3780 --
3781 -- Version :
3782 -- Initial Version 1.0
3783 --
3784 -- End of Comments.
3785 PROCEDURE Remove_Material_Request (
3786 p_api_version IN NUMBER,
3787 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
3788 p_commit IN VARCHAR2 := Fnd_Api.g_false,
3789 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
3790 p_module_type IN VARCHAR2 := 'JSP',
3791 p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
3792 x_return_status OUT NOCOPY VARCHAR2,
3793 x_msg_count OUT NOCOPY NUMBER,
3794 x_msg_data OUT NOCOPY VARCHAR2
3795 )
3796 IS
3797 --Get job number
3798 CURSOR Get_job_details(c_workorder_id IN NUMBER)
3799 IS
3800 SELECT workorder_name
3801 FROM ahl_workorders
3802 WHERE workorder_id = c_workorder_id;
3803 -- Bug # 6680137 - begin.
3804 CURSOR c_get_wo_status(c_workorder_id IN NUMBER)
3805 IS
3806 SELECT
3807 AWO.status_code
3808 FROM
3809 AHL_WORKORDERS AWO
3810 WHERE
3811 workorder_id = c_workorder_id;
3812 -- Bug # 6680137 - end
3813 -- Get schedule material details
3814 CURSOR Get_Req_Matrl_cur (c_schedule_material_id IN NUMBER)
3815 IS
3816 /*
3817 SELECT B.scheduled_material_id,
3818 B.inventory_item_id,
3819 B.object_version_number,
3820 B.requested_date,
3821 B.organization_id,
3822 B.visit_id,
3823 B.visit_task_id,
3824 B.requested_quantity,
3825 B.workorder_operation_id,
3826 B.operation_sequence,
3827 B.item_group_id,
3828 B.uom,
3829 B.rt_oper_material_id,
3830 B.department_id,
3831 B.workorder_name,
3832 B.wip_entity_id
3833 FROM AHL_SCHEDULE_MATERIALS A,
3834 AHL_JOB_OPER_MATERIALS_V B
3835 WHERE A.SCHEDULED_MATERIAL_ID = B.SCHEDULED_MATERIAL_ID
3836 AND A.SCHEDULED_MATERIAL_ID = c_schedule_material_id;
3837 */
3838 /*
3839 * R12 Perf Tuning
3840 * Balaji modified the query to use only base tables
3841 * instead of AHL_JOB_OPER_MATERIALS_V. Bug # 4919273
3842 */
3843 SELECT
3844 ASML.scheduled_material_id,
3845 ASML.inventory_item_id,
3846 ASML.object_version_number,
3847 wipr.date_required requested_date,
3848 AVST.organization_id,
3849 AVST.visit_id,
3850 ASML.visit_task_id,
3851 wipr.REQUIRED_QUANTITY requested_quantity,
3852 ASML.workorder_operation_id,
3853 wipr.operation_seq_num operation_sequence,
3854 ASML.item_group_id,
3855 MSIV.PRIMARY_UNIT_OF_MEASURE uom,
3856 ASML.rt_oper_material_id,
3857 AVST.department_id,
3858 AWOS.workorder_name,
3859 AWOS.wip_entity_id,
3860 --debadey: Marshalling FDD section 5.15, AOG flag updation
3861 ASML.aog_flag
3862 FROM
3863 AHL_WORKORDERS AWOS,
3864 AHL_SCHEDULE_MATERIALS ASML,
3865 wip_requirement_operations wipr,
3866 MTL_SYSTEM_ITEMS_VL MSIV,
3867 AHL_VISITS_VL AVST,
3868 AHL_WORKORDER_OPERATIONS AWOP,
3869 -- added for FP bug# 6802777
3870 WIP_OPERATIONS WOP
3871 WHERE
3872 AWOP.WORKORDER_OPERATION_ID = ASML.WORKORDER_OPERATION_ID AND
3873 AWOS.VISIT_TASK_ID = ASML.VISIT_TASK_ID AND
3874 ASML.VISIT_ID = AVST.VISIT_ID AND
3875 awos.wip_entity_id = wipr.wip_entity_id AND
3876 asml.operation_sequence = wipr.operation_seq_num AND
3877 asml.inventory_item_id = wipr.inventory_item_id AND
3878 asml.organization_id = wipr.organization_id AND
3879 asml.INVENTORY_ITEM_ID = MSIV.INVENTORY_ITEM_ID AND
3880 ASML.ORGANIZATION_ID = MSIV.ORGANIZATION_ID AND
3881 wop.wip_entity_id = wipr.wip_entity_id AND
3882 wop.operation_seq_num = wipr.operation_seq_num AND
3883 asml.status IN ('ACTIVE', 'IN-SERVICE') AND
3884 ASML.SCHEDULED_MATERIAL_ID = c_schedule_material_id;
3885 -- R12: Serial Reservation changes.
3886 -- get count on existing reservations.
3887 CURSOR get_count_resrv_cur (c_item_id IN NUMBER,
3888 c_org_id IN NUMBER,
3889 c_wip_entity_id IN NUMBER,
3890 c_oper_seq_num IN NUMBER) IS
3891 SELECT nvl(SUM(mrv.primary_reservation_quantity), 0) reserved_quantity
3892 FROM mtl_reservations MRV
3893 WHERE MRV.INVENTORY_ITEM_ID = c_item_id
3894 AND MRV.EXTERNAL_SOURCE_CODE = 'AHL'
3895 AND MRV.DEMAND_SOURCE_HEADER_ID = c_wip_entity_id
3896 AND MRV.DEMAND_SOURCE_LINE_ID = c_oper_seq_num;
3897 -- Standard local variable
3898 l_api_name CONSTANT VARCHAR2(30) := 'REMOVE_MATERIAL_REQUEST';
3899 l_api_version CONSTANT NUMBER := 1.0;
3900 l_return_status VARCHAR2(1);
3901 l_msg_data VARCHAR2(200);
3902 l_msg_count NUMBER;
3903 l_workorder_name VARCHAR2(80);
3904 --
3905 l_object_version_number NUMBER;
3906 --
3907 l_req_material_rec Req_Material_Rec_Type;
3908 l_req_material_tbl Req_Material_Tbl_Type;
3909 l_material_rec Get_Req_Matrl_cur%ROWTYPE;
3910 -- Variables required for wip jobs call
3911 l_ahl_wip_work_rec AHL_WIP_JOB_PVT.ahl_wo_rec_type;
3912 l_ahl_wip_oper_tbl AHL_WIP_JOB_PVT.ahl_wo_op_tbl_type ;
3913 l_ahl_wip_rsrc_tbl AHL_WIP_JOB_PVT.ahl_wo_res_tbl_type;
3914 l_ahl_wip_mtrl_tbl AHL_WIP_JOB_PVT.ahl_wo_mtl_tbl_type;
3915 l_default VARCHAR2(30);
3916 j NUMBER;
3917 l_reserved_quantity NUMBER;
3918 -- Bug # 6680137 - begin
3919 l_wo_status VARCHAR2(30);
3920 -- Bug # 6680137 - end
3921 BEGIN
3922 --------------------Initialize ----------------------------------
3923 -- Standard Start of API savepoint
3924 SAVEPOINT remove_material_request;
3925 -- Check if API is called in debug mode. If yes, enable debug.
3926 IF G_DEBUG='Y' THEN
3927 Ahl_Debug_Pub.enable_debug;
3928 -- Debug info.
3929 Ahl_Debug_Pub.debug( 'enter ahl_pp_materials_pvt Remove Material Request ','+MAATP+');
3930 --
3931 END IF;
3932 -- Standard call to check for call compatibility.
3933 IF Fnd_Api.to_boolean(p_init_msg_list)
3934 THEN
3935 Fnd_Msg_Pub.initialize;
3936 END IF;
3937 -- Initialize API return status to success
3938 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
3939 -- Initialize message list if p_init_msg_list is set to TRUE.
3940 IF NOT Fnd_Api.COMPATIBLE_API_CALL(l_api_version,
3941 p_api_version,
3942 l_api_name,G_PKG_NAME)
3943 THEN
3944 RAISE Fnd_Api.G_EXC_UNEXPECTED_ERROR;
3945 END IF;
3946 ------------------------Start API Body ---------------------------------
3947 IF p_x_req_material_tbl.COUNT > 0 THEN
3948 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
3949 LOOP
3950 -- Value to ID Conversion
3951 --Get visit task id
3952 IF (p_x_req_material_tbl(i).workorder_id IS NOT NULL AND
3953 p_x_req_material_tbl(i).workorder_id <> Fnd_Api.G_MISS_NUM )
3954 THEN
3955 --
3956 -- Bug # 6680137 - start
3957 OPEN Get_job_details(p_x_req_material_tbl(i).workorder_id);
3958 FETCH Get_job_details INTO l_workorder_name;
3959 IF Get_job_details%NOTFOUND THEN
3960 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_ORD_NOT_EXISTS');
3961 Fnd_Msg_Pub.ADD;
3962 CLOSE Get_job_details;
3963 RAISE FND_API.G_EXC_ERROR;
3964 END IF;
3965 CLOSE Get_job_details;
3966 -- Bug # 6680137 - end
3967 -- Balaji added this validation for Bug # 6680137 - begin.
3968 -- When work order is in status cancelled, complete no-charge or closed
3969 -- material deletion should be disallowed.
3970 OPEN c_get_wo_status(p_x_req_material_tbl(i).workorder_id);
3971 FETCH c_get_wo_status INTO l_wo_status;
3972 CLOSE c_get_wo_status;
3973 IF l_wo_status IN ('7', '5', '12')
3974 THEN
3975 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_STATUS_INVALID');
3976 Fnd_Msg_Pub.ADD;
3977 RAISE FND_API.G_EXC_ERROR;
3978 END IF;
3979 -- Bug # 6680137 - end
3980 END IF;
3981 -- rroy
3982 -- ACL Changes
3983 l_return_status := AHL_PRD_UTIL_PKG.Is_Unit_Locked
3984 (
3985 p_workorder_id => p_x_req_material_tbl(i).workorder_id,
3986 p_ue_id => NULL,
3987 p_visit_id => NULL,
3988 p_item_instance_id => NULL);
3989 IF l_return_status = FND_API.G_TRUE THEN
3990 FND_MESSAGE.Set_Name('AHL', 'AHL_PP_DEL_MTL_UNTLCKD');
3991 FND_MESSAGE.Set_Token('WO_NAME', l_workorder_name);
3992 FND_MSG_PUB.ADD;
3993 RAISE FND_API.G_EXC_ERROR;
3994 END IF;
3995 -- rroy
3996 -- ACL Changes
3997 -- Check for Schedule Material ID
3998 IF (p_x_req_material_tbl(i).schedule_material_id IS NULL OR
3999 p_x_req_material_tbl(i).schedule_material_id = FND_API.G_MISS_NUM) THEN
4000 Fnd_Message.SET_NAME('AHL','AHL_PP_SCH_MATRL_REQUIRED');
4001 Fnd_Msg_Pub.ADD;
4002 END IF;
4003 --
4004 IF G_DEBUG='Y' THEN
4005 Ahl_Debug_Pub.debug( 'Obj Number:'||p_x_req_material_tbl(i).object_version_number);
4006 Ahl_Debug_Pub.debug( 'Sch mat Id:'||p_x_req_material_tbl(i).schedule_material_id);
4007 END IF;
4008 -- Check for object version number
4009 IF (p_x_req_material_tbl(i).object_version_number IS NOT NULL AND
4010 p_x_req_material_tbl(i).object_version_number <> FND_API.G_MISS_NUM) THEN
4011 --
4012 SELECT object_version_number,requested_quantity INTO l_object_version_number,
4013 p_x_req_material_tbl(i).requested_quantity
4014 FROM ahl_schedule_materials
4015 WHERE scheduled_material_id = p_x_req_material_tbl(i).schedule_material_id
4016 FOR UPDATE OF STATUS NOWAIT;
4017 --
4018 IF p_x_req_material_tbl(i).object_version_number <> l_object_version_number THEN
4019 Fnd_Message.SET_NAME('AHL','AHL_PP_RECORD_CHANGED');
4020 Fnd_Msg_Pub.ADD;
4021 RAISE Fnd_Api.G_EXC_ERROR;
4022 END IF;
4023 --
4024 END IF;
4025 --Standard check to count messages
4026 l_msg_count := Fnd_Msg_Pub.count_msg;
4027 IF l_msg_count > 0 THEN
4028 X_msg_count := l_msg_count;
4029 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
4030 RAISE Fnd_Api.G_EXC_ERROR;
4031 END IF;
4032 END LOOP;
4033 END IF;
4034 --
4035 IF G_DEBUG='Y' THEN
4036 Ahl_Debug_Pub.debug( 'before wip jobs call:');
4037 END IF;
4038 --
4039 IF p_x_req_material_tbl.COUNT >0 THEN
4040 j := 1;
4041 FOR i in p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
4042 LOOP
4043 --
4044 OPEN Get_Req_Matrl_cur(p_x_req_material_tbl(i).schedule_material_id);
4045 FETCH Get_Req_Matrl_cur INTO l_material_rec;
4046 CLOSE Get_Req_matrl_cur;
4047 --
4048 --Assign to output
4049 l_req_material_tbl(j).JOB_NUMBER := l_material_rec.workorder_name;
4050 l_req_material_tbl(j).WIP_ENTITY_ID := l_material_rec.wip_entity_id;
4051 l_req_material_tbl(j).WORKORDER_ID := p_x_req_material_tbl(i).workorder_id;
4052 l_req_material_tbl(j).OPERATION_SEQUENCE := l_material_rec.operation_sequence;
4053 l_req_material_tbl(j).INVENTORY_ITEM_ID := l_material_rec.inventory_item_id;
4054 l_req_material_tbl(j).ORGANIZATION_ID := l_material_rec.organization_id;
4055 l_req_material_tbl(j).DEPARTMENT_ID := l_material_rec.department_id;
4056 -- fix for bug# 5549135
4057 --l_req_material_tbl(j).MRP_NET_FLAG := 1;
4058 l_req_material_tbl(j).MRP_NET_FLAG := 2;
4059 l_req_material_tbl(j).QUANTITY_PER_ASSEMBLY := l_material_rec.requested_quantity;
4060 l_req_material_tbl(j).REQUESTED_QUANTITY := l_material_rec.requested_quantity;
4061 l_req_material_tbl(j).SUPPLY_TYPE := NULL;
4062 l_req_material_tbl(j).LOCATION := NULL;
4063 l_req_material_tbl(j).SUB_INVENTORY := NULL;
4064 l_req_material_tbl(j).REQUESTED_DATE := l_material_rec.requested_date;
4065 l_req_material_tbl(j).OPERATION_FLAG := 'D';
4066 --
4067 j := j+1;
4068 -- Added for R12: Serial Reservation.
4069 -- check for reservations, if any.
4070 OPEN get_count_resrv_cur(l_material_rec.inventory_item_id,
4071 l_material_rec.organization_id,
4072 l_material_rec.wip_entity_id,
4073 l_material_rec.operation_sequence);
4074 FETCH get_count_resrv_cur INTO l_reserved_quantity;
4075 CLOSE get_count_resrv_cur;
4076 IF (l_reserved_quantity > 0) THEN
4077 IF G_DEBUG='Y' THEN
4078 AHL_DEBUG_PUB.debug('Reserved quantity for sch. material ID:' || p_x_req_material_tbl(i).schedule_material_id || ' is: ' || l_reserved_quantity || 'for INV ID: ' || l_material_rec.inventory_item_id);
4079 AHL_DEBUG_PUB.debug('Before calling delete reservation api');
4080 END IF;
4081 -- delete reservations.
4082 AHL_RSV_RESERVATIONS_PVT.DELETE_RESERVATION(
4083 p_api_version => 1.0,
4084 p_init_msg_list => FND_API.G_FALSE,
4085 p_commit => FND_API.G_FALSE,
4086 p_module_type => NULL,
4087 x_return_status => x_return_status,
4088 x_msg_count => x_msg_count,
4089 x_msg_data => x_msg_data,
4090 p_scheduled_material_id => p_x_req_material_tbl(i).schedule_material_id);
4091 IF G_DEBUG='Y' THEN
4092 AHL_DEBUG_PUB.debug('After calling delete reservation api. Return status:' || x_return_status);
4093 END IF;
4094 -- check return status.
4095 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4096 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4097 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
4098 RAISE FND_API.G_EXC_ERROR;
4099 END IF;
4100 END IF;
4101 END LOOP;
4102 END IF; --Material tbl
4103 IF G_DEBUG='Y' THEN
4104 AHL_DEBUG_PUB.debug('beforer Eam wip job call');
4105 END IF;
4106 -- Call wip job api
4107 AHL_EAM_JOB_PVT.process_material_req
4108 (
4109 p_api_version => l_api_version,
4110 p_init_msg_list => p_init_msg_list,
4111 p_commit => p_commit,
4112 p_validation_level => p_validation_level,
4113 p_default => l_default,
4114 p_module_type => p_module_type,
4115 x_return_status => l_return_status,
4116 x_msg_count => l_msg_count,
4117 x_msg_data => l_msg_data,
4118 p_material_req_tbl => l_req_material_tbl
4119 );
4120 --
4121 IF G_DEBUG='Y' THEN
4122 AHL_DEBUG_PUB.debug('after wip job call');
4123 END IF;
4124 IF l_return_Status = 'S' THEN
4125 --Remove the records
4126 IF p_x_req_material_tbl.COUNT > 0 THEN
4127 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
4128 LOOP
4129 -- If schedule date is not null then update to zero because collection has been done
4130 IF p_x_req_material_tbl(i).schedule_material_id IS NOT NULL THEN
4131 -- Update schedule materials table requested quantity to zero
4132 UPDATE AHL_SCHEDULE_MATERIALS
4133 SET requested_quantity = 0,
4134 status = 'DELETED',
4135 object_version_number = p_x_req_material_tbl(i).object_version_number + 1
4136 WHERE SCHEDULED_MATERIAL_ID = p_x_req_material_tbl(i).schedule_material_id;
4137 END IF;
4138 --
4139 IF G_DEBUG='Y' THEN
4140 AHL_DEBUG_PUB.debug('after set request quantity to zero');
4141 END IF;
4142 --
4143 END LOOP;
4144 END IF;
4145 --
4146 ELSE
4147 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
4148 RAISE Fnd_Api.G_EXC_ERROR;
4149 --
4150 END IF; --Status
4151 ---------------------------End of Body---------------------------------------
4152 --Standard check to count messages
4153 l_msg_count := Fnd_Msg_Pub.count_msg;
4154 --Change made on Nov 17, 2005 by jeli due to bug 4742895.
4155 --Ignore messages in stack if return status is S after calls to EAM APIs.
4156 /*
4157 IF l_msg_count > 0 THEN
4158 X_msg_count := l_msg_count;
4159 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
4160 RAISE Fnd_Api.G_EXC_ERROR;
4161 END IF;
4162 */
4163 --Standard check for commit
4164 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
4165 COMMIT;
4166 END IF;
4167 -- Debug info
4168 IF G_DEBUG='Y' THEN
4169 Ahl_Debug_Pub.debug( 'End of private api Remove Material Request ','+MAMRP+');
4170 -- Check if API is called in debug mode. If yes, disable debug.
4171 Ahl_Debug_Pub.disable_debug;
4172 END IF;
4173 EXCEPTION
4174 WHEN Fnd_Api.G_EXC_UNEXPECTED_ERROR THEN
4175 ROLLBACK TO remove_material_request;
4176 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
4177 Fnd_Msg_Pub.count_and_get( p_encoded => Fnd_Api.G_FALSE,
4178 p_count => x_msg_count,
4179 p_data => x_msg_data);
4180 IF G_DEBUG='Y' THEN
4181 Ahl_Debug_Pub.log_app_messages (
4182 x_msg_count, x_msg_data, 'ERROR' );
4183 Ahl_Debug_Pub.debug( 'ahl_pp_materials_pvt. Remove Material Request ','+MAMRP+');
4184 -- Check if API is called in debug mode. If yes, disable debug.
4185 Ahl_Debug_Pub.disable_debug;
4186 END IF;
4187 WHEN Fnd_Api.G_EXC_ERROR THEN
4188 ROLLBACK TO remove_material_request;
4189 X_return_status := Fnd_Api.G_RET_STS_ERROR;
4190 Fnd_Msg_Pub.count_and_get( p_encoded => Fnd_Api.G_FALSE,
4191 p_count => x_msg_count,
4192 p_data => X_msg_data);
4193 IF G_DEBUG='Y' THEN
4194 -- Debug info.
4195 Ahl_Debug_Pub.log_app_messages (
4196 x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
4197 Ahl_Debug_Pub.debug( 'ahl_pp_materials_pvt. Remove Material Request ','+MAMRP+');
4198 -- Check if API is called in debug mode. If yes, disable debug.
4199 Ahl_Debug_Pub.disable_debug;
4200 END IF;
4201 WHEN OTHERS THEN
4202 ROLLBACK TO remove_material_request;
4203 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
4204 IF Fnd_Msg_Pub.check_msg_level(Fnd_Msg_Pub.G_MSG_LVL_UNEXP_ERROR)
4205 THEN
4206 Fnd_Msg_Pub.add_exc_msg(p_pkg_name => 'AHL_PP_MATERIALS_PVT',
4207 p_procedure_name => 'REMOVE_MATERIAL_REQUEST',
4208 p_error_text => SUBSTR(SQLERRM,1,240));
4209 END IF;
4210 Fnd_Msg_Pub.count_and_get( p_encoded => Fnd_Api.G_FALSE,
4211 p_count => x_msg_count,
4212 p_data => X_msg_data);
4213 IF G_DEBUG='Y' THEN
4214 -- Debug info.
4215 Ahl_Debug_Pub.log_app_messages (
4216 x_msg_count, x_msg_data, 'SQL ERROR' );
4217 Ahl_Debug_Pub.debug( 'ahl_pp_materials_pvt. Remove Material Request ','+MTMRP+');
4218 -- Check if API is called in debug mode. If yes, disable debug.
4219 Ahl_Debug_Pub.disable_debug;
4220 END IF;
4221 END Remove_Material_Request;
4222
4223 -- Start of Comments --
4224 -- Procedure name : Change_Requirement_Item
4225 -- Type : Private
4226 -- Function : Updates the Schedule Material table and WIP table if requirement item
4227 -- needs to be changed.
4228 -- Pre-reqs :
4229 -- Parameters :
4230 --
4231 -- Standard IN Parameters :
4232 -- p_api_version IN NUMBER Required
4233 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
4234 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
4235 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
4236 -- p_module_type IN VARCHAR2 Default NULL.
4237 --
4238 -- Standard OUT Parameters :
4239 -- x_return_status OUT VARCHAR2 Required
4240 -- x_msg_count OUT NUMBER Required
4241 -- x_msg_data OUT VARCHAR2 Required
4242 --
4243 -- Remove Material Request Parameters:
4244 -- p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
4245 -- Contains material information to perform material reservation
4246 --
4247 -- Version :
4248 -- Initial Version 1.0
4249 --
4250 -- End of Comments.
4251 PROCEDURE Change_Requirement_Item (
4252 p_api_version IN NUMBER,
4253 p_init_msg_list IN VARCHAR2 := Fnd_Api.g_false,
4254 p_commit IN VARCHAR2 := Fnd_Api.g_false,
4255 p_validation_level IN NUMBER := Fnd_Api.g_valid_level_full,
4256 p_module_type IN VARCHAR2 := 'API',
4257 p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
4258 x_return_status OUT NOCOPY VARCHAR2,
4259 x_msg_count OUT NOCOPY NUMBER,
4260 x_msg_data OUT NOCOPY VARCHAR2
4261 )
4262 IS
4263 CURSOR Get_Mtl_Req_Csr(c_schedule_material_id IN NUMBER)
4264 IS
4265 SELECT asm.inventory_item_id old_inventory_item_id,
4266 asm.requested_date old_requested_date,
4267 asm.requested_quantity old_requested_quantity,
4268 asm.workorder_operation_id,
4269 NVL(asm.completed_quantity, 0) completed_quantity,
4270 (SELECT NVL(SUM(mrv.primary_reservation_quantity), 0)
4271 FROM mtl_reservations mrv, ahl_schedule_materials asmt
4272 WHERE mrv.inventory_item_id = asmt.inventory_item_id
4273 AND mrv.external_source_code = 'AHL'
4274 AND mrv.requirement_date = asmt.requested_date
4275 AND mrv.organization_id = asmt.organization_id
4276 AND mrv.demand_source_line_detail = c_schedule_material_id) reserved_quantity,
4277 wo.workorder_id,
4278 vst.organization_id
4279 FROM ahl_schedule_materials asm, ahl_workorders wo, ahl_visits_b vst
4280 WHERE asm.visit_task_id = wo.visit_task_id
4281 AND vst.visit_id = asm.visit_id
4282 AND scheduled_material_id = c_schedule_material_id;
4283
4284 CURSOR Get_job_details(c_workorder_id IN NUMBER)
4285 IS
4286 SELECT workorder_name
4287 FROM ahl_workorders
4288 WHERE workorder_id = c_workorder_id
4289 AND (status_code = 3 or
4290 status_code = 1 or
4291 status_code = 17);
4292
4293 --sukhwsin::Marshling Enhancements. Code Changes starts
4294 --Following cursor will be used when call is from Marshling.
4295 CURSOR Get_job_details_for_exe(c_workorder_id IN NUMBER)
4296 IS
4297 SELECT workorder_name
4298 FROM ahl_workorders
4299 WHERE workorder_id = c_workorder_id
4300 AND status_code NOT IN (12,17,18,22,4,5,7,14,21); --Closed,Draft,Deffered,Deleted,complete,Complete No-charge,Cancelled,Pending Close,Pending Defer/Cancel Approval
4301
4302 --sukhwsin::Marshling Enhancements. Code Changes ends
4303
4304 CURSOR Get_Wip_Req_Csr(c_inventory_item_id IN NUMBER,
4305 c_schedule_material_id IN NUMBER)
4306 IS
4307 SELECT wip.required_quantity,
4308 wip.date_required,
4309 wip.wip_entity_id,
4310 wip.operation_seq_num operation_sequence,
4311 wip.organization_id,
4312 wip.department_id
4313 FROM wip_requirement_operations wip,
4314 ahl_schedule_materials asm,
4315 ahl_workorders wo
4316 WHERE wip.wip_entity_id = wo.wip_entity_id
4317 AND wo.visit_task_id = asm.visit_task_id
4318 AND asm.operation_sequence = wip.operation_seq_num
4319 AND asm.inventory_item_id = wip.inventory_item_id
4320 AND asm.organization_id = wip.organization_id
4321 AND (asm.visit_task_id, asm.operation_sequence) IN (SELECT ASM2.visit_task_id, ASM2.operation_sequence
4322 FROM ahl_schedule_materials ASM2
4323 WHERE ASM2.scheduled_material_id = c_schedule_material_id)
4324 AND wip.inventory_item_id = c_inventory_item_id;
4325
4326 CURSOR Get_Item_Name_Cur(c_inventory_item_id IN NUMBER,
4327 c_organization_id IN NUMBER)
4328 IS
4329 SELECT concatenated_segments
4330 FROM mtl_system_items_kfv
4331 WHERE inventory_item_id = c_inventory_item_id
4332 AND organization_id = c_organization_id;
4333
4334 -- Standard local variable
4335 l_api_name CONSTANT VARCHAR2(30) := 'Change_Requirement_Item';
4336 l_api_version CONSTANT NUMBER := 1.0;
4337 l_return_status VARCHAR2(1);
4338 l_msg_data VARCHAR2(200);
4339 l_msg_count NUMBER;
4340 l_debug_key CONSTANT VARCHAR2(100) := 'ahl.plsql.' || G_PKG_NAME || '.' || l_api_name;
4341
4342 l_material_req_rec Get_Mtl_Req_Csr%ROWTYPE;
4343 l_old_wip_req_rec Get_Wip_Req_Csr%ROWTYPE;
4344 l_new_wip_req_rec Get_Wip_Req_Csr%ROWTYPE;
4345 l_schedule_material_id NUMBER;
4346 l_default VARCHAR2(30);
4347 l_workorder_name VARCHAR2(80);
4348 l_new_requested_qty NUMBER;
4349 l_new_requested_date DATE;
4350 l_material_req_up_tbl Req_Material_Tbl_Type;
4351 l_material_req_re_tbl Req_Material_Tbl_Type;
4352 l_material_req_cr_tbl Req_Material_Tbl_Type;
4353 up_index NUMBER := 1;
4354 re_index NUMBER := 1;
4355 cr_index NUMBER := 1;
4356 l_dummy NUMBER;
4357 l_wo_operation_txn_id NUMBER;
4358 l_item_name VARCHAR2(80);
4359
4360 BEGIN
4361 --------------------Initialize ----------------------------------
4362 -- Standard Start of API savepoint
4363 SAVEPOINT Change_Requirement_Item;
4364
4365 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
4366 fnd_log.string(fnd_log.level_procedure, l_debug_key || '.begin',
4367 'At the start of PLSQL procedure.');
4368 END IF;
4369
4370 -- Standard call to check for call compatibility.
4371 IF FND_API.to_boolean(p_init_msg_list)
4372 THEN
4373 FND_MSG_PUB.initialize;
4374 END IF;
4375 -- Initialize API return status to success
4376 x_return_status := FND_API.G_RET_STS_SUCCESS;
4377 -- Initialize message list if p_init_msg_list is set to TRUE.
4378 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
4379 p_api_version,
4380 l_api_name,G_PKG_NAME)
4381 THEN
4382 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4383 END IF;
4384
4385 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4386 fnd_log.string(fnd_log.level_statement, l_debug_key, 'requirements count'||p_x_req_material_tbl.COUNT);
4387 END IF;
4388 --------------------Start of API Body-----------------------------------
4389 IF p_x_req_material_tbl.COUNT > 0 THEN
4390 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
4391 LOOP
4392 l_schedule_material_id := p_x_req_material_tbl(i).schedule_material_id;
4393 -- Check for Schedule Material ID
4394 IF (l_schedule_material_id IS NULL OR
4395 l_schedule_material_id = FND_API.G_MISS_NUM) THEN
4396 Fnd_Message.SET_NAME('AHL','AHL_PP_SCH_MATRL_REQUIRED');
4397 Fnd_Msg_Pub.ADD;
4398 RAISE FND_API.G_EXC_ERROR;
4399 END IF;
4400
4401 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4402 fnd_log.string(fnd_log.level_statement, l_debug_key, 'Schedule Material ID'||l_schedule_material_id);
4403 END IF;
4404
4405 -- Get Scheduled Material requirement details
4406 OPEN Get_Mtl_Req_Csr(l_schedule_material_id);
4407 FETCH Get_Mtl_Req_Csr INTO l_material_req_rec;
4408 CLOSE Get_Mtl_Req_Csr;
4409
4410 IF ( l_material_req_rec.old_inventory_item_id IS NOT NULL) THEN
4411
4412 IF (p_module_type = 'MM') THEN
4413 --When call is from Marshling then use different cursor for job validation.
4414 -- Check for existance of valid work order
4415 OPEN Get_job_details_for_exe(l_material_req_rec.workorder_id);
4416 FETCH Get_job_details_for_exe INTO l_workorder_name;
4417 IF Get_job_details_for_exe%NOTFOUND THEN
4418 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_ORD_NOT_EXISTS');
4419 Fnd_Msg_Pub.ADD;
4420 CLOSE Get_job_details_for_exe;
4421 RAISE FND_API.G_EXC_ERROR;
4422 END IF;
4423 CLOSE Get_job_details_for_exe;
4424 ELSE
4425 -- Check for existance of valid work order
4426 OPEN Get_job_details(l_material_req_rec.workorder_id);
4427 FETCH Get_job_details INTO l_workorder_name;
4428 IF Get_job_details%NOTFOUND THEN
4429 Fnd_Message.SET_NAME('AHL','AHL_PP_WO_ORD_NOT_EXISTS');
4430 Fnd_Msg_Pub.ADD;
4431 CLOSE Get_job_details;
4432 RAISE FND_API.G_EXC_ERROR;
4433 END IF;
4434 CLOSE Get_job_details;
4435 END IF;
4436
4437 OPEN Get_Item_Name_Cur(l_material_req_rec.old_inventory_item_id,
4438 l_material_req_rec.organization_id);
4439 FETCH Get_Item_Name_Cur INTO l_item_name;
4440 CLOSE Get_Item_Name_Cur;
4441
4442 -- Check whether the item is issued
4443 IF (l_material_req_rec.completed_quantity > 0 ) THEN
4444 Fnd_Message.SET_NAME('AHL','AHL_PP_TXN_ISSUED_ITEM'); -- Issued item cannot be changed.
4445 FND_MESSAGE.Set_Token('ITEM', l_item_name);
4446 Fnd_Msg_Pub.ADD;
4447 END IF;
4448
4449 -- Check whether the item is reserved
4450 IF (l_material_req_rec.reserved_quantity > 0 ) THEN
4451 Fnd_Message.SET_NAME('AHL','AHL_PP_RESERVED_ITEM'); -- Reserved item cannot be changed.
4452 FND_MESSAGE.Set_Token('ITEM', l_item_name);
4453 Fnd_Msg_Pub.ADD;
4454 END IF;
4455
4456 --Check whether the item is locked.
4457 l_return_status := AHL_PRD_UTIL_PKG.Is_Unit_Locked
4458 (
4459 p_workorder_id => l_material_req_rec.workorder_id,
4460 p_ue_id => NULL,
4461 p_visit_id => NULL,
4462 p_item_instance_id => NULL);
4463 IF l_return_status = FND_API.G_TRUE THEN
4464 FND_MESSAGE.Set_Name('AHL', 'AHL_PP_DEL_MTL_UNTLCKD');
4465 FND_MESSAGE.Set_Token('WO_NAME', l_workorder_name);
4466 FND_MSG_PUB.ADD;
4467 RAISE FND_API.G_EXC_ERROR;
4468 END IF;
4469
4470 --sukhwsin::Marshling Enhancements - Reseting l_return_status to S as it is used while calling AHL_EAM_JOB_PVT.process_material_req
4471 l_return_status := FND_API.G_RET_STS_SUCCESS;
4472
4473 -- Check for valid requested quantity
4474 IF (p_x_req_material_tbl(i).requested_quantity IS NULL OR (p_x_req_material_tbl(i).requested_quantity = FND_API.G_MISS_NUM)) THEN
4475 p_x_req_material_tbl(i).requested_quantity := l_material_req_rec.old_requested_quantity;
4476 ELSIF p_x_req_material_tbl(i).requested_quantity < 0 THEN
4477 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_QUANTITY_INVALID');
4478 Fnd_Msg_Pub.ADD;
4479 END IF;
4480
4481 -- Check for valid requested date
4482 IF (p_x_req_material_tbl(i).requested_date IS NULL OR (p_x_req_material_tbl(i).requested_date = FND_API.G_MISS_DATE)) THEN
4483 p_x_req_material_tbl(i).requested_date := l_material_req_rec.old_requested_date;
4484 ELSIF p_x_req_material_tbl(i).requested_date < trunc(SYSDATE) THEN
4485 Fnd_Message.SET_NAME('AHL','AHL_PP_REQ_DATE_GT_EQ_SYSD');
4486 Fnd_Msg_Pub.ADD;
4487 END IF;
4488
4489 --Standard check to count messages
4490 l_msg_count := Fnd_Msg_Pub.count_msg;
4491 IF l_msg_count > 0 THEN
4492 X_msg_count := l_msg_count;
4493 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
4494 RAISE Fnd_Api.G_EXC_ERROR;
4495 END IF;
4496
4497 -- If the inventory item id is updated.
4498 IF ( p_x_req_material_tbl(i).inventory_item_id <> l_material_req_rec.old_inventory_item_id ) THEN
4499 -- Get the WIP requirement for the original item
4500 OPEN Get_Wip_Req_Csr(l_material_req_rec.old_inventory_item_id, l_schedule_material_id);
4501 FETCH Get_Wip_Req_Csr INTO l_old_wip_req_rec;
4502 CLOSE Get_Wip_Req_Csr;
4503 -- If WIP requirement exists for the original item
4504 IF (l_old_wip_req_rec.wip_entity_id IS NOT NULL) THEN
4505 -- If WIP requirement has more required quantity then ASM requested quantity
4506 -- A merge happened in WIP requirement
4507 IF (l_old_wip_req_rec.required_quantity > l_material_req_rec.old_requested_quantity) THEN
4508 -- Reduce the original ASM quantity from WIP requirement quantity..
4509 l_new_requested_qty := l_old_wip_req_rec.required_quantity - l_material_req_rec.old_requested_quantity;
4510
4511 SELECT AHL_WO_OPERATIONS_TXNS_S.NEXTVAL INTO l_wo_operation_txn_id FROM DUAL;
4512 --
4513 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4514 AHL_DEBUG_PUB.debug( 'before calling log record l_wo_operation_txn_id:'||l_wo_operation_txn_id);
4515 END IF;
4516 --Create Record in transactions table
4517 Log_Transaction_Record
4518 ( p_wo_operation_txn_id => l_wo_operation_txn_id,
4519 p_object_version_number => 1,
4520 p_last_update_date => sysdate,
4521 p_last_updated_by => fnd_global.user_id,
4522 p_creation_date => sysdate,
4523 p_created_by => fnd_global.user_id,
4524 p_last_update_login => fnd_global.login_id,
4525 p_load_type_code => 2,
4526 p_transaction_type_code => 1,
4527 p_workorder_operation_id => l_material_req_rec.workorder_operation_id,
4528 p_schedule_material_id => l_schedule_material_id,
4529 p_inventory_item_id => l_material_req_rec.old_inventory_item_id,
4530 p_required_quantity => l_new_requested_qty,
4531 p_date_required => p_x_req_material_tbl(i).requested_date
4532 );
4533 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4534 fnd_log.string(fnd_log.level_statement, l_debug_key, 'After calling log record l_wo_operation_txn_id:'||l_wo_operation_txn_id);
4535 END IF;
4536
4537 -- Update the original WIP requirement
4538 l_material_req_up_tbl(up_index).schedule_material_id := l_schedule_material_id;
4539 l_material_req_up_tbl(up_index).job_number := l_workorder_name;
4540 l_material_req_up_tbl(up_index).wip_entity_id := l_old_wip_req_rec.wip_entity_id;
4541 l_material_req_up_tbl(up_index).workorder_id := l_material_req_rec.workorder_id;
4542 l_material_req_up_tbl(up_index).operation_sequence := l_old_wip_req_rec.operation_sequence;
4543 l_material_req_up_tbl(up_index).inventory_item_id := l_material_req_rec.old_inventory_item_id;
4544 l_material_req_up_tbl(up_index).uom_code := p_x_req_material_tbl(i).uom_code;
4545 l_material_req_up_tbl(up_index).organization_id := l_material_req_rec.organization_id;
4546 l_material_req_up_tbl(up_index).department_id := l_old_wip_req_rec.department_id;
4547 l_material_req_up_tbl(up_index).mrp_net_flag := 2;
4548 l_material_req_up_tbl(up_index).quantity_per_assembly := l_new_requested_qty;
4549 l_material_req_up_tbl(up_index).requested_quantity := l_new_requested_qty;
4550 l_material_req_up_tbl(up_index).supply_type := NULL;
4551 l_material_req_up_tbl(up_index).location := NULL;
4552 l_material_req_up_tbl(up_index).sub_inventory := NULL;
4553 l_material_req_up_tbl(up_index).requested_date := p_x_req_material_tbl(i).requested_date;
4554 l_material_req_up_tbl(up_index).operation_flag := 'U';
4555 up_index := up_index + 1 ;
4556
4557 ELSE
4558 -- If WIP requirement quantity and ASM requirement quantity matches.
4559 -- Delete the original WIP requirement
4560 l_material_req_re_tbl(re_index).schedule_material_id := l_schedule_material_id;
4561 l_material_req_re_tbl(re_index).job_number := l_workorder_name;
4562 l_material_req_re_tbl(re_index).wip_entity_id := l_old_wip_req_rec.wip_entity_id;
4563 l_material_req_re_tbl(re_index).workorder_id := l_material_req_rec.workorder_id;
4564 l_material_req_re_tbl(re_index).operation_sequence := l_old_wip_req_rec.operation_sequence;
4565 l_material_req_re_tbl(re_index).inventory_item_id := l_material_req_rec.old_inventory_item_id;
4566 l_material_req_re_tbl(re_index).organization_id := l_material_req_rec.organization_id;
4567 l_material_req_re_tbl(re_index).department_id := l_old_wip_req_rec.department_id;
4568 l_material_req_re_tbl(re_index).mrp_net_flag := 2;
4569 l_material_req_re_tbl(re_index).quantity_per_assembly := l_old_wip_req_rec.required_quantity;
4570 l_material_req_re_tbl(re_index).requested_quantity := l_old_wip_req_rec.required_quantity;
4571 l_material_req_re_tbl(re_index).supply_type := NULL;
4572 l_material_req_re_tbl(re_index).location := NULL;
4573 l_material_req_re_tbl(re_index).sub_inventory := NULL;
4574 l_material_req_re_tbl(re_index).requested_date := l_old_wip_req_rec.date_required;
4575 l_material_req_re_tbl(re_index).operation_flag := 'D';
4576 re_index := re_index + 1;
4577 END IF;
4578 -- Get the WIP requirement for the new item
4579 OPEN Get_Wip_Req_Csr(p_x_req_material_tbl(i).inventory_item_id, l_schedule_material_id);
4580 FETCH Get_Wip_Req_Csr INTO l_new_wip_req_rec;
4581 CLOSE Get_Wip_Req_Csr;
4582
4583 -- If WIP requirement exists for the new item then throw the error.
4584 -- This part needs to be changed during Marshaling
4585 IF (l_new_wip_req_rec.wip_entity_id IS NOT NULL) THEN
4586 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4587 fnd_log.string(fnd_log.level_statement, l_debug_key, 'WIP entity ID already exists for Item: ' || p_x_req_material_tbl(i).inventory_item_id);
4588 END IF;
4589
4590 OPEN Get_Item_Name_Cur(p_x_req_material_tbl(i).inventory_item_id,
4591 l_material_req_rec.organization_id);
4592 FETCH Get_Item_Name_Cur INTO l_item_name;
4593 CLOSE Get_Item_Name_Cur;
4594 Fnd_Message.SET_NAME('AHL','AHL_PP_WIP_REQ_EXISTS'); -- WIP requirement already exists for the new item
4595 FND_MESSAGE.Set_Token('ITEM', l_item_name);
4596 Fnd_Msg_Pub.ADD;
4597 RAISE FND_API.G_EXC_ERROR;
4598 ELSE
4599 -- If no WIP requirement exists for the new item then create a WIP requirement.
4600 SELECT AHL_WO_OPERATIONS_TXNS_S.NEXTVAL INTO l_wo_operation_txn_id FROM DUAL;
4601 --
4602 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4603 fnd_log.string(fnd_log.level_statement, l_debug_key, 'before calling log record l_wo_operation_txn_id:'||l_wo_operation_txn_id);
4604 END IF;
4605 --Create Record in transactions table
4606 Log_Transaction_Record
4607 ( p_wo_operation_txn_id => l_wo_operation_txn_id,
4608 p_object_version_number => 1,
4609 p_last_update_date => sysdate,
4610 p_last_updated_by => fnd_global.user_id,
4611 p_creation_date => sysdate,
4612 p_created_by => fnd_global.user_id,
4613 p_last_update_login => fnd_global.login_id,
4614 p_load_type_code => 2,
4615 p_transaction_type_code => 1,
4616 p_workorder_operation_id => l_material_req_rec.workorder_operation_id,
4617 p_schedule_material_id => l_schedule_material_id,
4618 p_inventory_item_id => p_x_req_material_tbl(i).inventory_item_id,
4619 p_required_quantity => p_x_req_material_tbl(i).requested_quantity,
4620 p_date_required => p_x_req_material_tbl(i).requested_date
4621 );
4622 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4623 AHL_DEBUG_PUB.debug( 'After calling log record l_wo_operation_txn_id:'||l_wo_operation_txn_id);
4624 END IF;
4625
4626 l_material_req_cr_tbl(cr_index).schedule_material_id := l_schedule_material_id;
4627 l_material_req_cr_tbl(cr_index).job_number := l_workorder_name;
4628 l_material_req_cr_tbl(cr_index).wip_entity_id := l_old_wip_req_rec.wip_entity_id;
4629 l_material_req_cr_tbl(cr_index).workorder_id := l_material_req_rec.workorder_id;
4630 l_material_req_cr_tbl(cr_index).operation_sequence := l_old_wip_req_rec.operation_sequence;
4631 l_material_req_cr_tbl(cr_index).inventory_item_id := p_x_req_material_tbl(i).inventory_item_id;
4632 l_material_req_cr_tbl(cr_index).uom_code := p_x_req_material_tbl(i).uom_code;
4633 l_material_req_cr_tbl(cr_index).organization_id := l_material_req_rec.organization_id;
4634 l_material_req_cr_tbl(cr_index).department_id := l_old_wip_req_rec.department_id;
4635 l_material_req_cr_tbl(cr_index).mrp_net_flag := 2;
4636 l_material_req_cr_tbl(cr_index).quantity_per_assembly := p_x_req_material_tbl(i).requested_quantity;
4637 l_material_req_cr_tbl(cr_index).requested_quantity := p_x_req_material_tbl(i).requested_quantity;
4638 l_material_req_cr_tbl(cr_index).supply_type := NULL;
4639 l_material_req_cr_tbl(cr_index).location := NULL;
4640 l_material_req_cr_tbl(cr_index).sub_inventory := NULL;
4641 l_material_req_cr_tbl(cr_index).requested_date := p_x_req_material_tbl(i).requested_date;
4642 l_material_req_cr_tbl(cr_index).operation_flag :='C';
4643 cr_index := cr_index + 1;
4644 END IF; -- End of existance of WIP requirement for the new item check.
4645 END IF; -- End of existance of WIP requirement for the original item check.
4646 END IF; -- End of item changed check.
4647 ELSE
4648 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4649 AHL_DEBUG_PUB.debug( 'Invalid Scedule Material Id: '||l_schedule_material_id);
4650 END IF;
4651 Fnd_Message.SET_NAME('AHL','AHL_RSV_INVALID_MTRLREQ'); -- Material Requirement is Invalid.
4652 Fnd_Msg_Pub.ADD;
4653 END IF; -- End of existance of ASM requirement for the original item check.
4654 END LOOP; -- End of p_x_req_material_tbl loop
4655 IF (l_material_req_re_tbl.COUNT > 0 ) THEN
4656 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4657 fnd_log.string(fnd_log.level_statement, l_debug_key, 'before calling AHL_EAM_JOB_PVT.process_material_req to remove WIP requirements');
4658 END IF;
4659 -- Call wip job api
4660 AHL_EAM_JOB_PVT.process_material_req
4661 (
4662 p_api_version => l_api_version,
4663 p_init_msg_list => Fnd_Api.g_false,
4664 p_commit => Fnd_Api.g_false,
4665 p_validation_level => p_validation_level,
4666 p_default => l_default,
4667 p_module_type => p_module_type,
4668 x_return_status => l_return_status,
4669 x_msg_count => l_msg_count,
4670 x_msg_data => l_msg_data,
4671 p_material_req_tbl => l_material_req_re_tbl
4672 );
4673 --
4674 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4675 fnd_log.string(fnd_log.level_statement, l_debug_key, 'after calling AHL_EAM_JOB_PVT.process_material_req to remove WIP requirements, Status: '||l_return_status);
4676 END IF;
4677 END IF;
4678 IF (l_material_req_cr_tbl.COUNT > 0 AND l_return_status = 'S') THEN
4679 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4680 fnd_log.string(fnd_log.level_statement, l_debug_key, 'before calling AHL_EAM_JOB_PVT.process_material_req to Create WIP requirements');
4681 END IF;
4682 -- Call wip job api
4683 AHL_EAM_JOB_PVT.process_material_req
4684 (
4685 p_api_version => l_api_version,
4686 p_init_msg_list => Fnd_Api.g_false,
4687 p_commit => Fnd_Api.g_false,
4688 p_validation_level => p_validation_level,
4689 p_default => l_default,
4690 p_module_type => p_module_type,
4691 x_return_status => l_return_status,
4692 x_msg_count => l_msg_count,
4693 x_msg_data => l_msg_data,
4694 p_material_req_tbl => l_material_req_cr_tbl
4695 );
4696 --
4697 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4698 fnd_log.string(fnd_log.level_statement, l_debug_key, 'after calling AHL_EAM_JOB_PVT.process_material_req to Create WIP requirements, Status: '||l_return_status);
4699 END IF;
4700 END IF;
4701 IF (l_material_req_up_tbl.COUNT > 0 AND l_return_status = 'S') THEN
4702 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4703 fnd_log.string(fnd_log.level_statement, l_debug_key, 'before calling AHL_EAM_JOB_PVT.process_material_req to update WIP requirements');
4704 END IF;
4705 -- Call wip job api
4706 AHL_EAM_JOB_PVT.process_material_req
4707 (
4708 p_api_version => l_api_version,
4709 p_init_msg_list => Fnd_Api.g_false,
4710 p_commit => Fnd_Api.g_false,
4711 p_validation_level => p_validation_level,
4712 p_default => l_default,
4713 p_module_type => p_module_type,
4714 x_return_status => l_return_status,
4715 x_msg_count => l_msg_count,
4716 x_msg_data => l_msg_data,
4717 p_material_req_tbl => l_material_req_up_tbl
4718 );
4719 --
4720 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
4721 fnd_log.string(fnd_log.level_statement, l_debug_key, 'after calling AHL_EAM_JOB_PVT.process_material_req to update WIP requirements, Status: '||l_return_status);
4722 END IF;
4723 END IF;
4724 IF (l_return_status = 'S') THEN
4725 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
4726 LOOP
4727 --Update the Schedule materials table.
4728 -- Update the ASM record with the changed attributes
4729
4730 /*sukhwsin::Marshling enhancements requirements.
4731 Need to logic to conditionally update ASM columns based upon the call. i.e. if p_module_type = MM then
4732 sheduling information also needs to be updated for changed item in ASM. This logic will be handled later.
4733 */
4734
4735 UPDATE ahl_schedule_materials
4736 SET inventory_item_id = p_x_req_material_tbl(i).inventory_item_id,
4737 object_version_number = p_x_req_material_tbl(i).object_version_number + 1,
4738 last_update_date = sysdate,
4739 last_updated_by = Fnd_Global.USER_ID,
4740 last_update_login = Fnd_Global.LOGIN_ID
4741 WHERE scheduled_material_id = p_x_req_material_tbl(i).schedule_material_id ;
4742 END LOOP; -- End of p_x_req_material_tbl loop
4743 END IF; -- End of l_return_status check
4744 END IF; -- End of p_x_req_material_tbl check for records
4745 IF l_return_status = 'S' THEN
4746 --Check for Profile Option value If 'Y' Call
4747 IF FND_PROFILE.value( 'AHL_MTL_REQ_NOTIFICATION_ENABLED') = 'Y' THEN
4748 --Send Materil Notification
4749 MATERIAL_NOTIFICATION
4750 (
4751 p_api_version => p_api_version,
4752 p_init_msg_list => Fnd_Api.g_false,
4753 p_commit => Fnd_Api.g_false,
4754 p_validation_level => p_validation_level,
4755 p_Req_Material_Tbl => p_x_req_material_tbl,
4756 x_return_status => l_return_status,
4757 x_msg_count => l_msg_count,
4758 x_msg_data => l_msg_data);
4759 END IF;
4760 END IF;
4761 l_msg_count := Fnd_Msg_Pub.count_msg;
4762 -- Check the return status of API call.
4763 IF (l_return_status <> 'S' OR l_msg_count > 0) THEN
4764 X_msg_count := l_msg_count;
4765 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
4766 RAISE Fnd_Api.G_EXC_ERROR;
4767 END IF;
4768 --Standard check for commit
4769 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
4770 COMMIT;
4771 END IF;
4772 -- Debug info
4773 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
4774 fnd_log.string(fnd_log.level_procedure, L_DEBUG_KEY || '.end',
4775 'At the end of normal execution of the PLSQL procedure. Status: '||l_return_status );
4776 END IF;
4777 EXCEPTION
4778 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4779 ROLLBACK TO Change_Requirement_Item;
4780 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4781 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
4782 p_count => x_msg_count,
4783 p_data => x_msg_data);
4784 WHEN FND_API.G_EXC_ERROR THEN
4785 ROLLBACK TO Change_Requirement_Item;
4786 X_return_status := FND_API.G_RET_STS_ERROR;
4787 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
4788 p_count => x_msg_count,
4789 p_data => X_msg_data);
4790 WHEN OTHERS THEN
4791 ROLLBACK TO Change_Requirement_Item;
4792 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4793 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4794 THEN
4795 fnd_msg_pub.add_exc_msg(p_pkg_name => 'AHL_PP_MATERIALS_PVT',
4796 p_procedure_name => 'Change_Requirement_Item',
4797 p_error_text => SUBSTR(SQLERRM,1,240));
4798 END IF;
4799 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
4800 p_count => x_msg_count,
4801 p_data => X_msg_data);
4802 END Change_Requirement_Item;
4803
4804 -- Public Procedure Definitions follow --
4805 -----------------------------------------
4806 -- Start of Comments --
4807 -- Procedure name : Process_Material_Request
4808 -- Type : Private
4809 -- Function : Process material reservations through MRP for Routine and Non
4810 -- Routine jobs based on operation flag
4811 -- Pre-reqs :
4812 -- Parameters :
4813 --
4814 -- Standard IN Parameters :
4815 -- p_api_version IN NUMBER Required
4816 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
4817 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
4818 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
4819 -- p_default IN VARCHAR2 Default FND_API.G_TRUE
4820 -- p_module_type IN VARCHAR2 Default NULL.
4821 --
4822 -- Standard OUT Parameters :
4823 -- x_return_status OUT VARCHAR2 Required
4824 -- x_msg_count OUT NUMBER Required
4825 -- x_msg_data OUT VARCHAR2 Required
4826 --
4827 -- Process Material Request Parameters:
4828 -- p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
4829 -- Contains material information to perform material reservation depending
4830 -- on operation flag
4831 --
4832 -- Version :
4833 -- Initial Version 1.0
4834 --
4835 -- End of Comments.
4836 PROCEDURE Process_Material_Request (
4837 p_api_version IN NUMBER,
4838 p_init_msg_list IN VARCHAR2 := Fnd_Api.G_FALSE,
4839 p_commit IN VARCHAR2 := Fnd_Api.G_FALSE,
4840 p_validation_level IN NUMBER := Fnd_Api.G_VALID_LEVEL_FULL,
4841 p_module_type IN VARCHAR2 := NULL,
4842 p_x_req_material_tbl IN OUT NOCOPY AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type,
4843 x_return_status OUT NOCOPY VARCHAR2,
4844 x_msg_count OUT NOCOPY NUMBER,
4845 x_msg_data OUT NOCOPY VARCHAR2
4846 )
4847 IS
4848 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_MATERIAL_REQUEST';
4849 l_api_version CONSTANT NUMBER := 1.0;
4850 l_msg_count NUMBER;
4851 l_return_status VARCHAR2(1);
4852 l_job_return_status VARCHAR2(1);
4853 l_msg_data VARCHAR2(2000);
4854 l_interface_flag VARCHAR2(1) := NULL;
4855 l_called_module VARCHAR2(10) := 'UI';
4856 l_req_material_tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type;
4857 l_req_cr_material_tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type;
4858 l_req_up_material_tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type;
4859 l_req_re_material_tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type;
4860 l_req_ci_material_tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type;
4861 l_commit VARCHAR2(30) := Fnd_Api.G_FALSE;
4862
4863 --Added by debadey for Aog notification
4864 l_asm_id_tbl AHL_MM_MTL_MGT_PVT.number_table_type;
4865 l_temp_var NUMBER;
4866 l_count NUMBER;
4867
4868 CURSOR AOG_CHECK_CUR(p_asm_id NUMBER)
4869 IS
4870 SELECT 1 FROM AHL_SCHEDULE_MATERIALS_V
4871 WHERE schedule_material_id = p_asm_id
4872 AND NVL(aog_flag, 'N') = 'N';
4873 BEGIN
4874 --------------------Initialize ----------------------------------
4875 -- Standard Start of API savepoint
4876 SAVEPOINT process_material_request;
4877 -- Check if API is called in debug mode. If yes, enable debug.
4878 IF G_DEBUG='Y' THEN
4879 AHL_DEBUG_PUB.enable_debug;
4880 -- Debug info.
4881 AHL_DEBUG_PUB.debug( 'enter ahl_pp_materias_pvt.process material request','+PPMRP+');
4882 --
4883 END IF;
4884 -- Standard call to check for call compatibility.
4885 IF FND_API.to_boolean(p_init_msg_list)
4886 THEN
4887 FND_MSG_PUB.initialize;
4888 END IF;
4889 -- Initialize API return status to success
4890 x_return_status := FND_API.G_RET_STS_SUCCESS;
4891 -- Initialize message list if p_init_msg_list is set to TRUE.
4892 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
4893 p_api_version,
4894 l_api_name,G_PKG_NAME)
4895 THEN
4896 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4897 END IF;
4898 --------------------Start of API Body-----------------------------------
4899 --debadey:logging
4900 IF G_DEBUG='Y' THEN
4901 Ahl_Debug_Pub.debug( 'p_x_req_material_tbl.COUNT= '||p_x_req_material_tbl.COUNT,'+PPMRP+');
4902 Ahl_Debug_Pub.debug( 'p_x_req_material_tbl(1).operation_flag= '||p_x_req_material_tbl(1).operation_flag,'+PPMRP+');
4903 -- Check if API is called in debug mode. If yes, disable debug.
4904 Ahl_Debug_Pub.disable_debug;
4905 END IF;
4906 --debadey:logging end
4907
4908 IF p_x_req_material_tbl.COUNT > 0 THEN
4909 FOR i IN p_x_req_material_tbl.FIRST..p_x_req_material_tbl.LAST
4910 LOOP
4911 IF p_x_req_material_tbl(i).operation_flag = 'C'
4912 THEN
4913 --
4914 l_req_cr_material_tbl(i) := p_x_req_material_tbl(i);
4915 --
4916 ELSIF p_x_req_material_tbl(i).operation_flag = 'U'
4917 THEN
4918 l_req_up_material_tbl(i) := p_x_req_material_tbl(i);
4919 -- Added for AOG notification by debadey
4920 --debadey:logging
4921 IF G_DEBUG='Y' THEN
4922 Ahl_Debug_Pub.debug( 'p_x_req_material_tbl(i).AOG_FLAG= '||p_x_req_material_tbl(i).AOG_FLAG,'+PPMRP+');
4923 Ahl_Debug_Pub.debug( 'p_x_req_material_tbl(i).SCHEDULE_MATERIAL_ID= '||p_x_req_material_tbl(i).SCHEDULE_MATERIAL_ID,'+PPMRP+');
4924 -- Check if API is called in debug mode. If yes, disable debug.
4925 Ahl_Debug_Pub.disable_debug;
4926 END IF;
4927 --debadey:logging end
4928 IF (p_x_req_material_tbl(i).AOG_FLAG = 'Y')
4929 THEN
4930 OPEN AOG_CHECK_CUR(p_x_req_material_tbl(i).SCHEDULE_MATERIAL_ID);
4931 FETCH AOG_CHECK_CUR INTO l_temp_var;
4932 IF (AOG_CHECK_CUR%FOUND)
4933 THEN
4934
4935 -- ASM Id had AOG flag N earlier.Update table type variable
4936 -- Update table type variable
4937 IF (l_asm_id_tbl.COUNT=0)
4938 THEN
4939 l_count:=0;
4940 ELSE
4941 l_count := l_asm_id_tbl.LAST;
4942 END IF;
4943 l_asm_id_tbl(l_count+1):= p_x_req_material_tbl(i).SCHEDULE_MATERIAL_ID;
4944
4945 END IF;
4946 CLOSE AOG_CHECK_CUR;
4947 END IF;
4948 -- End of changes by debadey
4949 ELSIF p_x_req_material_tbl(i).operation_flag = 'D'
4950 THEN
4951 --
4952 l_req_re_material_tbl(i) := p_x_req_material_tbl(i);
4953 ELSIF p_x_req_material_tbl(i).operation_flag = 'I'
4954 THEN
4955 l_req_ci_material_tbl(i) := p_x_req_material_tbl(i);
4956 END IF;
4957 END LOOP;
4958 END IF;
4959 --Call Private API to process
4960 IF l_req_cr_material_tbl.COUNT > 0 THEN
4961 -- Call create material request
4962 -- MANESING::NR Analysis, 03-Jun-2011, added p_module_type in the API signature
4963 Create_Material_Reqst
4964 (
4965 p_api_version => p_api_version,
4966 p_init_msg_list => p_init_msg_list,
4967 p_commit => l_commit,
4968 p_validation_level => p_validation_level,
4969 p_module_type => p_module_type,
4970 p_interface_flag => l_interface_flag,
4971 p_x_req_material_tbl => l_req_cr_material_tbl,
4972 x_job_return_status => l_job_return_status,
4973 x_return_status => l_return_status,
4974 x_msg_count => l_msg_count,
4975 x_msg_data => l_msg_data
4976 ) ;
4977 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
4978 l_msg_count := FND_MSG_PUB.count_msg;
4979 IF l_msg_count > 0 THEN
4980 RAISE FND_API.G_EXC_ERROR;
4981 END IF;
4982 END IF;
4983 FOR i IN l_req_cr_material_tbl.First..l_req_cr_material_tbl.LAST LOOP
4984 p_x_req_material_tbl(i).SCHEDULE_MATERIAL_ID := l_req_cr_material_tbl(i).SCHEDULE_MATERIAL_ID;
4985 -- Added by debadey for AOG notification
4986
4987 IF G_DEBUG='Y' THEN
4988 Ahl_Debug_Pub.debug( 'l_req_cr_material_tbl(i).AOG_FLAG= '||p_x_req_material_tbl(i).AOG_FLAG,'+PPMRP+');
4989 Ahl_Debug_Pub.debug( 'l_req_cr_material_tbl(i).SCHEDULE_MATERIAL_ID= '||p_x_req_material_tbl(i).SCHEDULE_MATERIAL_ID,'+PPMRP+');
4990 -- Check if API is called in debug mode. If yes, disable debug.
4991 Ahl_Debug_Pub.disable_debug;
4992 END IF;
4993
4994 IF (l_req_cr_material_tbl(i).AOG_FLAG = 'Y')
4995 THEN
4996 -- Update table type variable
4997 IF (l_asm_id_tbl.COUNT=0)
4998 THEN
4999 l_count:=0;
5000 ELSE
5001 l_count := l_asm_id_tbl.LAST;
5002 END IF;
5003 l_asm_id_tbl(l_count+1):= p_x_req_material_tbl(i).SCHEDULE_MATERIAL_ID;
5004 END IF;
5005 -- End of change sby debadey
5006
5007 END LOOP;
5008 END IF;
5009 IF l_req_up_material_tbl.COUNT > 0 THEN
5010 -- Call Update material request
5011 Update_Material_Reqst
5012 (
5013 p_api_version => p_api_version,
5014 p_init_msg_list => p_init_msg_list,
5015 p_commit => l_commit,
5016 p_validation_level => p_validation_level,
5017 p_module_type => p_module_type,
5018 p_x_req_material_tbl => l_req_up_material_tbl,
5019 x_return_status => l_return_status,
5020 x_msg_count => l_msg_count,
5021 x_msg_data => l_msg_data
5022 );
5023 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5024 l_msg_count := FND_MSG_PUB.count_msg;
5025 IF l_msg_count > 0 THEN
5026 RAISE FND_API.G_EXC_ERROR;
5027 END IF;
5028 END IF;
5029 END IF;
5030
5031 IF l_req_re_material_tbl.COUNT > 0 THEN
5032 -- Call Remove material request
5033 Remove_Material_Request
5034 (
5035 p_api_version => p_api_version,
5036 p_init_msg_list => p_init_msg_list,
5037 p_commit => l_commit,
5038 p_validation_level => p_validation_level,
5039 p_module_type => p_module_type,
5040 p_x_req_material_tbl => l_req_re_material_tbl,
5041 x_return_status => l_return_status,
5042 x_msg_count => l_msg_count,
5043 x_msg_data => l_msg_data
5044 );
5045 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5046 l_msg_count := FND_MSG_PUB.count_msg;
5047 IF l_msg_count > 0 THEN
5048 RAISE FND_API.G_EXC_ERROR;
5049 END IF;
5050 END IF;
5051 END IF;
5052
5053 IF l_req_ci_material_tbl.COUNT > 0 THEN
5054 -- Call Change Requirement Item
5055 Change_Requirement_Item
5056 (
5057 p_api_version => p_api_version,
5058 p_init_msg_list => p_init_msg_list,
5059 p_commit => l_commit,
5060 p_validation_level => p_validation_level,
5061 p_module_type => p_module_type,
5062 p_x_req_material_tbl => l_req_ci_material_tbl,
5063 x_return_status => l_return_status,
5064 x_msg_count => l_msg_count,
5065 x_msg_data => l_msg_data
5066 );
5067 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5068 l_msg_count := FND_MSG_PUB.count_msg;
5069 IF l_msg_count > 0 THEN
5070 RAISE FND_API.G_EXC_ERROR;
5071 END IF;
5072 END IF;
5073 END IF;
5074 -- Added by debadey for AOG notification and WO updation
5075 IF (l_asm_id_tbl IS NOT NULL AND l_asm_id_tbl.COUNT > 0)
5076 THEN
5077 --debadey:logging
5078 IF (G_DEBUG='Y') THEN
5079 Ahl_Debug_Pub.debug( 'No. of asm ids for which notification to be sent = '||l_asm_id_tbl.COUNT,'+PPMRP+');
5080 -- Check if API is called in debug mode. If yes, disable debug.
5081 Ahl_Debug_Pub.disable_debug;
5082 END IF;
5083 --debadey:logging end
5084
5085 AHL_MM_MTL_MGT_PVT.aog_upd_notification(p_api_version => p_api_version,
5086 p_init_msg_list => p_init_msg_list,
5087 p_commit => l_commit,
5088 p_validation_level => p_validation_level,
5089 p_schedule_material_id_tbl => l_asm_id_tbl,
5090 x_return_status => l_return_status,
5091 x_msg_count => l_msg_count,
5092 x_msg_data => l_msg_data
5093 );
5094 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5095 l_msg_count := FND_MSG_PUB.count_msg;
5096 IF l_msg_count > 0 THEN
5097 RAISE FND_API.G_EXC_ERROR;
5098 END IF;
5099 END IF;
5100 END IF;
5101
5102 ------------------------End of Body---------------------------------------
5103 --Standard check to count messages
5104 l_msg_count := Fnd_Msg_Pub.count_msg;
5105 IF l_msg_count > 0 THEN
5106 X_msg_count := l_msg_count;
5107 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
5108 RAISE Fnd_Api.G_EXC_ERROR;
5109 END IF;
5110 --Standard check for commit
5111 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
5112 COMMIT;
5113 END IF;
5114 -- Debug info
5115 IF G_DEBUG='Y' THEN
5116 Ahl_Debug_Pub.debug( 'End of public api Process Material Request','+PPMRP+');
5117 -- Check if API is called in debug mode. If yes, disable debug.
5118 Ahl_Debug_Pub.disable_debug;
5119 --
5120 END IF;
5121 EXCEPTION
5122 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5123 ROLLBACK TO process_material_request;
5124 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5125 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
5126 p_count => x_msg_count,
5127 p_data => x_msg_data);
5128 IF G_DEBUG='Y' THEN
5129 AHL_DEBUG_PUB.log_app_messages (
5130 x_msg_count, x_msg_data, 'ERROR' );
5131 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Process Material Request','+PPMRP+');
5132 -- Check if API is called in debug mode. If yes, disable debug.
5133 AHL_DEBUG_PUB.disable_debug;
5134 END IF;
5135 WHEN FND_API.G_EXC_ERROR THEN
5136 ROLLBACK TO process_material_request;
5137 X_return_status := FND_API.G_RET_STS_ERROR;
5138 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
5139 p_count => x_msg_count,
5140 p_data => X_msg_data);
5141 IF G_DEBUG='Y' THEN
5142 -- Debug info.
5143 AHL_DEBUG_PUB.log_app_messages (
5144 x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
5145 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Process Material Request','+PPMRP+');
5146 -- Check if API is called in debug mode. If yes, disable debug.
5147 AHL_DEBUG_PUB.disable_debug;
5148 --
5149 END IF;
5150 WHEN OTHERS THEN
5151 ROLLBACK TO process_material_request;
5152 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5153 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5154 THEN
5155 fnd_msg_pub.add_exc_msg(p_pkg_name => 'AHL_PP_MATERIALS_PVT',
5156 p_procedure_name => 'PROCESS_MATERIAL_REQUEST',
5157 p_error_text => SUBSTR(SQLERRM,1,240));
5158 END IF;
5159 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
5160 p_count => x_msg_count,
5161 p_data => X_msg_data);
5162 IF G_DEBUG='Y' THEN
5163 -- Debug info.
5164 AHL_DEBUG_PUB.log_app_messages (
5165 x_msg_count, x_msg_data, 'SQL ERROR' );
5166 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt. Process Material Request','+PPMRP+');
5167 -- Check if API is called in debug mode. If yes, disable debug.
5168 AHL_DEBUG_PUB.disable_debug;
5169 END IF;
5170 END Process_Material_Request;
5171 --
5172 -- aps obsoleted
5173 FUNCTION Get_Mrp_Net
5174 (p_schedule_material_id IN NUMBER,
5175 p_item_desc IN VARCHAR2)
5176 RETURN VARCHAR2 IS
5177 --
5178 CURSOR Check_material_cur (c_schedule_material_id IN NUMBER)
5179 IS
5180 SELECT scheduled_material_id,
5181 rt_oper_material_id
5182 FROM ahl_schedule_materials
5183 WHERE scheduled_material_id = c_schedule_material_id;
5184 --
5185 CURSOR Get_item_cur(c_segments IN VARCHAR2)
5186 IS
5187 SELECT distinct(inventory_item_id)
5188 FROM mtl_system_items_kfv
5189 WHERE concatenated_segments = c_segments;
5190 --
5191 l_return VARCHAR2(1);
5192 --
5193 l_inventory_item_id NUMBER;
5194 l_rt_oper_material_id NUMBER;
5195 l_schedule_material_id NUMBER;
5196 BEGIN
5197 --Check for schedule material id
5198 OPEN Check_material_cur(p_schedule_material_id);
5199 FETCH Check_material_cur INTO l_schedule_material_id,l_rt_oper_material_id;
5200 CLOSE Check_material_cur;
5201 --
5202 -- Get inventory item
5203 OPEN Get_item_cur(p_item_desc);
5204 FETCH Get_item_cur INTO l_inventory_item_id;
5205 CLOSE Get_item_cur;
5206 --
5207 IF l_rt_oper_material_id IS NOT NULL THEN
5208 l_return := 'N';
5209 ELSE
5210 l_return := 'Y';
5211 END IF;
5212 RETURN l_return;
5213 EXCEPTION
5214 WHEN OTHERS THEN
5215 RETURN NULL;
5216 END Get_Mrp_Net;
5217 -- aps obsoleted
5218 --
5219 FUNCTION GET_QTY_PER_ASBLY
5220 (p_schedule_material_id IN NUMBER,
5221 p_item_desc IN VARCHAR2 )
5222 RETURN NUMBER IS
5223 CURSOR Check_material_cur (c_schedule_material_id IN NUMBER)
5224 IS
5225 SELECT scheduled_material_id,
5226 rt_oper_material_id,requested_quantity
5227 FROM ahl_schedule_materials
5228 WHERE scheduled_material_id = c_schedule_material_id;
5229 --
5230 CURSOR Get_item_cur(c_segments IN VARCHAR2)
5231 IS
5232 SELECT distinct(inventory_item_id)
5233 FROM mtl_system_items_kfv
5234 WHERE concatenated_segments = c_segments;
5235 --
5236 l_inventory_item_id NUMBER;
5237 l_rt_oper_material_id NUMBER;
5238 l_schedule_material_id NUMBER;
5239 l_requested_quantity NUMBER;
5240 BEGIN
5241 --Check for schedule material id
5242 OPEN Check_material_cur(p_schedule_material_id);
5243 FETCH Check_material_cur INTO l_schedule_material_id,l_rt_oper_material_id,
5244 l_requested_quantity;
5245 CLOSE Check_material_cur;
5246 --
5247 -- Get inventory item
5248 OPEN Get_item_cur(p_item_desc);
5249 FETCH Get_item_cur INTO l_inventory_item_id;
5250 CLOSE Get_item_cur;
5251 --
5252 IF l_schedule_material_id IS NOT NULL THEN
5253 RETURN l_requested_quantity;
5254 END IF;
5255 EXCEPTION
5256 WHEN OTHERS THEN
5257 RETURN NULL;
5258 END Get_Qty_Per_Asbly;
5259 --
5260 -- Start of Comments --
5261 -- Procedure name : Log_Transaction_Record
5262 -- Type : Private
5263 -- Function : Writes the details about a transaction in the Log Table
5264 -- AHL_WO_OPERATION_TXNS
5265 -- Pre-reqs :
5266 -- Parameters :
5267 --
5268 -- Log_Transaction Parameters:
5269 -- p_trans_type_code IN VARCHAR2 Required
5270 -- p_load_type_code IN NUMBER Required
5271 -- p_transaction_type_code IN NUMBER Required
5272 -- p_workorder_operation_id IN NUMBER Default NULL,
5273 -- p_operation_resource_id IN NUMBER Default NULL,
5274 -- p_schedule_material_id IN NUMBER Default NULL,
5275 -- p_bom_resource_id IN NUMBER Default NULL,
5276 -- p_cost_basis_code IN NUMBER Default NULL,
5277 -- p_total_required IN NUMBER Default NULL,
5278 -- p_assigned_units IN NUMBER Default NULL,
5279 -- p_autocharge_type_code IN NUMBER Default NULL,
5280 -- p_standard_rate_flag_code IN NUMBER Default NULL,
5281 -- p_applied_resource_units IN NUMBER Default NULL,
5282 -- p_applied_resource_value IN NUMBER Default NULL,
5283 -- p_inventory_item_id IN NUMBER Default NULL,
5284 -- p_scheduled_quantity IN NUMBER Default NULL,
5285 -- p_scheduled_date IN DATE Default NULL,
5286 -- p_mrp_net_flag IN NUMBER Default NULL,
5287 -- p_quantity_per_assembly IN NUMBER Default NULL,
5288 -- p_required_quantity IN NUMBER Default NULL,
5289 -- p_supply_locator_id IN NUMBER Default NULL,
5290 -- p_supply_subinventory IN NUMBER Default NULL,
5291 -- p_date_required IN DATE Default NULL,
5292 -- p_operation_type_code IN VARCHAR2 Default NULL,
5293 -- p_sched_start_date IN DATE Default NULL,
5294 -- p_res_sched_end_date IN DATE Default NULL,
5295 -- p_op_scheduled_start_date IN DATE Default NULL,
5296 -- p_op_scheduled_end_date IN DATE Default NULL,
5297 -- p_op_actual_start_date IN DATE Default NULL,
5298 -- p_op_actual_end_date IN DATE Default NULL,
5299 -- p_attribute_category IN VARCHAR2 Default NULL,
5300 -- p_attribute1 IN VARCHAR2 Default NULL
5301 -- p_attribute2 IN VARCHAR2 Default NULL
5302 -- p_attribute3 IN VARCHAR2 Default NULL
5303 -- p_attribute4 IN VARCHAR2 Default NULL
5304 -- p_attribute5 IN VARCHAR2 Default NULL
5305 -- p_attribute6 IN VARCHAR2 Default NULL
5306 -- p_attribute7 IN VARCHAR2 Default NULL
5307 -- p_attribute8 IN VARCHAR2 Default NULL
5308 -- p_attribute9 IN VARCHAR2 Default NULL
5309 -- p_attribute10 IN VARCHAR2 Default NULL
5310 -- p_attribute11 IN VARCHAR2 Default NULL
5311 -- p_attribute12 IN VARCHAR2 Default NULL
5312 -- p_attribute13 IN VARCHAR2 Default NULL
5313 -- p_attribute14 IN VARCHAR2 Default NULL
5314 -- p_attribute15 IN VARCHAR2 Default NULL
5315 --
5316 -- Version :
5317 -- Initial Version 1.0
5318 --
5319 -- End of Comments.
5320 --
5321 PROCEDURE Log_Transaction_Record
5322 ( p_wo_operation_txn_id IN NUMBER,
5323 p_object_version_number IN NUMBER,
5324 p_last_update_date IN DATE,
5325 p_last_updated_by IN NUMBER,
5326 p_creation_date IN DATE,
5327 p_created_by IN NUMBER,
5328 p_last_update_login IN NUMBER,
5329 p_load_type_code IN NUMBER,
5330 p_transaction_type_code IN NUMBER,
5331 p_workorder_operation_id IN NUMBER := NULL,
5332 p_operation_resource_id IN NUMBER := NULL,
5333 p_schedule_material_id IN NUMBER := NULL,
5334 p_bom_resource_id IN NUMBER := NULL,
5335 p_cost_basis_code IN NUMBER := NULL,
5336 p_total_required IN NUMBER := NULL,
5337 p_assigned_units IN NUMBER := NULL,
5338 p_autocharge_type_code IN NUMBER := NULL,
5339 p_standard_rate_flag_code IN NUMBER := NULL,
5340 p_applied_resource_units IN NUMBER := NULL,
5341 p_applied_resource_value IN NUMBER := NULL,
5342 p_inventory_item_id IN NUMBER := NULL,
5343 p_scheduled_quantity IN NUMBER := NULL,
5344 p_scheduled_date IN DATE := NULL,
5345 p_mrp_net_flag IN NUMBER := NULL,
5346 p_quantity_per_assembly IN NUMBER := NULL,
5347 p_required_quantity IN NUMBER := NULL,
5348 p_supply_locator_id IN NUMBER := NULL,
5349 p_supply_subinventory IN NUMBER := NULL,
5350 p_date_required IN DATE := NULL,
5351 p_operation_type_code IN VARCHAR2 := NULL,
5352 p_res_sched_start_date IN DATE := NULL,
5353 p_res_sched_end_date IN DATE := NULL,
5354 p_op_scheduled_start_date IN DATE := NULL,
5355 p_op_scheduled_end_date IN DATE := NULL,
5356 p_op_actual_start_date IN DATE := NULL,
5357 p_op_actual_end_date IN DATE := NULL,
5358 p_attribute_category IN VARCHAR2 := NULL,
5359 p_attribute1 IN VARCHAR2 := NULL,
5360 p_attribute2 IN VARCHAR2 := NULL,
5361 p_attribute3 IN VARCHAR2 := NULL,
5362 p_attribute4 IN VARCHAR2 := NULL,
5363 p_attribute5 IN VARCHAR2 := NULL,
5364 p_attribute6 IN VARCHAR2 := NULL,
5365 p_attribute7 IN VARCHAR2 := NULL,
5366 p_attribute8 IN VARCHAR2 := NULL,
5367 p_attribute9 IN VARCHAR2 := NULL,
5368 p_attribute10 IN VARCHAR2 := NULL,
5369 p_attribute11 IN VARCHAR2 := NULL,
5370 p_attribute12 IN VARCHAR2 := NULL,
5371 p_attribute13 IN VARCHAR2 := NULL,
5372 p_attribute14 IN VARCHAR2 := NULL,
5373 p_attribute15 IN VARCHAR2 := NULL)
5374 IS
5375 BEGIN
5376 --
5377 INSERT INTO AHL_WO_OPERATIONS_TXNS
5378 ( wo_operation_txn_id ,
5379 object_version_number ,
5380 last_update_date ,
5381 last_updated_by ,
5382 creation_date ,
5383 created_by ,
5384 last_update_login ,
5385 load_type_code ,
5386 transaction_type_code ,
5387 workorder_operation_id ,
5388 operation_resource_id ,
5389 schedule_material_id ,
5390 bom_resource_id ,
5391 cost_basis_code ,
5392 total_required ,
5393 assigned_units ,
5394 autocharge_type_code ,
5395 standard_rate_flag_code ,
5396 applied_resource_units ,
5397 applied_resource_value ,
5398 inventory_item_id ,
5399 scheduled_quantity ,
5400 scheduled_date ,
5401 mrp_net_flag ,
5402 quantity_per_assembly ,
5403 required_quantity ,
5404 supply_locator_id ,
5405 supply_subinventory ,
5406 date_required ,
5407 operation_type_code ,
5408 res_sched_start_date ,
5409 res_sched_end_date ,
5410 op_scheduled_start_date ,
5411 op_scheduled_end_date ,
5412 op_actual_start_date ,
5413 op_actual_end_date ,
5414 attribute_category ,
5415 attribute1 ,
5416 attribute2 ,
5417 attribute3 ,
5418 attribute4 ,
5419 attribute5 ,
5420 attribute6 ,
5421 attribute7 ,
5422 attribute8 ,
5423 attribute9 ,
5424 attribute10 ,
5425 attribute11 ,
5426 attribute12 ,
5427 attribute13 ,
5428 attribute14 ,
5429 attribute15
5430 )
5431 VALUES
5432 (
5433 p_wo_operation_txn_id ,
5434 p_object_version_number ,
5435 p_last_update_date ,
5436 p_last_updated_by ,
5437 p_creation_date ,
5438 p_created_by ,
5439 p_last_update_login ,
5440 p_load_type_code ,
5441 p_transaction_type_code ,
5442 p_workorder_operation_id ,
5443 p_operation_resource_id ,
5444 p_schedule_material_id ,
5445 p_bom_resource_id ,
5446 p_cost_basis_code ,
5447 p_total_required ,
5448 p_assigned_units ,
5449 p_autocharge_type_code ,
5450 p_standard_rate_flag_code ,
5451 p_applied_resource_units ,
5452 p_applied_resource_value ,
5453 p_inventory_item_id ,
5454 p_scheduled_quantity ,
5455 p_scheduled_date ,
5456 p_mrp_net_flag ,
5457 p_quantity_per_assembly ,
5458 p_required_quantity ,
5459 p_supply_locator_id ,
5460 p_supply_subinventory ,
5461 p_date_required ,
5462 p_operation_type_code ,
5463 p_res_sched_start_date ,
5464 p_res_sched_end_date ,
5465 p_op_scheduled_start_date ,
5466 p_op_scheduled_end_date ,
5467 p_op_actual_start_date ,
5468 p_op_actual_end_date ,
5469 p_attribute_category ,
5470 p_attribute1 ,
5471 p_attribute2 ,
5472 p_attribute3 ,
5473 p_attribute4 ,
5474 p_attribute5 ,
5475 p_attribute6 ,
5476 p_attribute7 ,
5477 p_attribute8 ,
5478 p_attribute9 ,
5479 p_attribute10 ,
5480 p_attribute11 ,
5481 p_attribute12 ,
5482 p_attribute13 ,
5483 p_attribute14 ,
5484 p_attribute15
5485 );
5486 END log_transaction_record;
5487 --
5488 function GET_ISSUED_QTY(P_ORG_ID IN NUMBER, P_ITEM_ID IN NUMBER, P_WORKORDER_OP_ID IN NUMBER) RETURN NUMBER
5489 IS
5490 issued NUMBER;
5491 CURSOR Q1(p_org_id NUMBER, p_itme_Id NUMBER,p_wo_op_id in NUMBER) IS
5492 SELECT SUM(QUANTITY) FROM AHL_WORKORDER_MTL_TXNS
5493 WHERE ORGANIZATION_ID = p_org_id
5494 AND INVENTORY_ITEM_ID = p_item_id
5495 AND WORKORDER_OPERATION_ID = p_wo_op_id
5496 AND TRANSACTION_TYPE_ID = 35;
5497 BEGIN
5498 OPEN Q1(P_ORG_ID,P_ITEM_ID, P_WORKORDER_OP_ID);
5499 FETCH Q1 INTO issued;
5500 IF(Q1%NOTFOUND) THEN
5501 issued := 0;
5502 END IF;
5503 CLOSE Q1;
5504 return issued;
5505 END GET_ISSUED_QTY;
5506 ---JKJAIN FP ER # 6436303
5507 -------------------------------------------------------------------------------------
5508 -- Function for returning net quantity of material available with
5509 -- a workorder.
5510 -- Net Total Quantity = Total Quantity Issued - Total quantity returned
5511 -- Balaji added this function for OGMA ER # 5948868.
5512 --------------------------------------------------------------------------------------
5513 FUNCTION GET_NET_QTY(
5514 P_ORG_ID IN NUMBER,
5515 P_ITEM_ID IN NUMBER,
5516 P_WORKORDER_OP_ID IN NUMBER
5517 )
5518 RETURN NUMBER
5519 IS
5520 -- Local variables
5521 l_issue_qty NUMBER;
5522 l_rtn_qty NUMBER;
5523 l_net_qty NUMBER;
5524 -- Cursors
5525 -- cursor for getting total issued quantity
5526 CURSOR c_get_issue_qty(c_org_id NUMBER, c_itme_Id NUMBER,c_wo_op_id in NUMBER)
5527 IS
5528 SELECT SUM(QUANTITY)
5529 FROM AHL_WORKORDER_MTL_TXNS
5530 WHERE ORGANIZATION_ID = c_org_id
5531 AND INVENTORY_ITEM_ID = c_itme_Id
5532 AND WORKORDER_OPERATION_ID = c_wo_op_id
5533 AND TRANSACTION_TYPE_ID = 35; -- Mtl Issue Txn
5534 -- cursor for getting total returned quantity
5535 CURSOR c_get_rtn_qty(c_org_id NUMBER, c_itme_Id NUMBER,c_wo_op_id in NUMBER)
5536 IS
5537 SELECT SUM(QUANTITY)
5538 FROM AHL_WORKORDER_MTL_TXNS
5539 WHERE ORGANIZATION_ID = c_org_id
5540 AND INVENTORY_ITEM_ID = c_itme_Id
5541 AND WORKORDER_OPERATION_ID = c_wo_op_id
5542 AND TRANSACTION_TYPE_ID = 43; -- Mtl Rtn Txn
5543 BEGIN
5544 OPEN c_get_issue_qty(p_org_id, p_item_id, p_workorder_op_id);
5545 FETCH c_get_issue_qty INTO l_issue_qty;
5546 CLOSE c_get_issue_qty;
5547 IF l_issue_qty IS NULL
5548 THEN
5549 l_issue_qty := 0;
5550 END IF;
5551 OPEN c_get_rtn_qty(p_org_id, p_item_id, p_workorder_op_id);
5552 FETCH c_get_rtn_qty INTO l_rtn_qty;
5553 CLOSE c_get_rtn_qty;
5554 IF l_rtn_qty IS NULL
5555 THEN
5556 l_rtn_qty := 0;
5557 END IF;
5558 l_net_qty := l_issue_qty - l_rtn_qty;
5559 -- JKJAIN BUG # 7587902
5560 -- IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5561 -- fnd_log.string
5562 -- (
5563 -- fnd_log.level_statement,
5564 -- 'ahl.plsql.AHL_PP_MATERIALS_PVT.GET_NET_QTY',
5565 -- 'l_net_qty -> ' || l_net_qty
5566 -- );
5567 -- END IF;
5568 return l_net_qty;
5569 END GET_NET_QTY;
5570 --
5571 -- Start of Comments --
5572 -- Procedure name : Process_Wo_Op_Materials
5573 -- Type : Private
5574 -- Function : Procedure to Process Requested materials defined at Route/Operation/Dispostion
5575 --
5576 -- Pre-reqs :
5577 -- Parameters :
5578 --
5579 -- Standard IN Parameters :
5580 -- p_api_version IN NUMBER Required
5581 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
5582 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
5583 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
5584 -- Based on this flag, the API will set the default attributes.
5585 -- Standard OUT Parameters :
5586 -- x_return_status OUT VARCHAR2 Required
5587 -- x_msg_count OUT NUMBER Required
5588 -- x_msg_data OUT VARCHAR2 Required
5589 --
5590 -- Process_Material Parameters :
5591 -- p_prd_wooperation_tbl IN AHL_PRD_WORKORDER_PVT.Prd_Workoper_Tbl,
5592 -- x_req_material_tbl OUT Ahl_Pp_Material_Pvt.Req_Material_Tbl_Type,Required
5593 -- List of Required materials for a job
5594 --
5595 PROCEDURE Process_Wo_Op_Materials (
5596 p_api_version IN NUMBER,
5597 p_init_msg_list IN VARCHAR2 := Fnd_Api.G_FALSE,
5598 p_commit IN VARCHAR2 := Fnd_Api.G_FALSE,
5599 p_validation_level IN NUMBER := Fnd_Api.G_VALID_LEVEL_FULL,
5600 p_operation_flag IN VARCHAR2,
5601 p_prd_wooperation_tbl IN AHL_PRD_OPERATIONS_PVT.Prd_Operation_Tbl,
5602 x_req_material_tbl OUT NOCOPY Req_Material_Tbl_Type,
5603 x_return_status OUT NOCOPY VARCHAR2,
5604 x_msg_count OUT NOCOPY NUMBER,
5605 x_msg_data OUT NOCOPY VARCHAR2)
5606 IS
5607
5608 /* MANESING::NR Analysis, 03-Jun-2011, modified cursor query to include an outer join with table AHL_RT_OPER_MATERIALS
5609 * instead of previous inner join. This is required since material requirements for Stage workorders do not come
5610 * directly from routes.
5611 */
5612 CURSOR Sche_Mat_Cur(c_visit_task_id IN NUMBER)
5613 IS
5614 SELECT ASM.scheduled_material_id,
5615 ASM.visit_id,visit_task_id,
5616 ASM.inventory_item_id,
5617 ASM.organization_id,
5618 ASM.requested_date,uom,
5619 ASM.rt_oper_material_id,
5620 ASM.operation_code,
5621 ASM.operation_sequence,
5622 ASM.requested_quantity,
5623 ASM.workorder_operation_id,
5624 ASM.position_path_id,
5625 ASM.relationship_id,
5626 ASM.mr_route_id,
5627 ASM.material_request_type,
5628 ASM.status,
5629 -- Bug 8569097
5630 ASM.attribute_category,
5631 ASM.attribute1,
5632 ASM.attribute2,
5633 ASM.attribute3,
5634 ASM.attribute4,
5635 ASM.attribute5,
5636 ASM.attribute6,
5637 ASM.attribute7,
5638 ASM.attribute8,
5639 ASM.attribute9,
5640 ASM.attribute10,
5641 ASM.attribute11,
5642 ASM.attribute12,
5643 ASM.attribute13,
5644 ASM.attribute14,
5645 ASM.attribute15
5646 FROM AHL_SCHEDULE_MATERIALS ASM,
5647 AHL_RT_OPER_MATERIALS ARM
5648 WHERE ASM.rt_oper_material_id = ARM.RT_OPER_MATERIAL_ID(+)
5649 AND ASM.visit_task_id = C_VISIT_TASK_ID
5650 AND ASM.requested_quantity > 0
5651 AND ASM.STATUS IN ('ACTIVE','IN-SERVICE');
5652 --
5653 CURSOR Visit_Task_Cur(c_workorder_id IN NUMBER)
5654 IS
5655 SELECT a.visit_id,
5656 visit_task_id,
5657 organization_id
5658 FROM ahl_workorders A,
5659 ahl_visits_b b
5660 WHERE workorder_id = c_workorder_id
5661 AND a.visit_id = b.visit_id;
5662 CURSOR Material_Detail_Cur (c_operation_id IN NUMBER,
5663 c_operation_sequence IN NUMBER)
5664 IS
5665 SELECT Scheduled_material_id
5666 FROM AHL_SCHEDULE_MATERIALS
5667 WHERE WORKORDER_OPERATION_ID = c_operation_id
5668 AND OPERATION_SEQUENCE = c_operation_sequence;
5669 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_WO_OP_MATERIALS';
5670 l_api_version CONSTANT NUMBER := 1.0;
5671 l_msg_count NUMBER;
5672 l_return_status VARCHAR2(1);
5673 l_msg_data VARCHAR2(2000);
5674 --
5675 l_prd_wooperation_tbl AHL_PRD_OPERATIONS_PVT.Prd_Operation_Tbl := p_prd_wooperation_tbl;
5676 l_Sche_Mat_Rec Sche_Mat_Cur%ROWTYPE;
5677 l_Visit_Task_Rec Visit_Task_Cur%ROWTYPE;
5678 l_req_material_tbl Req_Material_Tbl_Type;
5679 l_scheduled_material_id NUMBER;
5680 l_idx NUMBER;
5681 dff_default_values dff_default_values_type;
5682 BEGIN
5683 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5684 fnd_log.string
5685 (
5686 fnd_log.level_procedure,
5687 'ahl.plsql.AHL_PP_MATERIALS_PVT.Process_Wo_Op_Materials',
5688 'At the start of PLSQL procedure'
5689 );
5690 END IF;
5691 --------------------Initialize ----------------------------------
5692 -- Standard Start of API savepoint
5693 SAVEPOINT Process_Wo_Op_Materials;
5694 -- Standard call to check for call compatibility.
5695 IF FND_API.to_boolean(p_init_msg_list)
5696 THEN
5697 FND_MSG_PUB.initialize;
5698 END IF;
5699 -- Initialize API return status to success
5700 x_return_status := FND_API.G_RET_STS_SUCCESS;
5701 -- Initialize message list if p_init_msg_list is set to TRUE.
5702 IF NOT FND_API.COMPATIBLE_API_CALL(p_api_version,
5703 p_api_version,
5704 l_api_name,G_PKG_NAME)
5705 THEN
5706 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5707 END IF;
5708 --
5709 IF l_prd_wooperation_tbl.COUNT > 0 THEN
5710 FOR i IN l_prd_wooperation_tbl.FIRST..l_prd_wooperation_tbl.LAST
5711 LOOP
5712 --
5713 IF (p_operation_flag = 'C' AND
5714 l_prd_wooperation_tbl(i).workorder_operation_id IS NOT NULL AND
5715 l_prd_wooperation_tbl(i).workorder_operation_id <> FND_API.G_MISS_NUM )
5716 THEN
5717 --Get visit id, visit task id
5718 OPEN Visit_Task_Cur(l_prd_wooperation_tbl(i).workorder_id);
5719 FETCH Visit_Task_Cur INTO l_Visit_Task_Rec;
5720 CLOSE Visit_Task_Cur;
5721 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5722 fnd_log.string
5723 (
5724 fnd_log.level_statement,
5725 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
5726 'Material Requirement for workorder id: ' || l_prd_wooperation_tbl(i).workorder_id
5727 );
5728 fnd_log.string
5729 (
5730 fnd_log.level_statement,
5731 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
5732 'Material Requirement for workorder operation id: ' || l_prd_wooperation_tbl(i).workorder_operation_id
5733 );
5734 fnd_log.string
5735 (
5736 fnd_log.level_statement,
5737 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
5738 'Material Requirement for workorder operation seq: ' || l_prd_wooperation_tbl(i).operation_sequence_num
5739 );
5740 END IF;
5741 --Check for one operation sequence exists means materials exist at route only
5742 IF (l_prd_wooperation_tbl(i).operation_sequence_num IS NOT NULL AND
5743 l_prd_wooperation_tbl(i).operation_sequence_num <> FND_API.G_MISS_NUM)
5744 THEN
5745 --
5746 l_idx := 0;
5747 FOR l_Sche_Mat_Rec IN Sche_Mat_Cur(l_Visit_Task_Rec.visit_task_id)
5748 LOOP
5749 IF (l_Sche_Mat_Rec.operation_sequence IS NULL AND
5750 l_Sche_Mat_Rec.workorder_operation_id IS NULL )THEN
5751 l_req_material_tbl(l_idx).workorder_id := l_prd_wooperation_tbl(i).workorder_id;
5752 l_req_material_tbl(l_idx).organization_id := l_Visit_Task_Rec.organization_id;
5753 l_req_material_tbl(l_idx).workorder_operation_id := l_prd_wooperation_tbl(i).workorder_operation_id;
5754 l_req_material_tbl(l_idx).operation_sequence := l_prd_wooperation_tbl(i).operation_sequence_num;
5755 l_req_material_tbl(l_idx).inventory_item_id := l_Sche_Mat_Rec.inventory_item_id;
5756 l_req_material_tbl(l_idx).schedule_material_id := l_Sche_Mat_Rec.scheduled_material_id;
5757 l_req_material_tbl(l_idx).requested_date := l_prd_wooperation_tbl(i).scheduled_start_date;
5758 l_req_material_tbl(l_idx).rt_oper_material_id := l_Sche_Mat_Rec.rt_oper_material_id;
5759 l_req_material_tbl(l_idx).requested_quantity := l_Sche_Mat_Rec.requested_quantity;
5760 l_req_material_tbl(l_idx).uom_code := l_Sche_Mat_Rec.uom;
5761 -- Fix for Bug 8569097
5762 /* get_dff_default_values
5763 (
5764 p_req_material_rec => l_req_material_tbl(l_idx),
5765 flex_fields_defaults => dff_default_values
5766 );
5767 l_req_material_tbl(l_idx).attribute_category := dff_default_values.attribute_category;
5768 l_req_material_tbl(l_idx).attribute1 := dff_default_values.attribute1;
5769 l_req_material_tbl(l_idx).attribute2 := dff_default_values.attribute2;
5770 l_req_material_tbl(l_idx).attribute3 := dff_default_values.attribute3;
5771 l_req_material_tbl(l_idx).attribute4 := dff_default_values.attribute4;
5772 l_req_material_tbl(l_idx).attribute5 := dff_default_values.attribute5;
5773 l_req_material_tbl(l_idx).attribute6 := dff_default_values.attribute6;
5774 l_req_material_tbl(l_idx).attribute7 := dff_default_values.attribute7;
5775 l_req_material_tbl(l_idx).attribute8 := dff_default_values.attribute8;
5776 l_req_material_tbl(l_idx).attribute9 := dff_default_values.attribute9;
5777 l_req_material_tbl(l_idx).attribute10 := dff_default_values.attribute10;
5778 l_req_material_tbl(l_idx).attribute11 := dff_default_values.attribute11;
5779 l_req_material_tbl(l_idx).attribute12 := dff_default_values.attribute12;
5780 l_req_material_tbl(l_idx).attribute13 := dff_default_values.attribute13;
5781 l_req_material_tbl(l_idx).attribute14 := dff_default_values.attribute14;
5782 l_req_material_tbl(l_idx).attribute15 := dff_default_values.attribute15;
5783 */
5784 l_req_material_tbl(l_idx).attribute_category := l_Sche_Mat_Rec.attribute_category;
5785 l_req_material_tbl(l_idx).attribute1 := l_Sche_Mat_Rec.attribute1;
5786 l_req_material_tbl(l_idx).attribute2 := l_Sche_Mat_Rec.attribute2;
5787 l_req_material_tbl(l_idx).attribute3 := l_Sche_Mat_Rec.attribute3;
5788 l_req_material_tbl(l_idx).attribute4 := l_Sche_Mat_Rec.attribute4;
5789 l_req_material_tbl(l_idx).attribute5 := l_Sche_Mat_Rec.attribute5;
5790 l_req_material_tbl(l_idx).attribute6 := l_Sche_Mat_Rec.attribute6;
5791 l_req_material_tbl(l_idx).attribute7 := l_Sche_Mat_Rec.attribute7;
5792 l_req_material_tbl(l_idx).attribute8 := l_Sche_Mat_Rec.attribute8;
5793 l_req_material_tbl(l_idx).attribute9 := l_Sche_Mat_Rec.attribute9;
5794 l_req_material_tbl(l_idx).attribute10 := l_Sche_Mat_Rec.attribute10;
5795 l_req_material_tbl(l_idx).attribute11 := l_Sche_Mat_Rec.attribute11;
5796 l_req_material_tbl(l_idx).attribute12 := l_Sche_Mat_Rec.attribute12;
5797 l_req_material_tbl(l_idx).attribute13 := l_Sche_Mat_Rec.attribute13;
5798 l_req_material_tbl(l_idx).attribute14 := l_Sche_Mat_Rec.attribute14;
5799 l_req_material_tbl(l_idx).attribute15 := l_Sche_Mat_Rec.attribute15;
5800 -- fix for bug# 5549135.
5801 --l_req_material_tbl(l_idx).mrp_net_flag := 1;
5802 l_req_material_tbl(l_idx).mrp_net_flag := 2;
5803 -- Update with workorder operation details
5804 UPDATE ahl_schedule_materials
5805 SET workorder_operation_id = l_prd_wooperation_tbl(i).workorder_operation_id,
5806 operation_sequence = l_prd_wooperation_tbl(i).operation_sequence_num,
5807 -- AnRaj: truncating Requested Date for Material Requirement based on discussions with PM
5808 requested_date = trunc(l_prd_wooperation_tbl(i).scheduled_start_date),
5809 organization_id = l_Visit_Task_Rec.organization_id,
5810 object_version_number = object_version_number + 1,
5811 last_update_date = sysdate,
5812 last_updated_by = fnd_global.user_id,
5813 last_update_login = fnd_global.login_id,
5814 ATTRIBUTE_CATEGORY = l_req_material_tbl(l_idx).attribute_category,
5815 ATTRIBUTE1 = l_req_material_tbl(l_idx).attribute1,
5816 ATTRIBUTE2 = l_req_material_tbl(l_idx).attribute2,
5817 ATTRIBUTE3 = l_req_material_tbl(l_idx).attribute3,
5818 ATTRIBUTE4 = l_req_material_tbl(l_idx).attribute4,
5819 ATTRIBUTE5 = l_req_material_tbl(l_idx).attribute5,
5820 ATTRIBUTE6 = l_req_material_tbl(l_idx).attribute6,
5821 ATTRIBUTE7 = l_req_material_tbl(l_idx).attribute7,
5822 ATTRIBUTE8 = l_req_material_tbl(l_idx).attribute8,
5823 ATTRIBUTE9 = l_req_material_tbl(l_idx).attribute9,
5824 ATTRIBUTE10 = l_req_material_tbl(l_idx).attribute10,
5825 ATTRIBUTE11 = l_req_material_tbl(l_idx).attribute11,
5826 ATTRIBUTE12 = l_req_material_tbl(l_idx).attribute12,
5827 ATTRIBUTE13 = l_req_material_tbl(l_idx).attribute13,
5828 ATTRIBUTE14 = l_req_material_tbl(l_idx).attribute14,
5829 ATTRIBUTE15 = l_req_material_tbl(l_idx).attribute15
5830 WHERE scheduled_material_id = l_Sche_Mat_Rec.scheduled_material_id;
5831 ELSIF (l_prd_wooperation_tbl(i).operation_sequence_num = l_Sche_Mat_Rec.operation_sequence
5832 AND l_Sche_Mat_Rec.workorder_operation_id IS NULL) THEN
5833 l_req_material_tbl(l_idx).workorder_id := l_prd_wooperation_tbl(i).workorder_id;
5834 l_req_material_tbl(l_idx).organization_id := l_Visit_Task_Rec.organization_id;
5835 l_req_material_tbl(l_idx).workorder_operation_id := l_prd_wooperation_tbl(i).workorder_operation_id;
5836 l_req_material_tbl(l_idx).operation_sequence := l_prd_wooperation_tbl(i).operation_sequence_num;
5837 l_req_material_tbl(l_idx).inventory_item_id := l_Sche_Mat_Rec.inventory_item_id;
5838 l_req_material_tbl(l_idx).schedule_material_id := l_Sche_Mat_Rec.scheduled_material_id;
5839 l_req_material_tbl(l_idx).requested_date := l_prd_wooperation_tbl(i).scheduled_start_date;
5840 l_req_material_tbl(l_idx).rt_oper_material_id := l_Sche_Mat_Rec.rt_oper_material_id;
5841 l_req_material_tbl(l_idx).requested_quantity := l_Sche_Mat_Rec.requested_quantity;
5842 l_req_material_tbl(l_idx).uom_code := l_Sche_Mat_Rec.uom;
5843 -- fix for bug# 5549135
5844 --l_req_material_tbl(l_idx).mrp_net_flag := 1;
5845 l_req_material_tbl(l_idx).mrp_net_flag := 2;
5846 -- Fix for Bug 8569097
5847 /*
5848 get_dff_default_values
5849 (
5850 p_req_material_rec => l_req_material_tbl(l_idx),
5851 flex_fields_defaults => dff_default_values
5852 );
5853 l_req_material_tbl(l_idx).attribute_category := dff_default_values.attribute_category;
5854 l_req_material_tbl(l_idx).attribute1 := dff_default_values.attribute1;
5855 l_req_material_tbl(l_idx).attribute2 := dff_default_values.attribute2;
5856 l_req_material_tbl(l_idx).attribute3 := dff_default_values.attribute3;
5857 l_req_material_tbl(l_idx).attribute4 := dff_default_values.attribute4;
5858 l_req_material_tbl(l_idx).attribute5 := dff_default_values.attribute5;
5859 l_req_material_tbl(l_idx).attribute6 := dff_default_values.attribute6;
5860 l_req_material_tbl(l_idx).attribute7 := dff_default_values.attribute7;
5861 l_req_material_tbl(l_idx).attribute8 := dff_default_values.attribute8;
5862 l_req_material_tbl(l_idx).attribute9 := dff_default_values.attribute9;
5863 l_req_material_tbl(l_idx).attribute10 := dff_default_values.attribute10;
5864 l_req_material_tbl(l_idx).attribute11 := dff_default_values.attribute11;
5865 l_req_material_tbl(l_idx).attribute12 := dff_default_values.attribute12;
5866 l_req_material_tbl(l_idx).attribute13 := dff_default_values.attribute13;
5867 l_req_material_tbl(l_idx).attribute14 := dff_default_values.attribute14;
5868 l_req_material_tbl(l_idx).attribute15 := dff_default_values.attribute15;
5869 */
5870 l_req_material_tbl(l_idx).attribute_category := l_Sche_Mat_Rec.attribute_category;
5871 l_req_material_tbl(l_idx).attribute1 := l_Sche_Mat_Rec.attribute1;
5872 l_req_material_tbl(l_idx).attribute2 := l_Sche_Mat_Rec.attribute2;
5873 l_req_material_tbl(l_idx).attribute3 := l_Sche_Mat_Rec.attribute3;
5874 l_req_material_tbl(l_idx).attribute4 := l_Sche_Mat_Rec.attribute4;
5875 l_req_material_tbl(l_idx).attribute5 := l_Sche_Mat_Rec.attribute5;
5876 l_req_material_tbl(l_idx).attribute6 := l_Sche_Mat_Rec.attribute6;
5877 l_req_material_tbl(l_idx).attribute7 := l_Sche_Mat_Rec.attribute7;
5878 l_req_material_tbl(l_idx).attribute8 := l_Sche_Mat_Rec.attribute8;
5879 l_req_material_tbl(l_idx).attribute9 := l_Sche_Mat_Rec.attribute9;
5880 l_req_material_tbl(l_idx).attribute10 := l_Sche_Mat_Rec.attribute10;
5881 l_req_material_tbl(l_idx).attribute11 := l_Sche_Mat_Rec.attribute11;
5882 l_req_material_tbl(l_idx).attribute12 := l_Sche_Mat_Rec.attribute12;
5883 l_req_material_tbl(l_idx).attribute13 := l_Sche_Mat_Rec.attribute13;
5884 l_req_material_tbl(l_idx).attribute14 := l_Sche_Mat_Rec.attribute14;
5885 l_req_material_tbl(l_idx).attribute15 := l_Sche_Mat_Rec.attribute15;
5886 --Update with operation details
5887 UPDATE ahl_schedule_materials
5888 SET workorder_operation_id = l_prd_wooperation_tbl(i).workorder_operation_id,
5889 object_version_number = object_version_number + 1,
5890 -- AnRaj: truncating Requested Date for Material Requirement based on discussions with PM
5891 requested_date = trunc(l_prd_wooperation_tbl(i).scheduled_start_date),
5892 organization_id = l_Visit_Task_Rec.organization_id,
5893 last_update_date = sysdate,
5894 last_updated_by = fnd_global.user_id,
5895 last_update_login = fnd_global.login_id,
5896 ATTRIBUTE_CATEGORY = l_req_material_tbl(l_idx).attribute_category,
5897 ATTRIBUTE1 = l_req_material_tbl(l_idx).attribute1,
5898 ATTRIBUTE2 = l_req_material_tbl(l_idx).attribute2,
5899 ATTRIBUTE3 = l_req_material_tbl(l_idx).attribute3,
5900 ATTRIBUTE4 = l_req_material_tbl(l_idx).attribute4,
5901 ATTRIBUTE5 = l_req_material_tbl(l_idx).attribute5,
5902 ATTRIBUTE6 = l_req_material_tbl(l_idx).attribute6,
5903 ATTRIBUTE7 = l_req_material_tbl(l_idx).attribute7,
5904 ATTRIBUTE8 = l_req_material_tbl(l_idx).attribute8,
5905 ATTRIBUTE9 = l_req_material_tbl(l_idx).attribute9,
5906 ATTRIBUTE10 = l_req_material_tbl(l_idx).attribute10,
5907 ATTRIBUTE11 = l_req_material_tbl(l_idx).attribute11,
5908 ATTRIBUTE12 = l_req_material_tbl(l_idx).attribute12,
5909 ATTRIBUTE13 = l_req_material_tbl(l_idx).attribute13,
5910 ATTRIBUTE14 = l_req_material_tbl(l_idx).attribute14,
5911 ATTRIBUTE15 = l_req_material_tbl(l_idx).attribute15
5912 WHERE scheduled_material_id = l_Sche_Mat_Rec.scheduled_material_id;
5913 END IF;
5914 l_idx := l_idx + 1;
5915 END LOOP;
5916 END IF; --COUNT
5917 END IF; --dml operation
5918 END LOOP;
5919 END IF;
5920 --Modified by srin to remove the replave percent check for Bug #4007076
5921 --Assign the derived values
5922 IF l_req_material_tbl.COUNT > 0 THEN
5923 FOR j IN l_req_material_tbl.FIRST..l_req_material_tbl.LAST
5924 LOOP
5925 x_req_material_tbl(j).workorder_id := l_req_material_tbl(j).workorder_id;
5926 x_req_material_tbl(j).organization_id := l_req_material_tbl(j).organization_id;
5927 x_req_material_tbl(j).workorder_operation_id := l_req_material_tbl(j).workorder_operation_id;
5928 x_req_material_tbl(j).operation_sequence := l_req_material_tbl(j).operation_sequence;
5929 x_req_material_tbl(j).inventory_item_id := l_req_material_tbl(j).inventory_item_id;
5930 x_req_material_tbl(j).schedule_material_id := l_req_material_tbl(j).schedule_material_id;
5931 x_req_material_tbl(j).requested_date := l_req_material_tbl(j).requested_date;
5932 x_req_material_tbl(j).rt_oper_material_id := l_req_material_tbl(j).rt_oper_material_id;
5933 x_req_material_tbl(j).requested_quantity := l_req_material_tbl(j).requested_quantity;
5934 x_req_material_tbl(j).uom_code := l_req_material_tbl(j).uom_code;
5935 x_req_material_tbl(j).mrp_net_flag := l_req_material_tbl(j).mrp_net_flag;
5936 x_req_material_tbl(j).operation_flag := 'C';
5937 x_req_material_tbl(j).ATTRIBUTE_CATEGORY := l_req_material_tbl(j).attribute_category;
5938 x_req_material_tbl(j).ATTRIBUTE1 := l_req_material_tbl(j).attribute1;
5939 x_req_material_tbl(j).ATTRIBUTE2 := l_req_material_tbl(j).attribute2;
5940 x_req_material_tbl(j).ATTRIBUTE3 := l_req_material_tbl(j).attribute3;
5941 x_req_material_tbl(j).ATTRIBUTE4 := l_req_material_tbl(j).attribute4;
5942 x_req_material_tbl(j).ATTRIBUTE5 := l_req_material_tbl(j).attribute5;
5943 x_req_material_tbl(j).ATTRIBUTE6 := l_req_material_tbl(j).attribute6;
5944 x_req_material_tbl(j).ATTRIBUTE7 := l_req_material_tbl(j).attribute7;
5945 x_req_material_tbl(j).ATTRIBUTE8 := l_req_material_tbl(j).attribute8;
5946 x_req_material_tbl(j).ATTRIBUTE9 := l_req_material_tbl(j).attribute9;
5947 x_req_material_tbl(j).ATTRIBUTE10 := l_req_material_tbl(j).attribute10;
5948 x_req_material_tbl(j).ATTRIBUTE11 := l_req_material_tbl(j).attribute11;
5949 x_req_material_tbl(j).ATTRIBUTE12 := l_req_material_tbl(j).attribute12;
5950 x_req_material_tbl(j).ATTRIBUTE13 := l_req_material_tbl(j).attribute13;
5951 x_req_material_tbl(j).ATTRIBUTE14 := l_req_material_tbl(j).attribute14;
5952 x_req_material_tbl(j).ATTRIBUTE15 := l_req_material_tbl(j).attribute15;
5953 END LOOP;
5954 END IF;
5955 --Sync up process to update requested date if changed from original date
5956 IF l_prd_wooperation_tbl.COUNT > 0 THEN
5957 FOR i IN l_prd_wooperation_tbl.FIRST..l_prd_wooperation_tbl.LAST
5958 LOOP
5959 --
5960 IF (p_operation_flag = 'S' AND
5961 l_prd_wooperation_tbl(i).workorder_operation_id IS NOT NULL AND
5962 l_prd_wooperation_tbl(i).workorder_operation_id <> FND_API.G_MISS_NUM AND
5963 l_prd_wooperation_tbl(i).operation_sequence_num IS NOT NULL AND
5964 l_prd_wooperation_tbl(i).operation_sequence_num <> FND_API.G_MISS_NUM)
5965 THEN
5966 --
5967 OPEN Material_Detail_Cur(l_prd_wooperation_tbl(i).workorder_operation_id,
5968 l_prd_wooperation_tbl(i).operation_sequence_num);
5969 LOOP
5970 FETCH Material_Detail_Cur INTO l_scheduled_material_id;
5971 EXIT WHEN Material_Detail_Cur%NOTFOUND;
5972 IF l_scheduled_material_id IS NOT NULL THEN
5973 --
5974 UPDATE ahl_schedule_materials
5975 -- AnRaj: truncating Requested Date for Material Requirement based on discussions with PM
5976 SET requested_date = trunc(l_prd_wooperation_tbl(i).actual_start_date),
5977 object_version_number = object_version_number + 1,
5978 last_update_date = sysdate,
5979 last_updated_by = fnd_global.user_id,
5980 last_update_login = fnd_global.login_id
5981 WHERE scheduled_material_id = l_scheduled_material_id;
5982 END IF;
5983 END LOOP;
5984 CLOSE Material_Detail_Cur;
5985 END IF;
5986 END LOOP;
5987 END IF;
5988 --Debug Info
5989 IF x_req_material_tbl.count > 0 THEN
5990 FOR i IN x_req_material_tbl.FIRST..x_req_material_tbl.LAST
5991 LOOP
5992 IF G_DEBUG='Y' THEN
5993 AHL_DEBUG_PUB.debug( 'x_req_material_tbl(i).workorder_id'||x_req_material_tbl(i).workorder_id);
5994 AHL_DEBUG_PUB.debug( 'x_req_material_tbl(i).organization_id'||x_req_material_tbl(i).organization_id);
5995 AHL_DEBUG_PUB.debug( 'x_req_material_tbl(i).workorder_operation_id'||x_req_material_tbl(i).workorder_operation_id);
5996 AHL_DEBUG_PUB.debug( 'x_req_material_tbl(i).operation_sequence'||x_req_material_tbl(i).operation_sequence);
5997 AHL_DEBUG_PUB.debug( 'x_req_material_tbl(i).inventory_item_id'||x_req_material_tbl(i).inventory_item_id);
5998 AHL_DEBUG_PUB.debug( 'x_req_material_tbl(i).requested_date'||x_req_material_tbl(i).requested_date);
5999 END IF;
6000 END LOOP;
6001 END IF;
6002 IF G_DEBUG='Y' THEN
6003 AHL_DEBUG_PUB.debug( 'x_req_material_tbl.count'||x_req_material_tbl.count);
6004 END IF;
6005 ------------------------End of Body---------------------------------------
6006 --Standard check to count messages
6007 l_msg_count := Fnd_Msg_Pub.count_msg;
6008 IF l_msg_count > 0 THEN
6009 X_msg_count := l_msg_count;
6010 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6011 RAISE Fnd_Api.G_EXC_ERROR;
6012 END IF;
6013 --Standard check for commit
6014 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
6015 COMMIT;
6016 END IF;
6017 -- Debug info
6018 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
6019 fnd_log.string
6020 (
6021 fnd_log.level_procedure,
6022 'ahl.plsql.AHL_PP_MATERIALS_PVT.Process_Wo_Op_Materials.end',
6023 'At the end of PLSQL procedure'
6024 );
6025 END IF;
6026 EXCEPTION
6027 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6028 ROLLBACK TO Process_Wo_Op_Materials;
6029 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6030 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
6031 p_count => x_msg_count,
6032 p_data => x_msg_data);
6033 WHEN FND_API.G_EXC_ERROR THEN
6034 ROLLBACK TO Process_Wo_Op_Materials;
6035 X_return_status := FND_API.G_RET_STS_ERROR;
6036 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
6037 p_count => x_msg_count,
6038 p_data => X_msg_data);
6039 WHEN OTHERS THEN
6040 ROLLBACK TO Process_Wo_Op_Materials;
6041 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6042 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6043 THEN
6044 fnd_msg_pub.add_exc_msg(p_pkg_name => 'AHL_PP_MATERIALS_PVT',
6045 p_procedure_name => 'PROCESS_WO_OP_MATERIALS',
6046 p_error_text => SUBSTR(SQLERRM,1,240));
6047 END IF;
6048 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
6049 p_count => x_msg_count,
6050 p_data => X_msg_data);
6051 END Process_Wo_Op_Materials;
6052 --
6053 -- Start of Comments --
6054 -- Procedure name : Material_Notification
6055 -- Type : Private
6056 -- Function : Procedure to send material Notification when new item has been added
6057 -- or quantity has been changed.
6058 --
6059 -- Pre-reqs :
6060 -- Parameters :
6061 --
6062 -- Standard IN Parameters :
6063 -- p_api_version IN NUMBER Required
6064 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
6065 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
6066 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
6067 -- Based on this flag, the API will set the default attributes.
6068 -- Standard OUT Parameters :
6069 -- x_return_status OUT VARCHAR2 Required
6070 -- x_msg_count OUT NUMBER Required
6071 -- x_msg_data OUT VARCHAR2 Required
6072 --
6073 -- Process_Material Notification Parameters :
6074 -- p_Req_Material_Tbl IN Req_Material_Tbl_Type,
6075 --
6076 PROCEDURE MATERIAL_NOTIFICATION
6077 (
6078 p_api_version IN NUMBER:= 1.0,
6079 p_init_msg_list IN VARCHAR2,
6080 p_commit IN VARCHAR2,
6081 p_validation_level IN NUMBER,
6082 p_Req_Material_Tbl IN Req_Material_Tbl_Type,
6083 x_return_status OUT NOCOPY VARCHAR2,
6084 x_msg_count OUT NOCOPY NUMBER,
6085 x_msg_data OUT NOCOPY VARCHAR2
6086 )
6087 IS
6088 CURSOR CursorNotify(c_object_type IN VARCHAR2)
6089 IS
6090 /*
6091 SELECT A.APPROVAL_RULE_ID,
6092 A.APPROVAL_OBJECT_CODE,
6093 A.STATUS_CODE,
6094 B.APPROVER_NAME,
6095 B.APPROVER_SEQUENCE
6096 FROM AHL_APPROVAL_RULES_B A,AHL_APPROVERS_V B
6097 WHERE A.APPROVAL_RULE_ID=B.APPROVAL_RULE_ID
6098 AND A.STATUS_CODE='ACTIVE'
6099 AND A.APPROVAL_OBJECT_CODE=c_object_type
6100 ORDER BY B.APPROVER_SEQUENCE;
6101 */
6102 /*
6103 * R12 Perf Tuning
6104 * Balaji blown open AHL_APPROVERS_V since it introduces NMV
6105 * due to Unions in the query. Reference bug # 4919273 and 4919045
6106 */
6107 SELECT DISTINCT
6108 JRREV.USER_NAME APPROVER_NAME
6109 FROM
6110 AHL_APPROVERS AA,
6111 FND_LOOKUP_VALUES_VL FNDA,
6112 AHL_JTF_RS_EMP_V JRREV,
6113 AHL_APPROVAL_RULES_B APR
6114 WHERE
6115 FNDA.LOOKUP_TYPE = 'AHL_APPROVER_TYPE'
6116 AND FNDA.LOOKUP_CODE = AA.APPROVER_TYPE_CODE
6117 AND AA.APPROVER_TYPE_CODE = 'USER'
6118 AND AA.APPROVER_ID = JRREV.RESOURCE_ID
6119 AND APR.APPROVAL_RULE_ID = AA.APPROVAL_RULE_ID
6120 AND APR.APPROVAL_OBJECT_CODE = c_object_type
6121 UNION
6122 SELECT DISTINCT
6123 JRRV.ROLE_NAME APPROVER_NAME
6124 FROM
6125 AHL_APPROVERS AA,
6126 FND_LOOKUP_VALUES_VL FNDA,
6127 JTF_RS_ROLE_RELATIONS_VL JRRV,
6128 AHL_APPROVAL_RULES_B APR
6129 WHERE
6130 FNDA.LOOKUP_TYPE = 'AHL_APPROVER_TYPE'
6131 AND FNDA.LOOKUP_CODE = AA.APPROVER_TYPE_CODE
6132 AND AA.APPROVER_TYPE_CODE = 'ROLE'
6133 AND AA.APPROVER_ID = JRRV.ROLE_ID
6134 AND APR.APPROVAL_RULE_ID = AA.APPROVAL_RULE_ID
6135 AND APR.APPROVAL_OBJECT_CODE = c_object_type
6136 UNION
6137 SELECT DISTINCT
6138 '' APPROVER_NAME
6139 FROM
6140 AHL_APPROVERS AA,
6141 FND_LOOKUP_VALUES_VL FNDA,
6142 AHL_APPROVAL_RULES_B APR
6143 WHERE
6144 FNDA.LOOKUP_TYPE = 'AHL_APPROVER_TYPE'
6145 AND FNDA.LOOKUP_CODE = AA.APPROVER_TYPE_CODE
6146 AND AA.APPROVER_TYPE_CODE = 'ROLE'
6147 AND AA.APPROVER_ID IS NULL
6148 AND APR.APPROVAL_RULE_ID = AA.APPROVAL_RULE_ID
6149 AND APR.APPROVAL_OBJECT_CODE = c_object_type;
6150 l_rec CursorNotify%rowtype;
6151 l_api_name CONSTANT VARCHAR2(30) := 'MATERIAL_NOTIFICATION';
6152 l_api_version CONSTANT NUMBER := 1.0;
6153 l_msg_count NUMBER;
6154 l_return_status VARCHAR2(1);
6155 l_msg_data VARCHAR2(2000);
6156 --
6157 l_object VARCHAR2(30):='PRD_MTL_NTF';
6158 l_active VARCHAR2(50) := 'N';
6159 l_process_name VARCHAR2(50);
6160 l_item_type VARCHAR2(30) := 'AHLGAPP';
6161 l_message_name VARCHAR2(200) := 'GEN_STDLN_MESG';
6162 l_subject VARCHAR2(3000);
6163 l_body VARCHAR2(3000) := NULL;
6164 l_text VARCHAR2(3000) := NULL;
6165 l_send_to_role_name VARCHAR2(30):= NULL;
6166 l_send_to_res_id NUMBER:= NULL;
6167 l_notif_id NUMBER;
6168 l_notif_id1 NUMBER;
6169 l_role_name VARCHAR2(100);
6170 l_display_role_name VARCHAR2(240);
6171 l_object_notes VARCHAR2(400);
6172 l_Req_Material_Tbl Req_Material_Tbl_Type := p_Req_Material_Tbl;
6173 BEGIN
6174 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
6175 fnd_log.string
6176 (
6177 fnd_log.level_procedure,
6178 'ahl.plsql.AHL_PP_MATERIALS_PVT.Material_Notification',
6179 'At the start of PLSQL procedure'
6180 );
6181 END IF;
6182 -- Standard Start of API savepoint
6183 SAVEPOINT Material_Notification;
6184 -- Initialize message list if p_init_msg_list is set to TRUE.
6185 IF FND_API.to_boolean(p_init_msg_list)
6186 THEN
6187 FND_MSG_PUB.initialize;
6188 END IF;
6189 -- Initialize API return status to success
6190 x_return_status := FND_API.G_RET_STS_SUCCESS;
6191 -- Standard call to check for call compatibility.
6192 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
6193 l_api_version,
6194 l_api_name,G_PKG_NAME)
6195 THEN
6196 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6197 END IF;
6198 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
6199 fnd_log.string
6200 (
6201 fnd_log.level_statement,
6202 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
6203 'Request for Material Notification for Number of Records : ' || l_Req_Material_Tbl.COUNT
6204 );
6205 END IF;
6206 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6207 fnd_log.string
6208 (
6209 fnd_log.level_procedure,
6210 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
6211 'Before calling Ahl_Utility_Pvt.Get_Wf_Process_Name'
6212 );
6213 END IF;
6214 --Get workflow status active or not
6215 Ahl_Utility_Pvt.Get_Wf_Process_Name
6216 (
6217 p_object =>l_object,
6218 x_active =>l_active,
6219 x_process_name =>l_process_name ,
6220 x_item_type =>l_item_type,
6221 x_return_status=>l_return_status,
6222 x_msg_count =>l_msg_count,
6223 x_msg_data =>l_msg_data);
6224 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
6225 fnd_log.string
6226 (
6227 fnd_log.level_procedure,
6228 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||': End API',
6229 'After calling Ahl_Utility_Pvt.Get_Wf_Process_Name, Return Status : '|| l_return_status
6230 );
6231 END IF;
6232 -- Check Error Message stack.
6233 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
6234 RAISE FND_API.G_EXC_ERROR;
6235 END IF;
6236 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
6237 fnd_log.string
6238 (
6239 fnd_log.level_statement,
6240 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
6241 'Active flag : '||l_active
6242 );
6243 END IF;
6244 IF l_active = 'Y' THEN
6245 FOR i IN l_Req_Material_Tbl.FIRST..l_Req_Material_Tbl.LAST
6246 LOOP
6247 IF l_Req_Material_Tbl(i).operation_flag = 'C' THEN
6248 IF l_Req_Material_Tbl(i).concatenated_segments IS NOT NULL THEN
6249 FND_MESSAGE.SET_NAME('AHL','AHL_PRD_MAT_REQ_ADDED_NTF');
6250 FND_MESSAGE.set_token('ITEM',l_Req_Material_Tbl(i).concatenated_segments,false);
6251 l_text := fnd_message.get;
6252 --Include quantity and date
6253 FND_MESSAGE.SET_NAME('AHL','AHL_PRD_MAT_REQ_QTY_NTF');
6254 FND_MESSAGE.set_token('QTY',l_Req_Material_Tbl(i).requested_quantity,false);
6255 l_body := fnd_message.get;
6256 l_Req_Material_Tbl(i).notify_text := l_text ||''||l_body
6257 ||'; For Workorder:'||l_Req_Material_Tbl(i).job_number
6258 || '; Required date:'||l_Req_Material_Tbl(i).requested_date;
6259 END IF;
6260 ELSE
6261 --Update
6262 FND_MESSAGE.SET_NAME('AHL','AHL_PRD_MAT_REQ_NTF_UPDATE');
6263 FND_MESSAGE.set_token('ITEM',l_Req_Material_Tbl(i).concatenated_segments,false);
6264 l_text := fnd_message.get;
6265 --Include quantity and date
6266 FND_MESSAGE.SET_NAME('AHL','AHL_PRD_MAT_QTY_NTF_CHG');
6267 FND_MESSAGE.set_token('QTY',l_Req_Material_Tbl(i).requested_quantity,false);
6268 l_body := fnd_message.get;
6269 l_Req_Material_Tbl(i).notify_text := l_text ||''||l_body
6270 || ';For Workorder:'||l_Req_Material_Tbl(i).job_number
6271 || ';Required date:'||l_Req_Material_Tbl(i).requested_date;
6272 END IF;
6273 END LOOP;
6274 --
6275 l_body := null;
6276 FOR i IN l_Req_Material_Tbl.FIRST..l_Req_Material_Tbl.LAST
6277 LOOP
6278 IF l_Req_Material_Tbl(i).notify_text IS NOT NULL THEN
6279 IF l_body is null then
6280 l_body := l_Req_Material_Tbl(i).notify_text;
6281 ELSE
6282 l_body := l_body ||':' ||l_Req_Material_Tbl(i).notify_text;
6283 END IF;
6284 END IF;
6285 END LOOP;
6286 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
6287 fnd_log.string
6288 (
6289 fnd_log.level_statement,
6290 'ahl.plsql.'||g_pkg_name||'.'||l_api_name||':',
6291 'Number of records : '||l_Req_Material_Tbl.count
6292 );
6293 END IF;
6294 OPEN CursorNotify(l_object);
6295 FETCH CursorNotify INTO l_rec;
6296 CLOSE CursorNotify;
6297 FND_MESSAGE.SET_NAME('AHL','AHL_PRD_MAT_REQ_NTF_CONTENT');
6298 l_subject := fnd_message.get;
6299 l_role_name:=l_rec.approver_name;
6300 l_return_status := FND_API.G_RET_STS_SUCCESS;
6301 l_notif_id := WF_NOTIFICATION.Send
6302 ( role => l_role_name
6303 , msg_type => l_item_type
6304 , msg_name => l_message_name
6305 );
6306 WF_NOTIFICATION.SetAttrText(l_notif_id,
6307 'GEN_MSG_SUBJECT',
6308 l_subject);
6309 WF_NOTIFICATION.SetAttrText(l_notif_id,
6310 'GEN_MSG_BODY',
6311 l_body);
6312 WF_NOTIFICATION.SetAttrText(l_notif_id,
6313 'GEN_MSG_SEND_TO',
6314 l_role_name);
6315 WF_NOTIFICATION.Denormalize_Notification(l_notif_id);
6316 END IF;
6317 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
6318 fnd_log.string
6319 (
6320 fnd_log.level_procedure,
6321 'ahl.plsql.AHL_PP_MATERIALS_PVT.Material_Notification.end',
6322 'At the end of PLSQL procedure'
6323 );
6324 END IF;
6325 EXCEPTION
6326 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6327 ROLLBACK TO Material_Notification;
6328 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6329 FND_MSG_PUB.count_and_get( p_encoded =>FND_API.G_FALSE,
6330 p_count => x_msg_count,
6331 p_data => x_msg_data);
6332 WHEN FND_API.G_EXC_ERROR THEN
6333 ROLLBACK TO MATERIAL_NOTIFICATION;
6334 X_return_status := FND_API.G_RET_STS_ERROR;
6335 FND_MSG_PUB.count_and_get( p_encoded =>FND_API.G_FALSE,
6336 p_count => x_msg_count,
6337 p_data => X_msg_data);
6338 WHEN OTHERS THEN
6339 ROLLBACK TO Material_Notification;
6340 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6341 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6342 THEN
6343 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
6344 p_procedure_name => 'MATERIAL_NOTIFICATION',
6345 p_error_text => SUBSTR(SQLERRM,1,240));
6346 END IF;
6347 FND_MSG_PUB.count_and_get( p_encoded =>FND_API.G_FALSE,
6348 p_count => x_msg_count,
6349 p_data => X_msg_data);
6350 END Material_Notification;
6351 PROCEDURE get_dff_default_values
6352 (
6353 p_req_material_rec IN REQ_MATERIAL_REC_TYPE,
6354 flex_fields_defaults OUT NOCOPY dff_default_values_type
6355 ) IS
6356 flexfield fnd_dflex.dflex_r;
6357 flexinfo fnd_dflex.dflex_dr;
6358 contexts fnd_dflex.contexts_dr;
6359 i BINARY_INTEGER;
6360 j BINARY_INTEGER;
6361 segments fnd_dflex.segments_dr;
6362 BEGIN
6363 fnd_dflex.get_flexfield('AHL', 'Material Reqmt Flex Field', flexfield, flexinfo);
6364 IF(p_req_material_rec.ATTRIBUTE_CATEGORY IS NULL)THEN
6365 flex_fields_defaults.ATTRIBUTE_CATEGORY := flexinfo.default_context_value;
6366 ELSIF (p_req_material_rec.ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR)THEN
6367 flex_fields_defaults.ATTRIBUTE_CATEGORY := NULL;
6368 ELSE
6369 flex_fields_defaults.ATTRIBUTE_CATEGORY := p_req_material_rec.ATTRIBUTE_CATEGORY;
6370 END IF;
6371 IF G_DEBUG='Y' THEN
6372 AHL_DEBUG_PUB.debug('flex_fields_defaults.ATTRIBUTE_CATEGORY : ' || flex_fields_defaults.ATTRIBUTE_CATEGORY);
6373 END IF;
6374 IF(flex_fields_defaults.ATTRIBUTE_CATEGORY IS NOT NULL)THEN
6375 fnd_dflex.get_contexts(flexfield, contexts);
6376 FOR j IN 1 .. contexts.ncontexts LOOP
6377 IF(contexts.is_enabled(j) AND
6378 (flex_fields_defaults.ATTRIBUTE_CATEGORY = contexts.context_code(j)
6379 OR contexts.is_global(j))
6380 ) THEN
6381 fnd_dflex.get_segments
6382 ( fnd_dflex.make_context(flexfield,
6383 contexts.context_code(j)),
6384 segments,
6385 TRUE
6386 );
6387 FOR i IN 1 .. segments.nsegments LOOP
6388 IF(segments.is_enabled(i)) THEN
6389 IF(segments.application_column_name(i) = 'ATTRIBUTE1')THEN
6390 flex_fields_defaults.ATTRIBUTE1 := to_char(segments.default_value(i));
6391 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE2')THEN
6392 flex_fields_defaults.ATTRIBUTE2 := to_char(segments.default_value(i));
6393 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE3')THEN
6394 flex_fields_defaults.ATTRIBUTE3 := to_char(segments.default_value(i));
6395 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE4')THEN
6396 flex_fields_defaults.ATTRIBUTE4 := to_char(segments.default_value(i));
6397 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE5')THEN
6398 flex_fields_defaults.ATTRIBUTE5 := to_char(segments.default_value(i));
6399 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE6')THEN
6400 flex_fields_defaults.ATTRIBUTE6 := to_char(segments.default_value(i));
6401 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE7')THEN
6402 flex_fields_defaults.ATTRIBUTE7 := to_char(segments.default_value(i));
6403 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE8')THEN
6404 flex_fields_defaults.ATTRIBUTE8 := to_char(segments.default_value(i));
6405 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE9')THEN
6406 flex_fields_defaults.ATTRIBUTE9 := to_char(segments.default_value(i));
6407 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE10')THEN
6408 flex_fields_defaults.ATTRIBUTE10 := to_char(segments.default_value(i));
6409 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE11')THEN
6410 flex_fields_defaults.ATTRIBUTE11 := to_char(segments.default_value(i));
6411 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE12')THEN
6412 flex_fields_defaults.ATTRIBUTE12 := to_char(segments.default_value(i));
6413 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE13')THEN
6414 flex_fields_defaults.ATTRIBUTE13 := to_char(segments.default_value(i));
6415 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE14')THEN
6416 flex_fields_defaults.ATTRIBUTE14 := to_char(segments.default_value(i));
6417 ELSIF(segments.application_column_name(i) = 'ATTRIBUTE15')THEN
6418 flex_fields_defaults.ATTRIBUTE15 := to_char(segments.default_value(i));
6419 END IF;
6420 END IF;
6421 END LOOP;
6422 END IF;
6423 END LOOP;
6424 END IF;
6425 END get_dff_default_values;
6426 -- sukhwsin::Marshling enhancements - added following procedure for changing item on workorder material requirement.
6427 -- Start of Comments --
6428 -- Procedure name : Wo_Mat_Req_Item_Change
6429 -- Type : Public
6430 -- Usage : This procedure is used to change item for item group OR position based item requirements.
6431 -- Parameters :
6432 --
6433 -- Standard IN Parameters :
6434 -- p_api_version IN NUMBER Required
6435 -- p_init_msg_list IN VARCHAR2 Default FND_API.G_FALSE
6436 -- p_commit IN VARCHAR2 Default FND_API.G_FALSE
6437 -- p_validation_level IN NUMBER Default FND_API.G_VALID_LEVEL_FULL
6438 -- Standard OUT Parameters :
6439 -- x_return_status OUT VARCHAR2 Required
6440 -- x_msg_count OUT NUMBER Required
6441 -- x_msg_data OUT VARCHAR2 Required
6442 --
6443 -- Process_Material Notification Parameters :
6444 -- p_asm_id IN ahl_schedule_materials.schedule_material_id
6445 -- p_alternate_item_id IN New Inventory_Item_Id which will replace old inventory item.
6446 PROCEDURE Wo_Mat_Req_Item_Change(
6447 p_api_version IN NUMBER,
6448 p_init_msg_list IN VARCHAR2 := Fnd_Api.G_FALSE,
6449 p_commit IN VARCHAR2 := Fnd_Api.G_FALSE,
6450 p_validation_level IN NUMBER := Fnd_Api.G_VALID_LEVEL_FULL,
6451 p_module_type IN VARCHAR2 := NULL,
6452 p_asm_id IN NUMBER,
6453 p_alternate_item_id IN NUMBER,
6454 x_return_status OUT NOCOPY VARCHAR2,
6455 x_msg_count OUT NOCOPY NUMBER,
6456 x_msg_data OUT NOCOPY VARCHAR2
6457 )
6458 IS
6459 --Cursor Declaration.
6460 CURSOR Get_WO_Mat_Details(c_asm_id IN NUMBER) IS
6461 SELECT asm.scheduled_material_id
6462 ,asm.inventory_item_id
6463 ,asm.organization_id
6464 ,asm.uom
6465 ,asm.visit_id
6466 ,asm.requested_date
6467 ,asm.requested_quantity
6468 ,asm.object_version_number
6469 ,'I' operation_flag
6470 ,asm.relationship_id
6471 ,asm.mc_header_id
6472 ,asm.position_key
6473 ,asm.item_group_id
6474 ,wo.workorder_id
6475 ,wo.status_code
6476 FROM ahl_schedule_materials asm, ahl_workorders wo
6477 WHERE
6478 asm.scheduled_material_id = c_asm_id
6479 AND asm.status = 'ACTIVE'
6480 AND asm.visit_task_id = wo.visit_task_id;
6481
6482 --Cursor to get item name and primary uom code at organization level
6483 CURSOR Get_Item_Uom_Code(c_inventory_item_id NUMBER, c_organization_id NUMBER) IS
6484 SELECT concatenated_segments,primary_uom_code
6485 FROM mtl_system_items_kfv
6486 WHERE inventory_item_id = c_inventory_item_id
6487 AND organization_id = c_organization_id;
6488
6489 --Cursor to get uc_header_id for workorder
6490 CURSOR Get_Wo_Uc_Header_Id(c_workorder_id IN NUMBER)
6491 IS
6492 SELECT uc_header_id
6493 FROM AHL_WORKORDER_TASKS_V
6494 WHERE workorder_id = c_workorder_id;
6495
6496 --Local Variable Declaration
6497 l_api_name CONSTANT VARCHAR2(30) := 'Wo_Mat_Req_Item_Change';
6498 l_api_version CONSTANT NUMBER := 1.0;
6499 l_req_material_tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type;
6500 l_inventory_item_id NUMBER := NULL;
6501 l_msg_data VARCHAR2(2000);
6502 l_msg_count NUMBER;
6503 l_return_status VARCHAR2(1);
6504 l_req_ci_material_tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type;
6505 l_uom_code MTL_SYSTEM_ITEMS_B.PRIMARY_UOM_CODE%TYPE;
6506 l_item_name MTL_SYSTEM_ITEMS_KFV.CONCATENATED_SEGMENTS%TYPE;
6507 l_current_mat_dtl_rec Get_WO_Mat_Details%ROWTYPE;
6508 l_uc_header_id NUMBER;
6509
6510 BEGIN
6511 -- Standard Start of API savepoint
6512 SAVEPOINT Wo_Mat_Req_Item_Change;
6513 -- Check if API is called in debug mode. If yes, enable debug.
6514 IF G_DEBUG='Y' THEN
6515 AHL_DEBUG_PUB.enable_debug;
6516 -- Debug info.
6517 AHL_DEBUG_PUB.debug( 'enter ahl_pp_materias_pvt.Wo_Mat_Req_Item_Change','+PPMRP+');
6518 --
6519 END IF;
6520
6521 -- Standard call to check for call compatibility.
6522 IF FND_API.to_boolean(p_init_msg_list)
6523 THEN
6524 FND_MSG_PUB.initialize;
6525 END IF;
6526 -- Initialize API return status to success
6527 x_return_status := FND_API.G_RET_STS_SUCCESS;
6528 -- Initialize message list if p_init_msg_list is set to TRUE.
6529 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version,
6530 p_api_version,
6531 l_api_name,G_PKG_NAME)
6532 THEN
6533 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6534 END IF;
6535 --------------------Start of Main Logic-----------------------------------
6536 --Get Existing Material Record Details
6537 OPEN Get_WO_Mat_Details(p_asm_id);
6538 FETCH Get_WO_Mat_Details INTO l_current_mat_dtl_rec;
6539 IF (Get_WO_Mat_Details%NOTFOUND) THEN
6540 CLOSE Get_WO_Mat_Details;
6541 FND_MESSAGE.Set_Name('AHL', 'AHL_PP_MAT_ID_INVALID');
6542 FND_MSG_PUB.ADD;
6543 RAISE FND_API.G_EXC_ERROR;
6544 END IF;
6545 CLOSE Get_WO_Mat_Details;
6546
6547 --Check old and new items are same or different. If same Items then Raise Error.
6548 IF (p_alternate_item_id = l_current_mat_dtl_rec.inventory_item_id) THEN
6549 FND_MESSAGE.Set_Name('AHL', 'AHL_PRD_ALT_ITEM_SAME'); --Old and New Items are same.
6550 FND_MSG_PUB.ADD;
6551 RAISE FND_API.G_EXC_ERROR;
6552 END IF;
6553
6554 --Item validation based upon requirement type.
6555 IF (l_current_mat_dtl_rec.item_group_id IS NOT NULL) THEN
6556 --Perform Item Group based validations.
6557 Get_item_Id_from_item_group
6558 (p_item_group_id => l_current_mat_dtl_rec.item_group_id,
6559 p_inventory_item_id => p_alternate_item_id,
6560 p_concatenated_segments => NULL,
6561 p_organization_id => l_current_mat_dtl_rec.organization_id,
6562 x_inventory_item_id => l_inventory_item_id,
6563 x_return_status => l_return_status,
6564 x_msg_data => l_msg_data
6565 );
6566 IF NVL(l_return_status,'x') <> 'S' THEN
6567 --If alternate item is not a valid item in item group, then raise exception.
6568 Fnd_Message.SET_NAME('AHL',l_msg_data);
6569 FND_MESSAGE.set_token( 'FIELD', p_alternate_item_id ); -- Invalid Item 1
6570 Fnd_Msg_Pub.ADD;
6571 RAISE FND_API.G_EXC_ERROR;
6572 END IF;
6573 ELSIF(l_current_mat_dtl_rec.position_key IS NOT NULL) THEN
6574 --Perform Position based validation check.
6575 Get_item_Id_from_mc_pos
6576 (p_relationship_id => l_current_mat_dtl_rec.relationship_id,
6577 p_inventory_item_id => p_alternate_item_id,
6578 p_concatenated_segments => NULL,
6579 p_organization_id => l_current_mat_dtl_rec.organization_id,
6580 x_inventory_item_id => l_inventory_item_id,
6581 x_return_status => l_return_status,
6582 x_msg_data => l_msg_data
6583 );
6584 IF NVL(l_return_status,'x') <> 'S' THEN
6585 --If alternate item is not a valid item in item group, then raise exception.
6586 Fnd_Message.SET_NAME('AHL',l_msg_data);
6587 FND_MESSAGE.set_token( 'FIELD', p_alternate_item_id ); -- Invalid Item 1
6588 Fnd_Msg_Pub.ADD;
6589 RAISE FND_API.G_EXC_ERROR;
6590 END IF;
6591 --Get UC associated with workorder
6592 OPEN Get_Wo_Uc_Header_Id(l_current_mat_dtl_rec.workorder_id);
6593 FETCH Get_Wo_Uc_Header_Id INTO l_uc_header_id;
6594 CLOSE Get_Wo_Uc_Header_Id;
6595 IF (l_uc_header_id IS NOT NULL) THEN
6596 --Perform SB Rule Validation
6597 AHL_SB_RULES_PVT.Evaluate_Rules_For_Pos (
6598 p_mc_header_id => l_current_mat_dtl_rec.mc_header_id,
6599 p_mc_pos_key => l_current_mat_dtl_rec.position_key,
6600 /* ARUNJK l_current_mat_dtl_rec.inventory_item_id is replaced with p_alternate_item_id
6601 * for bug # 13834008
6602 * p_inv_item_id => l_current_mat_dtl_rec.inventory_item_id,
6603 */
6604 p_inv_item_id => p_alternate_item_id,
6605 p_inv_org_id => l_current_mat_dtl_rec.organization_id,
6606 p_uc_header_id => l_uc_header_id
6607 );
6608 END IF;
6609 ELSE
6610 --Only item based requirement. In this case Raise Exception as item change is only possible for item group or position based demand.
6611 FND_MESSAGE.Set_Name('AHL', 'AHL_PRD_IVLD_REQ_FOR_CHG'); --Item Change is not posible for Item Based requirement type.
6612 RAISE FND_API.G_EXC_ERROR;
6613 END IF;
6614 --Get primary uom of new item
6615 OPEN Get_Item_Uom_Code(p_alternate_item_id,l_current_mat_dtl_rec.organization_id);
6616 FETCH Get_Item_Uom_Code INTO l_item_name, l_uom_code;
6617 CLOSE Get_Item_Uom_Code;
6618 IF (l_uom_code IS NULL) THEN
6619 Fnd_Message.SET_NAME('AHL','AHL_ITEM_UOM_MISSING'); --Missing UOM at Item Setup for Item 1
6620 FND_MESSAGE.set_token( 'ITEM', l_item_name );
6621 Fnd_Msg_Pub.ADD;
6622 RAISE FND_API.G_EXC_ERROR;
6623 END IF;
6624 --After Validation of item under item group or position. call item change procedure.
6625 --Constructor table of item change
6626 l_req_ci_material_tbl.delete();
6627 l_req_ci_material_tbl(1).schedule_material_id := l_current_mat_dtl_rec.scheduled_material_id;
6628 l_req_ci_material_tbl(1).object_version_number := l_current_mat_dtl_rec.object_version_number;
6629 l_req_ci_material_tbl(1).organization_id := l_current_mat_dtl_rec.organization_id;
6630 l_req_ci_material_tbl(1).inventory_item_id := p_alternate_item_id;
6631 l_req_ci_material_tbl(1).uom_code := l_uom_code;
6632
6633 Change_Requirement_Item
6634 (
6635 p_api_version => 1.0,
6636 p_init_msg_list => Fnd_Api.G_FALSE,
6637 p_commit => Fnd_Api.G_FALSE,
6638 p_validation_level => p_validation_level,
6639 p_module_type => p_module_type,
6640 p_x_req_material_tbl => l_req_ci_material_tbl,
6641 x_return_status => l_return_status,
6642 x_msg_count => l_msg_count,
6643 x_msg_data => l_msg_data
6644 );
6645 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
6646 l_msg_count := FND_MSG_PUB.count_msg;
6647 IF l_msg_count > 0 THEN
6648 RAISE FND_API.G_EXC_ERROR;
6649 END IF;
6650 END IF;
6651
6652 ------------------------End of Body---------------------------------------
6653 --Standard check to count messages
6654 l_msg_count := Fnd_Msg_Pub.count_msg;
6655 IF l_msg_count > 0 THEN
6656 X_msg_count := l_msg_count;
6657 X_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6658 RAISE Fnd_Api.G_EXC_ERROR;
6659 END IF;
6660 --Standard check for commit
6661 IF Fnd_Api.TO_BOOLEAN(p_commit) THEN
6662 COMMIT;
6663 END IF;
6664 -- Debug info
6665 IF G_DEBUG='Y' THEN
6666 Ahl_Debug_Pub.debug( 'End of api Wo_Mat_Req_Item_Change','+PPMRP+');
6667 END IF;
6668 EXCEPTION
6669 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6670 ROLLBACK TO Wo_Mat_Req_Item_Change;
6671 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6672 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
6673 p_count => x_msg_count,
6674 p_data => x_msg_data);
6675 IF G_DEBUG='Y' THEN
6676 AHL_DEBUG_PUB.log_app_messages (
6677 x_msg_count, x_msg_data, 'ERROR' );
6678 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt.Wo_Mat_Req_Item_Change','+PPMRP+');
6679 -- Check if API is called in debug mode. If yes, disable debug.
6680 AHL_DEBUG_PUB.disable_debug;
6681 END IF;
6682 WHEN FND_API.G_EXC_ERROR THEN
6683 ROLLBACK TO Wo_Mat_Req_Item_Change;
6684 X_return_status := FND_API.G_RET_STS_ERROR;
6685 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
6686 p_count => x_msg_count,
6687 p_data => X_msg_data);
6688 IF G_DEBUG='Y' THEN
6689 -- Debug info.
6690 AHL_DEBUG_PUB.log_app_messages (
6691 x_msg_count, x_msg_data, 'UNEXPECTED ERROR' );
6692 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt.Wo_Mat_Req_Item_Change','+PPMRP+');
6693 -- Check if API is called in debug mode. If yes, disable debug.
6694 AHL_DEBUG_PUB.disable_debug;
6695 END IF;
6696 WHEN OTHERS THEN
6697 ROLLBACK TO Wo_Mat_Req_Item_Change;
6698 X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6699 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6700 THEN
6701 fnd_msg_pub.add_exc_msg(p_pkg_name => 'AHL_PP_MATERIALS_PVT',
6702 p_procedure_name => 'Wo_Mat_Req_Item_Change',
6703 p_error_text => SUBSTR(SQLERRM,1,240));
6704 END IF;
6705 FND_MSG_PUB.count_and_get( p_encoded => FND_API.G_FALSE,
6706 p_count => x_msg_count,
6707 p_data => X_msg_data);
6708 IF G_DEBUG='Y' THEN
6709 -- Debug info.
6710 AHL_DEBUG_PUB.log_app_messages (
6711 x_msg_count, x_msg_data, 'SQL ERROR' );
6712 AHL_DEBUG_PUB.debug( 'ahl_pp_materials_pvt.Wo_Mat_Req_Item_Change','+PPMRP+');
6713 -- Check if API is called in debug mode. If yes, disable debug.
6714 AHL_DEBUG_PUB.disable_debug;
6715 END IF;
6716
6717 END Wo_Mat_Req_Item_Change;
6718
6719 END AHL_PP_MATERIALS_PVT;