DBA Data[Home] [Help]

PACKAGE BODY: APPS.AHL_PRD_MTLTXN_PVT

Source


1 PACKAGE BODY AHL_PRD_MTLTXN_PVT AS
2 /* $Header: AHLVMTXB.pls 120.42.12020000.3 2012/12/07 00:49:22 sareepar ship $ */
3 
4 G_DEBUG                                 VARCHAR2(1):=AHL_DEBUG_PUB.is_log_enabled;
5 G_PKG_NAME                  CONSTANT    VARCHAR2(30) := 'AHL_PRD_MTLTXN_PVT';
6 G_AHL_PRD_RECEPIENT                     VARCHAR2(30) := FND_PROFILE.VALUE('AHL_PRD_MTX_RECEPIENT');
7 
8 -- pdoki added for Bug 9164678
9 G_LEVEL_PROCEDURE  CONSTANT NUMBER  := FND_LOG.LEVEL_PROCEDURE;
10 G_LEVEL_STATEMENT  CONSTANT NUMBER  := FND_LOG.LEVEL_STATEMENT;
11 G_CURRENT_RUNTIME_LEVEL NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
12 
13 -- Hard coded string used in this proc
14 -- These are the profile names used to populate service request record default values
15 
16 C_AHL_DEF_SR_TYPE           CONSTANT    VARCHAR2(30) := 'AHL_DEFAULT_SR_TYPE';
17 C_AHL_DEF_TASK_EST_DURATION CONSTANT    VARCHAR2(40) := 'AHL_DEFAULT_TASK_EST_DURATION';
18 
19 --- LOOKUP Tpye for problem code values
20 C_REQUEST_PROBLEM_CODE      CONSTANT    VARCHAR2(30) := 'REQUEST_PROBLEM_CODE';
21 
22 --ITEM Params
23 C_NO_SERIAL_CONTROL         CONSTANT    NUMBER := 1;
24 C_NO_LOT_CONTROL            CONSTANT    NUMBER := 1;
25 C_NO_LOCATOR_CONTROL        CONSTANT    NUMBER := 1;
26 C_SUBINV_LOCATOR            CONSTANT    NUMBER := 4;
27 C_ITEM_LOCATOR              CONSTANT    NUMBER := 5;
28 C_JOB_RELEASED              CONSTANT    VARCHAR2(30) := '3';
29 C_JOB_COMPLETE              CONSTANT    VARCHAR2(30) := '4';
30 C_JOB_PENDING_QA            CONSTANT    VARCHAR2(30) := '20';
31 C_JOB_PARTS_HOLD            CONSTANT    VARCHAR2(30) := '19';
32 
33 -- added to fix bug# 11807381
34 -- to hold all instances processed in a within a transaction.
35 TYPE item_instance_rec_type IS RECORD(
36    instance_id   number,
37    quantity      number);
38 
39 TYPE item_instance_tbl_type IS TABLE OF item_instance_rec_type INDEX BY BINARY_INTEGER;
40 
41 -- define global variable.
42 G_nonserial_ii_tbl    item_instance_tbl_type;
43 
44 -- Declare the private procedures.
45 FUNCTION IS_ITEM_TRACKABLE(p_Org_Id IN NUMBER, p_Item_Id IN NUMBER) RETURN BOOLEAN;
46 
47 --PROCEDURE SHOW_MTX_ERRORS;
48 
49 PROCEDURE Insert_Mtl_Txn_Row
50         (
51         p_x_ahl_mtltxn_rec              IN  OUT   NOCOPY  Ahl_Mtltxn_Rec_Type,
52         p_material_Transaction_Id       IN             NUMBER,
53         p_nonroutine_workorder_Id       IN             NUMBER,
54         p_prim_uom_qty                  IN         NUMBER:=0,
55         x_return_status                 OUT NOCOPY     VARCHAR2,
56         x_msg_count                     OUT NOCOPY     NUMBER,
57         x_msg_data                      OUT NOCOPY     VARCHAR2,
58         x_ahl_mtl_txn_id                OUT NOCOPY     NUMBER
59         );
60 
61 PROCEDURE Insert_Sch_Mtl_Row
62         (
63         p_mtl_txn_Rec        IN                   Ahl_Mtltxn_Rec_Type,
64     x_return_status      OUT NOCOPY           VARCHAR2,
65     x_msg_count          OUT NOCOPY           NUMBER,
66     x_msg_data           OUT NOCOPY           VARCHAR2,
67         x_ahl_sch_mtl_id     OUT NOCOPY           NUMBER
68         );
69 PROCEDURE Populate_Srvc_Rec(
70         p_item_instance_id    NUMBER,
71         p_srvc_rec OUT NOCOPY AHL_PRD_NONROUTINE_PVT.Sr_task_Rec_type,
72         p_x_ahl_mtltxn_rec IN Ahl_Mtltxn_Rec_Type);
73 
74 -- Added p_eam_item_type_id for FP ER#6310766.
75 PROCEDURE INSERT_MTL_TXN_INTF
76     (
77         p_x_ahl_mtl_txn_rec     IN OUT NOCOPY   AHL_MTLTXN_REC_TYPE,
78         p_eam_item_type_id      IN              NUMBER,
79         p_x_txn_hdr_id          IN  OUT NOCOPY      NUMBER,
80         p_x_txn_intf_id         IN  OUT NOCOPY      NUMBER,
81         p_reservation_flag      IN                  VARCHAR2,
82         x_return_status         OUT NOCOPY      VARCHAR2
83 
84     );
85 procedure dumpInput(p_x_ahl_mtltxn_tbl  IN      AHL_MTLTXN_TBL_TYPE);
86 
87 -- R12: Serial Reservation enhancements.
88 -- Added procedure to relieve reservation when user is issuing a reserved serial
89 -- number against a different workorder.
90 PROCEDURE Relieve_Serial_Reservation(p_ahl_mtl_txn_rec  IN            AHL_MTLTXN_REC_TYPE,
91                                      x_reservation_flag IN OUT NOCOPY VARCHAR2,
92                                      x_return_status    IN OUT NOCOPY VARCHAR2
93                                     );
94 
95 -- Added for pre/post user hooks(FP bug# 5903207).
96 PROCEDURE Perform_MtlTxn_Pre( p_x_ahl_mtltxn_tbl   IN OUT NOCOPY AHL_MTLTXN_TBL_TYPE,
97                               x_msg_count          IN OUT NOCOPY NUMBER,
98                               x_msg_data           IN OUT NOCOPY VARCHAR2,
99                               x_return_status      IN OUT NOCOPY VARCHAR2);
100 
101 
102 PROCEDURE Perform_MtlTxn_Post( p_ahl_mtltxn_tbl   IN AHL_MTLTXN_TBL_TYPE,
103                                x_msg_count        IN OUT NOCOPY NUMBER,
104                                x_msg_data         IN OUT NOCOPY VARCHAR2,
105                                x_return_status    IN OUT NOCOPY VARCHAR2);
106 
107 
108 
109 --Declare any types used by the procedure
110 TYPE TXN_INTF_ID_TBL    IS TABLE OF NUMBER index by BINARY_INTEGER;
111 TYPE INSTANCE_ID_TBL    IS TABLE OF NUMBER index by BINARY_INTEGER;
112 TYPE ITEM_TYPE_TBL      IS TABLE OF NUMBER index by BINARY_INTEGER;
113 TYPE SR_MTL_ID_MAP_TBL  IS TABLE OF NUMBER index by BINARY_INTEGER;
114 
115 --------------------------------------------------------------------
116 -- PROCEDURE
117 --    Convert_Name_To_Id
118 --
119 -- PURPOSE
120 --    Converts Name to ID
121 --------------------------------------------------------------------
122 PROCEDURE Convert_Name_To_Id(
123      p_x_ahl_mtltxn_rec         IN OUT NOCOPY       Ahl_Mtltxn_Rec_Type,
124      p_module_type                 IN  VARCHAR2 := NULL,
125      x_return_status               OUT NOCOPY VARCHAR2)
126    IS
127 
128 -- Query for validating item segments  and  selecting item id
129     CURSOR Item_Cur(p_org_id number, p_item_name varchar2) IS
130         SELECT Inventory_Item_Id
131         FROM MTL_SYSTEM_ITEMS_KFV
132         WHERE Concatenated_Segments = p_item_name
133         AND Organization_Id = p_org_id
134         AND ENABLED_FLAG = 'Y'
135         AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
136         AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
137 
138     -- Query for validating location segments and selecting location_id
139     /*CURSOR Location_Cur(p_org_id number, p_location_name varchar2) IS
140         SELECT INVENTORY_LOCATION_ID
141         FROM MTL_ITEM_LOCATIONS_KFV
142         WHERE ORGANIZATION_ID = p_org_Id
143         AND CONCATENATED_SEGMENTS = p_location_name
144         AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
145         AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));*/
146     -- fix for bug number 5903275
147     -- modified to retrieve segment19 and 20 from base table to fix bug# 6611033.
148     -- JKJain, removed Upper. Bug 9373744
149     CURSOR Location_Cur(p_org_id number, p_location_name varchar2) IS
150         SELECT MIL.INVENTORY_LOCATION_ID, MIL_kfv.CONCATENATED_SEGMENTS
151         FROM MTL_ITEM_LOCATIONS_KFV MIL_kfv, MTL_ITEM_LOCATIONS MIL
152         WHERE MIL_kfv.INVENTORY_LOCATION_ID = MIL.INVENTORY_LOCATION_ID
153         AND MIL.ORGANIZATION_ID = p_org_Id
154         AND decode(MIL.segment19, null, MIL_kfv.concatenated_segments,
155             INV_PROJECT.GET_LOCSEGS(MIL_kfv.concatenated_segments) || fnd_flex_ext.get_delimiter('INV', 'MTLL',  101)
156             || INV_ProjectLocator_PUB.get_project_number(MIL.segment19) || fnd_flex_ext.get_delimiter('INV', 'MTLL',  101)
157             || INV_ProjectLocator_PUB.get_task_number(MIL.segment20)) = p_location_name
158         AND ((MIL.START_DATE_ACTIVE IS NULL) OR (MIL.START_DATE_ACTIVE <= SYSDATE))
159         AND ((MIL.END_DATE_ACTIVE IS NULL) OR (MIL.END_DATE_ACTIVE >= SYSDATE));
160 
161     l_locator_segments  VARCHAR2(240);
162 
163 --Query for validating reason name and selecting reason id.
164     CURSOR Reason_Cur(p_reason_Name varchar2) IS
165         SELECT REASON_ID
166         FROM MTL_TRANSACTION_REASONS
167         WHERE REASON_NAME = p_reason_Name
168         AND (DISABLE_DATE IS NULL OR DISABLE_DATE > SYSDATE);
169 
170 -- Query for validating Transaction_Type_NAme and selecting Transaction_Type_Id
171     CURSOR Transaction_Type_Cur(p_Transaction_Type_name varchar2) IS
172         SELECT Transaction_Type_Id
173         FROM MTL_TRANSACTION_TYPES
174         WHERE TRANSACTION_TYPE_NAME = p_Transaction_Type_Name
175         AND (DISABLE_DATE IS NULL OR DISABLE_DATE > SYSDATE);
176 
177 -- Query for Selcting Problem_Code
178     CURSOR Fnd_Lookups_Cur(p_Lookup_Meaning varchar2) IS
179         SELECT LOOKUP_CODE
180         FROM FND_LOOKUP_VALUES_VL
181         WHERE MEANING =  p_Lookup_Meaning
182         AND LOOKUP_TYPE = C_REQUEST_PROBLEM_CODE
183         AND ENABLED_FLAG = 'Y'
184         AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
185         AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
186 -- Cursor for Selecting UOM from UOM description.
187     CURSOR Uom_Cur(p_Uom_Desc varchar2) IS
188         SELECT UOM_CODE
189         FROM MTL_UNITS_OF_MEASURE
190         WHERE UNIT_OF_MEASURE =  p_Uom_Desc;
191 -- Cursor for Wip job id.
192     CURSOR WIP_JOB_ID_CUR(p_wo_id NUMBER) IS
193         SELECT A.WIP_ENTITY_ID, C.ORGANIZATION_ID
194         FROM AHL_WORKORDERS A, AHL_VISIT_TASKS_B B, AHL_VISITS_B C
195         WHERE A.WORKORDER_ID =  p_wo_id
196         AND B.VISIT_TASK_ID = A.VISIT_TASK_ID
197         AND C.VISIT_ID = B.VISIT_ID;
198 -- Cursor for Work order operation id.
199     CURSOR WO_OP_CUR(p_wo_id NUMBER, p_oper_seq NUMBER) IS
200         SELECT WORKORDER_OPERATION_ID
201         FROM AHL_WORKORDER_OPERATIONS
202         WHERE WORKORDER_ID =  p_wo_id
203         AND OPERATION_SEQUENCE_NUM = p_oper_seq;
204 -- query for converting condition desc
205    CURSOR CONDITION_CUR (p_condition_desc VARCHAR2) IS
206           SELECT STATUS_ID
207           FROM MTL_MATERIAL_STATUSES
208           WHERE STATUS_CODE= RTRIM(LTRIM(p_condition_desc))
209           AND ENABLED_FLAG = 1;
210 -- query for converting Employee/Recepient to employee_id
211    CURSOR RECEPIENT_CUR (p_recepient_name VARCHAR2) IS
212                   SELECT PERSON_ID
213                   FROM PER_PEOPLE_F
214                   WHERE FULL_NAME = p_recepient_name
215                   AND SYSDATE BETWEEN NVL(EFFECTIVE_START_DATE,SYSDATE) AND
216                   NVL(EFFECTIVE_END_DATE,SYSDATE);
217 
218 -- query for converting Employee/Recepient to employee_id
219    CURSOR DEFAULT_USER_CUR
220    IS
221    SELECT  A.employee_id
222    FROM FND_USER A
223    WHERE USER_ID=FND_GLOBAL.USER_ID;
224 
225 -- Query for Disposition..
226 
227    CURSOR DISPOSITION_CUR(C_WORKORDER_ID NUMBER,C_DISP_ID  NUMBER)
228    IS
229 /* Tamal [R12 APPSPERF fixes]
230  * R12 Drop 4 - SQL ID: 14399309
231  * Bug #4918991
232  */
233 SELECT DISPOSITION_ID
234 FROM AHL_PRD_DISPOSITIONS_B A
235 WHERE
236     A.WORKORDER_ID = C_WORKORDER_ID AND
237     A.DISPOSITION_ID = C_DISP_ID;
238 
239 -- Query based on workorder name.
240 -- Need to strip by OU.
241    CURSOR WORKORDER_CUR(C_WORKORDER_NAME IN VARCHAR2)
242    IS
243 /* Tamal [R12 APPSPERF fixes]
244  * R12 Drop 4 - SQL ID: 14399329
245  * Bug #4918991
246  */
247 SELECT
248     A.JOB_NUMBER,
249     A.WORKORDER_ID,
250     A.ORGANIZATION_ID,
251     A.ORGANIZATION_NAME,
252     A.JOB_STATUS_CODE,
253     A.JOB_STATUS_MEANING,
254     A.WIP_ENTITY_ID
255 FROM
256     AHL_SEARCH_WORKORDERS_V A
257     --AHL_VISITS_B V,
258     --AHL_VISIT_TASKS_B VT,
259     --INV_ORGANIZATION_NAME_V ORG,
260     --FND_LOOKUP_VALUES WO_STS
261 WHERE
262     A.JOB_NUMBER = C_WORKORDER_NAME
263     AND A.JOB_STATUS_CODE NOT IN ('17', '22');
264     --AND A.MASTER_WORKORDER_FLAG = 'N'
265     --AND A.VISIT_TASK_ID = VT.VISIT_TASK_ID
266     --AND VT.VISIT_ID = V.VISIT_ID
267     --AND V.ORGANIZATION_ID = ORG.ORGANIZATION_ID
268     --AND WO_STS.LOOKUP_TYPE = 'AHL_JOB_STATUS'
269     --AND WO_STS.LANGUAGE = USERENV('LANG')
270     --AND WO_STS.LOOKUP_CODE = A.STATUS_CODE;
271 
272 -- Query based on workorder ID.
273 -- Added for public api support.
274    CURSOR WORKORDER_ID_CUR(C_WORKORDER_ID IN VARCHAR2)
275    IS
276    SELECT A.job_number,
277           A.workorder_id,
278           A.organization_id,
279           A.Organization_name,
280           A.JOB_STATUS_CODE,
281           A.job_status_meaning,
282           A.wip_entity_id
283    FROM AHL_SEARCH_WORKORDERS_V A
284    WHERE A.workorder_id=C_WORKORDER_ID;
285 
286    L_WORKDET_REC    WORKORDER_CUR%ROWTYPE;
287    L_WORKDET_ID_REC WORKORDER_ID_CUR%ROWTYPE;
288 
289    l_recepient_id NUMBER;
290 BEGIN
291 
292         x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
293 
294         -- Get the vlaues for Entity ID from Workorders table
295         -- and workorder operation id from workorder_operations table for the given work
296         -- order id and Operation seq number
297         -- ?????????
298 
299     IF G_DEBUG='Y' THEN
300           AHL_DEBUG_PUB.debug('Convert_Name_To_Id');
301     END IF;
302 
303     IF ( (p_x_ahl_mtltxn_rec.Workorder_Id IS NULL
304       OR  p_x_ahl_mtltxn_rec.Workorder_Id = FND_API.G_MISS_NUM)) THEN
305 
306         IF (p_x_ahl_mtltxn_rec.WORKORDER_NAME IS NOT NULL AND
307            p_x_ahl_mtltxn_rec.WORKORDER_NAME <> FND_API.G_MISS_CHAR)
308         THEN
309 
310           OPEN    WORKORDER_CUR(p_x_ahl_mtltxn_rec.WORKORDER_NAME);
311           FETCH   WORKORDER_CUR INTO L_WORKDET_REC;
312           IF  WORKORDER_CUR%NOTFOUND
313           THEN
314             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WORKORDER');
315             FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_name);
316             FND_MSG_PUB.ADD;
317             x_return_status := Fnd_Api.G_RET_STS_ERROR;
318            -- fix for re-open issue in bug# 6773241
319           ELSIF L_WORKDET_REC.JOB_STATUS_CODE<>'3' AND
320                --L_WORKDET_REC.JOB_STATUS_CODE<>'19' AND
321                L_WORKDET_REC.JOB_STATUS_CODE<>'20' AND
322                --L_WORKDET_REC.JOB_STATUS_CODE<>'6' AND
323                L_WORKDET_REC.JOB_STATUS_CODE<>'4' THEN
324                FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_JOB_STATUS');
325                FND_MESSAGE.Set_Token('STATUS',L_WORKDET_REC.job_status_meaning);
326                FND_MSG_PUB.ADD;
327                x_return_status := Fnd_Api.G_RET_STS_ERROR;
328           ELSE
329             p_x_ahl_mtltxn_rec.Workorder_Id                     :=L_WORKDET_REC.WORKORDER_ID;
330             p_x_ahl_mtltxn_rec.Workorder_Status                 :=L_WORKDET_REC.JOB_STATUS_MEANING;
331             p_x_ahl_mtltxn_rec.Workorder_Status_Code            :=L_WORKDET_REC.JOB_STATUS_CODE;
332             p_x_ahl_mtltxn_rec.Organization_Id                  :=L_WORKDET_REC.ORGANIZATION_ID;
333             p_x_ahl_mtltxn_rec.Wip_Entity_Id                    :=L_WORKDET_REC.WIP_ENTITY_ID;
334           END IF; -- WORKORDER_CUR%NOTFOUND
335           CLOSE   WORKORDER_CUR;
336         ELSE -- both Workorder_Id and WORKORDER_NAME are NULLs
337            FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_WORKORDER_ID');
338            FND_MSG_PUB.ADD;
339            x_return_status := Fnd_Api.G_RET_STS_ERROR;
340         END IF; -- p_x_ahl_mtltxn_rec.WORKORDER_NAME
341     ELSE -- workorderId is not null.
342         OPEN WORKORDER_ID_CUR(p_x_ahl_mtltxn_rec.Workorder_Id);
343         FETCH WORKORDER_ID_CUR INTO L_WORKDET_ID_REC;
344         IF WORKORDER_ID_CUR%NOTFOUND
345         THEN
346            FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WORKORDER');
347            FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_Id);
348            FND_MSG_PUB.ADD;
349            x_return_status := Fnd_Api.G_RET_STS_ERROR;
350         -- fix for re-open issue in bug# 6773241
351         ELSIF L_WORKDET_ID_REC.JOB_STATUS_CODE<>'3' AND  -- Released
352               --L_WORKDET_ID_REC.JOB_STATUS_CODE<>'19' AND -- Parts Hold
353               L_WORKDET_ID_REC.JOB_STATUS_CODE<>'20' AND -- pending deferral
354               --L_WORKDET_ID_REC.JOB_STATUS_CODE<>'6' AND  -- on hold
355               L_WORKDET_ID_REC.JOB_STATUS_CODE<>'4'      -- complete
356         THEN
357            FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_JOB_STATUS');
358            FND_MESSAGE.Set_Token('STATUS',L_WORKDET_ID_REC.job_status_meaning);
359            FND_MSG_PUB.ADD;
360            x_return_status := Fnd_Api.G_RET_STS_ERROR;
361         ELSE
362            p_x_ahl_mtltxn_rec.Workorder_Id  := L_WORKDET_ID_REC.WORKORDER_ID;
363            p_x_ahl_mtltxn_rec.Workorder_Status := L_WORKDET_ID_REC.JOB_STATUS_MEANING;
364            p_x_ahl_mtltxn_rec.Workorder_Status_Code := L_WORKDET_ID_REC.JOB_STATUS_CODE;
365            p_x_ahl_mtltxn_rec.Organization_Id := L_WORKDET_ID_REC.ORGANIZATION_ID;
366            p_x_ahl_mtltxn_rec.Wip_Entity_Id :=L_WORKDET_ID_REC.WIP_ENTITY_ID;
367         END IF; -- WORKORDER_ID_CUR%NOTFOUND
368         CLOSE   WORKORDER_ID_CUR;
369     END IF; -- p_x_ahl_mtltxn_tbl(i).Workorder_Id
370 
371     -- Check for operation sequence number.
372     IF ( p_x_ahl_mtltxn_rec.Operation_Seq_num IS NULL
373          OR  p_x_ahl_mtltxn_rec.Operation_Seq_num = FND_API.G_MISS_NUM) THEN
374           FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_OPER_SEQ');
375           FND_MSG_PUB.ADD;
376           x_return_status := Fnd_Api.G_RET_STS_ERROR;
377     END IF;
378 
379     -- Check for errors.
380     IF (x_return_status = Fnd_Api.G_RET_STS_ERROR)
381     THEN
382        RETURN; -- do not proceed for the rest of the validations.
383     END IF;
384 
385     IF (p_x_ahl_mtltxn_rec.Wip_Entity_Id IS NULL
386     OR p_x_ahl_mtltxn_rec.Wip_Entity_Id = FND_API.G_MISS_NUM) THEN
387         IF G_DEBUG='Y' THEN
388           AHL_DEBUG_PUB.debug('Getting WipEntity for['||p_x_ahl_mtltxn_rec.Workorder_Id||']');
389         END IF;
390         OPEN WIP_JOB_ID_CUR(p_x_ahl_mtltxn_rec.Workorder_Id);
391         FETCH WIP_JOB_ID_CUR INTO p_x_ahl_mtltxn_rec.Wip_Entity_Id,p_x_ahl_mtltxn_rec.Organization_Id ;
392         IF(WIP_JOB_ID_CUR%NOTFOUND) THEN
393             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WIP_ENTITY_WO');
394             FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_Id);
395             FND_MSG_PUB.ADD;
396             x_return_status := Fnd_Api.G_RET_STS_ERROR;
397         END IF;
398         CLOSE WIP_JOB_ID_CUR;
399     END IF;
400 
401 
402 
403     IF G_DEBUG='Y' THEN
404           AHL_DEBUG_PUB.debug('after the Wip entity select['||p_x_ahl_mtltxn_rec.Wip_Entity_Id||','||p_x_ahl_mtltxn_rec.Organization_Id||']');
405 
406     END IF;
407 
408 
409     IF (p_x_ahl_mtltxn_rec.Workorder_Operation_Id IS NULL
410     OR p_x_ahl_mtltxn_rec.Workorder_Operation_Id = FND_API.G_MISS_NUM) THEN
411         IF G_DEBUG='Y' THEN
412           AHL_DEBUG_PUB.debug('selecting woopid for['||p_x_ahl_mtltxn_rec.Workorder_Id||','||p_x_ahl_mtltxn_rec.Operation_Seq_num||']');
413 
414     END IF;
415         OPEN WO_OP_CUR(p_x_ahl_mtltxn_rec.Workorder_Id,
416                         p_x_ahl_mtltxn_rec.Operation_Seq_num);
417         FETCH WO_OP_CUR INTO p_x_ahl_mtltxn_rec.Workorder_Operation_Id ;
418         IF(WO_OP_CUR%NOTFOUND) THEN
419             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WO_OP');
420             FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_Id);
421             FND_MESSAGE.Set_Token('OP_SEQUENCE',p_x_ahl_mtltxn_rec.Operation_Seq_num);
422             FND_MSG_PUB.ADD;
423             x_return_status := Fnd_Api.G_RET_STS_ERROR;
424         END IF;
425         CLOSE WO_OP_CUR;
426     END IF;
427     IF G_DEBUG='Y' THEN
428           AHL_DEBUG_PUB.debug('after the woop id select');
429     END IF;
430 
431       --Convert Transaction Type Name into Transaction Type Id
432     IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id IS NULL
433     OR p_x_ahl_mtltxn_rec.Transaction_Type_Id = FND_API.G_MISS_NUM) THEN
434         IF G_DEBUG='Y' THEN
435           AHL_DEBUG_PUB.debug('Converting Txn type name['||p_x_ahl_mtltxn_rec.Transaction_Type_Name||']');
436         END IF;
437         IF (p_x_ahl_mtltxn_rec.Transaction_Type_Name IS  NULL
438            OR p_x_ahl_mtltxn_rec.Transaction_Type_Name = FND_API.G_MISS_CHAR) THEN
439             FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_TXN_TYPE');
440             FND_MSG_PUB.ADD;
441             x_return_status := Fnd_Api.G_RET_STS_ERROR;
442         ELSE
443             OPEN Transaction_Type_Cur(p_x_ahl_mtltxn_rec.Transaction_Type_Name);
444             FETCH Transaction_Type_Cur INTO p_x_ahl_mtltxn_rec.Transaction_Type_Id ;
445             IF(Transaction_Type_Cur%NOTFOUND) THEN
446                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXN_TYPE');
447                 FND_MESSAGE.Set_Token('TXN_TYPE',p_x_ahl_mtltxn_rec.Transaction_Type_Name);
448                 FND_MSG_PUB.ADD;
449                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
450             END IF;
451             CLOSE Transaction_Type_Cur;
452         END IF;
453     END IF;
454     IF G_DEBUG='Y' THEN
455           AHL_DEBUG_PUB.debug('after the txn type select');
456     END IF;
457 
458       -- Convert item segments into item id
459       IF (p_x_ahl_mtltxn_rec.Inventory_Item_Id IS NULL OR p_x_ahl_mtltxn_rec.Inventory_Item_Id = FND_API.G_MISS_NUM) THEN
460          IF G_DEBUG='Y' THEN
461           AHL_DEBUG_PUB.debug('Converting item for['||to_char(p_x_ahl_mtltxn_rec.Organization_Id)||','||p_x_ahl_mtltxn_rec.Inventory_Item_Segments||']');
462         END IF;
463 
464         IF (p_x_ahl_mtltxn_rec.Inventory_Item_Segments IS NULL
465             OR p_x_ahl_mtltxn_rec.Inventory_Item_Segments = FND_API.G_MISS_CHAR) THEN
466                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_ITEM');
467                 FND_MSG_PUB.ADD;
468                 RAISE FND_API.G_EXC_ERROR;
469          ELSE
470             OPEN Item_Cur(p_x_ahl_mtltxn_rec.Organization_Id,
471                         p_x_ahl_mtltxn_rec.Inventory_Item_Segments);
472             FETCH Item_Cur INTO p_x_ahl_mtltxn_rec.Inventory_Item_Id ;
473             IF(Item_Cur%NOTFOUND) THEN
474                 FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_ITEM');
475                 FND_MESSAGE.Set_Token('FIELD',p_x_ahl_mtltxn_rec.Inventory_Item_Segments);
476                 FND_MSG_PUB.ADD;
477                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
478             END IF;
479             CLOSE Item_Cur;
480           END IF;
481 
482       END IF;
483     IF G_DEBUG='Y'
484     THEN
485           AHL_DEBUG_PUB.debug('after the item id select:'||to_char(p_x_ahl_mtltxn_rec.Inventory_Item_Id)||'.');
486     END IF;
487 
488       -- Convert Locator segments into locator id when item is locator controlled.
489       IF (p_x_ahl_mtltxn_rec.Locator_Id IS NULL
490             OR p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
491          IF (p_x_ahl_mtltxn_rec.Locator_Segments IS NOT NULL
492             AND p_x_ahl_mtltxn_rec.Locator_Segments <> FND_API.G_MISS_CHAR) THEN
493             IF G_DEBUG='Y' THEN
494                 AHL_DEBUG_PUB.debug('Converting locator['||to_char(p_x_ahl_mtltxn_rec.Organization_Id)||','||p_x_ahl_mtltxn_rec.Locator_Segments||']');
495             END IF;
496             OPEN Location_Cur(p_x_ahl_mtltxn_rec.Organization_Id,
497                               p_x_ahl_mtltxn_rec.Locator_Segments);
498             FETCH Location_Cur INTO p_x_ahl_mtltxn_rec.Locator_Id,l_locator_segments  ;--Fix for bug number 5903275
499             -- ER 5854712 (if locator not found, it will be created.)
500             /*
501             IF(Location_Cur%NOTFOUND)
502             THEN
503                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATION');
504                 FND_MESSAGE.Set_Token('LOCATOR',p_x_ahl_mtltxn_rec.Locator_Segments);
505                 FND_MSG_PUB.ADD;
506                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
507             ELSE
508             */
509             IF (Location_Cur%FOUND) THEN
510               p_x_ahl_mtltxn_rec.Locator_Segments := l_locator_segments;--Fix for bug number 5903275
511               IF G_DEBUG='Y' THEN
512                  AHL_DEBUG_PUB.debug('Converted locator['||to_char(p_x_ahl_mtltxn_rec.Organization_Id)||','||p_x_ahl_mtltxn_rec.Locator_Segments||']');
513               END IF;
514             END IF;
515             CLOSE Location_Cur;
516         END IF;
517 
518       END IF;
519     IF G_DEBUG='Y' THEN
520           AHL_DEBUG_PUB.debug('after the locator  select');
521     END IF;
522 
523       -- convert reason name into reason id.
524       IF (p_x_ahl_mtltxn_rec.Reason_Id IS NULL OR p_x_ahl_mtltxn_rec.Reason_Id = FND_API.G_MISS_NUM)
525       THEN
526          IF (p_x_ahl_mtltxn_rec.Reason_Name IS NOT NULL
527          AND p_x_ahl_mtltxn_rec.Reason_Name <> FND_API.G_MISS_CHAR)
528          THEN
529             IF G_DEBUG='Y' THEN
530             AHL_DEBUG_PUB.debug('Converting reason name'||p_x_ahl_mtltxn_rec.Reason_Name||']');
531             END IF;
532              OPEN Reason_Cur(p_x_ahl_mtltxn_rec.Reason_Name);
533              FETCH Reason_Cur INTO p_x_ahl_mtltxn_rec.Reason_Id ;
534              IF(Reason_Cur%NOTFOUND) THEN
535                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_REASON');
536                 FND_MESSAGE.Set_Token('REASON',p_x_ahl_mtltxn_rec.Reason_Name);
537                 FND_MSG_PUB.ADD;
538                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
539              END IF;
540              CLOSE Reason_Cur;
541         END IF;
542 
543       END IF;
544 
545     IF G_DEBUG='Y' THEN
546           AHL_DEBUG_PUB.debug('after the reason name select');
547     END IF;
548 
549 
550       --Convert Problem_code_Meaning to Problem_code incase of returns
551 
552       IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
553         IF (p_x_ahl_mtltxn_rec.Problem_Code IS NULL
554                 OR p_x_ahl_mtltxn_rec.Problem_Code = FND_API.G_MISS_CHAR) THEN
555              IF (p_x_ahl_mtltxn_rec.Problem_Code_Meaning IS NOT NULL
556                 AND p_x_ahl_mtltxn_rec.Problem_Code_Meaning <> FND_API.G_MISS_CHAR) THEN
557                  IF G_DEBUG='Y' THEN
558           AHL_DEBUG_PUB.debug('Converting Problem code['||p_x_ahl_mtltxn_rec.Problem_Code_Meaning||']');
559 
560     END IF;
561                  OPEN Fnd_Lookups_Cur(p_x_ahl_mtltxn_rec.Problem_Code_Meaning);
562                  FETCH Fnd_Lookups_Cur INTO p_x_ahl_mtltxn_rec.Problem_Code ;
563                  IF(Fnd_Lookups_Cur%NOTFOUND) THEN
564                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_PROBLEM_CODE_INVALID');
565                     FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Problem_Code_Meaning);
566                     FND_MSG_PUB.ADD;
567                     x_return_status := Fnd_Api.G_RET_STS_ERROR;
568                  END IF;
569                  CLOSE Fnd_Lookups_Cur;
570             END IF;
571         END IF;
572         IF G_DEBUG='Y' THEN
573           AHL_DEBUG_PUB.debug('after problem code select');
574         END IF;
575         IF (p_x_ahl_mtltxn_rec.Condition_Desc IS NOT NULL
576         AND  p_x_ahl_mtltxn_rec.Condition_Desc <> FND_API.G_MISS_CHAR)
577         THEN
578                 IF G_DEBUG='Y' THEN
579                 AHL_DEBUG_PUB.debug('Getting Condition for['||p_x_ahl_mtltxn_rec.Condition_Desc||']');
580                 END IF;
581             OPEN CONDITION_CUR(p_x_ahl_mtltxn_rec.Condition_Desc);
582             FETCH CONDITION_CUR INTO p_x_ahl_mtltxn_rec.Condition;
583 
584             IF(CONDITION_CUR%NOTFOUND) THEN
585                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_COND_INVALID');
586                 FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Condition_Desc);
587                 FND_MSG_PUB.ADD;
588                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
589             END IF;
590 
591             CLOSE CONDITION_CUR;
592         END IF;
593 
594 
595         IF G_DEBUG='Y' THEN
596           AHL_DEBUG_PUB.debug('after the CONDITION select['||p_x_ahl_mtltxn_rec.CONDITION||']');
597         END IF;
598 
599       END IF;
600 
601     IF (p_module_type = 'JSP') THEN
602 
603         -- nullify id and retrive id from name entered.
604         p_x_ahl_mtltxn_rec.RECEPIENT_ID := NULL;
605 
606         IF (p_x_ahl_mtltxn_rec.recepient_name IS NOT NULL AND  p_x_ahl_mtltxn_rec.recepient_name <> FND_API.G_MISS_CHAR)
607         THEN
608             OPEN RECEPIENT_CUR(p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
609             FETCH RECEPIENT_CUR INTO p_x_ahl_mtltxn_rec.RECEPIENT_ID;
610             IF(RECEPIENT_CUR%NOTFOUND)
611             THEN
612                 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
613                 THEN
614                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
615                 ELSE
616                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
617                 END IF;
618                 FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
619                 FND_MSG_PUB.ADD;
620                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
621             END IF;
622             CLOSE RECEPIENT_CUR;
623         END IF;
624 
625     ELSE
626         --if backend call.
627         IF (p_x_ahl_mtltxn_rec.recepient_name IS NOT NULL AND p_x_ahl_mtltxn_rec.recepient_name <> FND_API.G_MISS_CHAR)
628         THEN
629             -- if name is availave retrive id from name
630             OPEN RECEPIENT_CUR(p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
631             FETCH RECEPIENT_CUR INTO l_recepient_id;
632             IF(RECEPIENT_CUR%NOTFOUND)
633             THEN
634                 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
635                 THEN
636                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
637                 ELSE
638                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
639                 END IF;
640                 FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
641                 FND_MSG_PUB.ADD;
642                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
643             ELSE
644                 -- if id is available then see if this id is the same as the one retrived from the name.
645                 IF(p_x_ahl_mtltxn_rec.recepient_id IS NOT NULL AND p_x_ahl_mtltxn_rec.recepient_id <> FND_API.G_MISS_NUM)
646                 THEN
647                     IF(l_recepient_id <> p_x_ahl_mtltxn_rec.RECEPIENT_ID)
648                     THEN
649                         IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
650                         THEN
651                             FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
652                         ELSE
653                             FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
654                         END IF;
655                         FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
656                         FND_MSG_PUB.ADD;
657                         x_return_status := Fnd_Api.G_RET_STS_ERROR;
658                     END IF;
659                 ELSE
660                     -- if id is not available then populate the id with the id retrived.
661                     p_x_ahl_mtltxn_rec.recepient_id:=l_recepient_id;
662                 END IF;
663             END IF;
664             CLOSE RECEPIENT_CUR;
665         END IF;
666     END IF;
667 
668     IF(p_x_ahl_mtltxn_rec.recepient_id IS NULL OR p_x_ahl_mtltxn_rec.recepient_id = FND_API.G_MISS_NUM)
669     THEN
670         IF(NVL(FND_PROFILE.VALUE('AHL_PRD_MTX_RECEPIENT'),'N')='Y')
671         THEN
672             IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
673             THEN
674                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_MANDATORY2');
675             ELSE
676                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_MANDATORY');
677             END IF;
678             FND_MSG_PUB.ADD;
679             x_return_status := Fnd_Api.G_RET_STS_ERROR;
680         ELSE
681             OPEN  DEFAULT_USER_CUR;
682             FETCH DEFAULT_USER_CUR INTO p_x_ahl_mtltxn_rec.RECEPIENT_ID;
683             IF DEFAULT_USER_CUR%NOTFOUND
684             THEN
685                 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
686                 THEN
687                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
688                 ELSE
689                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
690                 END IF;
691                 FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
692                 FND_MSG_PUB.ADD;
693                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
694             END IF;
695             CLOSE DEFAULT_USER_CUR;
696         END IF;
697     END IF;
698 
699       --Convert UOM DESC into UOM
700       IF (p_x_ahl_mtltxn_rec.Uom IS NULL
701             OR p_x_ahl_mtltxn_rec.Uom = FND_API.G_MISS_CHAR) THEN
702          IF G_DEBUG='Y' THEN
703           AHL_DEBUG_PUB.debug('Converting UOM['||p_x_ahl_mtltxn_rec.Uom_Desc||']');
704 
705     END IF;
706          IF (p_x_ahl_mtltxn_rec.Uom_Desc IS NULL
707             OR p_x_ahl_mtltxn_rec.Uom_Desc = FND_API.G_MISS_CHAR) THEN
708                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_UOM');
709                 FND_MSG_PUB.ADD;
710                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
711          ELSE
712              OPEN Uom_Cur(p_x_ahl_mtltxn_rec.Uom_Desc);
713              FETCH Uom_Cur INTO p_x_ahl_mtltxn_rec.Uom ;
714              IF(Uom_Cur%NOTFOUND) THEN
715                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_UOM');
716                 FND_MESSAGE.Set_Token('UOM',p_x_ahl_mtltxn_rec.Uom_Desc);
717                 FND_MSG_PUB.ADD;
718                 x_return_status := Fnd_Api.G_RET_STS_ERROR;
719              END IF;
720              CLOSE Uom_Cur;
721         END IF;
722 
723       END IF;
724     IF G_DEBUG='Y' THEN
725           AHL_DEBUG_PUB.debug('after UOM select');
726 
727     END IF;
728 EXCEPTION
729           WHEN FND_API.G_EXC_ERROR THEN
730               x_return_status := Fnd_Api.G_RET_STS_ERROR;
731 
732 END Convert_Name_To_Id;
733 
734 
735 
736 
737 /***********************************************************************/
738 
739 
740 /***********************************************************************/
741 
742 PROCEDURE PERFORM_MTL_TXN
743 (
744     p_api_version        IN            NUMBER     := 1.0,
745     p_init_msg_list      IN            VARCHAR2   := FND_API.G_FALSE,
746     p_commit             IN            VARCHAR2   := FND_API.G_FALSE,
747     p_validation_level   IN            NUMBER     := FND_API.G_VALID_LEVEL_FULL,
748     p_default            IN            VARCHAR2   := FND_API.G_FALSE,
749     p_module_type        IN            VARCHAR2   := NULL,
750     p_create_sr          IN            VARCHAR2,
751     p_x_ahl_mtltxn_tbl   IN OUT NOCOPY Ahl_Mtltxn_Tbl_Type,
752     x_return_status      OUT NOCOPY           VARCHAR2,
753     x_msg_count          OUT NOCOPY           NUMBER,
754     x_msg_data           OUT NOCOPY           VARCHAR2
755 )
756     IS
757     l_api_name              CONSTANT VARCHAR2(30) := 'PERFORM_MTL_TXN';
758     l_api_version           CONSTANT NUMBER       := 1.0;
759     l_full_name             CONSTANT VARCHAR2(60) := G_PKG_NAME || '.' || l_api_name;
760     l_debug                 CONSTANT VARCHAR2(90) := 'ahl.plsql.'||l_full_name;
761     --l_count               NUMBER;
762     l_x_Mtl_Txn_id          NUMBER;
763     l_sch_Mtl_Id            NUMBER;
764     l_Txn_Header_Id         NUMBER;
765     l_Txn_tmp_Id            NUMBER;
766     l_x_sr_rec_tbl          AHL_PRD_NONROUTINE_PVT.Sr_task_tbl_type;
767     l_Txn_Id_Tbl            TXN_INTF_ID_TBL;
768     l_instance_id_tbl       INSTANCE_ID_TBL;
769     l_eam_item_type_id_tbl  ITEM_TYPE_TBL;
770     l_timeout               NUMBER;
771     l_outcome               BOOLEAN;
772     l_error_msg             varchar2(240);
773     l_error_code            varchar2(240);
774     l_error                 BOOLEAN;
775     l_nonrtn_wo_id          NUMBER;
776     l_item_instance_id      NUMBER;
777     l_eam_item_type_id      NUMBER;
778     j                       INTEGER;
779 
780     l_completed_quantity             NUMBER;
781     l_object_version_number          NUMBER;
782     l_uom_code                       AHL_SCHEDULE_MATERIALS.UOM%TYPE;
783     l_quantity                       NUMBER;
784 
785     l_concatenated_segments          mtl_system_items_kfv.concatenated_segments%TYPE;
786     l_workorder_name                 ahl_workorders.workorder_name%TYPE;
787 
788     l_reservation_flag               VARCHAR2(1);
789     l_sr_mtl_id_map_tbl              SR_MTL_ID_MAP_TBL;
790 
791     --Query to get the error message
792     CURSOR Txn_Error_Cur(p_txn_Id NUMBER) IS
793         SELECT intf.ERROR_EXPLANATION ,intf.ERROR_CODE, kfv.concatenated_segments,
794                WO.workorder_name
795         --FROM MTL_MATERIAL_TRANSACTIONS_TEMP
796         FROM MTL_TRANSACTIONS_INTERFACE INTF, mtl_system_items_kfv kfv,
797                      ahl_workorders WO
798         --WHERE TRANSACTION_TEMP_ID = p_txn_Id;
799         WHERE TRANSACTION_INTERFACE_ID = p_txn_Id
800                   AND intf.inventory_item_id = kfv.inventory_item_id
801                   AND intf.organization_id = kfv.organization_id
802                   AND WO.wip_entity_id = intf.transaction_source_id;
803 
804     -- SORAO :: Changed for USAF backporting project :: Feb 2012
805     --Query to get the error message when multiple txns are created in case of rebuildable non-serial item.
806     --l_txn_tbl has only the last txn generated.
807     --fix for bug# 13689288
808     CURSOR m_Txn_Error_Cur(p_inventory_item_id IN NUMBER, p_workorder_id IN NUMBER, p_hdr_txn_Id IN NUMBER) IS
809         SELECT intf.ERROR_EXPLANATION, intf.ERROR_CODE, kfv.concatenated_segments,
810                WO.workorder_name
811         FROM MTL_TRANSACTIONS_INTERFACE INTF, mtl_system_items_kfv kfv,
812                      ahl_workorders WO
813         WHERE TRANSACTION_HEADER_ID = p_hdr_txn_Id
814                   AND intf.inventory_item_id = p_inventory_item_id
815                   AND wo.workorder_id = p_workorder_id
816                   AND intf.inventory_item_id = kfv.inventory_item_id
817                   AND intf.organization_id = kfv.organization_id
818                   AND WO.wip_entity_id = intf.transaction_source_id
819                   AND intf.ERROR_CODE IS NOT NULL
820                   AND ROWNUM < 2;
821 
822 
823 
824     -- Query for finding the scheduled materials
825     CURSOR Sch_Mtl_Cur(p_org_id NUMBER, p_workorder_Op_id NUMBER,
826                        p_item_Id NUMBER) IS
827         SELECT COMPLETED_QUANTITY, UOM, object_version_number
828         FROM AHL_SCHEDULE_MATERIALS A
829         WHERE ORGANIZATION_ID = p_org_id
830         AND A.WORKORDER_OPERATION_ID =p_workorder_op_id
831         AND A.INVENTORY_ITEM_ID = p_item_Id
832         AND A.MATERIAL_REQUEST_TYPE <> 'FORECAST'
833         --AND A.status='ACTIVE'
834         --Added for FP ER# 6310725.
835         AND A.status IN ('ACTIVE','HISTORY', 'IN-SERVICE')
836         FOR UPDATE OF COMPLETED_QUANTITY NOWAIT;
837 
838     -- Query to check existence of AHL_SCHEDULE_MATERIALS record.
839     CURSOR Sch_Mtl_Exists_Cur(p_org_id NUMBER, p_workorder_Op_id NUMBER,
840                               p_item_Id NUMBER) IS
841         SELECT 'x'
842         FROM AHL_SCHEDULE_MATERIALS A
843         WHERE ORGANIZATION_ID = p_org_id
844         AND A.WORKORDER_OPERATION_ID =p_workorder_op_id
845         AND A.INVENTORY_ITEM_ID = p_item_Id
846         AND A.MATERIAL_REQUEST_TYPE <> 'FORECAST'
847         --AND A.status='ACTIVE';
848         --Added for FP ER# 6310725.
849         AND A.status IN ('ACTIVE','HISTORY','IN-SERVICE');
850 
851     /* commented out as part of FP bug fix 5172147. Instead querying disposition ID in
852      * procedure validate_txn_rec.
853 
854        -- Cursor to check if disposition exists for the item instance.
855        CURSOR ahl_mtl_ret_disp_csr (p_item_instance_id  IN NUMBER,
856                                     p_workorder_id  IN NUMBER) IS
857 
858         /* Tamal [R12 APPSPERF fixes]
859          * R12 Drop 4 - SQL ID: 14399558
860          * Bug #4918991
861          */
862         /*
863         SELECT 'x'
864         FROM AHL_PRD_DISPOSITIONS_B DISP, AHL_WORKORDERS WO, CSI_ITEM_INSTANCES CSI
865         WHERE
866             DISP.INSTANCE_ID = CSI.INSTANCE_ID AND
867             DISP.WORKORDER_ID = WO.WORKORDER_ID AND
868             WO.WIP_ENTITY_ID = CSI.WIP_JOB_ID AND
869             CSI.LOCATION_TYPE_CODE NOT IN ('PO', 'IN-TRANSIT', 'PROJECT', 'INVENTORY') AND
870             TRUNC(SYSDATE) BETWEEN TRUNC(NVL(CSI.ACTIVE_START_DATE, SYSDATE)) AND TRUNC(NVL(CSI.ACTIVE_END_DATE, SYSDATE)) AND
871             DISP.INSTANCE_ID = p_item_instance_id AND
872             DISP.WORKORDER_ID = p_workorder_id AND
873             CSI.QUANTITY > 0;
874        */
875 
876        l_junk   VARCHAR2(1);
877 
878        -- Added for FP bug# 6086419.
879        l_mr_asso_tbl AHL_PRD_NONROUTINE_PVT.MR_Association_tbl_type;
880 
881        -- sracha: Added for ER 5854712.
882        l_valid_flag  BOOLEAN;
883        -- pdoki added for Marshalling Enhancement, Start.
884        -- Cursor to get RTS workorder details existing in the same visit as of the given workorder and for the given instance.
885         CURSOR Get_Rts_Workorder_Dtls(C_WORKORDER_ID NUMBER, c_ins_id  NUMBER)
886         IS
887         SELECT  WO.WORKORDER_ID,
888                 WO.WORKORDER_NAME,
889                 WO.WIP_ENTITY_ID,
890                 WDJ.REBUILD_ITEM_ID,
891                 wdj.MAINTENANCE_OBJECT_ID
892         FROM    AHL_WORKORDERS WO,
893                 WIP_DISCRETE_JOBS WDJ,
894                 AHL_VISIT_TASKS_B VTS,
895                 AHL_WORKORDERS WO1
896         WHERE   WDJ.WIP_ENTITY_ID = WO.WIP_ENTITY_ID
897         AND     WO.STATUS_CODE NOT IN ('7','12','17','22' )  -- Cancelled,Closed,Draft and Deleted
898         AND     WO.VISIT_ID = WO1.VISIT_ID
899         AND     wo1.workorder_id = C_WORKORDER_ID
900         AND     VTS.VISIT_TASK_ID = WO.VISIT_TASK_ID
901         AND     NVL(VTS.RETURN_TO_SUPPLY_FLAG,'N') = 'Y'
902         AND     VTS.INSTANCE_ID = C_INS_ID ;
903 
904         l_rts_wo_dtls_rec   Get_Rts_Workorder_Dtls%ROWTYPE;
905 
906          CURSOR Check_WO_WO_Resv_Exists( c_wip_entity_id NUMBER)
907          IS
908          SELECT RESERVATION_ID,
909                 DEMAND_SOURCE_LINE_DETAIL,
910                 DEMAND_SOURCE_HEADER_ID,
911                 SUPPLY_SOURCE_HEADER_ID,
912                 PRIMARY_RESERVATION_QUANTITY
913          FROM   MTL_RESERVATIONS
914          WHERE  SUPPLY_SOURCE_TYPE_ID = 5
915          AND    DEMAND_SOURCE_TYPE_ID = 5
916          AND    SUPPLY_SOURCE_HEADER_ID = c_wip_entity_id ;
917 
918          l_resv_rec Check_WO_WO_Resv_Exists%ROWTYPE;
919          l_reservable NUMBER;
920          l_wo_wo_resv_flag  BOOLEAN;
921          l_del_flag  BOOLEAN;
922          l_create_flag BOOLEAN;
923 
924          l_rsv_rec AHL_MM_RESERVATIONS_PVT.mtl_reservation_rec_type;
925          l_serial_number_tbl AHL_MM_RESERVATIONS_PVT.serial_number_tbl_type;
926          l_x_serial_number_tbl AHL_MM_RESERVATIONS_PVT.number_table_type;
927          -- pdoki added for Marshalling Enhancement, End.
928 
929 
930     BEGIN
931         -- Standard start of API savepoint
932         SAVEPOINT PERFORM_MTL_TXN_PVT;
933 
934         -- Standard call to check for call compatibility
935         IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
936                                            G_PKG_NAME) THEN
937             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
938         END IF;
939         -- Initialize message list if p_init_msg_list is set to TRUE
940         IF FND_API.To_Boolean(p_init_msg_list) THEN
941             FND_MSG_PUB.Initialize;
942         END IF;
943 
944         -- Initialize API return status to success
945         x_return_status := FND_API.G_RET_STS_SUCCESS;
946 
947         -- initialize
948         G_nonserial_ii_tbl.delete;
949 
950         -- call user hook api.
951         -- User Hooks
952         IF (JTF_USR_HKS.Ok_to_execute('AHL_PRD_MATERIAL_TXN_CUHK', 'PERFORM_MTLTXN_PRE', 'B', 'C')) THEN
953            Perform_MtlTxn_Pre(p_x_ahl_mtltxn_tbl => p_x_ahl_mtltxn_tbl,
954                               x_msg_count => x_msg_count,
955                               x_msg_data => x_msg_data,
956                               x_return_status => x_return_status);
957            IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
958              RAISE FND_API.G_EXC_ERROR;
959            ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
960              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
961            END IF;
962         END IF;
963 
964         dumpInput(p_x_ahl_mtltxn_tbl);
965 
966 
967         IF G_DEBUG='Y' THEN
968           AHL_DEBUG_PUB.enable_debug;
969           AHL_DEBUG_PUB.debug('Entered ahl mtl api');
970         END IF;
971 
972         IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
973 
974             -- Validation LOOP.
975             --l_Error := false;
976             FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST  LOOP
977 
978                 IF (p_module_type = 'JSP') THEN
979                    -- Set all the Ids to null for which there is an LOV.
980                    p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id    := FND_API.G_MISS_NUM;
981                    p_x_ahl_mtltxn_tbl(i).Locator_Id             := FND_API.G_MISS_NUM;
982                    p_x_ahl_mtltxn_tbl(i).Reason_Id              := FND_API.G_MISS_NUM;
983                    p_x_ahl_mtltxn_tbl(i).Problem_Code           := FND_API.G_MISS_CHAR;
984                    --p_x_ahl_mtltxn_tbl(i).Uom                    := FND_API.G_MISS_CHAR;
985                    IF (p_x_ahl_mtltxn_tbl(i).disposition_id IS NOT NULL AND
986                        p_x_ahl_mtltxn_tbl(i).disposition_id = -1) THEN
987                        -- disposition id is set to -1 to disable Disp LOV on UI.
988                       p_x_ahl_mtltxn_tbl(i).disposition_id := NULL;
989                       --Sareepar, FP  PIE
990                       p_x_ahl_mtltxn_tbl(i).Service_Type_Code := FND_API.G_MISS_CHAR;
991                    END IF;
992                 END IF;
993                 /*Public api changes: Moved to Convert_Name_To_Id api
994                 --Check the context fields
995                 IF ( (p_x_ahl_mtltxn_tbl(i).Workorder_Id IS NULL
996                  OR  p_x_ahl_mtltxn_tbl(i).Workorder_Id = FND_API.G_MISS_NUM)) THEN
997                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_WORKORDER_ID');
998                     FND_MSG_PUB.ADD;
999                                         l_error := true;
1000                 ELSIF ( p_x_ahl_mtltxn_tbl(i).Operation_Seq_num IS NULL
1001                  OR  p_x_ahl_mtltxn_tbl(i).Operation_Seq_num = FND_API.G_MISS_NUM) THEN
1002                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_OPER_SEQ');
1003                     FND_MSG_PUB.ADD;
1004                                         l_error := true;
1005                 ELSE
1006                 */
1007                    IF G_DEBUG='Y' THEN
1008                        AHL_DEBUG_PUB.debug('calling Convert_Name_To_Id for i=['||i||']');
1009                    END IF;
1010 
1011                     -- This procedure will convert name parameters into IDs in the input
1012                     Convert_Name_To_Id(p_x_ahl_mtltxn_rec => p_x_ahl_mtltxn_tbl(i),
1013                                        p_module_type => p_module_type ,
1014                                    x_return_status  => x_return_status  );
1015 
1016                    IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1017                      --l_error := true;
1018                      -- raise error if mandatory paramaters missing or WO-OP
1019                      -- validation fails.
1020                      RAISE FND_API.G_EXC_ERROR;
1021 
1022                    ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1023                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1024                    END IF;
1025 
1026 
1027                    IF G_DEBUG='Y' THEN
1028                       AHL_DEBUG_PUB.debug('calling Validate_Txn_rec for i=['||i||']');
1029                    END IF;
1030 
1031                    --Call  Validate_Txn(Ahl_Mtltxn_rec)  to validate the material txn record.
1032                    Validate_Txn_rec(p_x_ahl_mtltxn_rec => p_x_ahl_mtltxn_tbl(i),
1033                            x_item_instance_id   => l_item_instance_id,
1034                            x_return_status => x_Return_Status,
1035                            x_msg_data       => x_msg_data,
1036                            x_msg_count      => x_msg_Count,
1037                            x_eam_item_type_id => l_eam_item_type_id );
1038 
1039                    IF G_DEBUG='Y' THEN
1040                        AHL_DEBUG_PUB.debug('After calling Validate_Txn_rec');
1041                    END IF;
1042 
1043                    IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1044                       l_error := true;
1045 
1046                       IF G_DEBUG='Y' THEN
1047                           AHL_DEBUG_PUB.debug('Error in Validation');
1048                       END IF;
1049                    ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1050                       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1051 
1052                       IF G_DEBUG='Y' THEN
1053                           AHL_DEBUG_PUB.debug('Unexpected error in Validate_Txn_rec');
1054                       END IF;
1055                    ELSE
1056                       l_instance_id_tbl(i) := l_item_instance_id;
1057                       l_eam_item_type_id_tbl(i) := l_eam_item_type_id;
1058                    END IF;
1059                 -- END IF; -- commented out for public api changes.
1060 
1061             END LOOP;
1062             -- End of Validation LOOP
1063             IF (l_Error) THEN
1064                RAISE FND_API.G_EXC_ERROR;
1065             END IF;
1066 
1067             -- Inteface table insert.
1068             l_txn_Header_Id := NULL;
1069             l_Error := false;
1070             FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST  LOOP
1071 
1072 
1073                 l_reservation_flag := 'N';
1074                 IF (p_x_ahl_mtltxn_tbl(i).serial_number IS NOT NULL) THEN
1075                     -- Added in R12: Serial Reservation.. (to relieve reservation if serial number
1076                     -- is reserved against a different demand source)
1077                     Relieve_Serial_Reservation(p_ahl_mtl_txn_rec  => p_x_ahl_mtltxn_tbl(i),
1078                                                x_reservation_flag => l_reservation_flag,
1079                                                x_return_status => x_return_status);
1080                     IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1081                         l_error := true;
1082                         RAISE FND_API.G_EXC_ERROR;
1083                     ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1084                         l_error := true;
1085                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1086                     END IF;
1087 
1088                 END IF;
1089 
1090                 -- For an issue transaction and return transaction (bug 5499575)
1091                 -- IF Material requlrements are not existing in the  AHL_SCHEDULE_MATERIALS
1092                 -- then insert into the scheduled materials table with submitted status.
1093                 OPEN Sch_Mtl_Exists_Cur(p_x_ahl_mtltxn_tbl(i).Organization_Id,
1094                          p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id,
1095                          p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
1096                 FETCH Sch_Mtl_Exists_Cur INTO l_junk;
1097 
1098                 If(Sch_Mtl_Exists_Cur%NOTFOUND) THEN
1099 
1100                           --Check if the material exists in the AHL_SCHEDULE_MATERIALS table
1101                           --for the given work order operation id.
1102                           --IF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
1103 
1104                               Insert_Sch_Mtl_Row( p_mtl_txn_rec    => p_x_ahl_mtltxn_tbl(i),
1105                                                   x_return_status  => x_Return_Status,
1106                                                   x_msg_count      => x_Msg_Count,
1107                                                   x_msg_data       => x_Msg_Data,
1108                                                   x_ahl_sch_mtl_id => l_sch_Mtl_Id);
1109 
1110 
1111                               IF G_DEBUG='Y' THEN
1112                                   AHL_DEBUG_PUB.debug('after Sch_Mtl insert api');
1113                               END IF;
1114 
1115                               IF (x_return_status = FND_API.G_RET_STS_ERROR
1116                                   OR x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1117                                    CLOSE Sch_Mtl_Exists_Cur;
1118                                    FND_MESSAGE.Set_Name('AHL','AHL_PRD_SCHMTLAPI_ERROR');
1119                                    FND_MESSAGE.Set_Token('MSG',x_msg_data);
1120                                    FND_MSG_PUB.ADD;
1121                                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1122                               END IF;
1123                           --END IF; -- fix for bug# 5499575
1124 
1125                 END IF;
1126                 CLOSE Sch_Mtl_Exists_Cur;
1127 
1128                 --call Insert_Interface_Temp API to insert data into transaction
1129                 --temp tables. F
1130 
1131                 IF G_DEBUG='Y' THEN
1132                        AHL_DEBUG_PUB.debug('Calling Insert_Txn_Intf...');
1133                 END IF;
1134 
1135                 -- Added l_eam_item_type_id_tbl(i) for FP ER# 6310766.
1136                 Insert_Mtl_Txn_Intf(p_x_ahl_mtl_txn_rec  => p_x_ahl_mtltxn_tbl(i),
1137                         p_eam_item_type_id   => l_eam_item_type_id_tbl(i),
1138                         p_x_txn_Hdr_Id       => l_txn_Header_Id,
1139                         p_x_txn_intf_Id      => l_txn_tmp_Id,
1140                         p_reservation_flag   => l_reservation_flag, -- added for R12.
1141                         x_return_status      => x_return_status
1142                         );
1143 
1144                 l_txn_Id_Tbl(i) := l_Txn_tmp_Id;
1145                 IF G_DEBUG='Y' THEN
1146                     AHL_DEBUG_PUB.debug('After Calling Insert_Txn_Intf...ret_status['||x_return_status||']');
1147                     AHL_DEBUG_PUB.debug('Ahl_mtltxn_id'||p_x_ahl_mtltxn_tbl(i).ahl_mtltxn_id);
1148                 END IF;
1149 
1150 
1151                 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1152                       l_error := true;
1153                 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1154                       l_error := true;
1155                       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1156                 END IF;
1157 
1158             END LOOP; -- End of loop for Interface table inserts
1159 
1160             IF(l_error )       THEN
1161                 RAISE FND_API.G_EXC_ERROR;
1162             END IF;
1163             -- Now process the interface records
1164             IF G_DEBUG='Y' THEN
1165                  AHL_DEBUG_PUB.debug('Before calling wip_mtlInterfaceProc_pub.processInterface....');
1166             END IF;
1167 
1168             wip_mtlInterfaceProc_pub.processInterface(
1169                                 p_txnHdrId  => l_Txn_Header_Id,
1170                                 x_returnStatus  => x_return_status
1171                                 );
1172 
1173             --Adithya added the following code to fix bugs 5611465 and 6962468
1174               mo_global.init('AHL');
1175 
1176             -- SORAO :: Changed for USAF backporting project :: Feb 2012
1177             -- modified to print return status (bug# 13689288)
1178             --IF(x_return_status = FND_API.G_RET_STS_UNEXP_ERROR OR FND_API.G_RET_STS_ERROR ) THEN
1179             --IF(x_return_status = FND_API.G_RET_STS_UNEXP_ERROR  ) THEN
1180               IF G_DEBUG='Y' THEN
1181                     -- AHL_DEBUG_PUB.debug('wip_mtlInterfaceProc_pub.processInterface....errored');
1182                     -- AHL_DEBUG_PUB.debug('count of error msgs: ' || FND_MSG_PUB.COUNT_MSG);
1183                     AHL_DEBUG_PUB.debug('After call to wip_mtlInterfaceProc_pub.processInterface...x_return_status[' || x_return_status ||']');
1184                     AHL_DEBUG_PUB.debug('count of msgs: ' || FND_MSG_PUB.COUNT_MSG);
1185               END IF;
1186               --RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1187             --END IF;
1188 
1189         END IF;
1190 
1191         -- Now  Loop thru the transaction Id table, Check Errors and update AHL tables
1192         IF (l_txn_Id_Tbl.COUNT > 0) THEN
1193 
1194             -- This loop checks for errors. No interface record implies
1195             -- tha there is no error.
1196             l_error := false;
1197             FOR i IN l_txn_Id_Tbl.FIRST..l_txn_Id_Tbl.LAST  LOOP
1198 
1199               -- SORAO :: Changed for USAF backporting project :: Feb 2012
1200               -- modified for multiple txns case. fix for bug# 13689288
1201               IF (l_eam_item_type_id_tbl(i) = wip_constants.rebuild_item_type AND p_x_ahl_mtltxn_tbl(i).Quantity > 1) THEN
1202                 OPEN m_Txn_Error_cur(p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id, p_x_ahl_mtltxn_tbl(i).workorder_id,  l_Txn_Header_Id);
1203                 FETCH m_Txn_Error_cur INTO l_error_msg,l_error_code,
1204                                            l_concatenated_segments, l_workorder_name;
1205                 IF(m_Txn_Error_cur%FOUND AND (l_error_code IS NOT NULL
1206                     OR trim(l_error_code) = '')) THEN
1207 
1208                       IF G_DEBUG='Y' THEN
1209                          AHL_DEBUG_PUB.debug('Error in transaction['||l_error_msg||']');
1210                       END IF;
1211 
1212                       FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
1213                       FND_MESSAGE.Set_Token('MSG',l_error_msg);
1214                       FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
1215                       FND_MESSAGE.Set_Token('WO_NAME',l_workorder_name);
1216                       FND_MSG_PUB.ADD;
1217                       l_error := true;
1218                 END IF;
1219                 CLOSE m_Txn_Error_cur;
1220 
1221               ELSE
1222 
1223 
1224                 OPEN Txn_Error_cur(l_txn_Id_Tbl(i));
1225                 FETCH Txn_Error_cur INTO l_error_msg,l_error_code,
1226                                        l_concatenated_segments, l_workorder_name;
1227                 IF(Txn_Error_cur%FOUND AND (l_error_code IS NOT NULL
1228                     OR trim(l_error_code) = '')) THEN
1229 
1230                       IF G_DEBUG='Y' THEN
1231                          AHL_DEBUG_PUB.debug('Error in transaction['||l_error_msg||']');
1232                       END IF;
1233 
1234                       FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
1235                       FND_MESSAGE.Set_Token('MSG',l_error_msg);
1236                       FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
1237                       FND_MESSAGE.Set_Token('WO_NAME',l_workorder_name);
1238                       FND_MSG_PUB.ADD;
1239                       l_error := true;
1240                 END IF;
1241                 CLOSE Txn_Error_cur;
1242               END IF;
1243             END LOOP;
1244 
1245 
1246             --IF(l_error ) THEN
1247             IF(l_error) OR (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR OR x_return_status = FND_API.G_RET_STS_ERROR ) THEN
1248                 AHL_DEBUG_PUB.debug('wip_mtlInterfaceProc_pub.processInterface....errored');
1249                 AHL_DEBUG_PUB.debug('count of error msgs: ' || FND_MSG_PUB.COUNT_MSG);
1250                 RAISE FND_API.G_EXC_ERROR;
1251             END IF;
1252 
1253             -- No errors returned by  WIP API.Initialize message list to
1254             -- remove 'Txn success' message.
1255             IF FND_API.To_Boolean(p_init_msg_list) THEN
1256                FND_MSG_PUB.Initialize;
1257             END IF;
1258 
1259             FOR i IN l_txn_Id_Tbl.FIRST..l_txn_Id_Tbl.LAST  LOOP
1260 
1261                 -- Tamal: Bug #4095376: Begin
1262                 -- For all cases (i.e. ISSUE / RETURN + whether found in AHL_SCHEDULE_MATERIALS) do the following
1263                 l_quantity :=  p_x_ahl_mtltxn_tbl(i).quantity;
1264 
1265                 -- The following depends on the fact that ahl_schedule_materials records all quantities in the primary_uom_code
1266                 -- of the item, which is the case currently as it is a requirement from WIP
1267                 SELECT PRIMARY_UOM_CODE INTO l_uom_code
1268                 FROM MTL_SYSTEM_ITEMS_B
1269                 WHERE INVENTORY_ITEM_ID = p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id
1270                 AND ORGANIZATION_ID = p_x_ahl_mtltxn_tbl(i).Organization_Id;
1271 
1272                 IF (l_uom_code <> p_x_ahl_mtltxn_tbl(i).uom)
1273                 THEN
1274                     l_quantity := inv_convert.inv_um_convert
1275                     (
1276                     item_id         => p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id,
1277                     precision       => null,
1278                     from_quantity   => p_x_ahl_mtltxn_tbl(i).quantity,
1279                     from_unit       => p_x_ahl_mtltxn_tbl(i).uom,
1280                     to_unit         => l_uom_code,
1281                     from_name       => null,
1282                     to_name         => null
1283                     );
1284 
1285                     IF (l_quantity < 0)
1286                     THEN
1287                        FND_MESSAGE.Set_Name('AHL', 'AHL_PRD_UOMCONVERT_ERROR');
1288                        FND_MESSAGE.Set_Token('UOM_FROM', p_x_ahl_mtltxn_tbl(i).uom);
1289                        FND_MESSAGE.Set_Token('UOM_TO', l_uom_code);
1290                        FND_MSG_PUB.ADD;
1291                        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1292                     END IF;
1293                 END IF;
1294                 -- Tamal: Bug #4095376: End
1295 
1296                 OPEN Sch_Mtl_Cur(p_x_ahl_mtltxn_tbl(i).Organization_Id,
1297                          p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id,
1298                          p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
1299                 FETCH Sch_Mtl_Cur INTO l_completed_quantity, l_uom_code, l_object_version_number;
1300 
1301                 If(Sch_Mtl_Cur%NOTFOUND) THEN
1302                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_SCHMTL_NOTFOUND');
1303                     FND_MESSAGE.Set_Token('WO_OP',p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id);
1304                     FND_MESSAGE.Set_Token('INV_ITEM',p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
1305                     FND_MSG_PUB.ADD;
1306                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1307                 ELSE
1308 
1309                     IF G_DEBUG='Y' THEN
1310                        AHL_DEBUG_PUB.debug('l_completed_quantity=['||l_completed_quantity||']');
1311                     END IF;
1312 
1313                     -- Tamal: Bug #4095376: Begin
1314                     -- Retrieving quantity, then converting to primary uom, etc have been moved out of this ELSE loop
1315                     -- to ensure that quantity is not updated to NULL in mtl_txn rows
1316                     -- Tamal: Bug #4095376: End
1317 
1318                     -- Update Completion quantity for cMRO-APS integration.
1319                     IF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
1320                     -- Issue Txn.
1321                         UPDATE AHL_SCHEDULE_MATERIALS
1322                         SET completed_quantity = nvl(completed_quantity,0) + l_quantity,
1323                             object_version_number = l_object_version_number + 1
1324                         WHERE CURRENT OF Sch_Mtl_Cur;
1325                     -- 11/20: Commented out updation of completed quantity to fix bug# 6598809
1326                     /*
1327                     ELSIF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
1328                     -- Return Txn.
1329                         UPDATE AHL_SCHEDULE_MATERIALS
1330                         SET completed_quantity = nvl(completed_quantity,0) -  l_quantity,
1331                             object_version_number = l_object_version_number + 1
1332                         WHERE CURRENT OF Sch_Mtl_Cur;
1333                     */
1334                     END IF;
1335                 END IF;
1336                 CLOSE Sch_Mtl_Cur;
1337 
1338 
1339                 --IF( l_x_sr_rec_tbl.COUNT > 0) THEN
1340                 --    l_nonrtn_wo_id := l_x_sr_rec_tbl(i).Nonroutine_wo_id;
1341                 --END IF;
1342 
1343                 --Insert a record into the AHL_WORKORDER_MTL_TXNS.
1344                 IF(p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id = FND_API.G_MISS_NUM OR
1345                    p_x_ahl_mtltxn_tbl(i).disposition_id is NOT NULL) THEN
1346                     p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id := NULL;
1347                 END IF;
1348                 IF(l_nonrtn_wo_id = FND_API.G_MISS_NUM) THEN
1349                     l_nonrtn_wo_id := NULL;
1350                 END IF;
1351 
1352                 IF(p_x_ahl_mtltxn_tbl(i).Locator_Id = FND_API.G_MISS_NUM) THEN
1353                     p_x_ahl_mtltxn_tbl(i).Locator_Id := NULL;
1354                 END IF;
1355 
1356                 -- In case of dynamic locator creation, retrieve locator ID to populate ahl_workorder_mtl_txns table.
1357                 IF (p_x_ahl_mtltxn_tbl(i).locator_segments IS NOT NULL AND
1358                     p_x_ahl_mtltxn_tbl(i).locator_id IS NULL) THEN
1359 
1360                    IF G_DEBUG='Y' THEN
1361                      AHL_DEBUG_PUB.DEBUG('Profile mfg_organization_id:'  || fnd_profile.value('MFG_ORGANIZATION_ID') );
1362                    END IF;
1363 
1364                    l_valid_flag := fnd_flex_keyval.validate_segs(
1365                                        operation         => 'FIND_COMBINATION'
1366                                      , appl_short_name   => 'INV'
1367                                      , key_flex_code     => 'MTLL'
1368                                      , structure_number  => 101
1369                                      , concat_segments   => p_x_ahl_mtltxn_tbl(i).locator_segments
1370                                      , values_or_ids     => 'V'
1371                                      , data_set          => p_x_ahl_mtltxn_tbl(i).organization_id
1372                          );
1373 
1374                    IF (l_valid_flag) THEN
1375                        p_x_ahl_mtltxn_tbl(i).locator_id := fnd_flex_keyval.combination_id;
1376                    END IF;
1377 
1378                 END IF;
1379 
1380                 IF(p_x_ahl_mtltxn_tbl(i).condition = FND_API.G_MISS_NUM) THEN
1381                     p_x_ahl_mtltxn_tbl(i).condition := NULL;
1382                 END IF;
1383                 IF G_DEBUG='Y' THEN
1384                           AHL_DEBUG_PUB.debug('RECEPIENT_ID'||p_x_ahl_mtltxn_tbl(i).RECEPIENT_ID);
1385                 END IF;
1386 
1387                 Insert_Mtl_Txn_Row(p_x_ahl_mtltxn_rec     => p_x_ahl_mtltxn_tbl(i),
1388                                 p_material_Transaction_Id => NULL,
1389                                 p_nonroutine_workorder_Id => l_nonrtn_wo_id,
1390                                 p_prim_uom_qty      =>L_QUANTITY,
1391                                 x_return_status      => x_Return_Status,
1392                                 x_msg_count          => x_Msg_Count,
1393                                 x_msg_data           => x_Msg_Data,
1394                                 x_ahl_mtl_txn_id     => l_x_Mtl_Txn_Id);
1395 
1396 
1397                 IF G_DEBUG='Y' THEN
1398                           AHL_DEBUG_PUB.debug('after mtl_Txn insert api');
1399                           AHL_DEBUG_PUB.debug('after mtl_Txn insert api call ret status=['||x_return_status||']');
1400                           AHL_DEBUG_PUB.debug('after mtl_Txn insert api call msg=['||x_msg_data||']');
1401                 END IF;
1402 
1403 
1404                 IF (x_return_status = FND_API.G_RET_STS_ERROR
1405                     OR x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1406                         FND_MESSAGE.Set_Name('AHL','AHL_PRD_AHLMTLTXN_ERROR');
1407                         FND_MESSAGE.Set_Token('MSG',x_msg_data);
1408                         FND_MSG_PUB.ADD;
1409                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1410                 END IF;
1411 
1412                 p_x_ahl_mtltxn_tbl(i).ahl_mtltxn_id :=  l_x_Mtl_Txn_Id;
1413 
1414                 -- for trackable returns ..
1415                 IF (l_instance_id_tbl(i) IS NOT NULL) AND
1416                    (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
1417                          -- For trackable returns, update ahl_parts_change table for return_mtl_txn_id.
1418                          AHL_PRD_PARTS_CHANGE_PVT.Update_Material_Return
1419                                   (
1420                                      p_return_mtl_txn_id  => l_x_Mtl_Txn_Id,
1421                                      p_workorder_id     => p_x_ahl_mtltxn_tbl(i).workorder_id,
1422                                      p_Item_Instance_Id  => l_instance_id_tbl(i),
1423                                      x_return_status  => x_return_status
1424                                   );
1425 
1426                          IF G_DEBUG='Y' THEN
1427                             AHL_DEBUG_PUB.debug('after PartsChange Update Material Return api:ret status=['||x_return_status||']');
1428                          END IF;
1429 
1430                          IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1431                              RAISE FND_API.G_EXC_ERROR;
1432                          ELSIF  (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1433                              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1434                          END IF;
1435 
1436                          IF (p_x_ahl_mtltxn_tbl(i).serial_number IS NOT NULL) THEN
1437                             -- for serialized instances, update part condition.
1438                             AHL_PRD_PARTS_CHANGE_PVT.Update_Part_Condition
1439                                     (
1440                                       p_init_msg_list => FND_API.G_FALSE,
1441                                       p_commit        => FND_API.G_FALSE,
1442                                       p_instance_id   => l_instance_id_tbl(i),
1443                                       p_instance_condition_id => p_x_ahl_mtltxn_tbl(i).Condition,
1444                                       x_return_status => x_return_status,
1445                                       x_msg_data      => x_msg_data,
1446                                       x_msg_count     => x_msg_count
1447                                     );
1448 
1449                             IF G_DEBUG='Y' THEN
1450                                AHL_DEBUG_PUB.debug('after PartsChange Update_Part_Condition api:ret status=['||x_return_status||']');
1451                             END IF;
1452 
1453                             IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1454                                 RAISE FND_API.G_EXC_ERROR;
1455                             ELSIF  (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1456                                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1457                             END IF;
1458                          END IF; -- serial number
1459                         -- pdoki added for Marshalling Enhancement, Start.
1460                         l_wo_wo_resv_flag := false;
1461                         l_del_flag := false;
1462                         l_create_flag := false;
1463 
1464                         -- For Serialized instances, if WO-WO reservation exists then transfer it to INV-WO reservation
1465                         IF (p_x_ahl_mtltxn_tbl(i).Serial_Number IS NOT NULL ) THEN
1466                          IF ( Check_Rts_Workorder_Exists(p_x_ahl_mtltxn_tbl(i).workorder_id, l_instance_id_tbl(i)) = 'Y' ) THEN
1467 
1468                                OPEN Get_Rts_Workorder_Dtls(p_x_ahl_mtltxn_tbl(i).workorder_id, l_instance_id_tbl(i));
1469                                FETCH Get_Rts_Workorder_Dtls INTO l_rts_wo_dtls_rec;
1470                                CLOSE Get_Rts_Workorder_Dtls;
1471 
1472                                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1473                                    FND_LOG.string(G_LEVEL_STATEMENT, l_debug, 'RTS Workorder Details - ' || 'Workorder Name: ' || l_rts_wo_dtls_rec.workorder_name || ' Wip Entity ID: ' || l_rts_wo_dtls_rec.wip_entity_id );
1474                                END IF;
1475 
1476                                IF ( p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id = l_rts_wo_dtls_rec.REBUILD_ITEM_ID  AND l_instance_id_tbl(i) = l_rts_wo_dtls_rec.MAINTENANCE_OBJECT_ID ) THEN
1477 
1478                                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1479                                      FND_LOG.string(G_LEVEL_STATEMENT, l_debug, 'Return Item is same as Workorder Header Item');
1480                                   END IF;
1481 
1482                                   OPEN Check_WO_WO_Resv_Exists(l_rts_wo_dtls_rec.wip_entity_id);
1483                                   FETCH Check_WO_WO_Resv_Exists into l_resv_rec;
1484                                   IF Check_WO_WO_Resv_Exists%FOUND THEN
1485                                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1486                                       FND_LOG.string(G_LEVEL_STATEMENT, l_debug, 'Resv ID = ' || l_resv_rec.reservation_id || ' ,SupplySource = ' || l_resv_rec.SUPPLY_SOURCE_HEADER_ID || ' ,DemandSource = ' || l_resv_rec.DEMAND_SOURCE_HEADER_ID);
1487                                    END IF;
1488                                    l_wo_wo_resv_flag := true;
1489                                   END IF;
1490                                   Close Check_WO_WO_Resv_Exists;
1491 
1492                                   IF (l_wo_wo_resv_flag = TRUE) THEN
1493                                      IF (p_x_ahl_mtltxn_tbl(i).Condition = G_AHL_UNSERVICEABLE_CONDITION) THEN
1494                                           IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1495                                               FND_LOG.string(G_LEVEL_STATEMENT, l_debug, 'Return Condition is Unserviceable');
1496                                           END IF;
1497                                           l_del_flag := true;
1498 
1499                                      ELSE
1500 
1501                                         SELECT RESERVABLE_TYPE
1502                                         INTO   l_reservable
1503                                         FROM   MTL_SECONDARY_INVENTORIES
1504                                         WHERE  ORGANIZATION_ID = p_x_ahl_mtltxn_tbl(i).Organization_Id
1505                                         AND    SECONDARY_INVENTORY_NAME  = p_x_ahl_mtltxn_tbl(i).Subinventory_Name;
1506 
1507                                         IF (l_reservable <> 1) THEN
1508                                            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1509                                               FND_LOG.string(G_LEVEL_STATEMENT, l_debug, 'Return SubInventory is not Reservable');
1510                                            END IF;
1511                                            l_del_flag := true;
1512                                         ELSE
1513                                            l_del_flag := true;
1514                                            l_create_flag := true;
1515                                         END IF;
1516                                      END IF;  --  Return Condition
1517 
1518                                   END IF; -- WO-WO Resv exists
1519 
1520                                         IF (l_del_flag = true) THEN
1521                                              mo_global.init('AHL');
1522 
1523                                              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1524                                                      fnd_log.string(G_LEVEL_STATEMENT,l_debug,'Calling Delete_Reservation API...');
1525                                              END IF;
1526                                              AHL_MM_RESERVATIONS_PVT.DELETE_RESERVATION
1527                                                  (
1528                                                     p_api_version          =>  1.0,
1529                                                     p_init_msg_list        =>  FND_API.G_FALSE,
1530                                                     p_commit               =>  FND_API.G_FALSE,
1531                                                     p_validation_level     =>  FND_API.G_VALID_LEVEL_FULL,
1532                                                     p_module_type          =>  null,
1533                                                     x_return_status        =>  x_return_status,
1534                                                     x_msg_count            =>  x_msg_count,
1535                                                     x_msg_data             =>  x_msg_data,
1536                                                     p_reservation_id       =>  l_resv_rec.reservation_id
1537                                                   );
1538 
1539                                             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1540                                                   FND_LOG.string(G_LEVEL_STATEMENT, l_debug, 'After Delete_Reservation API...ret_status['||x_return_status||']');
1541                                             END IF;
1542 
1543                                             IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1544                                                RAISE FND_API.G_EXC_ERROR;
1545                                             ELSIF  (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1546                                                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1547                                             END IF;
1548 
1549                                         END IF;
1550 
1551                                         IF (l_create_flag = true) THEN
1552 
1553                                                 -- Demand Source -----------------------------
1554                                                 l_rsv_rec.demand_source_line_detail  := l_resv_rec.demand_source_line_detail;  -- asm id
1555 
1556                                                 -- Supply Source -----------------------------
1557                                                 l_rsv_rec.supply_source_type_id := inv_reservation_global.g_source_type_inv;
1558                                                 l_rsv_rec.primary_reservation_quantity := l_resv_rec.primary_reservation_quantity;
1559                                                 l_rsv_rec.reservation_id := NULL;
1560 
1561                                                 l_serial_number_tbl(1).inventory_item_id := p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id ;
1562                                                 l_serial_number_tbl(1).serial_number := p_x_ahl_mtltxn_tbl(i).Serial_Number;
1563 
1564                                                 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
1565                                                      fnd_log.string(G_LEVEL_STATEMENT,l_debug,'Calling Process_Reservation API...');
1566                                                 END IF;
1567 
1568                                                 AHL_MM_RESERVATIONS_PVT.PROCESS_RESERVATION
1569                                                 (
1570                                                     p_api_version          =>  1.0,
1571                                                     p_init_msg_list        =>  FND_API.G_FALSE,
1572                                                     p_commit               =>  FND_API.G_FALSE,
1573                                                     p_validation_level     =>  FND_API.G_VALID_LEVEL_FULL,
1574                                                     p_module_type          =>  null,
1575                                                     x_return_status        =>  x_return_status,
1576                                                     x_msg_count            =>  x_msg_count,
1577                                                     x_msg_data             =>  x_msg_data,
1578                                                     p_rsv_rec              =>  l_rsv_rec,
1579                                                     p_serial_number_tbl    =>  l_serial_number_tbl,
1580                                                     x_reservation_id_tbl   =>  l_x_serial_number_tbl
1581                                                 );
1582 
1583                                                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1584                                                    FND_LOG.string(G_LEVEL_STATEMENT, l_debug, 'After Process_Reservation API...ret_status['||x_return_status||']');
1585                                                 END IF;
1586 
1587                                                 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1588                                                     RAISE FND_API.G_EXC_ERROR;
1589                                                 ELSIF  (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1590                                                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1591                                                 END IF;
1592 
1593                                         END IF;
1594 
1595                                END IF;
1596 
1597                          END IF; -- RTS WO Exists
1598                         END IF; -- Serial Number
1599                         -- pdoki added for Marshalling Enhancement, End.
1600                 END IF;
1601 
1602             END LOOP;
1603         END IF;
1604 
1605         -- END of if which checks the count of transactions created
1606 
1607         IF (G_DEBUG='Y') THEN
1608           AHL_DEBUG_PUB.debug('Unservicable profile value:' || G_AHL_UNSERVICEABLE_CONDITION);
1609           AHL_DEBUG_PUB.debug('MRB profile value:' || G_AHL_MRB_CONDITION);
1610         END IF;
1611 
1612         IF (l_txn_Id_Tbl.COUNT > 0) THEN
1613             -- THis loop is for creating service request. Since
1614             -- service reques API commits, we need to do this separately.
1615             BEGIN
1616                 l_error := false;
1617                 --j:=1;
1618                 j := l_txn_Id_Tbl.FIRST;
1619                 FOR i IN l_txn_Id_Tbl.FIRST..l_txn_Id_Tbl.LAST  LOOP
1620                     IF G_DEBUG='Y' THEN
1621                       AHL_DEBUG_PUB.debug('Processing SR for item:' || p_x_ahl_mtltxn_tbl(i).inventory_item_id);
1622                       AHL_DEBUG_PUB.debug('Condition is:' || p_x_ahl_mtltxn_tbl(i).Condition);
1623                       AHL_DEBUG_PUB.debug('Disposition ID is:' || p_x_ahl_mtltxn_tbl(i).disposition_id);
1624                       AHL_DEBUG_PUB.debug('Instance ID is:' || l_instance_id_tbl(i));
1625                       AHL_DEBUG_PUB.debug('Create WO Option is:' || p_x_ahl_mtltxn_tbl(i).create_wo_option);
1626 
1627                     END IF;
1628 
1629                     --If (condition is unserviceable/MRB AND P_create_SR == 'Y' ) then
1630                     --Select EMP_ID from FND_USERS table for the FND_GLOBAL.USER_ID
1631                     --Call Service request API to create service request.
1632                     --( AHL_NONROUTINE_JOB_PVT.process_nonroutine_job)
1633                     IF ((p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
1634                           AND l_eam_item_type_id_tbl(i) = wip_constants.rebuild_item_type
1635                           AND (p_x_ahl_mtltxn_tbl(i).Condition = G_AHL_UNSERVICEABLE_CONDITION
1636                           OR p_x_ahl_mtltxn_tbl(i).Condition = G_AHL_MRB_CONDITION)
1637                           AND (p_create_sr = 'Y')
1638                           AND (l_instance_id_tbl(i) IS NOT NULL)
1639                           AND (p_x_ahl_mtltxn_tbl(i).disposition_id IS NULL)
1640                           -- added for FP bug# 5903318.
1641                           AND (p_x_ahl_mtltxn_tbl(i).create_wo_option <> 'CREATE_SR_NO')) THEN
1642                                 populate_Srvc_Rec( p_item_instance_id => l_instance_id_tbl(i),
1643                                                    p_srvc_rec => l_x_sr_rec_tbl(j),
1644                                                    p_x_ahl_mtltxn_rec => p_x_ahl_mtltxn_tbl(i));
1645                                 -- populate l_sr_mtl_id_map_tbl to link the mtl_txnID with the l_x_sr_rec_tbl
1646                                 -- table index.
1647                                 l_sr_mtl_id_map_tbl(j) := p_x_ahl_mtltxn_tbl(i).ahl_mtltxn_id;
1648 
1649                                 j := j+1;
1650                     END IF;
1651 
1652                 END LOOP;
1653                           -- added for FP bug# 5903318.
1654                 IF G_DEBUG='Y' THEN
1655                     AHL_DEBUG_PUB.debug('Will call service request API if there are srvc request to be created');
1656                     AHL_DEBUG_PUB.debug('srvc req rec count=['||to_Char(l_x_sr_rec_tbl.COUNT)||']');
1657                     AHL_DEBUG_PUB.debug('mr tbl count=['||to_Char(l_mr_asso_tbl.COUNT)||']');
1658                 END IF;
1659 
1660 
1661                 IF(l_x_sr_rec_tbl.COUNT > 0) THEN
1662                     AHL_PRD_NONROUTINE_PVT.PROCESS_NONROUTINE_JOB (
1663                                         p_api_version  => 1.0,
1664                                         p_commit       => Fnd_Api.g_false,
1665                                         p_module_type   => NULL,
1666                                         x_return_status =>x_return_status,
1667                                         x_msg_count     =>x_msg_count,
1668                                         x_msg_data      =>x_msg_data,
1669                                         p_x_sr_task_tbl =>l_x_sr_rec_tbl,
1670                                         --Parameter added for bug# 6086419.
1671                                         p_x_mr_asso_tbl => l_mr_asso_tbl);
1672                     IF G_DEBUG='Y' THEN
1673                         AHL_DEBUG_PUB.debug('after the srvc req api call ret status=['||x_return_status||']');
1674                         AHL_DEBUG_PUB.debug('after the srvc req api call x_msg_count=['||x_msg_count||']');
1675                         AHL_DEBUG_PUB.debug('after the srvc req api call msg=['||x_msg_data||']');
1676                     END IF;
1677 
1678                     IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1679                         RAISE FND_API.G_EXC_ERROR;
1680                     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1681                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1682                     END IF;
1683 
1684                     -- ANd now update the nonroutine workorder id in the workorder_mtl_Txns table
1685                     FOR j IN l_x_sr_rec_tbl.FIRST..l_x_sr_rec_tbl.LAST LOOP
1686                         IF G_DEBUG='Y' THEN
1687                             AHL_DEBUG_PUB.debug('l_x_sr_rec_tbl.Incident_id[' || j || ']=['||l_x_sr_rec_tbl(j).Incident_id||']');
1688                             AHL_DEBUG_PUB.debug('l_x_sr_rec_tbl.Visit_task_id[' || j || ']=['||l_x_sr_rec_tbl(j).Visit_task_id||']');
1689                             AHL_DEBUG_PUB.debug('l_sr_mtl_id_map_tbl[' || j || ']=['|| l_sr_mtl_id_map_tbl(j) ||']');
1690                         END IF;
1691 
1692                         -- update non-routine workorder id.
1693                         UPDATE AHL_WORKORDER_MTL_TXNS
1694                            SET NON_ROUTINE_WORKORDER_ID = l_x_sr_rec_tbl(j).Nonroutine_wo_id,
1695                         -- Adithya added for bug# 6995541
1696                                CS_INCIDENT_ID           = l_x_sr_rec_tbl(j).Incident_id
1697                          WHERE WORKORDER_MTL_TXN_ID = l_sr_mtl_id_map_tbl(j);
1698                     END LOOP; -- l_x_sr_rec_tbl.FIRST
1699                 END IF;
1700             END; -- begin
1701         END IF; -- Second if stmt which checks the count of txns created.
1702 
1703         -- Fix for bug# 5501482.
1704         IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
1705 
1706           FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST  LOOP
1707             IF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE AND
1708                 p_x_ahl_mtltxn_tbl(i).Condition = G_AHL_MRB_CONDITION AND
1709                 p_x_ahl_mtltxn_tbl(i).disposition_id IS NULL AND
1710                 p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id  IS NOT NULL AND FND_API.to_boolean( p_commit )) THEN
1711                     QA_SS_RESULTS.wrapper_fire_action
1712                     (
1713                       q_collection_id       => p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id,
1714                       q_return_status       => x_return_status,
1715                       q_msg_count           => x_msg_count,
1716                       q_msg_data            => x_msg_data
1717                     );
1718 
1719                     IF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
1720                        IF ( x_msg_data IS NULL ) THEN
1721                           FND_MESSAGE.set_name( 'AHL', 'AHL_PRD_QA_ACTION_UNEXP_ERROR' );
1722                           FND_MSG_PUB.add;
1723                           RAISE FND_API.G_EXC_ERROR;
1724                        END IF;
1725                     ELSIF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1726                        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1727                     END IF;
1728             END IF;
1729           END LOOP;
1730         END IF;
1731 
1732         -- Standard check of p_commit
1733         IF FND_API.To_Boolean(p_commit) THEN
1734             COMMIT WORK;
1735         END IF;
1736         x_return_status := FND_API.G_RET_STS_SUCCESS;
1737         dumpInput(p_x_ahl_mtltxn_tbl);
1738 
1739         -- call user hook api.
1740         -- User Hooks
1741         IF (JTF_USR_HKS.Ok_to_execute('AHL_PRD_MATERIAL_TXN_CUHK', 'PERFORM_MTLTXN_POST', 'A', 'C')) THEN
1742            Perform_MtlTxn_Post( p_ahl_mtltxn_tbl => p_x_ahl_mtltxn_tbl,
1743                                 x_msg_count => x_msg_count,
1744                                 x_msg_data => x_msg_data,
1745                                 x_return_status => x_return_status);
1746            IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1747              RAISE FND_API.G_EXC_ERROR;
1748            ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1749              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1750            END IF;
1751         END IF;
1752 
1753         -- Standard call to get message count and if count is 1, get message
1754         FND_MSG_PUB.Count_And_Get
1755             ( p_count => x_msg_count,
1756             p_data  => x_msg_data,
1757             p_encoded => fnd_api.g_false);
1758 
1759 --
1760     EXCEPTION
1761         WHEN FND_API.G_EXC_ERROR THEN
1762             x_return_status := FND_API.G_RET_STS_ERROR;
1763             --SHOW_MTX_ERRORS;
1764             Rollback to PERFORM_MTL_TXN_PVT;
1765             FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1766                     p_data  => x_msg_data,
1767                     p_encoded => fnd_api.g_false);
1768 
1769 
1770         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1771             --SHOW_MTX_ERRORS;
1772             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1773         Rollback to PERFORM_MTL_TXN_PVT;
1774             FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1775                     p_data  => x_msg_data,
1776                     p_encoded => fnd_api.g_false);
1777 
1778         WHEN OTHERS THEN
1779             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1780             --SHOW_MTX_ERRORS;
1781             Rollback to PERFORM_MTL_TXN_PVT;
1782             fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
1783                     p_procedure_name => 'Perform_Mtl_txn',
1784                     p_error_text     => SQLERRM);
1785             FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1786                     p_data  => x_msg_data,
1787                     p_encoded => fnd_api.g_false);
1788 
1789 END PERFORM_MTL_TXN;
1790 
1791 /**********************************************************
1792 This procedure will insert a record in the AHL_WO_MTL_TXNS table.
1793 **********************************************************/
1794 
1795 PROCEDURE Insert_Mtl_Txn_Row(
1796     p_x_ahl_mtltxn_rec          IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
1797     p_material_Transaction_Id   IN         NUMBER,
1798     p_nonroutine_workorder_Id   IN         NUMBER,
1799     p_prim_uom_qty              IN         NUMBER:=0,
1800     x_return_status             OUT NOCOPY        VARCHAR2,
1801     x_msg_count                 OUT NOCOPY        NUMBER,
1802     x_msg_data                  OUT NOCOPY        VARCHAR2,
1803     x_ahl_mtl_txn_id            OUT NOCOPY         NUMBER)
1804 IS
1805 l_x_row_id              VARCHAR2(240);
1806 l_quantity              NUMBER;
1807 BEGIN
1808 
1809         IF G_DEBUG='Y' THEN
1810           AHL_DEBUG_PUB.enable_debug;
1811           AHL_DEBUG_PUB.debug('Entered Insert_Mtl_Txn_Row, p_x_ahl_mtltxn_rec.Inventory_Item_Id='|| p_x_ahl_mtltxn_rec.Inventory_Item_Id);
1812           AHL_DEBUG_PUB.debug('Entered Insert_Mtl_Txn_Row, p_x_ahl_mtltxn_rec.Recepient_id='||p_x_ahl_mtltxn_rec.Recepient_id);
1813         END IF;
1814         AHL_WORKORDER_MTL_TXNS_PKG.INSERT_ROW(
1815                         X_ROWID                         => l_x_row_id,
1816                         X_WORKORDER_MTL_TXN_ID          => x_ahl_mtl_txn_id,
1817                         X_OBJECT_VERSION_NUMBER         => 1,
1818                         X_WORKORDER_OPERATION_ID        => p_x_ahl_mtltxn_rec.workorder_Operation_Id,
1819                         X_MATERIAL_TRANSACTION_ID       => p_material_Transaction_Id,
1820                         X_COLLECTION_ID                 => p_x_ahl_mtltxn_rec.Qa_Collection_Id,
1821                         X_STATUS_ID                     => p_x_ahl_mtltxn_rec.Condition,
1822                         X_NON_ROUTINE_WORKORDER_ID      => p_nonroutine_workorder_Id,
1823                         X_ORGANIZATION_ID               => p_x_ahl_mtltxn_rec.Organization_Id,
1824                         X_INVENTORY_ITEM_ID             => p_x_ahl_mtltxn_rec.Inventory_Item_Id,
1825                         X_REVISION                      => p_x_ahl_mtltxn_rec.Revision,
1826                         X_LOT_NUMBER                    => p_x_ahl_mtltxn_rec.Lot_Number,
1827                         X_SERIAL_NUMBER                 => p_x_ahl_mtltxn_rec.Serial_Number,
1828                         X_LOCATOR_ID                    => p_x_ahl_mtltxn_rec.Locator_Id,
1829                         X_SUBINVENTORY_CODE             => p_x_ahl_mtltxn_rec.Subinventory_Name,
1830                         X_QUANTITY                      => p_x_ahl_mtltxn_rec.Quantity,
1831                         X_TRANSACTION_TYPE_ID           => p_x_ahl_mtltxn_rec.Transaction_Type_Id,
1832                         X_UOM                           => p_x_ahl_mtltxn_rec.Uom,
1833                         X_RECEPIENT_ID                  => p_x_ahl_mtltxn_rec.Recepient_id,
1834                         X_PRIMARY_UOM_QUANTITY          => P_PRIM_UOM_QTY,
1835                         X_INSTANCE_ID                   => p_x_ahl_mtltxn_rec.Item_Instance_ID,
1836                         X_TRANSACTION_DATE              => p_x_ahl_mtltxn_rec.transaction_date,
1837                         X_ATTRIBUTE_CATEGORY            => NULL ,
1838                         X_ATTRIBUTE1                    => NULL ,
1839                         X_ATTRIBUTE2                    => NULL ,
1840                         X_ATTRIBUTE3                    => NULL ,
1841                         X_ATTRIBUTE4                    => NULL ,
1842                         X_ATTRIBUTE5                    => NULL ,
1843                         X_ATTRIBUTE6                    => NULL ,
1844                         X_ATTRIBUTE7                    => NULL ,
1845                         X_ATTRIBUTE8                    => NULL ,
1846                         X_ATTRIBUTE9                    => NULL ,
1847                         X_ATTRIBUTE10                   => NULL ,
1848                         X_ATTRIBUTE11                   => NULL ,
1849                         X_ATTRIBUTE12                   => NULL ,
1850                         X_ATTRIBUTE13                   => NULL ,
1851                         X_ATTRIBUTE14                   => NULL ,
1852                         X_ATTRIBUTE15                   => NULL ,
1853                         X_CREATION_DATE                 => SYSDATE,
1854                         X_CREATED_BY                    => FND_GLOBAL.USER_ID,
1855                         X_LAST_UPDATE_DATE              => SYSDATE,
1856                         X_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID,
1857                         X_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID);
1858 
1859             select AHL_WORKORDER_MTL_TXNS_S.currval into p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id  from dual;
1860 --                      p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id:=x_ahl_mtl_txn_id;
1861 
1862         IF G_DEBUG='Y' THEN
1863           AHL_DEBUG_PUB.debug('Entered p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id='||p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id);
1864         END IF;
1865 
1866 /*
1867 
1868 EXCEPTION
1869 WHEN OTHERS THEN
1870         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1871         IF G_DEBUG='Y'
1872         THEN
1873           AHL_DEBUG_PUB.debug('Exception inserting into mtl_txn' || SQLCODE);
1874           AHL_DEBUG_PUB.debug('SQLERRM:' || SQLERRM);
1875         END IF;
1876 
1877 */
1878 END Insert_Mtl_Txn_Row;
1879 /*******************************************************************
1880 This procedure will do all the validations requried for the matrial
1881 transaction record .
1882 *******************************************************************/
1883 
1884 
1885 PROCEDURE Validate_item_duplic
1886     (
1887                 p_ahl_mtltxn_rec       IN Ahl_Mtltxn_Rec_Type
1888     )
1889 IS
1890 CURSOR GET_WO_MTL_TXNS
1891 (C_WRK_ID           IN  NUMBER,
1892  C_INV_ITEM_ID      IN  NUMBER,
1893  C_REVISION         IN  VARCHAR2,
1894  C_SERIAL_NO        IN  VARCHAR2,
1895  C_WO_MTLTXN_ID     IN  NUMBER
1896 )
1897 IS
1898 SELECT COUNT(A.workorder_mtl_txn_id)
1899 FROM   AHL_WORKORDER_MTL_TXNS A,
1900        AHL_WORKORDER_OPERATIONS_V B,
1901        AHL_SCHEDULE_MATERIALS  C
1902 WHERE  B.WORKORDER_ID=C_WRK_ID
1903 AND    B.WORKORDER_OPERATION_ID=A.WORKORDER_OPERATION_ID
1904 AND    B.WORKORDER_OPERATION_ID=C.WORKORDER_OPERATION_ID
1905 AND    A.INVENTORY_ITEM_ID=C.INVENTORY_ITEM_ID
1906 AND    C.STATUS='ACTIVE'
1907 AND    A.INVENTORY_ITEM_ID=C_INV_ITEM_ID
1908 AND    A.SERIAL_NUMBER=C_SERIAL_NO
1909 AND    A.REVISION=C_REVISION
1910 AND    A.workorder_mtl_txn_id<>C_WO_MTLTXN_ID;
1911 L_COUNTER           NUMBER:=0;
1912 BEGIN
1913     OPEN  GET_WO_MTL_TXNS(p_ahl_mtltxn_rec.WORKORDER_ID,
1914                           p_ahl_mtltxn_rec.INVENTORY_ITEM_ID,
1915                           p_ahl_mtltxn_rec.REVISION,
1916                           p_ahl_mtltxn_rec.SERIAL_NUMBER,
1917                           p_ahl_mtltxn_rec.AHL_MTLTXN_ID
1918                           );
1919     FETCH GET_WO_MTL_TXNS INTO L_COUNTER;
1920     IF L_COUNTER >0
1921     THEN
1922             FND_MESSAGE.Set_Name('AHL','AHL_PRD_DUPLICATE_ITEM');
1923                         FND_MESSAGE.Set_Token('INV_ITEM',p_ahl_mtltxn_rec.INVENTORY_ITEM_SEGMENTS);
1924             FND_MSG_PUB.ADD;
1925     END IF;
1926     CLOSE GET_WO_MTL_TXNS;
1927 END;
1928 
1929 
1930 
1931 
1932 PROCEDURE Validate_Txn_Rec
1933     (
1934         p_x_ahl_mtltxn_rec   IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
1935         x_item_instance_id   OUT NOCOPY        NUMBER,
1936         x_eam_item_type_id   OUT NOCOPY        NUMBER,
1937         x_return_status      OUT NOCOPY           VARCHAR2,
1938         x_msg_count          OUT NOCOPY           NUMBER,
1939         x_msg_data           OUT NOCOPY           VARCHAR2
1940     )
1941 IS
1942 l_Count                 NUMBER;
1943 l_sql                   VARCHAR2(1024);
1944 l_serial_control        NUMBER;
1945 l_revision_control      NUMBER;
1946 l_lot_control           NUMBER;
1947 l_location_control      NUMBER;
1948 --l_wip_location          NUMBER;
1949 l_job_status            VARCHAR2(30);
1950 l_plan_id               NUMBER;
1951 l_return_status         VARCHAR2(10);
1952 l_msg_count             NUMBER;
1953 l_msg_data              VARCHAR2(240);
1954 
1955 l_lot_flag              BOOLEAN := FALSE;  -- indicator for lot.
1956 l_revision_flag         BOOLEAN := FALSE;  -- indicator for revision.
1957 
1958 --Query to get the Location_id
1959 -- R12: Fix for bug# 5221513
1960 -- IB team have asked us to remove the location validation to fix the issue.
1961 /*
1962 CURSOR CSI_LOCATION_CUR(p_org_id IN NUMBER) IS
1963 
1964     --SELECT WIP_LOCATION_ID
1965     --FROM CSI_INSTALL_PARAMETERS;
1966 
1967     SELECT location_id
1968     FROM hr_all_organization_units
1969     WHERE organization_id = p_org_id;
1970 */
1971 
1972 --Query to validate the instance for the job
1973 -- R12: Fix for bug# 5221513
1974 CURSOR CSI_SER_ITEM_CUR(p_item_id IN NUMBER,
1975                         p_job_id IN NUMBER,
1976                         p_serial_num IN VARCHAR2) IS
1977                         --p_wip_location NUMBER) IS  (fix for bug# 5221513).
1978     SELECT INSTANCE_ID
1979     FROM CSI_ITEM_INSTANCES CII
1980     WHERE INVENTORY_ITEM_ID       = p_item_id
1981     AND WIP_JOB_ID            = p_job_id
1982     AND SERIAL_NUMBER         = p_serial_num
1983     AND ACTIVE_START_DATE     <= SYSDATE
1984     AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE > SYSDATE))
1985     --AND LOCATION_TYPE_CODE = 'WIP'
1986     --AND LOCATION_ID = p_wip_location
1987     AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
1988         WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
1989               AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1990               --AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE) AND NVL(ACTIVE_END_DATE,SYSDATE));
1991                 AND NVL(ACTIVE_START_DATE,SYSDATE) <= SYSDATE
1992                 AND SYSDATE < NVL(ACTIVE_END_DATE,SYSDATE+1));
1993 
1994 --fix for bug number 4089691 -- inserted by sikumar
1995 --Query to validate the instance for the job during issue if there is a serial number avaialble
1996 CURSOR CSI_ISSUE_SER_ITEM_CUR(p_item_id IN NUMBER,
1997                         p_serial_num IN VARCHAR2)IS
1998     SELECT INSTANCE_ID
1999     FROM CSI_ITEM_INSTANCES CII
2000     WHERE INVENTORY_ITEM_ID       = p_item_id
2001     AND SERIAL_NUMBER         = p_serial_num
2002     AND ACTIVE_START_DATE     <= SYSDATE
2003     AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE > SYSDATE))
2004     AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
2005         WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
2006               AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
2007               AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE) AND NVL(ACTIVE_END_DATE,SYSDATE));
2008 
2009 --Query to validate workorder operaiton id.
2010 CURSOR AHL_WORKORDER_OPER_CUR (p_wo_id NUMBER,p_op_seq NUMBER, p_woop_id IN NUMBER) IS
2011      SELECT 1
2012      FROM AHL_WORKORDER_OPERATIONS
2013      WHERE WORKORDER_OPERATION_ID =p_woop_id
2014      AND WORKORDER_ID =p_wo_id
2015      AND OPERATION_SEQUENCE_NUM = p_op_seq;
2016 
2017 -- Query to validate job id
2018 -- Added project and locator for ER# 5854712.
2019 CURSOR AHL_WIPJOB_CUR (p_org_id NUMBER, p_wo_id NUMBER, p_wipjob IN NUMBER) IS
2020      SELECT A.STATUS_CODE, C.Visit_id, C.Inv_Locator_Id, C.project_id, B.project_task_id,
2021      LOC.subinventory_code
2022      FROM AHL_WORKORDERS A, AHL_VISIT_TASKS_B B, AHL_VISITS_B C, MTL_ITEM_LOCATIONS LOC
2023      WHERE A.WIP_ENTITY_ID = p_wipjob
2024      AND A.WORKORDER_ID = p_wo_id
2025      AND B.VISIT_TASK_ID = A.VISIT_TASK_ID
2026      AND C.VISIT_ID = B.VISIT_ID
2027      AND C.ORGANIZATION_ID = p_org_id
2028      AND C.ORGANIZATION_ID = LOC.ORGANIZATION_ID(+)
2029      AND C.INV_LOCATOR_ID = LOC.INVENTORY_LOCATION_ID(+);
2030 
2031 -- Item id validation and selecting serial control code,lot control code values
2032 CURSOR AHL_ITEM_ID_CUR (p_org_id NUMBER, p_item NUMBER) IS
2033     SELECT SERIAL_NUMBER_CONTROL_CODE, LOT_CONTROL_CODE, REVISION_QTY_CONTROL_CODE,
2034            LOCATION_CONTROL_CODE,EAM_ITEM_TYPE, primary_uom_code, concatenated_segments
2035     FROM MTL_SYSTEM_ITEMS_kfv
2036     WHERE ORGANIZATION_ID = p_org_id
2037     AND INVENTORY_ITEM_ID = p_item
2038     AND ENABLED_FLAG = 'Y'
2039     AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
2040     AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
2041 
2042  --Sub inventory Query
2043 CURSOR AHL_SUBINV_CUR (p_org_id NUMBER, p_subinv VARCHAR2) IS
2044     SELECT 1
2045     FROM MTL_SECONDARY_INVENTORIES
2046     WHERE ORGANIZATION_ID = p_org_id
2047     AND SECONDARY_INVENTORY_NAME  = p_subinv;
2048 
2049 -- Locator query
2050 CURSOR AHL_LOCATOR_CUR (p_org_id NUMBER, p_locator_id NUMBER, p_subinv VARCHAR2) IS
2051     SELECT 1
2052     FROM MTL_ITEM_LOCATIONS
2053     WHERE ORGANIZATION_ID = p_org_id
2054     AND INVENTORY_LOCATION_ID = p_locator_id
2055     ;--AND SUBINVENTORY_CODE = p_subinv;
2056 
2057 -- Revision query
2058 CURSOR AHL_REVISION_CUR (p_org_id NUMBER, p_item NUMBER, p_revision VARCHAR2) IS
2059     SELECT 1
2060     FROM MTL_ITEM_REVISIONS
2061     WHERE ORGANIZATION_ID = p_org_id
2062     AND INVENTORY_ITEM_ID = p_item
2063     AND REVISION = p_revision;
2064 
2065 -- Reason query
2066 CURSOR AHL_REASON_CUR (p_reason NUMBER) IS
2067     SELECT 1
2068     FROM MTL_TRANSACTION_REASONS
2069     WHERE REASON_ID = p_reason;
2070 
2071 -- Condition Validaiton
2072 CURSOR Condition_Cur(p_condition NUMBER) IS
2073     SELECT STATUS_ID
2074     FROM MTL_MATERIAL_STATUSES
2075     WHERE STATUS_ID = p_Condition;
2076 
2077 -- Query to Validate Problem Code
2078 CURSOR PROBLEM_CODE_LKUP_CUR (p_problem_code VARCHAR2) IS
2079 /* Tamal [R12 APPSPERF fixes]
2080  * R12 Drop 4 - SQL ID: 14399922
2081  * Bug #4918991
2082  */
2083 SELECT 1
2084 FROM FND_LOOKUP_VALUES FL
2085 WHERE
2086     FL.LOOKUP_TYPE = 'REQUEST_PROBLEM_CODE' AND
2087     FL.LOOKUP_CODE = p_problem_code AND
2088     FL.ENABLED_FLAG = 'Y' AND
2089     FL.LANGUAGE = USERENV('LANG') AND
2090     TRUNC(SYSDATE) BETWEEN TRUNC(NVL(FL.START_DATE_ACTIVE,SYSDATE)) AND TRUNC(NVL(FL.END_DATE_ACTIVE,SYSDATE)) AND
2091     (
2092         (
2093             NOT EXISTS
2094             (
2095                 SELECT 1
2096                 FROM CS_SR_PROB_CODE_MAPPING_DETAIL
2097                 WHERE
2098                     INCIDENT_TYPE_ID = FND_PROFILE.VALUE('AHL_PRD_SR_TYPE') AND
2099                     TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
2100             )
2101         )
2102         OR
2103         (
2104             EXISTS
2105             (
2106                 SELECT 1
2107                 FROM CS_SR_PROB_CODE_MAPPING_DETAIL
2108                 WHERE
2109                     INCIDENT_TYPE_ID = FND_PROFILE.VALUE('AHL_PRD_SR_TYPE') AND
2110                     PROBLEM_CODE = p_problem_code AND
2111                     TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
2112             )
2113         )
2114     );
2115 
2116 /*
2117 CURSOR TRANSACTION_DATE_CUR(C_WORKORDER_OPERATION_ID NUMBER,C_WORKORDER_ID NUMBER,C_INV_ITEM_ID NUMBER) IS
2118        SELECT A.scheduled_start_date
2119        FROM AHL_WORKORDER_OPERATIONS_V A ,AHL_SCHEDULE_MATERIALS B
2120        WHERE A.WORKORDER_OPERATION_ID=C_WORKORDER_OPERATION_ID
2121        AND   A.WORKORDER_ID=C_WORKORDER_ID
2122        AND  A.WORKORDER_OPERATION_ID=B.WORKORDER_OPERATION_ID
2123        AND  B.INVENTORY_ITEM_ID=C_INV_ITEM_ID
2124        AND  A.OPERATION_SEQUENCE_NUM=B.OPERATION_SEQUENCE;
2125 */
2126 
2127 CURSOR mtl_srl_num_csr(p_org_id In NUMBER,
2128                        p_inv_id IN NUMBER,
2129                        p_serial_number IN VARCHAR2) IS
2130    SELECT current_subinventory_code, current_locator_id
2131    FROM mtl_serial_numbers
2132    WHERE serial_number = p_serial_number
2133      AND current_organization_id = p_org_id
2134      AND inventory_item_id = p_inv_id
2135      AND current_status = 3;
2136 
2137 -- Default Subinventory.
2138 CURSOR wip_params_cur (p_org_id IN NUMBER) IS
2139    SELECT default_pull_supply_subinv, default_pull_supply_locator_id
2140    FROM wip_parameters
2141    WHERE organization_id = p_org_id;
2142 
2143  CURSOR workorder_released_date_csr(p_wip_entity_id IN NUMBER) IS
2144  SELECT DATE_RELEASED FROM WIP_DISCRETE_JOBS
2145  WHERE WIP_ENTITY_ID = p_wip_entity_id;
2146 
2147 -- Lot Number
2148 CURSOR mtl_lot_num_csr (p_org_id In NUMBER,
2149                         p_inventory_item_id IN NUMBER,
2150                         p_lot_number        IN VARCHAR2) IS
2151    SELECT 'x'
2152    FROM mtl_lot_numbers
2153    WHERE organization_id = p_org_id
2154      AND inventory_item_id = p_inventory_item_id
2155      AND lot_number = p_lot_number
2156      AND nvl(disable_flag,2) = 2;
2157 
2158 -- fix for bug# 5172147.
2159 -- check if disposition exists.
2160 -- commented out org_id to fix bug# 6120115.
2161 CURSOR disposition_cur (p_disposition_id in NUMBER,
2162                         p_workorder_id in NUMBER,
2163                         p_inventory_item_id IN NUMBER,
2164                         --p_org_id IN NUMBER,
2165                         p_serial_num IN VARCHAR2,
2166                         p_revision IN VARCHAR2,
2167                         p_lotNumber IN VARCHAR2) IS
2168 
2169 SELECT disposition_id, collection_id, condition_code, condition_id
2170    FROM AHL_MTL_RET_DISPOSITIONS_V a
2171    WHERE WORKORDER_ID = p_workorder_id
2172    AND   a.disposition_id = p_disposition_id
2173    AND   INVENTORY_ITEM_ID = p_inventory_item_id
2174    --AND   ORGANIZATION_ID = p_org_id
2175    AND   nvl(SERIAL_NUMBER,'x')=NVL(p_serial_num,nvl(SERIAL_NUMBER,'x'))
2176    AND   nvl(LOT_NUMBER,'x')=NVL(p_lotNumber,nvl(lot_number,'x'))
2177    AND   nvl(ITEM_REVISION,'x')=NVL(p_revision,nvl(ITEM_REVISION,'x'));
2178    -- commented workorder_operation_id condition.
2179    -- disposition created against a material issue will not have this value
2180    -- populated.
2181    --AND   WORKORDER_OPERATION_ID is not null;
2182 
2183 -- Added for FP bug# 5903318.
2184 -- validate create_wo_option.
2185 CURSOR create_wo_cur(p_lookup_code IN VARCHAR2, p_lookup_type IN VARCHAR2) IS
2186    SELECT meaning
2187    FROM FND_LOOKUP_VALUES_VL
2188    WHERE lookup_type = p_lookup_type
2189      AND lookup_code = p_lookup_code
2190      AND ENABLED_FLAG = 'Y'
2191      AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
2192      AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
2193 
2194 --Sareepar FP PIE
2195 CURSOR service_type_code_cur (c_service_type VARCHAR2) IS
2196     SELECT lookup_code
2197      FROM pa_lookups
2198      WHERE MEANING = c_service_type
2199          AND LOOKUP_TYPE = 'SERVICE TYPE'
2200          AND ENABLED_FLAG = 'Y'
2201          AND TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE, SYSDATE - 1))
2202          AND TRUNC(NVL(END_DATE_ACTIVE, SYSDATE));
2203 
2204  l_curr_subinventory_code       mtl_serial_numbers.current_subinventory_code%TYPE;
2205  l_curr_locator_id              NUMBER;
2206  l_primary_uom_code             mtl_system_items.primary_uom_code%TYPE;
2207  l_quantity                     NUMBER;
2208  l_concatenated_segments        mtl_system_items_kfv.concatenated_segments%TYPE;
2209  l_visit_id                     NUMBER;
2210  l_def_supply_subinv            wip_parameters.default_pull_supply_subinv%TYPE;
2211  l_def_supply_locator_id        NUMBER;
2212 
2213  L_SCHED_START_DATE             DATE;
2214 
2215  l_workorder_released_date      DATE;
2216 
2217  l_junk                         VARCHAR2(1);
2218  l_disposition_id               NUMBER;
2219 
2220  -- Added for FP bug# 5903318.
2221  l_fnd_meaning                  fnd_lookup_values_vl.meaning%TYPE;
2222 
2223  -- Added for ER# 5854712.
2224  l_inv_locator_id               NUMBER;
2225  l_project_id                   NUMBER;
2226  l_project_task_id              NUMBER;
2227  l_subinventory_code            mtl_item_locations.subinventory_code%TYPE;
2228  l_project_locator_id           NUMBER;
2229 
2230  -- added to fix 9268076 - match disposition attributes with txn attributes
2231  l_qa_collection_id             NUMBER;
2232  l_condition_id                 NUMBER;
2233  l_condition_code               VARCHAR2(100);
2234 
2235  -- added to fix bug# 9507495
2236  l_instance_qty                 NUMBER;
2237  l_pend_qty                     NUMBER;
2238 
2239  -- pending txns for lot controlled item.
2240  CURSOR csi_pending_lot_txn (p_wip_entity_id IN NUMBER,
2241                              p_inventory_item_id IN NUMBER,
2242                              p_type_id       IN NUMBER,
2243                              p_item_revision IN VARCHAR2,
2244                              p_lot_number    IN VARCHAR2)
2245  IS
2246      SELECT sum(abs(mmt.primary_quantity))
2247      FROM  mtl_material_transactions mmt, MTL_TRANSACTION_LOT_NUMBERS mtln
2248      WHERE mmt.TRANSACTION_ID = mtln.TRANSACTION_ID
2249        AND mmt.TRANSACTION_SOURCE_ID = p_wip_entity_id
2250        AND mmt.INVENTORY_ITEM_ID = p_inventory_item_id
2251        AND mmt.Transaction_Type_Id = p_type_id
2252        AND nvl(mmt.revision, '1') = nvl(p_item_revision, '1')
2253        AND mtln.lot_number = p_lot_number
2254        AND NOT EXISTS (select 'x' from csi_transactions where INV_MATERIAL_TRANSACTION_ID = mmt.TRANSACTION_ID);
2255 
2256  -- pending txns for item that is not lot controlled..
2257  CURSOR csi_pending_txns_csr (p_wip_entity_id IN NUMBER,
2258                               p_inventory_item_id IN NUMBER,
2259                               p_type_id       IN NUMBER,
2260                               p_item_revision IN VARCHAR2)
2261  IS
2262      SELECT sum(abs(mmt.primary_quantity))
2263      FROM mtl_material_transactions mmt
2264      WHERE mmt.TRANSACTION_SOURCE_ID = p_wip_entity_id
2265        AND mmt.INVENTORY_ITEM_ID = p_inventory_item_id
2266        AND mmt.Transaction_Type_Id = p_type_id
2267        AND nvl(mmt.revision, '1') = nvl(p_item_revision, '1')
2268        AND NOT EXISTS (select 'x' from csi_transactions where INV_MATERIAL_TRANSACTION_ID = mmt.TRANSACTION_ID);
2269 
2270  -- validate serial number in msn for return txns.
2271  CURSOR mtl_serial_csr (p_inv_item_id IN NUMBER,
2272                         p_serial_num  IN VARCHAR2)
2273  IS
2274      SELECT 'x'
2275      FROM mtl_serial_numbers
2276      WHERE inventory_item_id = p_inv_item_id
2277        AND serial_number = p_serial_num
2278        AND current_status IN ('1','4'); -- defined, not used and 'out of stores'
2279 
2280  -- added for bug# 11807381
2281  k number;
2282 
2283 cursor is_qa_coll_reqd(p_plan_id IN NUMBER) IS
2284 select 'x' from qa_plan_transactions_v
2285 where mandatory_collection_flag = 1 and enabled_flag = 1
2286 and plan_id = p_plan_id;
2287 
2288 BEGIN
2289 
2290         x_return_status := FND_API.G_RET_STS_SUCCESS;
2291 
2292         IF G_DEBUG='Y' THEN
2293                   AHL_DEBUG_PUB.enable_debug;
2294           AHL_DEBUG_PUB.debug('Ahl Validating TxnType...['||to_Char(p_x_ahl_mtltxn_rec.Transaction_Type_Id)||']');
2295         END IF;
2296 
2297         -- Validate transaction type id(should be one of wip conponent issue or return
2298         IF(p_x_ahl_mtltxn_rec.Transaction_Type_Id <> WIP_CONSTANTS.RETCOMP_TYPE AND
2299            p_x_ahl_mtltxn_rec.Transaction_Type_Id <> WIP_CONSTANTS.ISSCOMP_TYPE ) THEN
2300             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXNTYPE');
2301             FND_MSG_PUB.ADD;
2302             x_return_status := FND_API.G_RET_STS_ERROR;
2303         END IF;
2304         -- transaction quantity should be +ve always. Negative quantities are not
2305         -- supported currently.
2306         IF G_DEBUG='Y' THEN
2307           AHL_DEBUG_PUB.debug('Validating quantity...['||to_Char(p_x_ahl_mtltxn_rec.Quantity)||']');
2308         END IF;
2309 
2310         IF(nvl(p_x_ahl_mtltxn_rec.Quantity,0) <= 0) THEN
2311             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_QTY');
2312             FND_MESSAGE.Set_Token('QUANTITY',p_x_ahl_mtltxn_rec.Quantity);
2313             FND_MSG_PUB.ADD;
2314             x_return_status := FND_API.G_RET_STS_ERROR;
2315         END IF;
2316 
2317         IF G_DEBUG='Y' THEN
2318           AHL_DEBUG_PUB.debug('Validating Wip_Entity_id['
2319           ||to_char(p_x_ahl_mtltxn_rec.Organization_ID)||','
2320           ||to_Char(p_x_ahl_mtltxn_rec.Workorder_ID)
2321         ||','||to_Char(p_x_ahl_mtltxn_rec.Wip_Entity_Id)||']');
2322 
2323 
2324         END IF;
2325 
2326         -- Validate the Wip_job_id and workorder_operation_Id
2327         OPEN AHL_WIPJOB_CUR(p_x_ahl_mtltxn_rec.Organization_ID, p_x_ahl_mtltxn_rec.Workorder_ID, p_x_ahl_mtltxn_rec.Wip_Entity_Id);
2328         FETCH AHL_WIPJOB_CUR INTO l_job_status, l_visit_id, l_inv_locator_id,
2329                                   l_project_id, l_project_task_id, l_subinventory_code;
2330         IF(AHL_WIPJOB_CUR%NOTFOUND) THEN
2331             IF G_DEBUG='Y' THEN
2332                       AHL_DEBUG_PUB.debug('JOB validation failed');
2333             END IF;
2334             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WIP_ENTITY');
2335             if(p_x_ahl_mtltxn_rec.Wip_Entity_Id = FND_API.G_MISS_NUM) THEN
2336                 p_x_ahl_mtltxn_rec.Wip_Entity_Id := NULL;
2337             END IF;
2338             FND_MESSAGE.Set_Token('WIP_ENTITY',p_x_ahl_mtltxn_rec.Wip_Entity_Id);
2339             FND_MSG_PUB.ADD;
2340             x_return_status := FND_API.G_RET_STS_ERROR;
2341             CLOSE AHL_WIPJOB_CUR;
2342             RETURN;
2343         ELSE
2344             -- Assign visit ID to mtl_txn_rec.
2345             -- Added post 11.5.10.
2346             IF (p_x_ahl_mtltxn_rec.target_visit_id IS NULL OR
2347                 p_x_ahl_mtltxn_rec.target_visit_id = FND_API.G_MISS_NUM) THEN
2348                   p_x_ahl_mtltxn_rec.target_visit_id := l_visit_id;
2349             END IF;
2350                         --
2351 
2352             IF G_DEBUG='Y' THEN
2353                   AHL_DEBUG_PUB.debug('JOB validation success['||l_job_status||']');
2354             END IF;
2355             -- fix for re-open case in bug# 6773241
2356             IF (p_x_ahl_mtltxn_rec.transaction_type_id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
2357               IF(l_job_status <> C_JOB_RELEASED
2358                  AND l_job_status <> C_JOB_PENDING_QA
2359                  AND l_job_status <> C_JOB_COMPLETE
2360                  --AND l_job_status <> C_JOB_PARTS_HOLD
2361                 ) THEN
2362                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_JOB_STATUS');
2363                 --FND_MESSAGE.Set_Token('STATUS',l_job_status);
2364                 FND_MESSAGE.Set_Token('STATUS', p_x_ahl_mtltxn_rec.Workorder_Status);
2365                 FND_MSG_PUB.ADD;
2366                 x_return_status := FND_API.G_RET_STS_ERROR;
2367               END IF;
2368             ELSE
2369                -- issue case.
2370                IF(l_job_status <> C_JOB_RELEASED
2371                   --AND l_job_status <> C_JOB_PENDING_QA
2372                   AND l_job_status <> C_JOB_COMPLETE
2373                   --AND l_job_status <> C_JOB_PARTS_HOLD
2374                   ) THEN
2375                   FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_JOB_STATUS');
2376                   --FND_MESSAGE.Set_Token('STATUS',l_job_status);
2377                   FND_MESSAGE.Set_Token('STATUS', p_x_ahl_mtltxn_rec.Workorder_Status);
2378                   FND_MSG_PUB.ADD;
2379                   x_return_status := FND_API.G_RET_STS_ERROR;
2380                END IF;
2381             END IF;
2382         END IF;
2383         CLOSE AHL_WIPJOB_CUR;
2384 
2385         IF G_DEBUG='Y' THEN
2386             AHL_DEBUG_PUB.debug('Validating Workorder operation Id ['||to_Char(p_x_ahl_mtltxn_rec.Workorder_ID)||','
2387             ||to_Char(p_x_ahl_mtltxn_rec.Operation_Seq_Num)||','||to_Char(p_x_ahl_mtltxn_rec.Workorder_Operation_Id)||']');
2388         END IF;
2389 
2390 
2391         -- Validate the Workorder Id and Operation Seq num
2392         OPEN AHL_WORKORDER_OPER_CUR(p_x_ahl_mtltxn_rec.Workorder_ID,
2393                             p_x_ahl_mtltxn_rec.Operation_Seq_Num,
2394                             p_x_ahl_mtltxn_rec.Workorder_Operation_Id);
2395         FETCH AHL_WORKORDER_OPER_CUR INTO l_Count;
2396         IF(AHL_WORKORDER_OPER_CUR%NOTFOUND) THEN
2397             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WORKORDER_OP');
2398             FND_MESSAGE.Set_Token('WO',p_x_ahl_mtltxn_rec.Workorder_Id);
2399             FND_MESSAGE.Set_Token('SEQ',p_x_ahl_mtltxn_rec.Operation_Seq_Num);
2400             FND_MESSAGE.Set_Token('OP',p_x_ahl_mtltxn_rec.Workorder_Operation_Id);
2401             FND_MSG_PUB.ADD;
2402             x_return_status := FND_API.G_RET_STS_ERROR;
2403         END IF;
2404         CLOSE AHL_WORKORDER_OPER_CUR;
2405 
2406         IF G_DEBUG='Y' THEN
2407           AHL_DEBUG_PUB.debug('Validating item_id['||to_Char(p_x_ahl_mtltxn_rec.Organization_ID)||','||to_Char(p_x_ahl_mtltxn_rec.Inventory_Item_Id)||']');
2408         END IF;
2409 
2410         If  p_x_ahl_mtltxn_rec.transaction_type_id= WIP_CONSTANTS.RETCOMP_TYPE
2411         and p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id is null
2412         then
2413 
2414             Validate_item_duplic
2415             (
2416                 p_x_ahl_mtltxn_rec
2417             );
2418 
2419         End if;
2420 
2421 
2422        /*
2423         OPEN TRANSACTION_DATE_CUR(
2424                             p_x_ahl_mtltxn_rec.Workorder_Operation_Id,
2425                             p_x_ahl_mtltxn_rec.Workorder_ID,
2426                             p_x_ahl_mtltxn_rec.INVENTORY_ITEM_ID
2427                             );
2428         FETCH TRANSACTION_DATE_CUR INTO L_SCHED_START_DATE;
2429         IF  TRANSACTION_DATE_CUR%FOUND
2430         THEN
2431             IF  L_SCHED_START_DATE > p_x_ahl_mtltxn_rec.TRANSACTION_DATE
2432             THEN
2433                 FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_TRANSACTION_DATE');
2434                 --FND_MESSAGE.Set_Token('FIELD',p_x_ahl_mtltxn_rec.Inventory_Item_Id);
2435                 FND_MSG_PUB.ADD;
2436 
2437             END IF;
2438         END IF;
2439         CLOSE TRANSACTION_DATE_CUR;
2440         */
2441 
2442 
2443     -- Validate Item id
2444     OPEN AHL_ITEM_ID_CUR(p_x_ahl_mtltxn_rec.Organization_ID,
2445                 p_x_ahl_mtltxn_rec.Inventory_Item_Id);
2446     FETCH AHL_ITEM_ID_CUR INTO l_serial_Control, l_lot_control, l_revision_control, l_location_control,
2447                            x_eam_item_type_id, l_primary_uom_code,
2448                                    l_concatenated_segments;
2449     IF(AHL_ITEM_ID_CUR%NOTFOUND) THEN
2450         FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_ITEM');
2451         if(p_x_ahl_mtltxn_rec.Inventory_Item_Id = FND_API.G_MISS_NUM) THEN
2452             p_x_ahl_mtltxn_rec.Inventory_Item_Id := NULL;
2453         END IF;
2454         FND_MESSAGE.Set_Token('FIELD',p_x_ahl_mtltxn_rec.Inventory_Item_Id);
2455         FND_MSG_PUB.ADD;
2456         x_return_status := FND_API.G_RET_STS_ERROR;
2457         CLOSE AHL_ITEM_ID_CUR;
2458         -- Skip the rest of the validations.
2459         RETURN;
2460     END IF;
2461     CLOSE AHL_ITEM_ID_CUR;
2462 
2463 
2464     -- default project locator if move_to_project flag is checked.(ER 5854712).
2465     -- For return txns only.
2466     IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
2467         AND (p_x_ahl_mtltxn_rec.move_to_project_flag = 'Y') THEN
2468              IF (l_inv_locator_id IS NOT NULL) THEN
2469                  IF G_DEBUG='Y' THEN
2470                    AHL_DEBUG_PUB.debug('Defaulting from Visit Locator['||l_inv_locator_id||','|| l_project_id ||',' || l_project_task_id || ']');
2471                  END IF;
2472                  PJM_PROJECT_LOCATOR.Get_DefaultProjectLocator(
2473                          p_organization_id => p_x_ahl_mtltxn_rec.organization_id,
2474                          p_locator_id      => l_inv_locator_id,
2475                          p_project_id      => l_project_id,
2476                          p_task_id         => l_project_task_id,
2477                          p_project_locator_id => l_project_locator_id);
2478                  IF (l_project_locator_id IS NULL) THEN
2479                      FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATOR');
2480                      FND_MESSAGE.Set_Token('LOC',l_inv_locator_id);
2481                      FND_MSG_PUB.ADD;
2482                      RAISE FND_API.G_EXC_ERROR;
2483                  ELSE
2484                      p_x_ahl_mtltxn_rec.locator_id := l_project_locator_id;
2485                      p_x_ahl_mtltxn_rec.subinventory_name := l_subinventory_code;
2486                  END IF;
2487              ELSE
2488                -- move_to_project_flag error.
2489                FND_MESSAGE.Set_Name('AHL','AHL_PRD_MOVEPRJ_FLAG_INVALID');
2490                FND_MSG_PUB.ADD;
2491              END IF;
2492 
2493     END IF; -- p_x_ahl_mtltxn_rec.Locator_Id.move_to_project_flag = 'Y'
2494 
2495 
2496     -- Added Post 11.5.10: Default subinventory.
2497     --
2498     IF G_DEBUG='Y' THEN
2499       AHL_DEBUG_PUB.debug('Defaulting SubInv/Locator['||p_x_ahl_mtltxn_rec.Subinventory_Name||',' ||
2500              p_x_ahl_mtltxn_rec.Locator_id || ']');
2501         END IF;
2502         OPEN wip_params_cur(p_x_ahl_mtltxn_rec.Organization_ID);
2503         FETCH wip_params_cur INTO l_def_supply_subinv, l_def_supply_locator_id;
2504         IF (wip_params_cur%FOUND) THEN
2505            IF ((p_x_ahl_mtltxn_rec.Subinventory_Name IS NULL OR
2506                p_x_ahl_mtltxn_rec.Subinventory_Name = FND_API.G_MISS_CHAR) AND
2507               l_def_supply_subinv IS NOT NULL) THEN
2508               p_x_ahl_mtltxn_rec.Subinventory_Name := l_def_supply_subinv;
2509            END IF;
2510 
2511            -- Locator.
2512            -- Added check for ER 5854712 - support dynamic locator creation.
2513            -- default only when both locator ID and Segments are null.
2514            IF ((p_x_ahl_mtltxn_rec.Locator_id IS NULL OR
2515                p_x_ahl_mtltxn_rec.Locator_id = FND_API.G_MISS_NUM) AND
2516                (p_x_ahl_mtltxn_rec.Locator_Segments IS NULL OR
2517                 p_x_ahl_mtltxn_rec.Locator_Segments = FND_API.G_MISS_CHAR) AND
2518                l_def_supply_locator_id IS NOT NULL) THEN
2519               p_x_ahl_mtltxn_rec.Locator_id := l_def_supply_locator_id;
2520            END IF;
2521 
2522         END IF;
2523         CLOSE  wip_params_cur;
2524 
2525 
2526     IF G_DEBUG='Y' THEN
2527       AHL_DEBUG_PUB.debug('Validating serial num(control, srl_num)['||to_Char(l_serial_Control)||','||p_x_ahl_mtltxn_rec.Serial_Number||']');
2528         END IF;
2529 
2530     -- If the item is of serial controlled check if the serial numebr is null
2531     IF((p_x_ahl_mtltxn_rec.Serial_Number IS NULL
2532          OR p_x_ahl_mtltxn_rec.Serial_Number = FND_API.G_MISS_CHAR)
2533          AND (nvl(l_serial_Control,0) <> nvl(C_NO_SERIAL_CONTROL,0)) ) THEN
2534         FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_SRLNUM');
2535         FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
2536         FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2537         FND_MSG_PUB.ADD;
2538         x_return_status := FND_API.G_RET_STS_ERROR;
2539     END IF;
2540 
2541     IF (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL AND
2542          p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR AND
2543          nvl(l_serial_Control,1) = 1) THEN
2544         FND_MESSAGE.Set_Name('AHL','AHL_PRD_SRLNUM_NOTMAND');
2545         FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
2546         FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2547         FND_MSG_PUB.ADD;
2548         x_return_status := FND_API.G_RET_STS_ERROR;
2549     END IF;
2550 
2551     -- Added for FP bug# 5903318.
2552     IF G_DEBUG='Y' THEN
2553       AHL_DEBUG_PUB.debug('Validating Create WO Option['||p_x_ahl_mtltxn_rec.create_wo_option ||']');
2554     END IF;
2555 
2556     -- Validate Create WO Option lookup code.
2557     IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
2558        IF (p_x_ahl_mtltxn_rec.create_wo_option IS NULL OR
2559            p_x_ahl_mtltxn_rec.create_wo_option = FND_API.G_MISS_CHAR) THEN
2560           IF (nvl(l_serial_Control,0) = C_NO_SERIAL_CONTROL) THEN
2561              p_x_ahl_mtltxn_rec.create_wo_option := 'CREATE_SR_NO';
2562           ELSE
2563              -- serialized.
2564              p_x_ahl_mtltxn_rec.create_wo_option := 'CREATE_WO_NO';
2565           END IF;
2566        ELSE
2567           -- validate lookup code.
2568           OPEN create_wo_cur(p_x_ahl_mtltxn_rec.create_wo_option, 'AHL_SR_WO_CREATE_OPTIONS');
2569           FETCH create_wo_cur INTO l_fnd_meaning;
2570           IF (create_wo_cur%NOTFOUND) THEN
2571              FND_MESSAGE.Set_Name('AHL','AHL_PRD_INV_LOOKUP');
2572              FND_MESSAGE.Set_Token('LCODE',p_x_ahl_mtltxn_rec.create_wo_option);
2573              FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2574              FND_MSG_PUB.ADD;
2575              x_return_status := FND_API.G_RET_STS_ERROR;
2576           END IF;
2577           CLOSE create_wo_cur;
2578        END IF;
2579 
2580        IF G_DEBUG='Y' THEN
2581          AHL_DEBUG_PUB.debug('After Defaulting Create WO Option['||p_x_ahl_mtltxn_rec.create_wo_option ||']');
2582        END IF;
2583 
2584        -- Check if create_wo_option is valid based on l_serial_Control.
2585        IF (nvl(l_serial_Control,0) = C_NO_SERIAL_CONTROL ) THEN
2586           -- non-serial.
2587           IF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_WO_NO') THEN
2588             FND_MESSAGE.Set_Name('AHL','AHL_PRD_NONSRL_WO_OPT');
2589             FND_MESSAGE.Set_Token('WO_OPT',l_fnd_meaning);
2590             FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2591             FND_MSG_PUB.ADD;
2592             x_return_status := FND_API.G_RET_STS_ERROR;
2593               END IF;
2594        END IF;
2595     END IF;
2596     -- End changes for FP bug# 5903318.
2597 
2598     -- Validate ServiceType Sareepar, FP PIE
2599     IF (p_x_ahl_mtltxn_rec.service_type IS NOT NULL AND p_x_ahl_mtltxn_rec.service_type <> FND_API.G_MISS_CHAR) THEN
2600       OPEN service_type_code_cur( p_x_ahl_mtltxn_rec.service_type);
2601       FETCH service_type_code_cur INTO p_x_ahl_mtltxn_rec.service_type_code;
2602       IF(service_type_code_cur%NOTFOUND) THEN
2603         FND_MESSAGE.Set_Name('AHL','AHL_PRD_SERVICE_TYPE_INVALID');
2604         FND_MSG_PUB.ADD;
2605       END IF;
2606       CLOSE service_type_code_cur;
2607     ELSIF(p_x_ahl_mtltxn_rec.service_type = FND_API.G_MISS_CHAR) THEN
2608       p_x_ahl_mtltxn_rec.service_type_code := NULL;
2609     END IF;
2610 
2611     IF G_DEBUG='Y' THEN
2612       AHL_DEBUG_PUB.debug('Validating lot num(control, srl_num)['||to_Char(l_lot_Control)||','||p_x_ahl_mtltxn_rec.serial_Number||']');
2613     END IF;
2614 
2615         -- If the item is of lot controlled check if the lot number is null
2616         IF((p_x_ahl_mtltxn_rec.Lot_Number IS NULL
2617              OR p_x_ahl_mtltxn_rec.Lot_Number = FND_API.G_MISS_CHAR)
2618              AND (l_lot_Control <> C_NO_LOT_CONTROL) ) THEN
2619             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOT');
2620             FND_MESSAGE.Set_Token('LOT',p_x_ahl_mtltxn_rec.Lot_Number);
2621                         FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2622             FND_MSG_PUB.ADD;
2623             x_return_status := FND_API.G_RET_STS_ERROR;
2624         END IF;
2625                 -- validate lot number.
2626                 IF ((p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL AND
2627                      p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR)
2628                      AND (l_lot_Control <> C_NO_LOT_CONTROL) ) THEN
2629                    OPEN mtl_lot_num_csr(p_x_ahl_mtltxn_rec.organization_id,
2630                         p_x_ahl_mtltxn_rec.inventory_item_id,
2631                         p_x_ahl_mtltxn_rec.Lot_Number);
2632                    FETCH mtl_lot_num_csr INTO l_junk;
2633                    IF (mtl_lot_num_csr%NOTFOUND) THEN
2634                      FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOT');
2635                      FND_MESSAGE.Set_Token('LOT',p_x_ahl_mtltxn_rec.Lot_Number);
2636                      FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2637                      FND_MSG_PUB.ADD;
2638                      x_return_status := FND_API.G_RET_STS_ERROR;
2639                    END IF;
2640                    CLOSE mtl_lot_num_csr;
2641                 END IF;
2642 
2643                 -- raise error if item is not lot controlled.
2644                 IF ((p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL AND
2645                      p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR)
2646                      AND (l_lot_Control = C_NO_LOT_CONTROL) ) THEN
2647                         FND_MESSAGE.Set_Name('AHL','AHL_PRD_LOT_NOTNULL');
2648                         FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2649                         FND_MSG_PUB.ADD;
2650                         x_return_status := FND_API.G_RET_STS_ERROR;
2651                 END IF;
2652 
2653         -- If the locator controlled is true at the item level or sub inventory level
2654         -- check if the locator id is given or not.
2655         /****************************************************************
2656          This vlaidation happens in the MTL API, so we do not need it here
2657 
2658         IF G_DEBUG='Y' THEN
2659           AHL_DEBUG_PUB.debug('Validating locator(control, srl_num)['||to_Char(l_location_Control)||','||to_Char(p_x_ahl_mtltxn_rec.Locator_Id)||']');
2660 
2661     END IF;
2662 
2663         IF(p_x_ahl_mtltxn_rec.Locator_Id IS NULL
2664              OR p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
2665             IF (l_location_Control <> C_NO_LOCATOR_CONTROL) THEN
2666                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATOR');
2667                 if(p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
2668                     p_x_ahl_mtltxn_rec.Locator_Id := NULL;
2669                 END IF;
2670                 FND_MESSAGE.Set_Token('LOC',p_x_ahl_mtltxn_rec.Locator_Id);
2671                 FND_MSG_PUB.ADD;
2672                 x_return_status := FND_API.G_RET_STS_ERROR;
2673             END IF;
2674         ELSE
2675         ****************************************************************/
2676                 IF (p_x_ahl_mtltxn_rec.Locator_Id IS NOT NULL AND
2677                     p_x_ahl_mtltxn_rec.Locator_Id <> FND_API.G_MISS_NUM) THEN
2678             OPEN AHL_LOCATOR_CUR(p_x_ahl_mtltxn_rec.Organization_ID,
2679                                 p_x_ahl_mtltxn_rec.Locator_Id,
2680                                 p_x_ahl_mtltxn_rec.Subinventory_Name);
2681             FETCH AHL_LOCATOR_CUR INTO l_Count;
2682             IF(AHL_LOCATOR_CUR%NOTFOUND) THEN
2683                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATOR');
2684                 if(p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
2685                     p_x_ahl_mtltxn_rec.Locator_Id := NULL;
2686                 END IF;
2687                 FND_MESSAGE.Set_Token('LOC',p_x_ahl_mtltxn_rec.Locator_Id);
2688                 FND_MSG_PUB.ADD;
2689                 x_return_status := FND_API.G_RET_STS_ERROR;
2690             END IF;
2691             CLOSE AHL_LOCATOR_CUR;
2692         END IF;
2693 
2694         IF G_DEBUG='Y' THEN
2695           AHL_DEBUG_PUB.debug('Validating revision['||p_x_ahl_mtltxn_rec.Revision||']');
2696                 END IF;
2697 
2698         -- Tamal: Bug #4091154: Begin
2699         -- If item is revision-controlled, then verify revision is NOT NULL and is valid
2700         -- If item is not revision-controlled, then verify revision is NULL
2701         IF (nvl(l_revision_control, -1) = 2)
2702         THEN
2703             IF (p_x_ahl_mtltxn_rec.Revision IS NULL OR p_x_ahl_mtltxn_rec.Revision = FND_API.G_MISS_CHAR)
2704             THEN
2705             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_REVISION');
2706             FND_MESSAGE.Set_Token('REVISION',p_x_ahl_mtltxn_rec.Revision);
2707             FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2708             FND_MSG_PUB.ADD;
2709             x_return_status := FND_API.G_RET_STS_ERROR;
2710             ELSE
2711             OPEN AHL_REVISION_CUR
2712             (
2713                 p_x_ahl_mtltxn_rec.Organization_ID,
2714                 p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2715                 p_x_ahl_mtltxn_rec.Revision
2716             );
2717             FETCH AHL_REVISION_CUR INTO l_Count;
2718             IF (AHL_REVISION_CUR%NOTFOUND)
2719             THEN
2720                         FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_REVISION');
2721                         FND_MESSAGE.Set_Token('REVISION',p_x_ahl_mtltxn_rec.Revision);
2722                 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2723                         FND_MSG_PUB.ADD;
2724                         x_return_status := FND_API.G_RET_STS_ERROR;
2725             END IF;
2726             CLOSE AHL_REVISION_CUR;
2727             END IF;
2728         ELSE
2729             IF (p_x_ahl_mtltxn_rec.Revision IS NOT NULL AND p_x_ahl_mtltxn_rec.Revision <> FND_API.G_MISS_CHAR)
2730             THEN
2731             FND_MESSAGE.Set_Name('AHL','AHL_PRD_REVNUM_NOTMAND');
2732             FND_MESSAGE.Set_Token('REV',p_x_ahl_mtltxn_rec.Revision);
2733             FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2734             FND_MSG_PUB.ADD;
2735             x_return_status := FND_API.G_RET_STS_ERROR;
2736             END IF;
2737         END IF;
2738             -- Tamal: Bug #4091154: End
2739 
2740         --Reason should be valid
2741         IF(p_x_ahl_mtltxn_rec.Reason_Id IS NOT NULL AND
2742             p_x_ahl_mtltxn_rec.Reason_Id <> FND_API.G_MISS_NUM) THEN
2743             OPEN AHL_REASON_CUR(p_x_ahl_mtltxn_rec.Reason_Id);
2744             FETCH AHL_REASON_CUR INTO l_Count;
2745             IF(AHL_REASON_CUR%NOTFOUND) THEN
2746                FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVLD_REASON');
2747                FND_MESSAGE.Set_Token('REASON',p_x_ahl_mtltxn_rec.Revision);
2748                FND_MSG_PUB.ADD;
2749                x_return_status := FND_API.G_RET_STS_ERROR;
2750             END IF;
2751             CLOSE AHL_REASON_CUR;
2752         END IF;
2753 
2754         IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
2755             --Condition Validation
2756             OPEN Condition_Cur(p_x_ahl_mtltxn_rec.Condition);
2757             FETCH Condition_Cur INTO l_Count;
2758             IF(Condition_Cur%NOTFOUND) THEN
2759                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_COND_INVALID');
2760                 if(p_x_ahl_mtltxn_rec.Condition = FND_API.G_MISS_NUM) THEN
2761                     p_x_ahl_mtltxn_rec.Condition := NULL;
2762                 END IF;
2763                 FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Condition);
2764                 FND_MSG_PUB.ADD;
2765                 x_return_status := FND_API.G_RET_STS_ERROR;
2766             END IF;
2767             CLOSE Condition_Cur;
2768 
2769             IF G_DEBUG='Y' THEN
2770                  AHL_DEBUG_PUB.debug('Validating Condition/Subinv['||p_x_ahl_mtltxn_rec.Condition||','||p_x_ahl_mtltxn_rec.Subinventory_Name||']');
2771                 END IF;
2772 
2773             -- Check if the Condition matches the Sub inventory status
2774             -- in case of unserviceable and MRB
2775             AHL_PRD_UTIL_PKG.Validate_Material_Status(p_x_ahl_mtltxn_rec.Organization_Id,
2776                                      p_x_ahl_mtltxn_rec.Subinventory_Name,
2777                                      p_x_ahl_mtltxn_rec.Condition,
2778                                      l_return_Status);
2779                         IF (l_return_Status <>  FND_API.G_RET_STS_SUCCESS) THEN
2780                           x_return_status := FND_API.G_RET_STS_ERROR;
2781                         END IF;
2782 
2783         ELSE
2784             IF G_DEBUG='Y' THEN
2785                    AHL_DEBUG_PUB.debug('Validating Subinv['||p_x_ahl_mtltxn_rec.Subinventory_Name||']');
2786                     END IF;
2787 
2788             -- Sub inventory  validation
2789             AHL_PRD_UTIL_PKG.Validate_Material_Status(p_x_ahl_mtltxn_rec.Organization_Id,
2790                                      p_x_ahl_mtltxn_rec.Subinventory_Name,
2791                                      NULL,
2792                                      l_return_Status);
2793             IF G_DEBUG='Y' THEN
2794                 AHL_DEBUG_PUB.debug('After Validating Subinv['||p_x_ahl_mtltxn_rec.Subinventory_Name||','||x_return_Status || ']');
2795                         END IF;
2796 
2797                         IF (l_return_Status <>  FND_API.G_RET_STS_SUCCESS) THEN
2798                           x_return_status := FND_API.G_RET_STS_ERROR;
2799                         END IF;
2800         END IF;
2801 
2802     --If the Transaction_type_id is WIP RETURN
2803     IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
2804 
2805 
2806              --If the item is trackkable check if the parent item
2807              --exists for the item, if exists return error : AHL_MTL_TXN_NOT_ALLOWED
2808 
2809             IF (Is_Item_Trackable(p_x_ahl_mtltxn_rec.Organization_Id,
2810                                         p_x_ahl_mtltxn_rec.Inventory_Item_Id)) THEN
2811 
2812                     IF G_DEBUG='Y' THEN
2813                       AHL_DEBUG_PUB.debug('selecting wip location id..');
2814                     END IF;
2815                     -- R12: Fix for bug# 5221513
2816                     -- IB team have asked us to remove the location validation to fix the issue.
2817                     /*
2818                     OPEN CSI_LOCATION_CUR(p_x_ahl_mtltxn_rec.Organization_Id);
2819                     FETCH CSI_LOCATION_CUR INTO l_wip_location;
2820                     IF(CSI_LOCATION_CUR%NOTFOUND) THEN
2821                         FND_MESSAGE.Set_Name('AHL','AHL_PRD_CSI_INSTALL_ERROR');
2822                         FND_MSG_PUB.ADD;
2823                         x_return_status := FND_API.G_RET_STS_ERROR;
2824                     END IF;
2825                     CLOSE CSI_LOCATION_CUR;
2826                     IF G_DEBUG='Y' THEN
2827                       AHL_DEBUG_PUB.debug('wip location id['||to_char(l_wip_location)||']');
2828                     END IF;
2829                     */
2830 
2831                 IF (p_x_ahl_mtltxn_rec.Serial_Number IS NULL
2832                      OR p_x_ahl_mtltxn_rec.Serial_Number = FND_API.G_MISS_CHAR) THEN
2833 
2834                            -- Non serialized item:
2835 
2836                            l_sql := 'SELECT INSTANCE_ID, QUANTITY FROM CSI_ITEM_INSTANCES CII ';
2837                            l_sql := l_sql || ' WHERE 1=1';
2838                            --l_sql := l_Sql || ' AND INV_MASTER_ORGANIZATION_ID=:b1';
2839                            l_sql := l_sql || ' AND INVENTORY_ITEM_ID =:b2' ;
2840                            l_sql := l_sql || ' AND WIP_JOB_ID=:b3';
2841                            --l_sql := l_sql || ' AND INV_SUBINVENTORY_NAME=:b4' ;
2842                            -- commenting our location check to fix bug# 5221513.
2843                            --l_sql := l_sql || ' AND LOCATION_TYPE_CODE=''WIP''' ;
2844                            --l_sql := l_sql || ' AND LOCATION_ID=:b7 ';
2845                            -- Fix for bug# 4074091. -- ORA-1422 error.
2846                            l_sql := l_sql || ' AND ROWNUM < 2 ';
2847                            -- End changes for bug fix.
2848 
2849                            l_sql := l_sql || ' AND ACTIVE_START_DATE <=SYSDATE ';
2850                            l_sql := l_sql || ' AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE>SYSDATE))';
2851                            l_sql := l_sql || ' AND NOT EXISTS (SELECT null FROM CSI_II_RELATIONSHIPS CIR ';
2852                            l_sql := l_sql || ' WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID ';
2853                            l_sql := l_sql || ' AND CIR.RELATIONSHIP_TYPE_CODE = ''COMPONENT-OF''';
2854                            l_sql := l_sql || ' AND ((CIR.ACTIVE_START_DATE IS NULL) OR (CIR.ACTIVE_START_DATE <= SYSDATE))';
2855                            l_sql := l_sql || ' AND ((CIR.ACTIVE_END_DATE IS NULL) OR (CIR.ACTIVE_END_DATE > SYSDATE)) )';
2856 
2857                            IF(p_x_ahl_mtltxn_rec.Revision IS NOT NULL
2858                                 AND p_x_ahl_mtltxn_rec.Revision <> FND_API.G_MISS_CHAR) THEN
2859                                   --l_sql := l_sql || ' AND INVENTORY_REVISION='''||p_x_ahl_mtltxn_rec.Revision||'''';
2860                                   l_sql := l_sql || ' AND INVENTORY_REVISION=:b5';
2861                                                   l_revision_flag := TRUE;
2862                            END IF;
2863                            IF(p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL
2864                                 AND p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR) THEN
2865                                   --l_sql := l_sql || ' AND LOT_NUMBER='''||p_x_ahl_mtltxn_rec.Lot_Number||'''';
2866                                   l_sql := l_sql || ' AND LOT_NUMBER=:b6';
2867                                                   l_lot_flag := TRUE;
2868                            END IF;
2869 
2870                            BEGIN
2871                             IF G_DEBUG='Y' THEN
2872                                 AHL_DEBUG_PUB.debug('Validating instance:item/wipjob/subinv['
2873                                        ||to_Char(p_x_ahl_mtltxn_rec.Inventory_Item_Id)||','
2874                                        ||to_Char(p_x_ahl_mtltxn_rec.Wip_Entity_Id)||']');
2875 
2876                                 AHL_DEBUG_PUB.debug('['||p_x_ahl_mtltxn_rec.Subinventory_Name||']');
2877                                 AHL_DEBUG_PUB.debug('[Length of sql string:'||length(l_sql)||']');
2878                                 AHL_DEBUG_PUB.debug('[1:'||substr(l_sql,1,240)||']');
2879                                 AHL_DEBUG_PUB.debug('[2:'||substr(l_sql,241,240)||']');
2880                                 AHL_DEBUG_PUB.debug('[3:'||substr(l_sql,481,240)||']');
2881                             END IF;
2882                             -- R12: Fix for bug# 5221513
2883                             -- remove WIP location validation.
2884                             IF (l_revision_flag = TRUE) AND (l_lot_flag = TRUE)
2885                             THEN
2886                                EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id, l_instance_qty
2887                                          USING --p_x_ahl_mtltxn_rec.Organization_Id,
2888                                     p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2889                                     p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2890                                     --, p_x_ahl_mtltxn_rec.Subinventory_Name,
2891                                     --l_wip_location,
2892                                     p_x_ahl_mtltxn_rec.Revision,
2893                                     p_x_ahl_mtltxn_rec.Lot_Number;
2894                             ELSIF (l_revision_flag = TRUE) THEN
2895                                EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id, l_instance_qty
2896                                          USING --p_x_ahl_mtltxn_rec.Organization_Id,
2897                                     p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2898                                     p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2899                                     --, p_x_ahl_mtltxn_rec.Subinventory_Name,
2900                                     --l_wip_location,
2901                                     p_x_ahl_mtltxn_rec.Revision;
2902                             ELSIF (l_lot_flag = TRUE) THEN
2903                                EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id, l_instance_qty
2904                                          USING --p_x_ahl_mtltxn_rec.Organization_Id,
2905                                     p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2906                                     p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2907                                     --, p_x_ahl_mtltxn_rec.Subinventory_Name,
2908                                     --l_wip_location,
2909                                     p_x_ahl_mtltxn_rec.Lot_Number;
2910                             ELSE
2911                                  EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id, l_instance_qty
2912                                  USING --p_x_ahl_mtltxn_rec.Organization_Id,
2913                                     p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2914                                     p_x_ahl_mtltxn_rec.Wip_Entity_Id;
2915                                     --l_wip_location;
2916                                     --, p_x_ahl_mtltxn_rec.Subinventory_Name;
2917                                END IF;
2918                            EXCEPTION
2919                               WHEN NO_DATA_FOUND THEN
2920                                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_TXN_NOT_ALLOWED');
2921                                 FND_MSG_PUB.ADD;
2922                                 x_return_status := FND_API.G_RET_STS_ERROR;
2923                            END;
2924                            p_x_ahl_mtltxn_rec.Item_Instance_ID := x_Item_Instance_Id;
2925 
2926                 ELSE
2927                       -- Serialized item...
2928 
2929                       IF G_DEBUG='Y' THEN
2930                          AHL_DEBUG_PUB.debug('Validating instance:item/wipjob/srl['||to_Char(p_x_ahl_mtltxn_rec.Inventory_Item_Id)||','
2931                           ||to_Char(p_x_ahl_mtltxn_rec.Wip_Entity_Id)||','
2932                          ||p_x_ahl_mtltxn_rec.Serial_Number||']');
2933                       END IF;
2934 
2935                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
2936                         fnd_log.string
2937                         (
2938                                G_LEVEL_STATEMENT,
2939                                'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2940                                'p_x_ahl_mtltxn_rec.Inventory_Item_Id : ' || p_x_ahl_mtltxn_rec.Inventory_Item_Id
2941                         );
2942                         fnd_log.string
2943                         (
2944                                G_LEVEL_STATEMENT,
2945                                'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2946                                'p_x_ahl_mtltxn_rec.Wip_Entity_Id : ' || p_x_ahl_mtltxn_rec.Wip_Entity_Id
2947                         );
2948                         fnd_log.string
2949                         (
2950                                G_LEVEL_STATEMENT,
2951                                'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2952                                'p_x_ahl_mtltxn_rec.Serial_Number : ' || p_x_ahl_mtltxn_rec.Serial_Number
2953                         );
2954                         /*
2955                         fnd_log.string
2956                         (
2957                                G_LEVEL_STATEMENT,
2958                                'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2959                                'l_wip_location : ' || l_wip_location
2960                         );*/
2961                       END IF;
2962 
2963                       OPEN CSI_SER_ITEM_CUR( p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2964                                              p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2965                                              p_x_ahl_mtltxn_rec.Serial_Number);
2966                                              --l_wip_location);
2967                       FETCH CSI_SER_ITEM_CUR INTO x_Item_Instance_Id;
2968                       IF(CSI_SER_ITEM_CUR%NOTFOUND) THEN
2969                                FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_TXN_NOT_ALLOWED');
2970                                FND_MSG_PUB.ADD;
2971                                x_return_status := FND_API.G_RET_STS_ERROR;
2972                       END IF;
2973                       CLOSE CSI_SER_ITEM_CUR;
2974                       p_x_ahl_mtltxn_rec.Item_Instance_ID := x_Item_Instance_Id;
2975                       l_instance_qty := 1;
2976 
2977                 END IF;
2978 
2979 
2980                 --If the 'Condition' is MRB and the QA_COLLECTION_ID is null return
2981                 --the Error AHL_NO_QA_RESULTS
2982                 --only in case the return is not tied to a disposition.
2983 
2984                 IF (p_x_ahl_mtltxn_rec.Condition = G_AHL_MRB_CONDITION AND
2985                     p_x_ahl_mtltxn_rec.disposition_id IS NULL) THEN
2986 
2987                     AHL_QA_RESULTS_PVT.get_qa_plan
2988                         (
2989                            p_api_version   => 1.0,
2990                            p_init_msg_list => FND_API.G_False,
2991                            p_commit => FND_API.G_FALSE,
2992                            p_validation_level => FND_API.G_VALID_LEVEL_FULL,
2993                            p_default => FND_API.G_FALSE,
2994                            p_module_type => 'JSP',
2995                            p_organization_id => p_x_ahl_mtltxn_rec.Organization_Id,
2996                            p_transaction_number => 2004,
2997                            p_col_trigger_value => fnd_profile.value('AHL_MRB_DISP_PLAN_TYPE'),
2998                            x_return_status => l_return_status,
2999                            x_msg_count => l_msg_count,
3000                            x_msg_data => l_msg_data,
3001                            x_plan_id  => l_plan_id
3002                          );
3003                     IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3004                          l_plan_id := null;
3005                     END If;
3006 
3007                     IF ((l_plan_id is not null) AND
3008                         (p_x_ahl_mtltxn_rec.Qa_Collection_Id = FND_API.G_MISS_NUM OR
3009                           p_x_ahl_mtltxn_rec.Qa_Collection_Id IS NULL)) THEN
3010                         OPEN is_qa_coll_reqd(l_plan_id);
3011                         FETCH is_qa_coll_reqd INTO l_junk;
3012                         IF(is_qa_coll_reqd%FOUND) THEN
3013                           FND_MESSAGE.Set_Name('AHL','AHL_PRD_NO_QA_RESULTS');
3014                           FND_MSG_PUB.ADD;
3015                           x_return_status := FND_API.G_RET_STS_ERROR;
3016                         END IF;
3017                         CLOSE is_qa_coll_reqd;
3018                     END IF;
3019                 END IF;
3020 
3021                 IF(p_x_ahl_mtltxn_rec.Problem_Code IS NOT NULL
3022                    AND p_x_ahl_mtltxn_rec.Problem_Code <> FND_API.G_MISS_CHAR) THEN
3023 
3024                     IF G_DEBUG='Y' THEN
3025                        AHL_DEBUG_PUB.debug('Validating problem code['||p_x_ahl_mtltxn_rec.Problem_Code||']');
3026                     END IF;
3027 
3028                     OPEN PROBLEM_CODE_LKUP_CUR(p_x_ahl_mtltxn_rec.Problem_Code) ;
3029                     FETCH PROBLEM_CODE_LKUP_CUR INTO l_count;
3030                     IF(PROBLEM_CODE_LKUP_CUR%NOTFOUND) THEN
3031                         FND_MESSAGE.Set_Name('AHL','AHL_PRD_PROBLEM_CODE_INVALID');
3032                         FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Problem_Code);
3033                         FND_MSG_PUB.ADD;
3034                         x_return_status := FND_API.G_RET_STS_ERROR;
3035                     END IF;
3036                     CLOSE PROBLEM_CODE_LKUP_CUR;
3037                 END IF;
3038 
3039                 -- validate txn quantity with instance qty along with pending txns.
3040                 IF G_DEBUG='Y' THEN
3041                   AHL_DEBUG_PUB.debug('Validate Instance qty..Instance:Qty:[' || x_Item_Instance_Id || ':' || l_instance_qty || ']');
3042                 END IF;
3043 
3044                 IF (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL
3045                      AND p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR) THEN
3046                    OPEN mtl_serial_csr(p_x_ahl_mtltxn_rec.INVENTORY_ITEM_ID, p_x_ahl_mtltxn_rec.Serial_Number);
3047                    FETCH mtl_serial_csr INTO l_junk;
3048                    IF (mtl_serial_csr%NOTFOUND) THEN
3049                      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3050                          fnd_log.string
3051                          (
3052                            G_LEVEL_STATEMENT,
3053                            'ahl.plsql.AHL_PRD_MTLTXN_PVT.validate_txn_rec',
3054                            'Serial Number resides in inventory:' || p_x_ahl_mtltxn_rec.Serial_Number
3055                          );
3056                      END IF;
3057                      FND_MESSAGE.Set_Name('AHL','AHL_PRD_SERIAL_NOT_INV');
3058                      FND_MESSAGE.Set_Token('SERIAL',p_x_ahl_mtltxn_rec.Serial_Number);
3059                      FND_MSG_PUB.ADD;
3060                      x_return_status := FND_API.G_RET_STS_ERROR;
3061                    END IF;
3062                    CLOSE mtl_serial_csr;
3063                 ELSIF (p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL
3064                       AND p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR) THEN
3065                   IF G_DEBUG='Y' THEN
3066                     AHL_DEBUG_PUB.debug('Checking pending txns: nonserial and lot controlled case');
3067                   END IF;
3068                   OPEN csi_pending_lot_txn(p_x_ahl_mtltxn_rec.Wip_Entity_Id,
3069                                            p_x_ahl_mtltxn_rec.inventory_item_id,
3070                                            WIP_CONSTANTS.RETCOMP_TYPE,
3071                                            p_x_ahl_mtltxn_rec.Revision,
3072                                            p_x_ahl_mtltxn_rec.Lot_Number);
3073                   FETCH csi_pending_lot_txn INTO l_pend_qty;
3074                   CLOSE csi_pending_lot_txn;
3075                   IF (l_pend_qty IS NULL) THEN
3076                      l_pend_qty := 0;
3077                   END IF;
3078 
3079                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
3080                      fnd_log.string
3081                        (
3082                          G_LEVEL_STATEMENT,
3083                          'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
3084                          'Lot Pending txns quantity:' || l_pend_qty
3085                        );
3086                   END IF;
3087 
3088                   -- check if the same instance was transacted earlier and get total transacted qty.
3089                   k := -1;
3090                   IF (G_nonserial_ii_tbl.count > 0) THEN
3091                      FOR m IN G_nonserial_ii_tbl.FIRST..G_nonserial_ii_tbl.LAST LOOP
3092                        IF (G_nonserial_ii_tbl(m).instance_id = p_x_ahl_mtltxn_rec.item_instance_id) THEN
3093                           -- add previous txn qty to pending qty.
3094                           l_pend_qty := nvl(l_pend_qty,0) + G_nonserial_ii_tbl(m).quantity;
3095                           k := m;
3096                           IF G_DEBUG='Y' THEN
3097                             AHL_DEBUG_PUB.debug('Updated pending qty: nonserial and lot controlled case:k:' || l_pend_qty || ':' || k);
3098                           END IF;
3099                           EXIT;
3100                        END IF;
3101                      END LOOP;
3102                   END IF;
3103                   IF (nvl(p_x_ahl_mtltxn_rec.quantity,0) + nvl(l_pend_qty,0)  > nvl(l_instance_qty,0)) THEN
3104                       FND_MESSAGE.Set_Name('AHL','AHL_PRD_TXN_QTY_INVALID');
3105                       FND_MESSAGE.Set_Token('QTY',p_x_ahl_mtltxn_rec.quantity);
3106                       FND_MESSAGE.Set_Token('II_QTY', l_instance_qty-l_pend_qty);
3107                       FND_MSG_PUB.ADD;
3108                       x_return_status := FND_API.G_RET_STS_ERROR;
3109                   END IF;
3110                   IF (k = -1) THEN
3111                       G_nonserial_ii_tbl(G_nonserial_ii_tbl.count+1).instance_id := p_x_ahl_mtltxn_rec.item_instance_id;
3112                       G_nonserial_ii_tbl(G_nonserial_ii_tbl.count).quantity := nvl(p_x_ahl_mtltxn_rec.quantity,0);
3113                       IF G_DEBUG='Y' THEN
3114                         AHL_DEBUG_PUB.debug('Added to G_nonserial_ii_tbl:Count:' || G_nonserial_ii_tbl.count);
3115                       END IF;
3116                   ELSE
3117                       G_nonserial_ii_tbl(k).quantity := G_nonserial_ii_tbl(k).quantity + nvl(p_x_ahl_mtltxn_rec.quantity,0);
3118                       IF G_DEBUG='Y' THEN
3119                          AHL_DEBUG_PUB.debug('Updated pending qty for instance:qty:k:' || G_nonserial_ii_tbl(k).instance_id || ':' || l_pend_qty || ':' || k);
3120                       END IF;
3121                   END IF;
3122 
3123                 ELSE
3124                   IF G_DEBUG='Y' THEN
3125                     AHL_DEBUG_PUB.debug('Checking pending txns: nonserial and not lot controlled case');
3126                   END IF;
3127                   -- nonserial and not lot controlled
3128                   OPEN csi_pending_txns_csr(p_x_ahl_mtltxn_rec.Wip_Entity_Id,
3129                                             p_x_ahl_mtltxn_rec.inventory_item_id,
3130                                             WIP_CONSTANTS.RETCOMP_TYPE,
3131                                             p_x_ahl_mtltxn_rec.Revision);
3132                   FETCH csi_pending_txns_csr INTO l_pend_qty;
3133                   CLOSE csi_pending_txns_csr;
3134                   IF (l_pend_qty IS NULL) THEN
3135                      l_pend_qty := 0;
3136                   END IF;
3137 
3138                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
3139                      fnd_log.string
3140                        (
3141                          G_LEVEL_STATEMENT,
3142                          'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
3143                          'Pending txns quantity:' || l_pend_qty
3144                        );
3145                   END IF;
3146 
3147                   -- check if the same instance was transacted earlier and get total transacted qty.
3148                   k := -1;
3149                   IF (G_nonserial_ii_tbl.count > 0) THEN
3150                      FOR m IN G_nonserial_ii_tbl.FIRST..G_nonserial_ii_tbl.LAST LOOP
3151                        IF (G_nonserial_ii_tbl(m).instance_id = p_x_ahl_mtltxn_rec.item_instance_id) THEN
3152                           -- add previous txn qty to pending qty.
3153                           l_pend_qty := l_pend_qty + G_nonserial_ii_tbl(m).quantity;
3154                           k := m;
3155                           IF G_DEBUG='Y' THEN
3156                             AHL_DEBUG_PUB.debug('Updated pending qty: nonserial and non lot controlled case:k:' || l_pend_qty || ':' || k);
3157                           END IF;
3158                           EXIT;
3159                        END IF;
3160                      END LOOP;
3161                      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
3162                         fnd_log.string
3163                           (
3164                             G_LEVEL_STATEMENT,
3165                             'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
3166                             'Updated Pending txns quantity nonserial and not lot case:' || l_pend_qty
3167                           );
3168                      END IF;
3169                   END IF;
3170 
3171                   IF (nvl(p_x_ahl_mtltxn_rec.quantity,0) + nvl(l_pend_qty,0)  > nvl(l_instance_qty,0)) THEN
3172                       FND_MESSAGE.Set_Name('AHL','AHL_PRD_TXN_QTY_INVALID');
3173                       FND_MESSAGE.Set_Token('QTY',p_x_ahl_mtltxn_rec.quantity);
3174                       FND_MESSAGE.Set_Token('II_QTY', l_instance_qty-l_pend_qty);
3175                       FND_MSG_PUB.ADD;
3176                       x_return_status := FND_API.G_RET_STS_ERROR;
3177                   END IF;
3178                   IF (k = -1) THEN
3179                       G_nonserial_ii_tbl(G_nonserial_ii_tbl.count+1).instance_id := p_x_ahl_mtltxn_rec.item_instance_id;
3180                       G_nonserial_ii_tbl(G_nonserial_ii_tbl.count).quantity := nvl(p_x_ahl_mtltxn_rec.quantity,0);
3181                       IF G_DEBUG='Y' THEN
3182                         AHL_DEBUG_PUB.debug('Added to G_nonserial_ii_tbl:Count:' || G_nonserial_ii_tbl.count);
3183                       END IF;
3184                   ELSE
3185                       G_nonserial_ii_tbl(k).quantity := G_nonserial_ii_tbl(k).quantity + nvl(p_x_ahl_mtltxn_rec.quantity,0);
3186                       IF G_DEBUG='Y' THEN
3187                          AHL_DEBUG_PUB.debug('Updated pending qty for instance:qty:k:' || G_nonserial_ii_tbl(k).instance_id || ':' || l_pend_qty || ':' || k);
3188                       END IF;
3189                   END IF;
3190                   if (G_nonserial_ii_tbl.count > 0) THEN
3191                      IF G_DEBUG='Y' THEN
3192                         for z in G_nonserial_ii_tbl.first..G_nonserial_ii_tbl.last loop
3193                           AHL_DEBUG_PUB.debug('instance_id:' || G_nonserial_ii_tbl(z).instance_id);
3194                           AHL_DEBUG_PUB.debug('qty:' || G_nonserial_ii_tbl(z).quantity);
3195                         end loop;
3196                      end if;
3197                   end if;
3198 
3199                 END IF; -- Serial_Number IS NOT NULL
3200             END IF; -- End of If for trackkable item check
3201     ELSE -- if it is a material issue
3202         -- find out instance id if possible : here (fix for bug number 4089691)
3203         -- Added trackable item check to fix bug# 6331012.
3204         IF (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL
3205             AND p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR
3206             AND Is_Item_Trackable(p_x_ahl_mtltxn_rec.Organization_Id,
3207                                   p_x_ahl_mtltxn_rec.Inventory_Item_Id)) THEN
3208              OPEN CSI_ISSUE_SER_ITEM_CUR( p_x_ahl_mtltxn_rec.Inventory_Item_Id,p_x_ahl_mtltxn_rec.Serial_Number );
3209              FETCH CSI_ISSUE_SER_ITEM_CUR INTO  p_x_ahl_mtltxn_rec.Item_Instance_ID;
3210              IF(CSI_ISSUE_SER_ITEM_CUR%NOTFOUND) THEN
3211                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_TXN_NOT_ALLOWED');
3212                 FND_MSG_PUB.ADD;
3213                 x_return_status := FND_API.G_RET_STS_ERROR;
3214              END IF;
3215              CLOSE CSI_ISSUE_SER_ITEM_CUR;
3216         END IF;
3217     END IF; -- End of IF for WIP Return Check.
3218 
3219 
3220         --If the serial number is not null and the quantity is <>1  return the
3221         --Error AHL_INVALID_SRL_QTY
3222 
3223         IF G_DEBUG='Y' THEN
3224           AHL_DEBUG_PUB.debug('Validating serial num/qty['||p_x_ahl_mtltxn_rec.quantity||']');
3225         END IF;
3226 
3227         IF ((p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR) AND
3228             (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) AND
3229                      nvl(l_serial_Control,1) <> 1)  THEN
3230                    IF (p_x_ahl_mtltxn_rec.uom IS NOT NULL AND
3231                        p_x_ahl_mtltxn_rec.uom <> l_primary_uom_code) THEN
3232                          -- convert qty to primary quantity.
3233                          l_quantity := inv_convert.inv_um_convert
3234                               (item_id        => p_x_ahl_mtltxn_rec.Inventory_Item_Id,
3235                                precision      => 6,
3236                                from_quantity  => p_x_ahl_mtltxn_rec.Quantity,
3237                                from_unit      => p_x_ahl_mtltxn_rec.uom,
3238                                to_unit        => l_primary_uom_code,
3239                                from_name      => NULL,
3240                                to_name        => NULL );
3241 
3242                          IF (l_quantity <> 1) THEN
3243                             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_ITEM_QTY');
3244                             FND_MESSAGE.Set_Token('PRIM_UOM',l_primary_uom_code);
3245                             FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
3246                             FND_MSG_PUB.ADD;
3247                             x_return_status := FND_API.G_RET_STS_ERROR;
3248                          END IF;
3249                    ELSE
3250                      -- qty in primary uom.
3251              IF (p_x_ahl_mtltxn_rec.Quantity <> 1) THEN
3252             FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_ITEM_QTY');
3253                         FND_MESSAGE.Set_Token('PRIM_UOM',l_primary_uom_code);
3254                         FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
3255             FND_MSG_PUB.ADD;
3256             x_return_status := FND_API.G_RET_STS_ERROR;
3257                      END IF;
3258                    END IF; -- uom code.
3259         END IF; -- serial num.
3260 
3261             IF G_DEBUG='Y' THEN
3262           AHL_DEBUG_PUB.debug('Validating serial subinv, loc['||p_x_ahl_mtltxn_rec.Serial_Number||']');
3263                 END IF;
3264 
3265                 -- For issue txn with serial number, validate if subinventory and locator match
3266                 -- that from mtl_serial_numbers.
3267                 IF (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) AND
3268                    (p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR) AND
3269                    (nvl(l_serial_Control,0) <> 1) AND
3270                    (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
3271                    OPEN mtl_srl_num_csr(p_x_ahl_mtltxn_rec.Organization_ID,
3272                                         p_x_ahl_mtltxn_rec.Inventory_Item_id,
3273                                         p_x_ahl_mtltxn_rec.Serial_Number);
3274                    FETCH mtl_srl_num_csr INTO l_curr_subinventory_code, l_curr_locator_id;
3275                    IF (mtl_srl_num_csr%FOUND) THEN
3276 
3277                  IF G_DEBUG='Y' THEN
3278                 AHL_DEBUG_PUB.debug('Validating serial subinv['||p_x_ahl_mtltxn_rec.subinventory_Name||']');
3279                      END IF;
3280 
3281                      IF (p_x_ahl_mtltxn_rec.subinventory_Name IS NOT NULL AND
3282                          p_x_ahl_mtltxn_rec.subinventory_Name <> FND_API.G_MISS_CHAR AND
3283                          p_x_ahl_mtltxn_rec.subinventory_Name <> l_curr_subinventory_code) THEN
3284                              FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_SUB_CODE');
3285                              FND_MESSAGE.Set_Token('CODE',l_curr_subinventory_code);
3286                              FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
3287                              FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
3288                              FND_MSG_PUB.ADD;
3289                              x_return_status := FND_API.G_RET_STS_ERROR;
3290                      END IF;
3291 
3292                  IF G_DEBUG='Y' THEN
3293                 AHL_DEBUG_PUB.debug('Validating serial subinv['||p_x_ahl_mtltxn_rec.subinventory_Name||']');
3294                      END IF;
3295 
3296                      IF (p_x_ahl_mtltxn_rec.locator_id IS NOT NULL AND
3297                          p_x_ahl_mtltxn_rec.locator_id <> FND_API.G_MISS_NUM AND
3298                          l_curr_locator_id IS NOT NULL AND
3299                          p_x_ahl_mtltxn_rec.locator_id <> l_curr_locator_id) THEN
3300                            FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOC_CODE');
3301                            --FND_MESSAGE.Set_Token('CODE',l_curr_locator_id);
3302                            FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
3303                            FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
3304                            FND_MSG_PUB.ADD;
3305                            x_return_status := FND_API.G_RET_STS_ERROR;
3306                      END IF;
3307                    ELSE
3308                      -- serial number not found.
3309                      FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_SRLNUM');
3310                      FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
3311                      FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
3312                      FND_MSG_PUB.ADD;
3313                      x_return_status := FND_API.G_RET_STS_ERROR;
3314                    END IF;
3315 
3316                    CLOSE mtl_srl_num_csr;
3317                 END IF;
3318 
3319             IF G_DEBUG='Y' THEN
3320               AHL_DEBUG_PUB.debug('Validating transaction date['||p_x_ahl_mtltxn_rec.transaction_date||']');
3321             END IF;
3322 
3323                 -- Validate transaction date.
3324                 IF (p_x_ahl_mtltxn_rec.transaction_date IS NULL OR
3325                     p_x_ahl_mtltxn_rec.transaction_date = FND_API.G_MISS_DATE) THEN
3326                    p_x_ahl_mtltxn_rec.transaction_date := SYSDATE;
3327                 /*
3328                 * defaulting the time component to 23:59:59(for past dates) and systime for current date to fix bug#4096941
3329                 */
3330                 ELSIF(trunc(p_x_ahl_mtltxn_rec.transaction_date) = trunc(SYSDATE))THEN
3331                    p_x_ahl_mtltxn_rec.transaction_date := SYSDATE;
3332                 ELSIF(trunc(p_x_ahl_mtltxn_rec.transaction_date) < trunc(SYSDATE))THEN
3333                    p_x_ahl_mtltxn_rec.transaction_date := trunc(p_x_ahl_mtltxn_rec.transaction_date) + 86399/86400;
3334                 ELSE
3335                    IF (p_x_ahl_mtltxn_rec.transaction_date > SYSDATE) THEN
3336 
3337                      IF G_DEBUG='Y' THEN
3338                       AHL_DEBUG_PUB.debug('Error in txn date');
3339                      END IF;
3340                      FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXN_DATE');
3341                      FND_MESSAGE.Set_Token('DATE',p_x_ahl_mtltxn_rec.transaction_date);
3342                      FND_MSG_PUB.ADD;
3343                      x_return_status := FND_API.G_RET_STS_ERROR;
3344                    END IF;
3345 
3346                 END IF;
3347                 /*
3348                 * adding release date validation(txns date should be > release date) to fix bug#4096941
3349                 */
3350                 OPEN workorder_released_date_csr(p_x_ahl_mtltxn_rec.Wip_Entity_Id);
3351                 FETCH workorder_released_date_csr INTO l_workorder_released_date;
3352                 IF(workorder_released_date_csr%NOTFOUND)THEN
3353                   FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WIP_ENTITY');
3354                   IF(p_x_ahl_mtltxn_rec.Wip_Entity_Id = FND_API.G_MISS_NUM) THEN
3355                      p_x_ahl_mtltxn_rec.Wip_Entity_Id := NULL;
3356                   END IF;
3357                   FND_MESSAGE.Set_Token('WIP_ENTITY',p_x_ahl_mtltxn_rec.Wip_Entity_Id);
3358                   FND_MSG_PUB.ADD;
3359                   x_return_status := FND_API.G_RET_STS_ERROR;
3360                 ELSE
3361                   IF G_DEBUG='Y' THEN
3362                        AHL_DEBUG_PUB.debug('transaction date['||to_char(p_x_ahl_mtltxn_rec.transaction_date,'dd-mon-yyyy hh24:mi:ss') ||']');
3363                        AHL_DEBUG_PUB.debug('workorder release date['||to_char(l_workorder_released_date,'dd-mon-yyyy hh24:mi:ss') ||']');
3364                    END IF;
3365                   IF(l_workorder_released_date > p_x_ahl_mtltxn_rec.transaction_date)THEN
3366                     IF G_DEBUG='Y' THEN
3367                        AHL_DEBUG_PUB.debug('release date is greater than transaction date');
3368                      END IF;
3369                     FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXN_REL_DT');
3370                     FND_MESSAGE.Set_Token('TXNS_DATE',to_char(p_x_ahl_mtltxn_rec.transaction_date,'dd-MON-yyyy hh24:mi:ss'));
3371                     FND_MESSAGE.Set_Token('REL_DATE',to_char(l_workorder_released_date,'dd-MON-yyyy hh24:mi:ss'));
3372                     FND_MSG_PUB.ADD;
3373                     x_return_status := FND_API.G_RET_STS_ERROR;
3374                   END IF;
3375                 END IF;
3376                 CLOSE workorder_released_date_csr;
3377 
3378       -- validate disposition ID.
3379       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3380           fnd_log.string
3381                  (
3382                    G_LEVEL_STATEMENT,
3383                    'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
3384                    'Validating disposition ID'
3385                  );
3386       END IF;
3387 
3388       -- validate disposition id.
3389       IF (p_x_ahl_mtltxn_rec.disposition_id IS NOT NULL AND
3390           p_x_ahl_mtltxn_rec.disposition_id <> FND_API.G_MISS_NUM) THEN
3391 
3392          -- chk if disposition exists.
3393          OPEN disposition_cur (  p_x_ahl_mtltxn_rec.disposition_id,
3394                                  p_x_ahl_mtltxn_rec.workorder_id,
3395                                  p_x_ahl_mtltxn_rec.Inventory_Item_id,
3396                                  --p_x_ahl_mtltxn_rec.Organization_ID,
3397                                  p_x_ahl_mtltxn_rec.Serial_Number,
3398                                  p_x_ahl_mtltxn_rec.Revision,
3399                                  p_x_ahl_mtltxn_rec.Lot_Number);
3400          FETCH disposition_cur INTO l_disposition_id, l_qa_collection_id, l_condition_code, l_condition_id;
3401          IF (disposition_cur%NOTFOUND) THEN
3402            FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_DISP_INVALID');
3403            FND_MESSAGE.Set_Token('DISP_ID',p_x_ahl_mtltxn_rec.disposition_id);
3404            FND_MSG_PUB.ADD;
3405            x_return_status := FND_API.G_RET_STS_ERROR;
3406          END IF;
3407          CLOSE disposition_cur;
3408          IF (l_qa_collection_id IS NOT NULL) THEN
3409            IF (p_x_ahl_mtltxn_rec.qa_collection_id IS NULL) THEN
3410              FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_QAID_NULL');
3411              FND_MESSAGE.Set_Token('DISP_ID',p_x_ahl_mtltxn_rec.disposition_id);
3412              FND_MSG_PUB.ADD;
3413              x_return_status := FND_API.G_RET_STS_ERROR;
3414            ELSIF (p_x_ahl_mtltxn_rec.qa_collection_id <> l_qa_collection_id) THEN
3415              FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_QAID_INVALID');
3416              FND_MESSAGE.Set_Token('QA_I',p_x_ahl_mtltxn_rec.qa_collection_id);
3417              FND_MESSAGE.Set_Token('QA_D',l_qa_collection_id);
3418              FND_MSG_PUB.ADD;
3419              x_return_status := FND_API.G_RET_STS_ERROR;
3420            END IF;
3421          END IF;
3422          IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
3423              AND (l_condition_id <> p_x_ahl_mtltxn_rec.condition) THEN
3424              FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_COND_INVALID');
3425              FND_MESSAGE.Set_Token('COND_I',p_x_ahl_mtltxn_rec.condition_desc);
3426              FND_MESSAGE.Set_Token('COND_D',l_condition_code);
3427              FND_MSG_PUB.ADD;
3428              x_return_status := FND_API.G_RET_STS_ERROR;
3429           END IF;
3430       END IF; -- -- p_x_ahl_mtltxn_rec.disposition_id
3431 
3432       IF G_DEBUG='Y' THEN
3433         AHL_DEBUG_PUB.debug('after validations api ret_status['||x_return_status||']');
3434       END IF;
3435 
3436 
3437 END VALIDATE_TXN_REC;
3438 
3439 /********************************************************************************
3440 This procedure will process the material tranasction record. The records are
3441 inserted into interface tables and the API is called to process the transaction.
3442 
3443 ********************************************************************************/
3444 
3445 /* Tamal [R12 APPSPERF fixes]
3446  * R12 Drop 4 - SQL ID: 14400039
3447  * Bug #4918991
3448  * Since the following procedure has no functional footprint at the moment, commenting out the procedure
3449  * Additionally marking the SQL ID as Obsolete in sql_repos...
3450  */
3451 
3452 /*
3453 PROCEDURE INSERT_MTL_TXN_TEMP
3454     (
3455         p_api_version        IN            NUMBER     := 1.0,
3456         p_init_msg_list      IN            VARCHAR2   := FND_API.G_FALSE,
3457         p_commit             IN            VARCHAR2   := FND_API.G_FALSE,
3458         p_validation_level   IN            NUMBER     := FND_API.G_VALID_LEVEL_FULL,
3459         p_default            IN            VARCHAR2   := FND_API.G_FALSE,
3460         p_module_type        IN            VARCHAR2   := NULL,
3461         p_x_ahl_mtltxn_rec   IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
3462         x_txn_Hdr_Id         OUT NOCOPY        NUMBER,
3463         x_txn_Tmp_id         OUT NOCOPY        NUMBER,
3464         x_return_status      OUT NOCOPY           VARCHAR2,
3465         x_msg_count          OUT NOCOPY           NUMBER,
3466         x_msg_data           OUT NOCOPY           VARCHAR2
3467     )
3468 IS
3469 l_Process_Flag VARCHAR2(1);
3470 l_Validation_required VARCHAR2(1);
3471 l_txn_action NUMBER;
3472 l_txn_source_type NUMBER;
3473 l_transaction_Mode NUMBER;
3474 l_Srl_Txn_Tmp_Id   NUMBER;
3475 l_mmtt_rec mtl_material_transactions_temp%ROWTYPE;
3476 l_msnt_rec mtl_serial_numbers_temp%ROWTYPE;
3477 l_mtlt_rec mtl_transaction_lots_temp%ROWTYPE;
3478 
3479 l_transaction_reference mtl_material_transactions_temp.transaction_reference%TYPE;
3480 
3481 CURSOR ACCT_PERIOD_CUR(P_org_Id NUMBER) IS
3482 SELECT ACCT_PERIOD_ID from org_acct_periods
3483 where organization_id = p_org_id and open_flag = 'Y'
3484 AND TRUNC(SYSDATE) BETWEEN TRUNC(PERIOD_START_DATE) AND TRUNC(SCHEDULE_CLOSE_DATE);
3485 
3486 CURSOR TRX_ACTION_CUR(p_type_Id NUMBER) IS
3487 SELECT TRANSACTION_ACTION_ID,TRANSACTION_SOURCE_TYPE_ID
3488 from MTL_TRANSACTION_TYPES
3489 where TRANSACTION_TYPE_ID = p_type_Id;
3490 
3491 BEGIN
3492     l_Process_Flag := 'W';
3493     l_Validation_required  := '1';
3494     l_transaction_Mode := 2;
3495     l_txn_action := 1;
3496 
3497     OPEN ACCT_PERIOD_CUR(p_x_ahl_mtltxn_rec.Organization_Id);
3498     FETCH ACCT_PERIOD_CUR INTO l_mmtt_rec.ACCT_PERIOD_ID;
3499     IF(ACCT_PERIOD_CUR%NOTFOUND) THEN
3500         IF G_DEBUG='Y' THEN
3501           AHL_DEBUG_PUB.debug('Did not find the account period for org('||p_x_ahl_mtltxn_rec.Organization_Id||')');
3502 
3503     END IF;
3504         CLOSE ACCT_PERIOD_CUR;
3505         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3506     END IF;
3507     CLOSE ACCT_PERIOD_CUR;
3508 
3509     OPEN TRX_ACTION_CUR(p_x_ahl_mtltxn_rec.Transaction_Type_Id);
3510     FETCH TRX_ACTION_CUR INTO l_txn_action, l_txn_source_type;
3511     IF(TRX_ACTION_CUR%NOTFOUND) THEN
3512         IF G_DEBUG='Y' THEN
3513           AHL_DEBUG_PUB.debug('Did not find the Txn Type');
3514 
3515     END IF;
3516         CLOSE TRX_ACTION_CUR;
3517         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
3518     END IF;
3519     CLOSE TRX_ACTION_CUR;
3520 
3521     l_mmtt_rec.SOURCE_CODE := 'AHL' ;
3522     l_mmtt_rec.SOURCE_LINE_ID := 1;
3523     l_mmtt_rec.TRANSACTION_MODE := l_transaction_Mode;
3524 
3525         IF (p_x_ahl_mtltxn_rec.transaction_reference = FND_API.G_MISS_CHAR) THEN
3526            l_transaction_reference := NULL;
3527         ELSE
3528            l_transaction_reference := p_x_ahl_mtltxn_rec.transaction_reference;
3529         END IF;
3530 
3531     l_mmtt_rec.LOCK_FLAG := '';
3532     l_mmtt_rec.LAST_UPDATE_DATE := SYSDATE;
3533     l_mmtt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3534     l_mmtt_rec.CREATION_DATE := SYSDATE;
3535     l_mmtt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3536     l_mmtt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3537     --l_mmtt_rec.PROGRAM_APPLICATION_ID :=
3538     --l_mmtt_rec.PROGRAM_ID :=
3539     --l_mmtt_rec.PROGRAM_UPDATE_DATE :=
3540     l_mmtt_rec.INVENTORY_ITEM_ID := p_x_ahl_mtltxn_rec.Inventory_Item_Id;
3541     if(p_x_ahl_mtltxn_rec.Revision IS NOT NULL
3542         AND p_x_ahl_mtltxn_rec.Revision <> FND_API.G_MISS_CHAR) THEN
3543         l_mmtt_rec.REVISION := p_x_ahl_mtltxn_rec.Revision;
3544     END IF;
3545     l_mmtt_rec.ORGANIZATION_ID := p_x_ahl_mtltxn_rec.Organization_Id;
3546     l_mmtt_rec.SUBINVENTORY_CODE := p_x_ahl_mtltxn_rec.Subinventory_Name;
3547     IF(p_x_ahl_mtltxn_rec.Locator_Id IS NOT NULL
3548         AND p_x_ahl_mtltxn_rec.Locator_Id <> FND_API.G_MISS_NUM) THEN
3549         l_mmtt_rec.LOCATOR_ID := p_x_ahl_mtltxn_rec.Locator_Id;
3550     END IF;
3551     if(p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
3552         l_mmtt_rec.TRANSACTION_QUANTITY := - p_x_ahl_mtltxn_rec.Quantity;
3553         l_mmtt_rec.PRIMARY_QUANTITY :=  - p_x_ahl_mtltxn_rec.Quantity;
3554     ELSE
3555         l_mmtt_rec.TRANSACTION_QUANTITY := p_x_ahl_mtltxn_rec.Quantity;
3556         l_mmtt_rec.PRIMARY_QUANTITY := p_x_ahl_mtltxn_rec.Quantity;
3557     END IF;
3558     l_mmtt_rec.TRANSACTION_UOM := p_x_ahl_mtltxn_rec.Uom;
3559     l_mmtt_rec.TRANSACTION_TYPE_ID := p_x_ahl_mtltxn_rec.Transaction_Type_Id;
3560     l_mmtt_rec.TRANSACTION_ACTION_ID :=l_txn_action;
3561     l_mmtt_rec.TRANSACTION_SOURCE_TYPE_ID := l_txn_source_type;
3562     l_mmtt_rec.TRANSACTION_DATE := p_x_ahl_mtltxn_rec.Transaction_Date;
3563     --l_mmtt_rec.ACCT_PERIOD_ID := 2266;
3564     l_mmtt_rec.TRANSACTION_SOURCE_ID := p_x_ahl_mtltxn_rec.Wip_Entity_Id;
3565 --      l_mmtt_rec.DISTRIBUTION_ACCOUNT_ID :=
3566     l_mmtt_rec.TRANSACTION_REFERENCE := l_transaction_reference;
3567 --      l_mmtt_rec.REQUISITION_LINE_ID :=
3568 --      l_mmtt_rec.REQUISITION_DISTRIBUTION_ID :=
3569     IF(p_x_ahl_mtltxn_rec.Reason_Id IS NOT NULL
3570         AND p_x_ahl_mtltxn_rec.Reason_Id <> FND_API.G_MISS_NUM) THEN
3571         l_mmtt_rec.REASON_ID :=p_x_ahl_mtltxn_rec.Reason_Id;
3572     END IF;
3573     --l_mmtt_rec.LOT_NUMBER := p_lot_number;
3574     --l_mmtt_rec.LOT_EXPIRATION_DATE :=
3575     --l_mmtt_rec.SERIAL_NUMBER := p_srl_number;
3576     l_mmtt_rec.WIP_ENTITY_TYPE := WIP_CONSTANTS.DISCRETE;
3577     l_mmtt_rec.WIP_SUPPLY_TYPE := 3;
3578     l_mmtt_rec.OPERATION_SEQ_NUM := p_x_ahl_mtltxn_rec.Operation_Seq_Num;
3579     --l_mmtt_rec.ITEM_LOCATION_CONTROL_CODE :=
3580     l_mmtt_rec.PROCESS_FLAG := l_Process_Flag;
3581     IF(p_x_ahl_mtltxn_rec.ATTRIBUTE_CATEGORY IS NOT NULL
3582         AND p_x_ahl_mtltxn_rec.ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR) THEN
3583         l_mmtt_rec.ATTRIBUTE_CATEGORY := p_x_ahl_mtltxn_rec.ATTRIBUTE_CATEGORY;
3584         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE1 IS NOT NULL
3585             AND p_x_ahl_mtltxn_rec.ATTRIBUTE1 <> FND_API.G_MISS_CHAR) THEN
3586             l_mmtt_rec.ATTRIBUTE1         := p_x_ahl_mtltxn_rec.ATTRIBUTE1;
3587         END IF;
3588         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE2 IS NOT NULL
3589             AND p_x_ahl_mtltxn_rec.ATTRIBUTE2 <> FND_API.G_MISS_CHAR) THEN
3590             l_mmtt_rec.ATTRIBUTE2         := p_x_ahl_mtltxn_rec.ATTRIBUTE2;
3591         END IF;
3592         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE3 IS NOT NULL
3593             AND p_x_ahl_mtltxn_rec.ATTRIBUTE3 <> FND_API.G_MISS_CHAR) THEN
3594             l_mmtt_rec.ATTRIBUTE3         := p_x_ahl_mtltxn_rec.ATTRIBUTE3;
3595         END IF;
3596         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE4 IS NOT NULL
3597             AND p_x_ahl_mtltxn_rec.ATTRIBUTE4 <> FND_API.G_MISS_CHAR) THEN
3598             l_mmtt_rec.ATTRIBUTE4         := p_x_ahl_mtltxn_rec.ATTRIBUTE4;
3599         END IF;
3600         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE5 IS NOT NULL
3601             AND p_x_ahl_mtltxn_rec.ATTRIBUTE5 <> FND_API.G_MISS_CHAR) THEN
3602             l_mmtt_rec.ATTRIBUTE5         := p_x_ahl_mtltxn_rec.ATTRIBUTE5;
3603         END IF;
3604         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE6 IS NOT NULL
3605             AND p_x_ahl_mtltxn_rec.ATTRIBUTE6 <> FND_API.G_MISS_CHAR) THEN
3606             l_mmtt_rec.ATTRIBUTE6         := p_x_ahl_mtltxn_rec.ATTRIBUTE6;
3607         END IF;
3608         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE7 IS NOT NULL
3609             AND p_x_ahl_mtltxn_rec.ATTRIBUTE7 <> FND_API.G_MISS_CHAR) THEN
3610             l_mmtt_rec.ATTRIBUTE7         := p_x_ahl_mtltxn_rec.ATTRIBUTE7;
3611         END IF;
3612         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE8 IS NOT NULL
3613             AND p_x_ahl_mtltxn_rec.ATTRIBUTE8 <> FND_API.G_MISS_CHAR) THEN
3614             l_mmtt_rec.ATTRIBUTE8         := p_x_ahl_mtltxn_rec.ATTRIBUTE8;
3615         END IF;
3616         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE9 IS NOT NULL
3617             AND p_x_ahl_mtltxn_rec.ATTRIBUTE9 <> FND_API.G_MISS_CHAR) THEN
3618             l_mmtt_rec.ATTRIBUTE9         := p_x_ahl_mtltxn_rec.ATTRIBUTE9;
3619         END IF;
3620         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE10 IS NOT NULL
3621             AND p_x_ahl_mtltxn_rec.ATTRIBUTE10 <> FND_API.G_MISS_CHAR) THEN
3622             l_mmtt_rec.ATTRIBUTE10        := p_x_ahl_mtltxn_rec.ATTRIBUTE10;
3623         END IF;
3624         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE11 IS NOT NULL
3625             AND p_x_ahl_mtltxn_rec.ATTRIBUTE11 <> FND_API.G_MISS_CHAR) THEN
3626             l_mmtt_rec.ATTRIBUTE11        := p_x_ahl_mtltxn_rec.ATTRIBUTE11;
3627         END IF;
3628         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE12 IS NOT NULL
3629             AND p_x_ahl_mtltxn_rec.ATTRIBUTE12 <> FND_API.G_MISS_CHAR) THEN
3630             l_mmtt_rec.ATTRIBUTE12        := p_x_ahl_mtltxn_rec.ATTRIBUTE12;
3631         END IF;
3632         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE13 IS NOT NULL
3633             AND p_x_ahl_mtltxn_rec.ATTRIBUTE13 <> FND_API.G_MISS_CHAR) THEN
3634             l_mmtt_rec.ATTRIBUTE13        := p_x_ahl_mtltxn_rec.ATTRIBUTE13;
3635         END IF;
3636         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE14 IS NOT NULL
3637             AND p_x_ahl_mtltxn_rec.ATTRIBUTE14 <> FND_API.G_MISS_CHAR) THEN
3638             l_mmtt_rec.ATTRIBUTE14        := p_x_ahl_mtltxn_rec.ATTRIBUTE14;
3639         END IF;
3640         IF(p_x_ahl_mtltxn_rec.ATTRIBUTE15 IS NOT NULL
3641             AND p_x_ahl_mtltxn_rec.ATTRIBUTE15 <> FND_API.G_MISS_CHAR) THEN
3642             l_mmtt_rec.ATTRIBUTE15        := p_x_ahl_mtltxn_rec.ATTRIBUTE15;
3643         END IF;
3644     END IF;
3645 
3646     IF G_DEBUG='Y' THEN
3647           AHL_DEBUG_PUB.debug('inserting the mmtt..');
3648     END IF;
3649 
3650     inv_util.insert_mmtt(p_api_version => 1,
3651                         p_mmtt_rec =>l_mmtt_rec,
3652                         x_trx_header_id => x_Txn_hdr_id,
3653                         x_trx_temp_id => x_Txn_Tmp_Id,
3654                         x_return_status => x_return_status,
3655                         x_msg_count =>x_msg_count,
3656                         x_msg_data => x_msg_data);
3657 
3658     IF G_DEBUG='Y' THEN
3659           AHL_DEBUG_PUB.debug('inserted in mmtt..ret_status['||x_return_status||']');
3660     END IF;
3661     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3662         FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3663         FND_MESSAGE.Set_Token('MSG',x_msg_data);
3664         FND_MSG_PUB.ADD;
3665         RAISE  FND_API.G_EXC_ERROR;
3666     END  IF;
3667 
3668     IF(p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR AND
3669         p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL AND
3670         p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR AND
3671         p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) THEN
3672 
3673         --Item is under Lot and Serial Control
3674         --Generate serial transaction Temp id.
3675         SELECT Mtl_Material_Transactions_S.nextval
3676         INTO l_Srl_Txn_Tmp_Id
3677         FROM DUAL;
3678 
3679 
3680 
3681         l_mtlt_rec.Transaction_Temp_Id  := x_Txn_Tmp_Id;
3682         l_mtlt_rec.Serial_Transaction_Temp_Id:= l_Srl_Txn_Tmp_Id;
3683         l_mtlt_rec.Lot_Number                 := p_x_ahl_mtltxn_rec.Lot_Number;
3684 
3685         -- Lot expiration date needs to  be selected.
3686 
3687         --l_mtlt_rec.Lot_Expiration_Date          := p_x_ahl_mtltxn_rec.Lot_Expiration_Date;
3688         l_mtlt_rec.Transaction_Quantity   := p_x_ahl_mtltxn_rec.Quantity;
3689         l_mtlt_rec.Primary_Quantity   := p_x_ahl_mtltxn_rec.Quantity;
3690 
3691         l_mtlt_rec.LAST_UPDATE_DATE := SYSDATE;
3692         l_mtlt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3693         l_mtlt_rec.CREATION_DATE := SYSDATE;
3694         l_mtlt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3695         l_mtlt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3696 
3697         l_msnt_rec.Transaction_Temp_Id := l_Srl_Txn_Tmp_Id;
3698         l_msnt_rec.Fm_Serial_Number    := p_x_ahl_mtltxn_rec.Serial_Number;
3699         l_msnt_rec.To_Serial_Number    := p_x_ahl_mtltxn_rec.Serial_Number;
3700         l_msnt_rec.LAST_UPDATE_DATE := SYSDATE;
3701         l_msnt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3702         l_msnt_rec.CREATION_DATE := SYSDATE;
3703         l_msnt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3704         l_msnt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3705 
3706         IF G_DEBUG='Y' THEN
3707           AHL_DEBUG_PUB.debug('inserting  in mtlt..');
3708     END IF;
3709 
3710         inv_util.insert_mtlt(p_api_version => 1,
3711                         p_mtlt_rec =>l_mtlt_rec,
3712                         x_return_status => x_return_status,
3713                         x_msg_count =>x_msg_count,
3714                         x_msg_data => x_msg_data);
3715         IF G_DEBUG='Y' THEN
3716           AHL_DEBUG_PUB.debug('inserted in mtlt..ret_status['||x_return_status||']');
3717     END IF;
3718         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3719             FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3720             FND_MESSAGE.Set_Token('MSG',x_msg_data);
3721             FND_MSG_PUB.ADD;
3722             RAISE  FND_API.G_EXC_ERROR;
3723         END  IF;
3724         IF G_DEBUG='Y' THEN
3725           AHL_DEBUG_PUB.debug('inserting  in msnt..');
3726 
3727     END IF;
3728         inv_util.insert_msnt(p_api_version => 1,
3729                         p_msnt_rec =>l_msnt_rec,
3730                         x_return_status => x_return_status,
3731                         x_msg_count =>x_msg_count,
3732                         x_msg_data => x_msg_data);
3733 
3734         IF G_DEBUG='Y' THEN
3735           AHL_DEBUG_PUB.debug('inserted in msnt..ret_status['||x_return_status||']');
3736 
3737     END IF;
3738 
3739         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3740             FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3741             FND_MESSAGE.Set_Token('MSG',x_msg_data);
3742             FND_MSG_PUB.ADD;
3743             RAISE  FND_API.G_EXC_ERROR;
3744         END  IF;
3745 
3746     ELSIF (p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR AND
3747        p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL ) THEN
3748             --Item is under Lot control
3749             l_mtlt_rec.Transaction_Temp_Id        := x_Txn_Tmp_Id;
3750             l_mtlt_rec.Lot_Number                 := p_x_ahl_mtltxn_rec.Lot_Number;
3751             --l_mtlt_rec.Lot_Expiration_Date          := p_x_ahl_mtltxn_rec.Lot_Expiration_Date;
3752             l_mtlt_rec.Transaction_Quantity       := p_x_ahl_mtltxn_rec.Quantity;
3753             l_mtlt_rec.Primary_Quantity       := p_x_ahl_mtltxn_rec.Quantity;
3754             l_mtlt_rec.LAST_UPDATE_DATE := SYSDATE;
3755             l_mtlt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3756             l_mtlt_rec.CREATION_DATE := SYSDATE;
3757             l_mtlt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3758             l_mtlt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3759 
3760             IF G_DEBUG='Y' THEN
3761           AHL_DEBUG_PUB.debug('inserting  in mtlt..');
3762 
3763     END IF;
3764             inv_util.insert_mtlt(p_api_version => 1,
3765                             p_mtlt_rec =>l_mtlt_rec,
3766                             x_return_status => x_return_status,
3767                             x_msg_count =>x_msg_count,
3768                             x_msg_data => x_msg_data);
3769             IF G_DEBUG='Y' THEN
3770       AHL_DEBUG_PUB.debug('inserted in mtlt..ret_status['||x_return_status||']');
3771 
3772     END IF;
3773             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3774                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3775                 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3776                 FND_MSG_PUB.ADD;
3777                 RAISE  FND_API.G_EXC_ERROR;
3778             END  IF;
3779 
3780     ELSIF (p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR AND
3781             p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) THEN
3782             -- Item is under serial control
3783             l_msnt_rec.Transaction_Temp_Id      := x_Txn_Tmp_Id;
3784             l_msnt_rec.Fm_Serial_Number         := p_x_ahl_mtltxn_rec.Serial_Number;
3785             l_msnt_rec.To_Serial_Number         := p_x_ahl_mtltxn_rec.Serial_Number;
3786             l_msnt_rec.LAST_UPDATE_DATE := SYSDATE;
3787             l_msnt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3788             l_msnt_rec.CREATION_DATE := SYSDATE;
3789             l_msnt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3790             l_msnt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3791 
3792             IF G_DEBUG='Y' THEN
3793           AHL_DEBUG_PUB.debug('inserting  in msnt..');
3794 
3795     END IF;
3796 
3797             inv_util.insert_msnt(p_api_version => 1,
3798                                         p_msnt_rec =>l_msnt_rec,
3799                                         x_return_status => x_return_status,
3800                                         x_msg_count =>x_msg_count,
3801                                         x_msg_data => x_msg_data);
3802             IF G_DEBUG='Y' THEN
3803           AHL_DEBUG_PUB.debug('inserted in msnt..ret_status['||x_return_status||']');
3804 
3805     END IF;
3806 
3807             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3808                 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3809                 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3810                 FND_MSG_PUB.ADD;
3811                 RAISE  FND_API.G_EXC_ERROR;
3812             END  IF;
3813     END IF;
3814 END INSERT_MTL_TXN_TEMP;
3815 */
3816 
3817 /*****************************************************************
3818 This function returns true if the item is trackable and false if not.
3819 
3820 ******************************************************************/
3821 FUNCTION IS_ITEM_TRACKABLE(p_Org_Id IN NUMBER, p_Item_Id IN NUMBER) RETURN BOOLEAN
3822 IS
3823 l_count NUMBER;
3824 ret boolean;
3825 -- Query to check if item is trakkable
3826 CURSOR Item_tr_Cur(p_org_Id NUMBER, p_item_Id NUMBER) IS
3827     SELECT 1
3828     FROM MTL_SYSTEM_ITEMS_B
3829     WHERE INVENTORY_ITEM_ID = p_Item_Id
3830     AND ORGANIZATION_ID = p_Org_Id
3831     AND COMMS_NL_TRACKABLE_FLAG = 'Y'
3832     AND ENABLED_FLAG = 'Y'
3833     AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
3834     AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
3835 
3836 BEGIN
3837 
3838     l_Count := 0;
3839     ret := FALSE;
3840     OPEN Item_Tr_Cur(p_org_Id, p_item_Id);
3841     FETCH Item_Tr_Cur into l_Count;
3842     IF (Item_Tr_Cur%NOTFOUND) THEN
3843         ret := FALSE;
3844     ELSE
3845         ret := TRUE;
3846     END IF;
3847 
3848     CLOSE Item_Tr_Cur;
3849     RETURN ret;
3850 END IS_ITEM_TRACKABLE;
3851 
3852 /***************************************************
3853 This procedure inserts record in the AHL_SCHEDULE_MATERIALS table
3854 TBD to be corrected.
3855 ************************************************/
3856 PROCEDURE Insert_Sch_Mtl_Row(
3857     p_mtl_txn_Rec        IN            Ahl_Mtltxn_Rec_Type,
3858     x_return_status      OUT NOCOPY           VARCHAR2,
3859     x_msg_count          OUT NOCOPY           NUMBER,
3860     x_msg_data           OUT NOCOPY           VARCHAR2,
3861     x_ahl_sch_mtl_id     OUT NOCOPY        NUMBER)
3862 IS
3863 Material_Tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type ;
3864 x_tmp VARCHAR2(10);
3865 l_project_id NUMBER;
3866 l_project_Task_id NUMBER ;
3867 l_Visit_Id NUMBER;
3868 l_visit_task_Id NUMBER;
3869 l_Item_Desc VARCHAR2(240);
3870 l_quantity  NUMBER;
3871 l_primary_uom  ahl_schedule_materials.UOM%TYPE;
3872 
3873 -- QWuey to select the work order dependent data to be passed to Schedule materials API.
3874 CURSOR Workop_Det_Cur(p_wo_id NUMBER) IS
3875 SELECT B.VISIT_ID,C.VISIT_TASK_ID,B.PROJECT_ID,C.PROJECT_TASK_ID
3876 FROM AHL_WORKORDERS A, AHL_VISITS_B B, AHL_VISIT_TASKS_B C
3877 WHERE A.WORKORDER_ID = p_wo_id
3878 AND A.VISIT_TASK_ID = C.VISIT_TASK_ID
3879 AND C.VISIT_ID = B.VISIT_ID;
3880 -- Bug # 9373684 (FP for Bug # 9248655) -- start
3881 -- Item description is not used in procedure AHL_PP_MATERIALS_PVT.Create_Material_Reqst.
3882 /*
3883 --Query to select the item desccription
3884 CURSOR Item_Desc_Cur(p_org_id NUMBER, p_item_id NUMBER) IS
3885 SELECT DESCRIPTION
3886 FROM MTL_SYSTEM_ITEMS_KFV
3887 WHERE ORGANIZATION_ID = p_org_id
3888 AND INVENTORY_ITEM_ID = p_item_id;
3889 */
3890 -- Bug # 9373684 (FP for Bug # 9248655) -- end
3891 BEGIN
3892 
3893     IF G_DEBUG='Y' THEN
3894           AHL_DEBUG_PUB.debug('Entered Insert_Sch_Mtl_Row');
3895 
3896     END IF;
3897     OPEN Workop_Det_Cur( p_mtl_txn_Rec.Workorder_Id);
3898     FETCH Workop_Det_Cur INTO l_Visit_Id,l_visit_task_Id,l_project_id,l_project_Task_id;
3899     IF(Workop_Det_Cur%NOTFOUND) THEN
3900         FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WO_OP');
3901         FND_MSG_PUB.ADD;
3902         CLOSE Workop_Det_Cur;
3903         RAISE  FND_API.G_EXC_ERROR;
3904     END IF;
3905     CLOSE Workop_Det_Cur;
3906     IF G_DEBUG='Y' THEN
3907           AHL_DEBUG_PUB.debug('Selected the work order paramters');
3908           AHL_DEBUG_PUB.debug('l_Visit_Id['||l_Visit_Id||']');
3909           AHL_DEBUG_PUB.debug('l_visit_task_Id['||l_visit_task_Id||']');
3910           AHL_DEBUG_PUB.debug('l_project_id['||l_project_id||']');
3911           AHL_DEBUG_PUB.debug('l_project_Task_id['||l_project_Task_id||']');
3912           AHL_DEBUG_PUB.debug('p_mtl_txn_Rec.Workorder_Operation_Id['||p_mtl_txn_Rec.Workorder_Operation_Id||']');
3913 
3914     END IF;
3915 
3916     -- Bug # 9373684 (FP for Bug # 9248655) -- start
3917     /*
3918     OPEN Item_Desc_Cur( p_mtl_txn_Rec.Organization_id, p_mtl_txn_Rec.Inventory_Item_Id);
3919     FETCH Item_Desc_Cur INTO l_Item_Desc;
3920     IF(Item_Desc_Cur%NOTFOUND) THEN
3921         FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_ITEM');
3922         FND_MESSAGE.Set_Token('FIELD',p_mtl_txn_Rec.Inventory_Item_Id);
3923         FND_MSG_PUB.ADD;
3924         CLOSE Item_Desc_Cur;
3925         RAISE  FND_API.G_EXC_ERROR;
3926     END IF;
3927     CLOSE Item_Desc_Cur;
3928     IF G_DEBUG='Y' THEN
3929           AHL_DEBUG_PUB.debug('Selected the Item description');
3930 
3931     END IF;
3932     */
3933     -- Bug # 9373684 (FP for Bug # 9248655) -- end
3934         -- Get Primary UOM for the item.
3935         l_primary_uom := AHL_LTP_MTL_REQ_PVT.Get_Primary_UOM(p_inventory_item_id => p_mtl_txn_Rec.Inventory_Item_Id,
3936                                                      p_inventory_org_id => p_mtl_txn_Rec.Organization_id);
3937 
3938         l_quantity :=  p_mtl_txn_Rec.Quantity;
3939         -- Convert quantity to primary UOM if p_mtl_txn_Rec.uom is not.
3940         IF (l_primary_uom <> p_mtl_txn_Rec.uom) THEN
3941           l_quantity := AHL_LTP_MTL_REQ_PVT.Get_Primary_UOM_Qty(p_mtl_txn_Rec.Inventory_Item_Id,
3942                                     p_mtl_txn_Rec.uom,
3943                                 p_mtl_txn_Rec.Quantity);
3944         END IF;
3945 
3946     --Material_Tbl(0).OBJECT_VERSION_NUMBER   := 1;
3947     Material_Tbl(0).INVENTORY_ITEM_ID       := p_mtl_txn_Rec.Inventory_Item_Id;
3948     --Material_Tbl(0).SCHEDULE_DESIGNATOR   :=
3949     Material_Tbl(0).VISIT_ID                := l_Visit_Id;
3950     --Material_Tbl(0).VISIT_START_DATE      :=
3951     Material_Tbl(0).VISIT_TASK_ID           := l_visit_task_Id;
3952     Material_Tbl(0).ORGANIZATION_ID         := p_mtl_txn_Rec.Organization_Id;
3953     --Material_Tbl(0).SCHEDULED_DATE        :=
3954     --Material_Tbl(0).REQUEST_ID            :=
3955     --Material_Tbl(0).PROCESS_STATUS        :=
3956     --Material_Tbl(0).ERROR_MESSAGE         :=
3957     --Material_Tbl(0).TRANSACTION_ID        :=
3958     --Material_Tbl(0).CONCATENATED_SEGMENTS   :=
3959     --Material_Tbl(0).ITEM_DESCRIPTION      :=
3960     --Material_Tbl(0).RT_OPER_MATERIAL_ID   :=
3961     -- Fix bug# 6598809. Pass requested quantity as 0.
3962     --Material_Tbl(0).REQUESTED_QUANTITY      := l_quantity;
3963     Material_Tbl(0).REQUESTED_QUANTITY      := 0;
3964     Material_Tbl(0).REQUESTED_DATE          := SYSDATE;
3965     Material_Tbl(0).UOM_CODE    := l_primary_Uom;
3966     --Material_Tbl(0).SCHEDULED_QUANTITY    := ;
3967     --Material_Tbl(0).JOB_NUMBER            :=
3968     Material_Tbl(0).WORKORDER_ID            := p_mtl_txn_Rec.Workorder_Id;
3969     Material_Tbl(0).OPERATION_SEQUENCE      := p_mtl_txn_Rec.Operation_Seq_Num;
3970     Material_Tbl(0).WORKORDER_OPERATION_ID  := p_mtl_txn_Rec.Workorder_Operation_Id;
3971     --Material_Tbl(0).ITEM_GROUP_ID         :=
3972     --Material_Tbl(0).PROGRAM_ID            :=
3973     --Material_Tbl(0).PROGRAM_UPDATE_DATE   :=
3974     --Material_Tbl(0).LAST_UPDATED_DATE     := SYSDATE;
3975     -- Bug # 9373684 (FP for Bug # 9248655) -- start
3976     -- Item description is not used in procedure AHL_PP_MATERIALS_PVT.Create_Material_Reqst.
3977     --Material_Tbl(0).DESCRIPTION             := l_Item_Desc;
3978     -- Bug # 9373684 (FP for Bug # 9248655) -- end
3979     --Material_Tbl(0).DEPARTMENT_ID         :=
3980     Material_Tbl(0).PROJECT_TASK_ID         := l_project_Task_id;
3981     Material_Tbl(0).PROJECT_ID              := l_project_id;
3982     --Material_Tbl(0).Req_Material_Rec_Type  :=
3983 
3984 
3985     IF G_DEBUG='Y' THEN
3986           AHL_DEBUG_PUB.debug('Calling AHL_PP_MATERIALS_PVT.Create_Material_Reqst...');
3987 
3988     END IF;
3989      AHL_PP_MATERIALS_PVT.Create_Material_Reqst(p_api_version => 1.0,
3990                                                 p_x_req_material_tbl  => Material_Tbl,
3991                                                 --p_interface_flag  => 'N',
3992                                                 p_interface_flag  => NULL,
3993                                                 x_job_return_status => x_tmp,
3994                                                 x_return_status     => x_return_status,
3995                                                 x_msg_count         => x_msg_count,
3996                                                 x_msg_data          => x_msg_data);
3997     IF G_DEBUG='Y' THEN
3998           AHL_DEBUG_PUB.debug('after the call AHL_PP_MATERIALS_PVT.Create_Material_Reqst');
3999 
4000     END IF;
4001     IF G_DEBUG='Y' THEN
4002           AHL_DEBUG_PUB.debug('x_return_status['||x_return_status||']');
4003           AHL_DEBUG_PUB.debug('x_msg_data['||x_msg_data||']');
4004 
4005     END IF;
4006     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4007         FND_MESSAGE.Set_Name('AHL','AHL_PRD_SCHMTLAPI_ERROR');
4008         FND_MESSAGE.Set_Token('MSG',x_msg_data);
4009         FND_MSG_PUB.ADD;
4010         RAISE  FND_API.G_EXC_ERROR;
4011     END  IF;
4012 
4013     /* will be updated after wip api is successful - modified for bug fix 5499575.
4014         -- Update Completed quantity.
4015         Update ahl_schedule_materials
4016         set completed_quantity = l_quantity
4017         where scheduled_material_id = Material_Tbl(0).schedule_material_id;
4018     */
4019 
4020 END Insert_Sch_Mtl_Row;
4021 
4022 
4023 /****************************************************
4024 This procedure will create the service API record from the input material txn
4025 record data.
4026 *****************************************************/
4027 PROCEDURE Populate_Srvc_Rec(
4028         p_item_instance_id  NUMBER,
4029         p_srvc_rec OUT NOCOPY AHL_PRD_NONROUTINE_PVT.Sr_task_Rec_type,
4030         p_x_ahl_mtltxn_rec IN Ahl_Mtltxn_Rec_Type)
4031 IS
4032 
4033 BEGIN
4034 
4035 
4036     --p_srvc_rec.TYPE_ID           := FND_PROFILE.value(C_AHL_DEF_SR_TYPE);
4037     p_srvc_rec.SUMMARY             := p_x_ahl_mtltxn_rec.SR_SUMMARY;
4038     --p_srvc_rec.CONTACT_TYPE      := 'EMPLOYEE';
4039     p_srvc_rec.PROBLEM_CODE    := p_x_ahl_mtltxn_rec.Problem_Code;
4040     p_srvc_rec.VISIT_ID        := p_x_ahl_mtltxn_rec.Target_Visit_Id;
4041     --p_srvc_rec.DURATION          := FND_PROFILE.value(C_AHL_DEF_TASK_EST_DURATION);
4042     p_srvc_rec.INSTANCE_ID      := p_item_instance_id;
4043     p_srvc_rec.ORIGINATING_WO_ID  := p_x_ahl_mtltxn_rec.Workorder_Id;
4044     p_srvc_rec.OPERATION_TYPE  := 'CREATE';
4045     p_srvc_rec.source_program_code  := 'AHL_NONROUTINE';
4046 
4047     -- set create wo option.
4048     IF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_RELEASE_WO') THEN
4049         p_srvc_rec.WO_Create_flag := 'Y';
4050         p_srvc_rec.WO_Release_flag := 'Y';
4051     ELSIF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_WO') THEN
4052         p_srvc_rec.WO_Create_flag := 'Y';
4053         p_srvc_rec.WO_Release_flag := 'N';
4054     ELSIF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_WO_NO') THEN
4055         p_srvc_rec.WO_Create_flag := 'N';
4056         p_srvc_rec.WO_Release_flag := 'N';
4057     END IF;
4058     -- End: Added for bug# 5903318.
4059 
4060     -- Added for ER#
4061     p_srvc_rec.move_qty_to_nr_workorder := 'N';
4062     p_srvc_rec.instance_quantity := p_x_ahl_mtltxn_rec.quantity;
4063 
4064     -- Sareepar, FP PIE
4065     p_srvc_rec.SERVICE_TYPE         := p_x_ahl_mtltxn_rec.SERVICE_TYPE;
4066     p_srvc_rec.SERVICE_TYPE_CODE    := p_x_ahl_mtltxn_rec.SERVICE_TYPE_CODE;
4067 
4068     IF G_DEBUG='Y' THEN
4069           AHL_DEBUG_PUB.debug('p_srvc_rec.SUMMARY['||p_srvc_rec.SUMMARY||']');
4070           AHL_DEBUG_PUB.debug('PROBLEM_CODE['||p_srvc_rec.PROBLEM_CODE||']');
4071           AHL_DEBUG_PUB.debug('p_srvc_rec.VISIT_ID['||p_srvc_rec.VISIT_ID||']');
4072           AHL_DEBUG_PUB.debug('p_srvc_rec.INSTANCE_ID['||p_srvc_rec.INSTANCE_ID||']');
4073           AHL_DEBUG_PUB.debug('p_srvc_rec.ORIGINATING_WO_ID['||p_srvc_rec.ORIGINATING_WO_ID||']');
4074           AHL_DEBUG_PUB.debug('p_srvc_rec.WO_Create_flag['||p_srvc_rec.WO_Create_flag||']');
4075           AHL_DEBUG_PUB.debug('p_srvc_rec.WO_Release_flag['||p_srvc_rec.WO_Release_flag||']');
4076           AHL_DEBUG_PUB.debug('p_srvc_rec.instance_quantity['||p_srvc_rec.instance_quantity||']');
4077           AHL_DEBUG_PUB.debug('p_srvc_rec.move_qty_to_nr_workorder['||p_srvc_rec.move_qty_to_nr_workorder||']');
4078 
4079     END IF;
4080 
4081 
4082 END Populate_Srvc_Rec;
4083 
4084 /*********************************************************************
4085 This procedure will insert the interface records.
4086 
4087 *********************************************************************/
4088 
4089 PROCEDURE INSERT_MTL_TXN_INTF
4090     (
4091         p_x_ahl_mtl_txn_rec     IN OUT NOCOPY   AHL_MTLTXN_REC_TYPE,
4092         p_eam_item_type_id      IN              NUMBER,
4093         p_x_txn_hdr_id          IN OUT NOCOPY   NUMBER,
4094         p_x_txn_intf_id         IN OUT NOCOPY   NUMBER,
4095         p_reservation_flag      IN              VARCHAR2,
4096         x_return_status            OUT NOCOPY   VARCHAR2
4097     )
4098 IS
4099 l_Process_Flag          VARCHAR2(1);
4100 l_Validation_required   VARCHAR2(1);
4101 l_transaction_Mode      NUMBER;
4102 l_source_code           VARCHAR2(240);
4103 l_source_line_id        NUMBER;
4104 l_txn_tmp_id            NUMBER;
4105 l_Source_Header_Id      NUMBER;
4106 l_lot_expiration_Date   DATE;
4107 l_txn_action            NUMBER;
4108 l_txn_source_type       NUMBER;
4109 l_qty                   NUMBER;
4110 l_reservation_flag      VARCHAR2(1);
4111 
4112 -- added to support dynamic locator creation.
4113 l_mti_seglist           fnd_flex_ext.SegmentArray;
4114 
4115 l_loop_count            NUMBER;
4116 
4117 CURSOR TRX_ACTION_CUR(p_type_Id NUMBER) IS
4118 SELECT TRANSACTION_ACTION_ID,TRANSACTION_SOURCE_TYPE_ID
4119 from MTL_TRANSACTION_TYPES
4120 where TRANSACTION_TYPE_ID = p_type_Id;
4121 
4122 -- Fix for bug# 8607839(FP for Bug # 8575782) -- start
4123 CURSOR get_lot_dff_attrib(p_lot_number IN VARCHAR2) IS
4124 SELECT ATTRIBUTE_CATEGORY,
4125        ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5,
4126        ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10,
4127        ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15,
4128        C_ATTRIBUTE1, C_ATTRIBUTE2, C_ATTRIBUTE3, C_ATTRIBUTE4, C_ATTRIBUTE5,
4129        C_ATTRIBUTE6, C_ATTRIBUTE7, C_ATTRIBUTE8, C_ATTRIBUTE9, C_ATTRIBUTE10,
4130        C_ATTRIBUTE11, C_ATTRIBUTE12, C_ATTRIBUTE13, C_ATTRIBUTE14, C_ATTRIBUTE15,
4131        C_ATTRIBUTE16, C_ATTRIBUTE17, C_ATTRIBUTE18, C_ATTRIBUTE19, C_ATTRIBUTE20,
4132        D_ATTRIBUTE1, D_ATTRIBUTE2, D_ATTRIBUTE3, D_ATTRIBUTE4, D_ATTRIBUTE5,
4133        D_ATTRIBUTE6, D_ATTRIBUTE7, D_ATTRIBUTE8, D_ATTRIBUTE9, D_ATTRIBUTE10,
4134        N_ATTRIBUTE1, N_ATTRIBUTE2, N_ATTRIBUTE3, N_ATTRIBUTE4, N_ATTRIBUTE5,
4135        N_ATTRIBUTE6, N_ATTRIBUTE7, N_ATTRIBUTE8, N_ATTRIBUTE9, N_ATTRIBUTE10
4136 FROM mtl_lot_numbers
4137 where lot_number = p_lot_number;
4138 
4139 l_lot_dff_rec  get_lot_dff_attrib%ROWTYPE;
4140 -- Fix for bug# 8607839(FP for Bug # 8575782) -- end
4141 
4142 -- Fix for bug# 8607839(FP for Bug # 8636342) -- start
4143 CURSOR get_serial_dff_attrib(p_inv_item_id   IN NUMBER,
4144                              p_serial_number IN VARCHAR2) IS
4145 SELECT ATTRIBUTE_CATEGORY,
4146        ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5,
4147        ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10,
4148        ATTRIBUTE11, ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15,
4149        C_ATTRIBUTE1, C_ATTRIBUTE2, C_ATTRIBUTE3, C_ATTRIBUTE4, C_ATTRIBUTE5,
4150        C_ATTRIBUTE6, C_ATTRIBUTE7, C_ATTRIBUTE8, C_ATTRIBUTE9, C_ATTRIBUTE10,
4151        C_ATTRIBUTE11, C_ATTRIBUTE12, C_ATTRIBUTE13, C_ATTRIBUTE14, C_ATTRIBUTE15,
4152        C_ATTRIBUTE16, C_ATTRIBUTE17, C_ATTRIBUTE18, C_ATTRIBUTE19, C_ATTRIBUTE20,
4153        D_ATTRIBUTE1, D_ATTRIBUTE2, D_ATTRIBUTE3, D_ATTRIBUTE4, D_ATTRIBUTE5,
4154        D_ATTRIBUTE6, D_ATTRIBUTE7, D_ATTRIBUTE8, D_ATTRIBUTE9, D_ATTRIBUTE10,
4155        N_ATTRIBUTE1, N_ATTRIBUTE2, N_ATTRIBUTE3, N_ATTRIBUTE4, N_ATTRIBUTE5,
4156        N_ATTRIBUTE6, N_ATTRIBUTE7, N_ATTRIBUTE8, N_ATTRIBUTE9, N_ATTRIBUTE10
4157 FROM mtl_serial_numbers
4158 where inventory_item_id = p_inv_item_id
4159   and serial_number = p_serial_number;
4160 
4161 l_serial_dff_rec  get_serial_dff_attrib%ROWTYPE;
4162 -- Fix for bug# 8607839(FP for Bug # 8636342) -- end
4163 
4164 BEGIN
4165 
4166     l_Process_Flag := '1';
4167     l_Validation_required  := '1';
4168     l_transaction_Mode := 2;
4169     l_source_code := 'AHL';
4170     l_source_line_id := 1;
4171     l_Source_Header_Id := 1;
4172 
4173 
4174     x_return_status := FND_API.G_RET_STS_SUCCESS;
4175 
4176     OPEN TRX_ACTION_CUR(p_x_ahl_mtl_txn_rec.Transaction_Type_Id);
4177     FETCH TRX_ACTION_CUR INTO l_txn_action, l_txn_source_type;
4178     IF(TRX_ACTION_CUR%NOTFOUND) THEN
4179         IF G_DEBUG='Y' THEN
4180           AHL_DEBUG_PUB.debug('Did not find the Txn Type');
4181         END IF;
4182         CLOSE TRX_ACTION_CUR;
4183         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
4184     END IF;
4185     CLOSE TRX_ACTION_CUR;
4186 
4187 
4188     IF(p_x_txn_hdr_id IS NULL) THEN
4189         SELECT Mtl_Material_Transactions_S.nextval
4190         INTO p_x_txn_hdr_id
4191         FROM DUAL;
4192         IF G_DEBUG='Y' THEN
4193           AHL_DEBUG_PUB.debug('Header id created..['||p_x_txn_hdr_id||']');
4194         END IF;
4195     END IF;
4196 
4197     l_loop_count := 0;
4198 
4199     WHILE (l_loop_count < p_x_ahl_mtl_txn_rec.Quantity) LOOP
4200 
4201        SELECT Mtl_Material_Transactions_S.nextval
4202        INTO p_x_txn_intf_id
4203        FROM DUAL;
4204 
4205        IF G_DEBUG='Y' THEN
4206              AHL_DEBUG_PUB.debug('Interface id created..['||p_x_txn_intf_id||']');
4207        END IF;
4208 
4209        if(p_x_ahl_mtl_txn_rec.Revision = FND_API.G_MISS_CHAR) THEN
4210            p_x_ahl_mtl_txn_rec.Revision := NULL;
4211        END IF;
4212        IF(p_x_ahl_mtl_txn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
4213            p_x_ahl_mtl_txn_rec.Locator_Id := NULL;
4214        END IF;
4215        if(p_x_ahl_mtl_txn_rec.Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
4216             IF (p_eam_item_type_id = WIP_CONSTANTS.rebuild_item_type AND p_x_ahl_mtl_txn_rec.Quantity > 1) THEN
4217                l_qty := - 1;
4218                l_loop_count := l_loop_count + 1;
4219             ELSE
4220                l_qty := - p_x_ahl_mtl_txn_rec.Quantity;
4221                l_loop_count := p_x_ahl_mtl_txn_rec.Quantity + 1;
4222             END IF;
4223        ELSE
4224             IF (p_eam_item_type_id = WIP_CONSTANTS.rebuild_item_type AND p_x_ahl_mtl_txn_rec.Quantity > 1) THEN
4225                l_qty := 1;
4226                l_loop_count := l_loop_count + 1;
4227             ELSE
4228                l_qty :=  p_x_ahl_mtl_txn_rec.Quantity;
4229                l_loop_count := p_x_ahl_mtl_txn_rec.Quantity + 1;
4230             END IF;
4231        END IF;
4232        IF G_DEBUG='Y' THEN
4233            AHL_DEBUG_PUB.debug('Loop Count is..['||l_loop_count||']');
4234            AHL_DEBUG_PUB.debug('l_qty is..['||l_qty||']');
4235        END IF;
4236 
4237        IF( p_x_ahl_mtl_txn_rec.Reason_Id = FND_API.G_MISS_NUM) THEN
4238            p_x_ahl_mtl_txn_rec.Reason_Id := NULL;
4239        END IF;
4240        IF( p_x_ahl_mtl_txn_rec.Serial_number = FND_API.G_MISS_CHAR) THEN
4241            p_x_ahl_mtl_txn_rec.Serial_number := NULL;
4242        END IF;
4243        IF( p_x_ahl_mtl_txn_rec.Lot_number = FND_API.G_MISS_CHAR) THEN
4244            p_x_ahl_mtl_txn_rec.Lot_number := NULL;
4245        END IF;
4246        IF (p_x_ahl_mtl_txn_rec.ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR) THEN
4247            p_x_ahl_mtl_txn_rec.ATTRIBUTE_CATEGORY := NULL;
4248        END IF;
4249        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE1 = FND_API.G_MISS_CHAR) THEN
4250            p_x_ahl_mtl_txn_rec.ATTRIBUTE1 := NULL;
4251        END IF;
4252        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE2 = FND_API.G_MISS_CHAR) THEN
4253            p_x_ahl_mtl_txn_rec.ATTRIBUTE2 := NULL;
4254        END IF;
4255        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE3 = FND_API.G_MISS_CHAR) THEN
4256            p_x_ahl_mtl_txn_rec.ATTRIBUTE3 := NULL;
4257        END IF;
4258        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE4 = FND_API.G_MISS_CHAR) THEN
4259            p_x_ahl_mtl_txn_rec.ATTRIBUTE4 := NULL;
4260        END IF;
4261        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE5 = FND_API.G_MISS_CHAR) THEN
4262            p_x_ahl_mtl_txn_rec.ATTRIBUTE5 := NULL;
4263        END IF;
4264        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE6 = FND_API.G_MISS_CHAR) THEN
4265            p_x_ahl_mtl_txn_rec.ATTRIBUTE6 := NULL;
4266        END IF;
4267        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE7 = FND_API.G_MISS_CHAR) THEN
4268            p_x_ahl_mtl_txn_rec.ATTRIBUTE7 := NULL;
4269        END IF;
4270        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE8 = FND_API.G_MISS_CHAR) THEN
4271            p_x_ahl_mtl_txn_rec.ATTRIBUTE8 := NULL;
4272        END IF;
4273        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE9 = FND_API.G_MISS_CHAR) THEN
4274            p_x_ahl_mtl_txn_rec.ATTRIBUTE9 := NULL;
4275        END IF;
4276        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE10 = FND_API.G_MISS_CHAR) THEN
4277            p_x_ahl_mtl_txn_rec.ATTRIBUTE10 := NULL;
4278        END IF;
4279        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE11 = FND_API.G_MISS_CHAR) THEN
4280            p_x_ahl_mtl_txn_rec.ATTRIBUTE11 := NULL;
4281        END IF;
4282        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE12 = FND_API.G_MISS_CHAR) THEN
4283            p_x_ahl_mtl_txn_rec.ATTRIBUTE12 := NULL;
4284        END IF;
4285        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE13 = FND_API.G_MISS_CHAR) THEN
4286            p_x_ahl_mtl_txn_rec.ATTRIBUTE13 := NULL;
4287        END IF;
4288        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE14 = FND_API.G_MISS_CHAR) THEN
4289            p_x_ahl_mtl_txn_rec.ATTRIBUTE14 := NULL;
4290        END IF;
4291        IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE15 = FND_API.G_MISS_CHAR) THEN
4292            p_x_ahl_mtl_txn_rec.ATTRIBUTE15 := NULL;
4293        END IF;
4294 
4295        IF(p_x_ahl_mtl_txn_rec.transaction_reference = FND_API.G_MISS_CHAR) THEN
4296            p_x_ahl_mtl_txn_rec.transaction_reference := NULL;
4297        END IF;
4298 
4299        IF G_DEBUG='Y' THEN
4300            AHL_DEBUG_PUB.debug('Before dynamic chk:loc segs:ID' || p_x_ahl_mtl_txn_rec.Locator_Segments || ':' ||  p_x_ahl_mtl_txn_rec.Locator_Id);
4301        END IF;
4302 
4303        -- Added for FP ER 6447935
4304        -- support dynamic locator creation if allowed.
4305        -- inv/wip will validate. We will just split and pass the locator segments.
4306 
4307        -- initialze mti locator segment values.
4308        FOR i IN 1..20 LOOP
4309           l_mti_seglist(i) := null;
4310        END LOOP;
4311 
4312        IF (p_x_ahl_mtl_txn_rec.Locator_Id IS NULL AND
4313            p_x_ahl_mtl_txn_rec.Locator_Segments IS NOT NULL) THEN
4314             Get_MTL_LocatorSegs (p_concat_segs  => p_x_ahl_mtl_txn_rec.Locator_Segments,
4315                                  p_organization_id => p_x_ahl_mtl_txn_rec.organization_id,
4316                                  p_x_mti_seglist  => l_mti_seglist,
4317                                  x_return_status => x_return_status);
4318 
4319             IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
4320                 RAISE FND_API.G_EXC_ERROR;
4321             ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4322                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4323             END IF;
4324 
4325        END IF;
4326 
4327        --If the lot controlled inventory record is not null insert reocrds
4328        -- into transaction lots interface table.
4329 
4330        IF (p_x_ahl_mtl_txn_rec.Lot_Number IS NOT NULL) THEN
4331 
4332             -- Fix for bug# 8607839(FP for Bug # 8575782) -- start
4333             -- lot number already validated for existence.
4334             OPEN get_lot_dff_attrib(p_x_ahl_mtl_txn_rec.Lot_Number);
4335             FETCH get_lot_dff_attrib INTO l_lot_dff_rec;
4336             CLOSE get_lot_dff_attrib;
4337             -- Fix for bug# 8607839(FP for Bug # 8575782) -- end
4338 
4339             IF(p_x_ahl_mtl_txn_rec.Serial_Number IS NOT NULL) THEN
4340                 SELECT Mtl_Material_Transactions_S.nextval
4341                 INTO l_txn_tmp_id
4342                 FROM DUAL;
4343             ELSE
4344                 l_txn_tmp_id := p_x_txn_intf_id;
4345             END IF;
4346 
4347             IF G_DEBUG='Y' THEN
4348             AHL_DEBUG_PUB.debug('insertng the lot record,interface id,tempid['
4349                              ||to_char(p_x_txn_intf_id)||','
4350                              ||to_char(l_txn_tmp_id)||']');
4351             END IF;
4352 
4353             -- Fix for bug# 8607839(FP for Bug # 8575782) -- start
4354             INSERT INTO  MTL_TRANSACTION_LOTS_INTERFACE
4355                   ( TRANSACTION_INTERFACE_ID ,
4356                     SOURCE_CODE ,
4357                     SOURCE_LINE_ID ,
4358                     LAST_UPDATE_DATE ,
4359                     LAST_UPDATED_BY ,
4360                     CREATION_DATE ,
4361                     CREATED_BY ,
4362                     LAST_UPDATE_LOGIN ,
4363                     LOT_NUMBER ,
4364                     LOT_EXPIRATION_DATE ,
4365                     TRANSACTION_QUANTITY ,
4366                     PRIMARY_QUANTITY,
4367                     SERIAL_TRANSACTION_TEMP_ID,
4368                     ATTRIBUTE_CATEGORY,
4369                     ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4,
4370                     ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,
4371                     ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12,
4372                     ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15, C_ATTRIBUTE1,
4373                     C_ATTRIBUTE2, C_ATTRIBUTE3, C_ATTRIBUTE4, C_ATTRIBUTE5,
4374                     C_ATTRIBUTE6, C_ATTRIBUTE7, C_ATTRIBUTE8, C_ATTRIBUTE9,
4375                     C_ATTRIBUTE10, C_ATTRIBUTE11, C_ATTRIBUTE12, C_ATTRIBUTE13,
4376                     C_ATTRIBUTE14, C_ATTRIBUTE15, C_ATTRIBUTE16, C_ATTRIBUTE17,
4377                     C_ATTRIBUTE18, C_ATTRIBUTE19, C_ATTRIBUTE20, D_ATTRIBUTE1,
4378                     D_ATTRIBUTE2, D_ATTRIBUTE3, D_ATTRIBUTE4, D_ATTRIBUTE5,
4379                     D_ATTRIBUTE6, D_ATTRIBUTE7, D_ATTRIBUTE8, D_ATTRIBUTE9,
4380                     D_ATTRIBUTE10, N_ATTRIBUTE1, N_ATTRIBUTE2, N_ATTRIBUTE3,
4381                     N_ATTRIBUTE4, N_ATTRIBUTE5, N_ATTRIBUTE6, N_ATTRIBUTE7,
4382                     N_ATTRIBUTE8, N_ATTRIBUTE9, N_ATTRIBUTE10
4383                     )
4384             VALUES(p_x_txn_intf_id,
4385                     l_Source_Code,
4386                     l_Source_Line_Id,
4387                     sysdate,
4388                     FND_GLOBAL.USER_ID,
4389                     sysdate,
4390                     FND_GLOBAL.USER_ID,
4391                     FND_GLOBAL.LOGIN_ID,
4392                     p_x_ahl_mtl_txn_rec.Lot_Number,
4393                     l_lot_expiration_Date,
4394                     l_qty,
4395                     l_qty,
4396                     l_txn_tmp_id,
4397                     l_lot_dff_rec.ATTRIBUTE_CATEGORY,
4398                     l_lot_dff_rec.ATTRIBUTE1, l_lot_dff_rec.ATTRIBUTE2, l_lot_dff_rec.ATTRIBUTE3, l_lot_dff_rec.ATTRIBUTE4,
4399                     l_lot_dff_rec.ATTRIBUTE5, l_lot_dff_rec.ATTRIBUTE6, l_lot_dff_rec.ATTRIBUTE7, l_lot_dff_rec.ATTRIBUTE8,
4400                     l_lot_dff_rec.ATTRIBUTE9, l_lot_dff_rec.ATTRIBUTE10, l_lot_dff_rec.ATTRIBUTE11, l_lot_dff_rec.ATTRIBUTE12,
4401                     l_lot_dff_rec.ATTRIBUTE13, l_lot_dff_rec.ATTRIBUTE14, l_lot_dff_rec.ATTRIBUTE15,
4402                     l_lot_dff_rec.C_ATTRIBUTE1, l_lot_dff_rec.C_ATTRIBUTE2, l_lot_dff_rec.C_ATTRIBUTE3, l_lot_dff_rec.C_ATTRIBUTE4,
4403                     l_lot_dff_rec.C_ATTRIBUTE5, l_lot_dff_rec.C_ATTRIBUTE6, l_lot_dff_rec.C_ATTRIBUTE7, l_lot_dff_rec.C_ATTRIBUTE8,
4404                     l_lot_dff_rec.C_ATTRIBUTE9, l_lot_dff_rec.C_ATTRIBUTE10, l_lot_dff_rec.C_ATTRIBUTE11, l_lot_dff_rec.C_ATTRIBUTE12,
4405                     l_lot_dff_rec.C_ATTRIBUTE13, l_lot_dff_rec.C_ATTRIBUTE14, l_lot_dff_rec.C_ATTRIBUTE15, l_lot_dff_rec.C_ATTRIBUTE16,
4406                     l_lot_dff_rec.C_ATTRIBUTE17, l_lot_dff_rec.C_ATTRIBUTE18, l_lot_dff_rec.C_ATTRIBUTE19, l_lot_dff_rec.C_ATTRIBUTE20,
4407                     l_lot_dff_rec.D_ATTRIBUTE1, l_lot_dff_rec.D_ATTRIBUTE2, l_lot_dff_rec.D_ATTRIBUTE3, l_lot_dff_rec.D_ATTRIBUTE4,
4408                     l_lot_dff_rec.D_ATTRIBUTE5, l_lot_dff_rec.D_ATTRIBUTE6, l_lot_dff_rec.D_ATTRIBUTE7, l_lot_dff_rec.D_ATTRIBUTE8,
4409                     l_lot_dff_rec.D_ATTRIBUTE9, l_lot_dff_rec.D_ATTRIBUTE10,
4410                     l_lot_dff_rec.N_ATTRIBUTE1, l_lot_dff_rec.N_ATTRIBUTE2, l_lot_dff_rec.N_ATTRIBUTE3, l_lot_dff_rec.N_ATTRIBUTE4,
4411                     l_lot_dff_rec.N_ATTRIBUTE5, l_lot_dff_rec.N_ATTRIBUTE6, l_lot_dff_rec.N_ATTRIBUTE7, l_lot_dff_rec.N_ATTRIBUTE8,
4412                     l_lot_dff_rec.N_ATTRIBUTE9, l_lot_dff_rec.N_ATTRIBUTE10
4413                     );
4414              -- Fix for bug# 8607839(FP for Bug # 8575782) -- end
4415        END IF;
4416 
4417        --If the serial controlled rec is not null then insert records
4418        -- into the serial numbers interface table
4419        IF (p_x_ahl_mtl_txn_rec.Serial_Number IS NOT NULL) THEN
4420 
4421            -- Fix for bug # 8607839(FP for Bug # 8636342) -- start
4422            -- serial number already validated for existence.
4423            OPEN get_serial_dff_attrib(p_x_ahl_mtl_txn_rec.Inventory_Item_Id, p_x_ahl_mtl_txn_rec.Serial_Number);
4424            FETCH get_serial_dff_attrib INTO l_serial_dff_rec;
4425            CLOSE get_serial_dff_attrib;
4426            -- Fix for bug # 8607839(FP for Bug # 8636342) -- end
4427 
4428            IF (p_x_ahl_mtl_txn_rec.Lot_Number IS NULL) THEN
4429               l_txn_tmp_id := p_x_txn_intf_id;
4430            END IF;
4431 
4432            IF G_DEBUG='Y' THEN
4433              AHL_DEBUG_PUB.debug('insertng the serial record,interface id['
4434                                           ||to_char(l_txn_tmp_id)||']');
4435            END IF;
4436 
4437            -- Fix for bug # 8607839(FP for Bug # 8636342) -- start
4438            INSERT INTO MTL_SERIAL_NUMBERS_INTERFACE (
4439                TRANSACTION_INTERFACE_ID, SOURCE_CODE, SOURCE_LINE_ID,
4440                LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE,
4441                CREATED_BY, LAST_UPDATE_LOGIN, FM_SERIAL_NUMBER,
4442                TO_SERIAL_NUMBER, PROCESS_FLAG,
4443                ATTRIBUTE_CATEGORY,
4444                ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4,
4445                ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,
4446                ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11, ATTRIBUTE12,
4447                ATTRIBUTE13, ATTRIBUTE14, ATTRIBUTE15, C_ATTRIBUTE1,
4448                C_ATTRIBUTE2, C_ATTRIBUTE3, C_ATTRIBUTE4, C_ATTRIBUTE5,
4449                C_ATTRIBUTE6, C_ATTRIBUTE7, C_ATTRIBUTE8, C_ATTRIBUTE9,
4450                C_ATTRIBUTE10, C_ATTRIBUTE11, C_ATTRIBUTE12, C_ATTRIBUTE13,
4451                C_ATTRIBUTE14, C_ATTRIBUTE15, C_ATTRIBUTE16, C_ATTRIBUTE17,
4452                C_ATTRIBUTE18, C_ATTRIBUTE19, C_ATTRIBUTE20, D_ATTRIBUTE1,
4453                D_ATTRIBUTE2, D_ATTRIBUTE3, D_ATTRIBUTE4, D_ATTRIBUTE5,
4454                D_ATTRIBUTE6, D_ATTRIBUTE7, D_ATTRIBUTE8, D_ATTRIBUTE9,
4455                D_ATTRIBUTE10, N_ATTRIBUTE1, N_ATTRIBUTE2, N_ATTRIBUTE3,
4456                N_ATTRIBUTE4, N_ATTRIBUTE5, N_ATTRIBUTE6, N_ATTRIBUTE7,
4457                N_ATTRIBUTE8, N_ATTRIBUTE9, N_ATTRIBUTE10
4458                )
4459            VALUES ( l_txn_tmp_id,
4460                     l_source_code,
4461                     l_source_line_id,
4462                     SYSDATE,
4463                     FND_GLOBAL.USER_ID,
4464                     SYSDATE,
4465                     FND_GLOBAL.USER_ID,
4466                     FND_GLOBAL.LOGIN_ID,
4467                     p_x_ahl_mtl_txn_rec.Serial_Number,
4468                     p_x_ahl_mtl_txn_rec.Serial_Number,
4469                     l_Process_Flag,
4470                     l_serial_dff_rec.ATTRIBUTE_CATEGORY,
4471                     l_serial_dff_rec.ATTRIBUTE1, l_serial_dff_rec.ATTRIBUTE2, l_serial_dff_rec.ATTRIBUTE3, l_serial_dff_rec.ATTRIBUTE4,
4472                     l_serial_dff_rec.ATTRIBUTE5, l_serial_dff_rec.ATTRIBUTE6, l_serial_dff_rec.ATTRIBUTE7, l_serial_dff_rec.ATTRIBUTE8,
4473                     l_serial_dff_rec.ATTRIBUTE9, l_serial_dff_rec.ATTRIBUTE10, l_serial_dff_rec.ATTRIBUTE11, l_serial_dff_rec.ATTRIBUTE12,
4474                     l_serial_dff_rec.ATTRIBUTE13, l_serial_dff_rec.ATTRIBUTE14, l_serial_dff_rec.ATTRIBUTE15,
4475                     l_serial_dff_rec.C_ATTRIBUTE1, l_serial_dff_rec.C_ATTRIBUTE2, l_serial_dff_rec.C_ATTRIBUTE3,
4476                     l_serial_dff_rec.C_ATTRIBUTE4, l_serial_dff_rec.C_ATTRIBUTE5,
4477                     l_serial_dff_rec.C_ATTRIBUTE6, l_serial_dff_rec.C_ATTRIBUTE7,
4478                     l_serial_dff_rec.C_ATTRIBUTE8, l_serial_dff_rec.C_ATTRIBUTE9,
4479                     l_serial_dff_rec.C_ATTRIBUTE10, l_serial_dff_rec.C_ATTRIBUTE11,
4480                     l_serial_dff_rec.C_ATTRIBUTE12, l_serial_dff_rec.C_ATTRIBUTE13,
4481                     l_serial_dff_rec.C_ATTRIBUTE14, l_serial_dff_rec.C_ATTRIBUTE15,
4482                     l_serial_dff_rec.C_ATTRIBUTE16, l_serial_dff_rec.C_ATTRIBUTE17,
4483                     l_serial_dff_rec.C_ATTRIBUTE18, l_serial_dff_rec.C_ATTRIBUTE19,
4484                     l_serial_dff_rec.C_ATTRIBUTE20, l_serial_dff_rec.D_ATTRIBUTE1,
4485                     l_serial_dff_rec.D_ATTRIBUTE2, l_serial_dff_rec.D_ATTRIBUTE3,
4486                     l_serial_dff_rec.D_ATTRIBUTE4, l_serial_dff_rec.D_ATTRIBUTE5,
4487                     l_serial_dff_rec.D_ATTRIBUTE6, l_serial_dff_rec.D_ATTRIBUTE7,
4488                     l_serial_dff_rec.D_ATTRIBUTE8, l_serial_dff_rec.D_ATTRIBUTE9,
4489                     l_serial_dff_rec.D_ATTRIBUTE10, l_serial_dff_rec.N_ATTRIBUTE1,
4490                     l_serial_dff_rec.N_ATTRIBUTE2, l_serial_dff_rec.N_ATTRIBUTE3,
4491                     l_serial_dff_rec.N_ATTRIBUTE4, l_serial_dff_rec.N_ATTRIBUTE5,
4492                     l_serial_dff_rec.N_ATTRIBUTE6, l_serial_dff_rec.N_ATTRIBUTE7,
4493                     l_serial_dff_rec.N_ATTRIBUTE8, l_serial_dff_rec.N_ATTRIBUTE9,
4494                     l_serial_dff_rec.N_ATTRIBUTE10
4495                  );
4496            -- Fix for bug # 8607839(FP for Bug # 8636342) -- end
4497        END IF;
4498 
4499 
4500 
4501        IF G_DEBUG='Y' THEN
4502           AHL_DEBUG_PUB.debug('insertng the txn record,header id,interface id['
4503                                   ||to_char(p_x_txn_hdr_id)||','
4504                                   ||to_char(p_x_txn_intf_id)||']');
4505        END IF;
4506 
4507        INSERT INTO  MTL_TRANSACTIONS_INTERFACE
4508 
4509           ( TRANSACTION_INTERFACE_ID ,           TRANSACTION_HEADER_ID ,
4510             SOURCE_CODE ,                        SOURCE_LINE_ID ,
4511             SOURCE_HEADER_ID,                    PROCESS_FLAG ,
4512             VALIDATION_REQUIRED ,                TRANSACTION_MODE ,
4513             LAST_UPDATE_DATE ,                   LAST_UPDATED_BY ,
4514             CREATION_DATE ,                      CREATED_BY ,
4515             LAST_UPDATE_LOGIN ,                  INVENTORY_ITEM_ID ,
4516             ORGANIZATION_ID ,                    TRANSACTION_QUANTITY ,
4517             PRIMARY_QUANTITY ,                   TRANSACTION_UOM ,
4518             TRANSACTION_DATE ,                   SUBINVENTORY_CODE ,
4519             LOCATOR_ID ,                         TRANSACTION_TYPE_ID ,
4520             REVISION ,                           TRANSACTION_REFERENCE ,
4521             WIP_ENTITY_TYPE ,                    OPERATION_SEQ_NUM,
4522             TRANSACTION_SOURCE_TYPE_ID,          TRANSACTION_SOURCE_ID,
4523             TRX_SOURCE_LINE_ID,
4524             ATTRIBUTE_CATEGORY,                      ATTRIBUTE1,
4525             ATTRIBUTE2,                              ATTRIBUTE3,
4526             ATTRIBUTE4,                              ATTRIBUTE5,
4527             ATTRIBUTE6,                              ATTRIBUTE7,
4528             ATTRIBUTE8,                              ATTRIBUTE9,
4529             ATTRIBUTE10,                             ATTRIBUTE11,
4530             ATTRIBUTE12,                             ATTRIBUTE13,
4531             ATTRIBUTE14,                             ATTRIBUTE15,
4532             RELIEVE_RESERVATIONS_FLAG,
4533             REASON_ID,
4534             LOC_SEGMENT1,                            LOC_SEGMENT2,
4535             LOC_SEGMENT3,                            LOC_SEGMENT4,
4536             LOC_SEGMENT5,                            LOC_SEGMENT6,
4537             LOC_SEGMENT7,                            LOC_SEGMENT8,
4538             LOC_SEGMENT9,                            LOC_SEGMENT10,
4539             LOC_SEGMENT11,                           LOC_SEGMENT12,
4540             LOC_SEGMENT13,                           LOC_SEGMENT14,
4541             LOC_SEGMENT15,                           LOC_SEGMENT16,
4542             LOC_SEGMENT17,                           LOC_SEGMENT18,
4543             LOC_SEGMENT19,                           LOC_SEGMENT20)
4544        values  (p_x_txn_intf_id,                        p_x_txn_hdr_id,
4545          l_Source_Code,                              l_Source_Line_Id,
4546          l_Source_Header_Id,                         l_Process_Flag,
4547          l_Validation_required ,                     l_transaction_Mode,
4548          sysdate,                                    FND_GLOBAL.USER_ID,
4549          sysdate,                                    FND_GLOBAL.USER_ID,
4550          FND_GLOBAL.LOGIN_ID,                        p_x_ahl_mtl_txn_rec.Inventory_Item_Id,
4551          p_x_ahl_mtl_txn_rec.Organization_Id,        l_qty,
4552          l_qty,                                      p_x_ahl_mtl_txn_rec.Uom,
4553          p_x_ahl_mtl_txn_rec.Transaction_Date,       p_x_ahl_mtl_txn_rec.Subinventory_Name,
4554          p_x_ahl_mtl_txn_rec.Locator_Id,             p_x_ahl_mtl_txn_rec.Transaction_Type_Id,
4555          p_x_ahl_mtl_txn_rec.Revision,               p_x_ahl_mtl_txn_rec.Transaction_Reference,
4556          WIP_CONSTANTS.DISCRETE,                     p_x_ahl_mtl_txn_rec.Operation_Seq_Num,
4557          l_txn_source_type,                          p_x_ahl_mtl_txn_rec.Wip_Entity_id,
4558          p_x_ahl_mtl_txn_rec.Operation_Seq_Num,   -- TRX_SOURCE_LINE_ID (needed for relieving reservations)
4559          p_x_ahl_mtl_txn_rec.Attribute_Category,     p_x_ahl_mtl_txn_rec.Attribute1,
4560          p_x_ahl_mtl_txn_rec.Attribute2,             p_x_ahl_mtl_txn_rec.Attribute3,
4561          p_x_ahl_mtl_txn_rec.Attribute4,             p_x_ahl_mtl_txn_rec.Attribute5,
4562          p_x_ahl_mtl_txn_rec.Attribute6,             p_x_ahl_mtl_txn_rec.Attribute7,
4563          p_x_ahl_mtl_txn_rec.Attribute8,             p_x_ahl_mtl_txn_rec.Attribute9,
4564          p_x_ahl_mtl_txn_rec.Attribute10,            p_x_ahl_mtl_txn_rec.Attribute11,
4565          p_x_ahl_mtl_txn_rec.Attribute12,            p_x_ahl_mtl_txn_rec.Attribute13,
4566          p_x_ahl_mtl_txn_rec.Attribute14,            p_x_ahl_mtl_txn_rec.Attribute15,
4567          p_reservation_flag,  -- relieve reservations flag.
4568          p_x_ahl_mtl_txn_rec.reason_id,
4569          l_mti_seglist(1),                               l_mti_seglist(2),
4570          l_mti_seglist(3),                               l_mti_seglist(4),
4571          l_mti_seglist(5),                               l_mti_seglist(6),
4572          l_mti_seglist(7),                               l_mti_seglist(8),
4573          l_mti_seglist(9),                               l_mti_seglist(10),
4574          l_mti_seglist(11),                              l_mti_seglist(12),
4575          l_mti_seglist(13),                              l_mti_seglist(14),
4576          l_mti_seglist(15),                              l_mti_seglist(16),
4577          l_mti_seglist(17),                              l_mti_seglist(18),
4578          l_mti_seglist(19),                              l_mti_seglist(20)
4579              ) ;
4580     END LOOP; -- WHILE (l_loop_count
4581 
4582 
4583     IF G_DEBUG='Y' THEN
4584        AHL_DEBUG_PUB.debug('Transaction_source type['||l_txn_source_type||']');
4585        AHL_DEBUG_PUB.debug('Transaction_source Id['||p_x_ahl_mtl_txn_rec.Wip_Entity_id||']');
4586     END IF;
4587 
4588 EXCEPTION
4589          WHEN OTHERS THEN
4590            x_return_status := FND_API.G_RET_STS_ERROR;
4591                IF G_DEBUG='Y' THEN
4592           AHL_DEBUG_PUB.debug('Exception inserting into mtl_txn interface' || SQLCODE);
4593               AHL_DEBUG_PUB.debug('SQLERRM:' || SQLERRM);
4594 
4595            END IF;
4596            FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
4597            FND_MESSAGE.Set_Token('MSG',SQLERRM);
4598            FND_MESSAGE.Set_Token('ITEM',p_x_ahl_mtl_txn_rec.Inventory_Item_Id);
4599            FND_MESSAGE.Set_Token('WO_NAME',p_x_ahl_mtl_txn_rec.workorder_id);
4600            FND_MSG_PUB.ADD;
4601                RAISE FND_API.G_EXC_ERROR;
4602 
4603 END INSERT_MTL_TXN_INTF;
4604 
4605 /* This is a funciton used by the front queries which
4606 populate the table data. This gets the issued quantity
4607 for rhe given workorder id and item */
4608 Function GET_ISSUED_QTY(P_ORG_ID IN NUMBER, P_ITEM_ID IN NUMBER, P_WORKORDER_OP_ID IN NUMBER) RETURN NUMBER
4609 as
4610     l_iss_qty NUMBER:=0;
4611 BEGIN
4612 
4613     -- Tamal: Bug #4095376: Begin
4614     -- The following line will be needed in the case net quantity issued is to be displayed, instead of entire issued quantity
4615     -- SELECT sum(nvl(decode(TRANSACTION_TYPE_ID, 35, QUANTITY, 43, -QUANTITY, 0), 0))
4616     SELECT sum(nvl(QUANTITY, 0))
4617     INTO l_iss_qty
4618     FROM AHL_WORKORDER_MTL_TXNS
4619     WHERE ORGANIZATION_ID = P_ORG_ID
4620     AND INVENTORY_ITEM_ID = P_ITEM_ID
4621     AND WORKORDER_OPERATION_ID = P_WORKORDER_OP_ID
4622     -- The following line will NOT be needed in the case net quantity issued is to be displayed
4623     AND TRANSACTION_TYPE_ID = 35;
4624     -- Tamal: Bug #4095376: End
4625 
4626     return nvl(l_iss_qty,0);
4627 
4628 END GET_ISSUED_QTY;
4629 
4630 Function GET_WORKORD_LEVEL_QTY(
4631              p_wid           IN NUMBER,
4632              p_item_id       IN NUMBER,
4633              p_org_id        IN NUMBER,
4634              p_lotnum        IN VARCHAR2,
4635              p_rev           IN VARCHAR2,
4636              p_serial_number IN VARCHAR2
4637              )
4638 RETURN NUMBER
4639 As
4640 issued NUMBER;
4641 CURSOR CUR_GET_WOID_LEVEL_QTY IS
4642 SELECT SUM(nvl(QUANTITY,0))
4643 FROM AHL_WORKORDER_MTL_TXNS A
4644 ,AHL_WORKORDER_OPERATIONS_V B
4645 WHERE A.ORGANIZATION_ID       = p_org_id
4646 AND A.INVENTORY_ITEM_ID       = p_item_id
4647 AND NVL(A.lot_number,'X')=NVL(p_lotnum,NVL(A.lot_number,'X'))
4648 AND NVL(A.revision,'X')=NVL(p_rev,NVL(A.REVISION,'X'))
4649 AND NVL(A.serial_number,'X')=NVL(p_serial_number,NVL(A.SERIAL_NUMBER,'X'))
4650 AND A.TRANSACTION_TYPE_ID=35
4651 AND A.ORGANIZATION_ID = B.organization_id
4652 AND A.workorder_operation_id =B.workorder_operation_id
4653 AND B.workorder_id = p_wid;
4654 
4655 BEGIN
4656     OPEN CUR_GET_WOID_LEVEL_QTY;
4657     FETCH CUR_GET_WOID_LEVEL_QTY INTO issued;
4658     IF(CUR_GET_WOID_LEVEL_QTY%NOTFOUND) THEN
4659         issued := 0;
4660     END IF;
4661     CLOSE CUR_GET_WOID_LEVEL_QTY;
4662     return issued;
4663 END GET_WORKORD_LEVEL_QTY;
4664 
4665 -- JKJAIN FP ER # 6436303 - start
4666 -- JKJAIN removed p_lotnum,p_rev,p_serial_number for Bug # 7587902
4667 --------------------------------------------------------------------------------
4668          -- Function for returning net quantity of material available with
4669          -- a workorder.
4670          -- Net Total Quantity = Total Quantity Issued - Total quantity returned
4671          -- Balaji added this function for OGMA ER # 5948868.
4672          --------------------------------------------------------------------------------------
4673 
4674          Function GET_WORKORD_NET_QTY(
4675                       p_wid           IN NUMBER,
4676                       p_item_id       IN NUMBER,
4677                       p_org_id        IN NUMBER
4678                       )
4679          RETURN NUMBER
4680          As
4681 
4682          -- Local variables
4683          l_issue_qty NUMBER;
4684          l_rtn_qty NUMBER;
4685          l_net_qty NUMBER;
4686 
4687          -- Cursors
4688          -- cursor for getting total issued quantity
4689          CURSOR CUR_GET_WO_ISSUE_QTY
4690          IS
4691          SELECT  SUM(nvl(QUANTITY,0))
4692          FROM    AHL_WORKORDER_MTL_TXNS A ,
4693 --               AHL_WORKORDER_OPERATIONS_V B
4694 --           JKJAIN BUG # 7587902
4695                          AHL_WORKORDER_OPERATIONS B
4696          WHERE   A.ORGANIZATION_ID        = p_org_id
4697              AND A.INVENTORY_ITEM_ID      = p_item_id
4698              AND A.TRANSACTION_TYPE_ID    =35
4699 --           AND A.ORGANIZATION_ID        = B.organization_id
4700              AND A.workorder_operation_id =B.workorder_operation_id
4701              AND B.workorder_id           = p_wid;
4702 
4703          -- cursor for getting total returned quantity
4704          CURSOR CUR_GET_WO_RET_QTY
4705          IS
4706          SELECT  SUM(nvl(QUANTITY,0))
4707          FROM    AHL_WORKORDER_MTL_TXNS A ,
4708 --               AHL_WORKORDER_OPERATIONS_V B
4709 --           JKJAIN BUG # 7587902
4710             AHL_WORKORDER_OPERATIONS B
4711          WHERE   A.ORGANIZATION_ID        = p_org_id
4712              AND A.INVENTORY_ITEM_ID      = p_item_id
4713              AND A.TRANSACTION_TYPE_ID    =43
4714 --           AND A.ORGANIZATION_ID        = B.organization_id
4715              AND A.workorder_operation_id =B.workorder_operation_id
4716              AND B.workorder_id           = p_wid;
4717 
4718          BEGIN
4719                  OPEN CUR_GET_WO_ISSUE_QTY;
4720                  FETCH CUR_GET_WO_ISSUE_QTY INTO l_issue_qty;
4721                  CLOSE CUR_GET_WO_ISSUE_QTY;
4722 
4723                  IF l_issue_qty IS NULL
4724                  THEN
4725                     l_issue_qty := 0;
4726                  END IF;
4727 
4728                  OPEN CUR_GET_WO_RET_QTY;
4729                  FETCH CUR_GET_WO_RET_QTY INTO l_rtn_qty;
4730                  CLOSE CUR_GET_WO_RET_QTY;
4731 
4732                  IF l_rtn_qty IS NULL
4733                  THEN
4734                     l_rtn_qty := 0;
4735                  END IF;
4736 
4737                  l_net_qty := l_issue_qty - l_rtn_qty;
4738 
4739 -- JKJAIN BUG # 7587902
4740 --               IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
4741 --                    fnd_log.string
4742 --                        (
4743 --                           G_LEVEL_STATEMENT,
4744 --                           'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY',
4745 --                           'l_net_qty -> ' || l_net_qty
4746 --                        );
4747 --               END IF;
4748 
4749                  return l_net_qty;
4750 
4751          END GET_WORKORD_NET_QTY;
4752  -- JKJAIN FP ER # 6436303 - end
4753 
4754 /* this function is used by the front end queries which
4755 populate the table data. This gets the onhand quantity for an
4756 item */
4757 
4758 function GET_ONHAND(P_ORG_ID IN NUMBER, P_ITEM_ID IN NUMBER) RETURN NUMBER
4759 IS
4760 onhand NUMBER;
4761 CURSOR Q1(p_org_id NUMBER, p_itme_Id NUMBER) IS
4762 SELECT SUM(TRANSACTION_QUANTITY)
4763 FROM MTL_ONHAND_QUANTITIES
4764 WHERE ORGANIZATION_ID = p_org_id
4765 AND INVENTORY_ITEM_ID = p_item_id;
4766 BEGIN
4767     OPEN Q1(P_ORG_ID,P_ITEM_ID);
4768     FETCH Q1 INTO onhand;
4769     IF(Q1%NOTFOUND) THEN
4770         onhand := 0;
4771     END IF;
4772     CLOSE Q1;
4773     return onhand;
4774 END GET_ONHAND;
4775 
4776 procedure dumpInput(p_x_ahl_mtltxn_tbl  IN      AHL_MTLTXN_TBL_TYPE) IS
4777 BEGIN
4778 
4779   IF G_DEBUG='Y' THEN
4780     AHL_DEBUG_PUB.DEBUG('INPUTS TO THE PROC ARE ...');
4781 
4782     IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
4783          FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST  LOOP
4784 
4785           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Ahl_mtltxn_Id:'||p_x_ahl_mtltxn_tbl(i).Ahl_mtltxn_Id);
4786           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Workorder_Id:'||p_x_ahl_mtltxn_tbl(i).Workorder_Id);
4787           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Inventory_Item_Id:'||p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
4788           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Inventory_Item_Segments:'||p_x_ahl_mtltxn_tbl(i).Inventory_Item_Segments);
4789           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Revision:'||p_x_ahl_mtltxn_tbl(i).Revision);
4790           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Organization_Id:'||p_x_ahl_mtltxn_tbl(i).Organization_Id);
4791           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Condition:'||p_x_ahl_mtltxn_tbl(i).Condition);
4792           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Condition_desc:'||p_x_ahl_mtltxn_tbl(i).Condition_desc);
4793           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Subinventory_Name:'||p_x_ahl_mtltxn_tbl(i).Subinventory_Name);
4794           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Locator_Id:'||p_x_ahl_mtltxn_tbl(i).Locator_Id);
4795           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Locator_Segments:'||p_x_ahl_mtltxn_tbl(i).Locator_Segments);
4796           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Quantity:'||p_x_ahl_mtltxn_tbl(i).Quantity);
4797           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Uom:'||p_x_ahl_mtltxn_tbl(i).Uom);
4798           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Uom_Desc:'||p_x_ahl_mtltxn_tbl(i).Uom_Desc);
4799           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Transaction_Type_Id:'||p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id);
4800           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Transaction_Type_Name:'||p_x_ahl_mtltxn_tbl(i).Transaction_Type_Name);
4801           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Transaction_Reference:'||p_x_ahl_mtltxn_tbl(i).Transaction_Reference);
4802           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Wip_Entity_Id:'||p_x_ahl_mtltxn_tbl(i).Wip_Entity_Id);
4803           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Operation_Seq_Num:'||p_x_ahl_mtltxn_tbl(i).Operation_Seq_Num);
4804           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Serial_Number:'||p_x_ahl_mtltxn_tbl(i).Serial_Number);
4805           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Lot_Number:'||p_x_ahl_mtltxn_tbl(i).Lot_Number);
4806           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Reason_Id:'||p_x_ahl_mtltxn_tbl(i).Reason_Id);
4807           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Reason_Name:'||p_x_ahl_mtltxn_tbl(i).Reason_Name);
4808           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Problem_Code:'||p_x_ahl_mtltxn_tbl(i).Problem_Code);
4809           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Problem_Code_Meaning:'||p_x_ahl_mtltxn_tbl(i).Problem_Code_Meaning);
4810 
4811           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Target_Visit_Id:'||p_x_ahl_mtltxn_tbl(i).Target_Visit_Id);
4812 
4813           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Sr_Summary:'||p_x_ahl_mtltxn_tbl(i).Sr_Summary);
4814 
4815           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Qa_Collection_Id:'||p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id);
4816 
4817           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Workorder_operation_Id:'||p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id);
4818 
4819           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE_CATEGORY:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY);
4820 
4821           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE1:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE1);
4822 
4823           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE2:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE2);
4824 
4825           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE3:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE3);
4826 
4827           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE4:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE4);
4828 
4829           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE5:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE5);
4830 
4831           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE6:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE6);
4832 
4833           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE7:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE7);
4834 
4835           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE8:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE8);
4836 
4837           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE9:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE9);
4838 
4839           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE10:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE10);
4840 
4841           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE11:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE11);
4842 
4843           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE12:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE12);
4844 
4845           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE13:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE13);
4846 
4847           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE14:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE14);
4848 
4849           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE15:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE15);
4850           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').transaction_date:'||p_x_ahl_mtltxn_tbl(i).transaction_date);
4851           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').recepient_id:'||p_x_ahl_mtltxn_tbl(i).recepient_id);
4852           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').recepient_name:'||p_x_ahl_mtltxn_tbl(i).recepient_name);
4853           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').disposition_id:'||p_x_ahl_mtltxn_tbl(i).disposition_id);
4854           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').disposition_name:'||p_x_ahl_mtltxn_tbl(i).disposition_name);
4855           AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').move_to_project_flag:'||p_x_ahl_mtltxn_tbl(i).move_to_project_flag);
4856       END LOOP;
4857     END IF; -- p_x_ahl_mtltxn_tbl.COUNT
4858   END IF;
4859 END dumpInput;
4860 
4861 Procedure CALCULATE_QTY
4862 (
4863     p_wo_id     IN NUMBER,
4864     p_item_id   IN NUMBER,
4865     p_org_id    IN NUMBER,
4866     p_lot_num   IN VARCHAR2,
4867     p_rev_num   IN VARCHAR2,
4868     p_serial_num    IN VARCHAR2,
4869     p_wo_op_id  IN NUMBER,
4870     x_qty           OUT NOCOPY NUMBER
4871 )
4872 IS
4873     l_rev_flag      VARCHAR2(1) := 'N';
4874     l_lot_flag      VARCHAR2(1) := 'N';
4875     l_serial_flag   VARCHAR2(1) := 'N';
4876 
4877     CURSOR  GetItemDet(c_inv_item_id IN NUMBER, c_org_id IN NUMBER)
4878     IS
4879     SELECT
4880         SERIAL_NUMBER_CONTROL_CODE,
4881         LOT_CONTROL_CODE,
4882         REVISION_QTY_CONTROL_CODE
4883     FROM
4884         MTL_SYSTEM_ITEMS_B
4885     WHERE
4886         inventory_item_id=c_inv_item_id
4887         AND ORGANIZATION_ID=c_org_id;
4888 
4889     l_item_rec      GetItemDet%rowtype;
4890     l_iss_qty       NUMBER:=0;
4891     l_rtn_qty       NUMBER:=0;
4892     l_disp_qty      NUMBER:=0;
4893     l_net_qty       NUMBER:=0;
4894 
4895 BEGIN
4896 
4897     OPEN GetItemDet (p_item_id, p_org_id);
4898     FETCH GetItemDet into l_item_rec;
4899     IF GetItemDet%found
4900     THEN
4901         IF l_item_rec.LOT_CONTROL_CODE = 2 THEN
4902             l_lot_flag:='Y';
4903         END IF;
4904 
4905         IF l_item_rec.REVISION_QTY_CONTROL_CODE = 2 THEN
4906             l_rev_flag:='Y';
4907         END IF;
4908 
4909         IF l_item_rec.SERIAL_NUMBER_CONTROL_CODE <> 1 THEN
4910             l_serial_flag:='Y';
4911         END IF;
4912     END IF;
4913     CLOSE GetItemDet;
4914 
4915 
4916     SELECT SUM(NVL(a.primary_uom_qty,0)) INTO l_iss_qty
4917     FROM
4918         AHL_WORKORDER_MTL_TXNS a,
4919         AHL_WORKORDER_OPERATIONS b
4920     WHERE
4921         a.workorder_operation_id=b.workorder_operation_id
4922         AND a.transaction_type_id=35
4923         AND b.workorder_id=p_wo_id
4924         AND a.inventory_item_id=p_item_id
4925         AND a.organization_id=p_org_id
4926         AND nvl(a.serial_number,'X') = nvl(decode(l_serial_flag, 'Y', p_serial_num, a.serial_number),'X')
4927         AND nvl(a.lot_number,'X') = nvl(decode(l_lot_flag, 'Y', p_lot_num, a.lot_number),'X')
4928         AND nvl(a.revision,'X') = nvl(decode(l_rev_flag, 'Y', p_rev_num, a.revision),'X')
4929         AND a.workorder_operation_id=nvl(p_wo_op_id, a.workorder_operation_id);
4930 
4931     SELECT SUM(NVL(a.primary_uom_qty,0)) INTO l_rtn_qty
4932     FROM
4933         AHL_WORKORDER_MTL_TXNS a,
4934         AHL_WORKORDER_OPERATIONS b
4935     WHERE
4936         a.workorder_operation_id=b.workorder_operation_id
4937         AND a.transaction_type_id=43
4938         AND b.workorder_id=p_wo_id
4939         AND a.inventory_item_id=p_item_id
4940         AND a.organization_id=p_org_id
4941         AND nvl(a.serial_number,'X') = nvl(decode(l_serial_flag, 'Y', p_serial_num, a.serial_number),'X')
4942         AND nvl(a.lot_number,'X') = nvl(decode(l_lot_flag, 'Y', p_lot_num, a.lot_number),'X')
4943         AND nvl(a.revision,'X') = nvl(decode(l_rev_flag, 'Y', p_rev_num, a.revision),'X')
4944         AND a.workorder_operation_id=nvl(p_wo_op_id, a.workorder_operation_id);
4945 
4946     /* Tamal [R12 APPSPERF fixes]
4947      * R12 Drop 4 - SQL ID: 14400506
4948      * Bug #4918991
4949      */
4950     SELECT SUM(NVL(a.net_quantity,0)) INTO l_disp_qty
4951     FROM
4952         AHL_MTL_RET_DISPOSITIONS_V a,
4953         AHL_WORKORDERS b
4954     WHERE
4955         a.workorder_id=b.workorder_id
4956         AND b.master_workorder_flag = 'N'
4957         --AND b.status_code NOT IN ('17' , '22')
4958         AND b.status_code IN ('3','4','20')
4959         AND b.workorder_id=p_wo_id
4960         AND a.inventory_item_id=p_item_id
4961         --AND a.organization_id=p_org_id
4962         AND nvl(a.serial_number,'X') = nvl(decode(l_serial_flag, 'Y', p_serial_num, a.serial_number),'X')
4963         AND nvl(a.lot_number,'X') = nvl(decode(l_lot_flag, 'Y', p_lot_num, a.lot_number),'X')
4964         AND nvl(a.item_revision,'X') = nvl(decode(l_rev_flag, 'Y', p_rev_num, a.item_revision),'X')
4965         AND a.workorder_operation_id=nvl(p_wo_op_id, a.workorder_operation_id);
4966 
4967     x_qty := nvl(l_iss_qty, 0) - nvl(l_rtn_qty, 0) - nvl(l_disp_qty, 0);
4968 
4969 END CALCULATE_QTY;
4970 
4971 PROCEDURE getDispositionReturn
4972           (
4973             p_x_ahl_prd_mtl_txn_tbl     IN OUT  NOCOPY Ahl_Mtltxn_Tbl_Type,
4974             P_prd_Mtltxn_criteria_rec   IN            Prd_Mtltxn_criteria_rec
4975            )AS
4976 
4977   --pdoki commented for Bug 9164678
4978 
4979    -- pick organization from Visit table. Disp. view returns master org.
4980   /* CURSOR GetDispDet
4981           (
4982              p_job_number   IN VARCHAR2,
4983              p_visit_number IN NUMBER,
4984              p_priority     IN NUMBER,
4985              p_dept_name    IN VARCHAR2,
4986              p_org_name     IN VARCHAR2,
4987              p_item         IN VARCHAR2,
4988              p_incident_number IN VARCHAR2,
4989              p_disposition_name IN VARCHAR2
4990            ) IS
4991 
4992 /* Tamal [R12 APPSPERF fixes]
4993  * R12 Drop 4 - SQL ID: 14400778
4994  * Bug #4918991
4995  */
4996 /*SELECT
4997     D.WORKORDER_ID,
4998     D.WORKORDER_NAME,
4999     V.ORGANIZATION_ID,
5000     D.WORKORDER_OPERATION_ID,
5001     O.OPERATION_SEQUENCE_NUM,
5002     D.ITEM_NUMBER,
5003     D.INVENTORY_ITEM_ID,
5004     D.ITEM_DESC,
5005     D.IMMEDIATE_DISPOSITION_CODE,
5006     D.DISPOSITION_ID,
5007     D.IMMEDIATE_TYPE,
5008     D.CONDITION_CODE,
5009     D.CONDITION_ID,
5010     D.SERIAL_NUMBER,
5011     D.UOM,
5012     UOM.UNIT_OF_MEASURE,
5013     WO_STS.MEANING JOB_STATUS_MEANING,
5014     D.LOT_NUMBER,
5015     D.ITEM_REVISION,
5016     D.COLLECTION_ID,
5017     D.INSTANCE_ID,
5018     WIP.DEFAULT_PULL_SUPPLY_SUBINV,
5019     WIP.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
5020     L.CONCATENATED_SEGMENTS,
5021     --SYSDATE,
5022     D.QUANTITY, --GOES TO THE ISSUE QTY UI
5023     D.NET_QUANTITY,  --GOES TO THE RETURN QTY
5024     -- JKJAIN FP ER # 6436303 - start
5025     AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY(D.WORKORDER_ID,D.INVENTORY_ITEM_ID,V.ORGANIZATION_ID) Wo_Net_Total_Qty,
5026     -- JKJAIN FP ER # 6436303 - end
5027    W.wip_entity_id,
5028     (select inv_locator_id from ahl_visits_b where visit_id = w.visit_id) inv_locator_id
5029 FROM
5030     AHL_MTL_RET_DISPOSITIONS_V D,
5031     AHL_WORKORDERS W,
5032     (SELECT LOOKUP_CODE, MEANING FROM FND_LOOKUP_VALUES WHERE LOOKUP_TYPE = 'AHL_JOB_STATUS' AND LANGUAGE= USERENV('LANG')) WO_STS,
5033     AHL_VISITS_B V,
5034     AHL_VISIT_TASKS_B VT,
5035     CS_INCIDENTS_ALL_B C,
5036     WIP_DISCRETE_JOBS WDJ,
5037     (SELECT ORGANIZATION_ID, NAME FROM HR_ALL_ORGANIZATION_UNITS_TL WHERE LANGUAGE = USERENV('LANG')) ORG,
5038     BOM_DEPARTMENTS B,
5039     AHL_WORKORDER_OPERATIONS O,
5040     MTL_UNITS_OF_MEASURE_VL UOM,
5041     WIP_PARAMETERS WIP,
5042     MTL_ITEM_LOCATIONS_KFV L
5043 WHERE
5044     D.WORKORDER_ID = W.WORKORDER_ID AND
5045     W.MASTER_WORKORDER_FLAG = 'N' AND
5046     --W.STATUS_CODE NOT IN ('17', '22', '5','7','12') AND
5047     W.STATUS_CODE IN ('3', '4', '20') AND
5048     W.STATUS_CODE = WO_STS.LOOKUP_CODE AND
5049     O.WORKORDER_OPERATION_ID (+) = D.WORKORDER_OPERATION_ID AND
5050     O.WORKORDER_ID (+) = D.WORKORDER_ID AND
5051     D.UOM = UOM.UOM_CODE AND
5052     WIP.ORGANIZATION_ID = L.ORGANIZATION_ID(+) AND
5053     WIP.DEFAULT_PULL_SUPPLY_LOCATOR_ID = L.INVENTORY_LOCATION_ID(+) AND
5054     WIP.ORGANIZATION_ID = V.ORGANIZATION_ID AND
5055     W.VISIT_TASK_ID = VT.VISIT_TASK_ID AND
5056     V.VISIT_ID = VT.VISIT_ID AND
5057     V.SERVICE_REQUEST_ID = C.INCIDENT_ID(+) AND
5058     WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID AND
5059     WDJ.OWNING_DEPARTMENT = B.DEPARTMENT_ID(+) AND
5060     V.ORGANIZATION_ID = ORG.ORGANIZATION_ID AND
5061     D.IMMEDIATE_TYPE LIKE NVL(p_disposition_name, D.IMMEDIATE_TYPE) AND
5062     D.ITEM_NUMBER LIKE NVL(p_item, D.ITEM_NUMBER) AND
5063     NVL(C.INCIDENT_NUMBER,'X') LIKE NVL(p_incident_number, NVL(C.INCIDENT_NUMBER,'X')) AND
5064     W.WORKORDER_NAME LIKE NVL(p_job_number, W.WORKORDER_NAME) AND
5065     UPPER(ORG.NAME) LIKE UPPER(NVL(p_org_name, ORG.NAME)) AND
5066     NVL(WDJ.PRIORITY,0) = NVL(p_priority, NVL(WDJ.PRIORITY,0)) AND
5067     V.VISIT_NUMBER = NVL(p_visit_number, V.VISIT_NUMBER) AND
5068     UPPER(B.DESCRIPTION) LIKE UPPER(NVL(p_dept_name, B.DESCRIPTION)); */
5069 
5070     -- check if issued instance has been installed / validate instance.
5071     CURSOR chk_inst_relationship_csr (p_INVENTORY_ITEM_ID IN NUMBER,
5072                                       p_wip_entity_id IN NUMBER,
5073                                       p_ITEM_Revision IN VARCHAR2,
5074                                       p_lot_number IN VARCHAR2,
5075                                       p_Serial_Number IN VARCHAR2) IS
5076         /* fix for bug# 9268076
5077         SELECT 'x'
5078         FROM  CSI_ITEM_INSTANCES CII
5079         WHERE CII.inventory_item_id = p_INVENTORY_ITEM_ID
5080           AND nvl(cii.inventory_revision,'1') = nvl(p_ITEM_Revision, '1')
5081           AND nvl(cii.lot_number, '1') = nvl(p_lot_number, '1')
5082           AND nvl(cii.serial_number,'1') = nvl(p_serial_number, '1')
5083           AND CII.ACTIVE_START_DATE <= SYSDATE
5084           AND ((CII.ACTIVE_END_DATE IS NULL) OR (CII.ACTIVE_END_DATE > SYSDATE))
5085           AND CII.QUANTITY > 0
5086           AND CII.LOCATION_TYPE_CODE = 'WIP'
5087           AND CII.WIP_JOB_ID = p_wip_entity_id
5088           AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
5089                           WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
5090                             AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
5091                             AND NVL(CIR.ACTIVE_START_DATE,SYSDATE) <= SYSDATE AND
5092                             (CIR.ACTIVE_END_DATE IS NULL OR CIR.ACTIVE_END_DATE > SYSDATE));
5093         */
5094 
5095         SELECT cii.quantity,
5096               (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
5097                 WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
5098                   AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
5099                   AND NVL(CIR.ACTIVE_START_DATE,SYSDATE) <= SYSDATE
5100                   AND (CIR.ACTIVE_END_DATE IS NULL OR CIR.ACTIVE_END_DATE > SYSDATE)) reln_exists
5101         FROM  CSI_ITEM_INSTANCES CII
5102         WHERE CII.inventory_item_id = p_INVENTORY_ITEM_ID
5103           AND nvl(cii.inventory_revision,'1') = nvl(p_ITEM_Revision, '1')
5104           AND nvl(cii.lot_number, '1') = nvl(p_lot_number, '1')
5105           AND nvl(cii.serial_number,'1') = nvl(p_serial_number, '1')
5106           AND CII.ACTIVE_START_DATE <= SYSDATE
5107           AND ((CII.ACTIVE_END_DATE IS NULL) OR (CII.ACTIVE_END_DATE > SYSDATE))
5108           AND CII.QUANTITY > 0
5109           AND CII.LOCATION_TYPE_CODE = 'WIP'
5110           AND CII.WIP_JOB_ID = p_wip_entity_id;
5111 
5112    l_index      NUMBER;
5113    l_valid_flag BOOLEAN;
5114    l_junk       VARCHAR2(1);
5115 
5116    -- sracha: added for bug fix 6328554.
5117    l_index_start NUMBER;
5118 
5119    --pdoki added for Bug 9164678
5120    l_bind_value_tbl AHL_OSP_UTIL_PKG.ahl_conditions_tbl;
5121    l_mtl_txns_returns_cur AHL_OSP_UTIL_PKG.ahl_search_csr;
5122    l_bind_index NUMBER;
5123    l_mtl_txn_dtls VARCHAR2(10000);
5124    l_mtl_txn_dtls_where VARCHAR2(10000);
5125 
5126    TYPE l_disp_rec_type IS RECORD (
5127         workorder_id                    AHL_PRD_DISPOSITIONS_B.WORKORDER_ID%TYPE,
5128         workorder_name                  AHL_WORKORDERS.WORKORDER_NAME%TYPE,
5129         organization_id                 AHL_VISITS_B.ORGANIZATION_ID%TYPE,
5130         workorder_operation_id          AHL_PRD_DISPOSITIONS_B.WO_OPERATION_ID%TYPE,
5131         operation_sequence_num          AHL_WORKORDER_OPERATIONS.OPERATION_SEQUENCE_NUM%TYPE,
5132         item_number                     MTL_SYSTEM_ITEMS_KFV.CONCATENATED_SEGMENTS%TYPE,
5133         inventory_item_id               CSI_ITEM_INSTANCES.INVENTORY_ITEM_ID%TYPE,
5134         item_desc                       MTL_SYSTEM_ITEMS_KFV.DESCRIPTION%TYPE,
5135         immediate_disposition_code      AHL_PRD_DISPOSITIONS_B.IMMEDIATE_DISPOSITION_CODE%TYPE,
5136         disposition_id                  AHL_PRD_DISPOSITIONS_B.DISPOSITION_ID%TYPE,
5137         immediate_type                  FND_LOOKUP_VALUES.MEANING%TYPE,
5138         condition_code                  MTL_MATERIAL_STATUSES_TL.STATUS_CODE%TYPE,
5139         condition_id                    AHL_PRD_DISPOSITIONS_B.CONDITION_ID%TYPE,
5140         serial_number                   CSI_ITEM_INSTANCES.SERIAL_NUMBER%TYPE,
5141         uom                             AHL_PRD_DISPOSITIONS_B.UOM%TYPE,
5142         unit_of_measure                 MTL_UNITS_OF_MEASURE_VL.UNIT_OF_MEASURE%TYPE,
5143         job_status_meaning              FND_LOOKUP_VALUES.MEANING%TYPE,
5144         lot_number                      CSI_ITEM_INSTANCES.LOT_NUMBER%TYPE,
5145         item_revision                   CSI_ITEM_INSTANCES.INVENTORY_REVISION%TYPE,
5146         collection_id                   AHL_PRD_DISPOSITIONS_B.COLLECTION_ID%TYPE,
5147         instance_id                     AHL_PRD_DISPOSITIONS_B.INSTANCE_ID%TYPE,
5148         instance_number               CSI_ITEM_INSTANCES.instance_number%TYPE,
5149         default_pull_supply_subinv      WIP_PARAMETERS.DEFAULT_PULL_SUPPLY_SUBINV%TYPE,
5150         default_pull_supply_locator_id  WIP_PARAMETERS.DEFAULT_PULL_SUPPLY_LOCATOR_ID%TYPE,
5151         concatenated_segments           MTL_ITEM_LOCATIONS_KFV.CONCATENATED_SEGMENTS%TYPE,
5152         quantity                        AHL_PRD_DISPOSITIONS_B.QUANTITY%TYPE,
5153         net_quantity                    CSI_ITEM_INSTANCES.QUANTITY%TYPE,
5154         Wo_Net_Total_Qty                NUMBER,
5155         wip_entity_id                   AHL_WORKORDERS.WIP_ENTITY_ID%TYPE,
5156         inv_locator_id                  AHL_VISITS_B.INV_LOCATOR_ID%TYPE,
5157          --JKJain, Bug 9268076
5158         path_position_id                AHL_PRD_DISPOSITIONS_B.PATH_POSITION_ID%TYPE
5159         );
5160 
5161    l_disp_rec  l_disp_rec_type;
5162 
5163    --JKJain, Bug 9268076
5164    l_unit_config_id   NUMBER;
5165    l_unit_config_name ahl_unit_config_headers.name%TYPE;
5166    l_return_status    VARCHAR2(1);
5167 
5168    -- added for bug# 9268076 (re-open fix)
5169    l_ii_quantity      NUMBER;
5170    l_reln_exists      VARCHAR2(1);
5171    l_dup_disposition  VARCHAR2(1);
5172    l_inv_item_id      NUMBER;
5173    l_inv_rev          mtl_material_transactions.revision%TYPE;
5174    l_inv_serial       mtl_serial_numbers.serial_number%TYPE;
5175    l_inv_lot_no       mtl_lot_numbers.lot_number%TYPE;
5176    l_wo_id            NUMBER;
5177    l_track_flag       BOOLEAN;
5178    l_cnt_disposition  NUMBER;
5179    l_pend_count       NUMBER;
5180 
5181    --pdoki added for Bug 12564439; sorao backporting project
5182    l_instance_number     CSI_ITEM_INSTANCES.INSTANCE_NUMBER%TYPE;
5183 
5184    -- check serial current status.
5185    CURSOR mtl_serial_csr (p_inv_item_id IN NUMBER,
5186                           p_serial_num  IN VARCHAR2)
5187    IS
5188      SELECT 'x'
5189      FROM mtl_serial_numbers
5190      WHERE inventory_item_id = p_inv_item_id
5191        AND serial_number = p_serial_num
5192        AND current_status IN ('1','4');
5193 
5194    -- check pending txns for lot controlled item.
5195    CURSOR csi_pending_lot_txn (p_wip_entity_id IN NUMBER,
5196                                p_inventory_item_id IN NUMBER,
5197                                p_type_id       IN NUMBER,
5198                                p_item_revision IN VARCHAR2,
5199                                p_lot_number    IN VARCHAR2)
5200    IS
5201 
5202      SELECT sum(abs(mmt.primary_quantity))
5203      FROM  mtl_material_transactions mmt, MTL_TRANSACTION_LOT_NUMBERS mtln
5204      WHERE mmt.TRANSACTION_ID = mtln.TRANSACTION_ID
5205        AND mmt.TRANSACTION_SOURCE_ID = p_wip_entity_id
5206        AND mmt.INVENTORY_ITEM_ID = p_inventory_item_id
5207        AND mmt.Transaction_Type_Id = p_type_id
5208        AND nvl(mmt.revision, '1') = nvl(p_item_revision, '1')
5209        AND mtln.lot_number = p_lot_number
5210        AND NOT EXISTS (select 'x' from csi_transactions where INV_MATERIAL_TRANSACTION_ID = mmt.TRANSACTION_ID);
5211 
5212    -- check pending txns for non-lot items.
5213    CURSOR csi_pending_txn (p_wip_entity_id IN NUMBER,
5214                            p_inventory_item_id IN NUMBER,
5215                            p_type_id       IN NUMBER,
5216                            p_item_revision IN VARCHAR2)
5217    IS
5218 
5219      SELECT sum(abs(mmt.primary_quantity))
5220      FROM mtl_material_transactions mmt
5221      WHERE mmt.TRANSACTION_SOURCE_ID = p_wip_entity_id
5222        AND mmt.INVENTORY_ITEM_ID = p_inventory_item_id
5223        AND mmt.Transaction_Type_Id = p_type_id
5224        AND nvl(mmt.revision, '1') = nvl(p_item_revision, '1')
5225        AND NOT EXISTS (select 'x' from csi_transactions where INV_MATERIAL_TRANSACTION_ID = mmt.TRANSACTION_ID);
5226 
5227 BEGIN
5228     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
5229         fnd_log.string
5230         (
5231             G_LEVEL_PROCEDURE,
5232             'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn.begin',
5233             'At the start of PLSQL procedure'
5234         );
5235     END IF;
5236 
5237     --pdoki added for Bug 9164678 start.
5238 
5239     l_mtl_txn_dtls := '
5240         SELECT
5241             D.WORKORDER_ID,
5242             D.WORKORDER_NAME,
5243             V.ORGANIZATION_ID,
5244             D.WORKORDER_OPERATION_ID,
5245             O.OPERATION_SEQUENCE_NUM,
5246             D.ITEM_NUMBER,
5247             D.INVENTORY_ITEM_ID,
5248             D.ITEM_DESC,
5249             D.IMMEDIATE_DISPOSITION_CODE,
5250             D.DISPOSITION_ID,
5251             D.IMMEDIATE_TYPE,
5252             D.CONDITION_CODE,
5253             D.CONDITION_ID,
5254             D.SERIAL_NUMBER,
5255             D.UOM,
5256             UOM.UNIT_OF_MEASURE,
5257             WO_STS.MEANING JOB_STATUS_MEANING,
5258             D.LOT_NUMBER,
5259             D.ITEM_REVISION,
5260             D.COLLECTION_ID,
5261             D.INSTANCE_ID,
5262       (Select csi.instance_number from csi_item_instances csi where csi.instance_id = D.INSTANCE_ID) instance_number,
5263             WP.DEFAULT_PULL_SUPPLY_SUBINV,
5264             WP.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
5265             L.CONCATENATED_SEGMENTS,
5266             --SYSDATE,
5267             D.QUANTITY, --GOES TO THE ISSUE QTY UI
5268             D.NET_QUANTITY,  --GOES TO THE RETURN QTY
5269             AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY(D.WORKORDER_ID,D.INVENTORY_ITEM_ID,V.ORGANIZATION_ID) Wo_Net_Total_Qty,
5270             W.WIP_ENTITY_ID,
5271             V.INV_LOCATOR_ID,
5272             D.PATH_POSITION_ID
5273         FROM
5274             AHL_MTL_RET_DISPOSITIONS_V D,
5275             AHL_VISITS_B V,
5276             AHL_WORKORDER_OPERATIONS O,
5277             MTL_UNITS_OF_MEASURE_VL UOM,
5278             (SELECT LOOKUP_CODE, MEANING FROM FND_LOOKUP_VALUES WHERE LOOKUP_TYPE = ''AHL_JOB_STATUS'' AND LANGUAGE= USERENV(''LANG'')) WO_STS,
5279             WIP_PARAMETERS WP,
5280             MTL_ITEM_LOCATIONS_KFV L,
5281             AHL_WORKORDERS W ';
5282 
5283 
5284      l_mtl_txn_dtls_where := '
5285         WHERE  D.WORKORDER_ID = W.WORKORDER_ID
5286         AND    W.MASTER_WORKORDER_FLAG = ''N''
5287         AND    W.STATUS_CODE IN (''3'', ''4'', ''20'')
5288         AND    W.STATUS_CODE = WO_STS.LOOKUP_CODE
5289         AND    O.WORKORDER_OPERATION_ID (+) = D.WORKORDER_OPERATION_ID
5290         AND    O.WORKORDER_ID (+) = D.WORKORDER_ID
5291         AND    D.UOM = UOM.UOM_CODE
5292         AND    WP.ORGANIZATION_ID = L.ORGANIZATION_ID(+)
5293         AND    WP.DEFAULT_PULL_SUPPLY_LOCATOR_ID = L.INVENTORY_LOCATION_ID(+)
5294         AND    WP.ORGANIZATION_ID = V.ORGANIZATION_ID
5295         AND    W.VISIT_ID = V.VISIT_ID ';
5296 
5297         l_bind_index := 1;
5298 
5299         IF (P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME IS NOT NULL) THEN
5300            l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND D.IMMEDIATE_TYPE LIKE :' || l_bind_index;
5301            l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME;
5302            l_bind_index := l_bind_index + 1;
5303         END IF;
5304 
5305         IF (P_prd_Mtltxn_criteria_rec.JOB_NUMBER IS NOT NULL) THEN
5306            l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND W.WORKORDER_NAME LIKE :' || l_bind_index;
5307            l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.JOB_NUMBER;
5308            l_bind_index := l_bind_index + 1;
5309         END IF;
5310 
5311         IF (P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME IS NOT NULL) THEN
5312           l_mtl_txn_dtls := l_mtl_txn_dtls || ', (SELECT ORGANIZATION_ID, NAME FROM HR_ALL_ORGANIZATION_UNITS_TL WHERE LANGUAGE = USERENV(''LANG'')) ORG';
5313           l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND V.ORGANIZATION_ID = ORG.ORGANIZATION_ID
5314           AND ORG.NAME LIKE :'|| l_bind_index;
5315           l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME;
5316           l_bind_index := l_bind_index + 1;
5317         END IF;
5318 
5319         IF (P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS IS NOT NULL) THEN
5320             l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND D.ITEM_NUMBER LIKE :' || l_bind_index;
5321             l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS;
5322             l_bind_index := l_bind_index + 1;
5323         END IF;
5324 
5325         IF (P_prd_Mtltxn_criteria_rec.PRIORITY IS NOT NULL) THEN
5326           l_mtl_txn_dtls := l_mtl_txn_dtls || ', WIP_DISCRETE_JOBS WDJ';
5327           l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
5328           AND WDJ.PRIORITY = :' || l_bind_index;
5329           l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.PRIORITY;
5330           l_bind_index := l_bind_index + 1;
5331         END IF;
5332 
5333         IF (P_prd_Mtltxn_criteria_rec.VISIT_NUMBER IS NOT NULL) THEN
5334          l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND V.VISIT_NUMBER = :'|| l_bind_index;
5335          l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.VISIT_NUMBER;
5336          l_bind_index := l_bind_index + 1;
5337         END IF;
5338 
5339         IF (P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME IS NOT NULL) THEN
5340           l_mtl_txn_dtls := l_mtl_txn_dtls || ', WIP_DISCRETE_JOBS WDJ,BOM_DEPARTMENTS B';
5341           l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
5342           AND WDJ.OWNING_DEPARTMENT = B.DEPARTMENT_ID (+)
5343           AND B.DESCRIPTION LIKE :'  || l_bind_index;
5344           l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME;
5345           l_bind_index := l_bind_index + 1;
5346         END IF;
5347 
5348         IF (P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER IS NOT NULL) THEN
5349           l_mtl_txn_dtls := l_mtl_txn_dtls || ', AHL_VISIT_TASKS_B VT,CS_INCIDENTS_ALL_B C';
5350           l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND W.VISIT_TASK_ID = VT.VISIT_TASK_ID
5351            AND    V.VISIT_ID = VT.VISIT_ID
5352            AND VT.SERVICE_REQUEST_ID = C.INCIDENT_ID(+)
5353           AND C.INCIDENT_NUMBER LIKE :' || l_bind_index;
5354           l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER;
5355           l_bind_index := l_bind_index + 1;
5356         END IF;
5357 
5358         -- added order by clause as part of fix for bug# 9268076
5359         l_mtl_txn_dtls := l_mtl_txn_dtls || l_mtl_txn_dtls_where || ' ORDER BY D.WORKORDER_ID, D.INVENTORY_ITEM_ID, D.SERIAL_NUMBER, D.ITEM_REVISION, D.LOT_NUMBER ' ;
5360 
5361         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5362            fnd_log.string
5363            (
5364              G_LEVEL_STATEMENT,
5365              'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5366              'SQL Query String: ' || l_mtl_txn_dtls
5367            );
5368         END IF;
5369 
5370         AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR(l_mtl_txns_returns_cur, l_bind_value_tbl, l_mtl_txn_dtls);
5371 
5372         l_index   :=p_x_ahl_prd_mtl_txn_tbl.count;
5373         l_index_start := l_index;
5374 
5375         -- initialize
5376         l_inv_item_id := null;
5377         l_inv_rev     := null;
5378         l_inv_serial  := null;
5379         l_inv_lot_no  := null;
5380         l_wo_id       := null;
5381 
5382       LOOP
5383          FETCH l_mtl_txns_returns_cur INTO l_disp_rec;
5384          EXIT WHEN l_mtl_txns_returns_cur%NOTFOUND;
5385 
5386          l_track_flag := Is_Item_Trackable(l_disp_rec.organization_id, l_disp_rec.INVENTORY_ITEM_ID);
5387 
5388          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5389              fnd_log.string
5390              (
5391               G_LEVEL_STATEMENT,
5392               'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5393               'Inv Item:DispId:Srl:Lot:Rev:WIP:WOID:WONAME:' || l_disp_rec.INVENTORY_ITEM_ID || ':' || l_disp_rec.disposition_id ||
5394               ':' || l_disp_rec.Serial_Number || ':' || l_disp_rec.lot_number || ':' || l_disp_rec.ITEM_Revision ||
5395               ':' || l_disp_rec.wip_entity_id || ':' || l_disp_rec.workorder_id || ':' || l_disp_rec.workorder_name
5396              );
5397          END IF;
5398 
5399          --pdoki added for Bug 9164678 end.
5400 
5401         --pdoki added for Bug 12564439; sorao for backporting project
5402          l_instance_number := null;
5403 
5404          IF l_disp_rec.instance_id IS NOT NULL THEN
5405               SELECT instance_number
5406               INTO   l_instance_number
5407               FROM   CSI_ITEM_INSTANCES
5408               WHERE  instance_id = l_disp_rec.instance_id ;
5409          END IF;
5410 
5411          -- added to support duplicate dispositions for the same item/lot/revision in same wo.
5412          -- for serialized case, in case of duplicate disposition, no disposition is defaulted. User needs to select on the UI.
5413          -- for non-serialized tracked case, if disp qty > instance qty, no disposition is defaulted. User needs to select on the UI.
5414          IF NOT(l_track_flag) THEN
5415             l_valid_flag  := TRUE;
5416          ELSE -- tracked item
5417            IF (nvl(l_wo_id ,0) <> l_disp_rec.workorder_id OR nvl(l_inv_item_id,0) <> l_disp_rec.INVENTORY_ITEM_ID
5418                OR nvl(l_disp_rec.Serial_Number, '1') <> nvl(l_inv_serial, '1')
5419                OR nvl(l_disp_rec.lot_number,'1') <> nvl(l_inv_lot_no,'1')
5420                OR nvl(l_disp_rec.ITEM_Revision,'1') <> nvl(l_inv_rev,'1') )
5421            THEN
5422              l_valid_flag  := TRUE;
5423 
5424              l_inv_item_id := l_disp_rec.INVENTORY_ITEM_ID;
5425              l_inv_serial  := l_disp_rec.Serial_Number;
5426              l_inv_lot_no  := l_disp_rec.lot_number;
5427              l_inv_rev     := l_disp_rec.ITEM_Revision;
5428              l_wo_id       := l_disp_rec.workorder_id;
5429 
5430              l_cnt_disposition := 0;
5431              l_ii_quantity     := 0;
5432              l_pend_count      := 0;
5433 
5434              BEGIN
5435                 -- calculate total quantity across all dispositions for given item/serial/lot/rev.
5436                 SELECT sum(D.Net_quantity)
5437                 INTO l_cnt_disposition
5438                 FROM AHL_MTL_RET_DISPOSITIONS_V D
5439                 WHERE D.WORKORDER_ID = l_wo_id
5440                   AND D.INVENTORY_ITEM_ID = l_inv_item_id
5441                   AND nvl(D.Serial_Number, '1') = nvl(l_inv_serial, '1')
5442                   AND nvl(D.lot_number, '1')  = nvl(l_inv_lot_no, '1')
5443                   AND nvl(D.ITEM_Revision, '1')  = nvl(l_inv_rev, '1');
5444 
5445              EXCEPTION
5446                 WHEN OTHERS THEN
5447                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5448                     fnd_log.string
5449                     (
5450                       G_LEVEL_STATEMENT,
5451                       'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5452                       'Error query ahl_mtl_ret_dispositions_v'
5453                     );
5454                   END IF;
5455                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5456              END;
5457 
5458              IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5459                  fnd_log.string
5460                  (
5461                    G_LEVEL_STATEMENT,
5462                    'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5463                    'Inv Item:DispId:Srl:Lot:Rev:WIP:WOID:WONAME:CntDISP:' || l_inv_item_id || ':' || l_disp_rec.disposition_id ||
5464                     ':' || l_inv_serial || ':' || l_inv_lot_no || ':' || l_inv_rev ||
5465                     ':' || l_wo_id  || ':' || l_disp_rec.workorder_id || ':' || l_disp_rec.workorder_name ||
5466                     ':' || l_cnt_disposition
5467                  );
5468              END IF;
5469 
5470              IF (l_cnt_disposition <= 0) THEN
5471                l_valid_flag := FALSE;
5472              END IF;
5473 
5474              IF (l_valid_flag)  THEN
5475                -- validate instance location.
5476                OPEN chk_inst_relationship_csr (l_disp_rec.INVENTORY_ITEM_ID,
5477                                                l_disp_rec.wip_entity_id,
5478                                                l_disp_rec.ITEM_Revision,
5479                                                l_disp_rec.lot_number,
5480                                                l_disp_rec.Serial_Number);
5481                FETCH chk_inst_relationship_csr INTO l_ii_quantity, l_reln_exists;
5482                IF (chk_inst_relationship_csr%NOTFOUND) THEN
5483                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5484                     fnd_log.string
5485                     (
5486                      G_LEVEL_STATEMENT,
5487                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5488                      'tracked:instance not found'
5489                     );
5490                   END IF;
5491                   l_valid_flag := FALSE;
5492                ELSIF l_reln_exists = 'X' THEN
5493                   l_valid_flag := FALSE;
5494 
5495                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5496                     fnd_log.string
5497                     (
5498                      G_LEVEL_STATEMENT,
5499                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5500                      'Found relationship: Invalid Disposition'
5501                     );
5502                   END IF;
5503 
5504                END IF;
5505                CLOSE chk_inst_relationship_csr;
5506              END IF; -- valid_flag
5507 
5508              IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5509                 fnd_log.string
5510                 (
5511                    G_LEVEL_STATEMENT,
5512                    'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5513                    'after relationship:ii_qty:' || l_ii_quantity
5514                 );
5515              END IF;
5516 
5517              IF (l_valid_flag) THEN
5518                -- check for any pending transactions.
5519                IF (l_inv_serial IS NOT NULL) THEN
5520                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5521                      fnd_log.string
5522                      (
5523                         G_LEVEL_STATEMENT,
5524                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5525                         ' serial not null - pending'
5526                      );
5527                   END IF;
5528 
5529                   -- check if serial number is valid.
5530                   OPEN mtl_serial_csr(l_disp_rec.INVENTORY_ITEM_ID, l_disp_rec.Serial_Number);
5531                   FETCH mtl_serial_csr INTO l_junk;
5532                   IF (mtl_serial_csr%NOTFOUND) THEN
5533                     l_valid_flag := FALSE;
5534                     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5535                         fnd_log.string
5536                         (
5537                           G_LEVEL_STATEMENT,
5538                           'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5539                           'Not valid Serial: Invalid Disposition'
5540                         );
5541                     END IF;
5542                   END IF;
5543                   CLOSE mtl_serial_csr;
5544                ELSIF (l_inv_lot_no IS NOT NULL) THEN
5545                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5546                       fnd_log.string
5547                       (
5548                          G_LEVEL_STATEMENT,
5549                          'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5550                          'lot num not null: pending'
5551                       );
5552                   END IF;
5553                   OPEN csi_pending_lot_txn(l_disp_rec.wip_entity_id, l_disp_rec.INVENTORY_ITEM_ID,
5554                                            WIP_CONSTANTS.RETCOMP_TYPE, l_disp_rec.ITEM_Revision,
5555                                            l_disp_rec.lot_number);
5556                   FETCH csi_pending_lot_txn INTO l_pend_count;
5557                   IF (l_pend_count IS NULL) THEN
5558                      l_pend_count := 0;
5559                   END IF;
5560 
5561                   --IF (csi_pending_lot_txn%FOUND) THEN
5562                   IF (l_pend_count > 0) THEN
5563                     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5564                         fnd_log.string
5565                         (
5566                           G_LEVEL_STATEMENT,
5567                           'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5568                           'Found pending txns:qty:ii_qty:' || l_pend_count || ':' || l_ii_quantity
5569                         );
5570                     END IF;
5571                     l_ii_quantity := l_ii_quantity - l_pend_count;
5572                   END IF;
5573                   CLOSE csi_pending_lot_txn;
5574                   IF (l_ii_quantity <= 0) THEN
5575                     l_valid_flag := FALSE;
5576                   END IF;
5577                ELSE
5578                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5579                       fnd_log.string
5580                       (
5581                          G_LEVEL_STATEMENT,
5582                          'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5583                          'else - pending'
5584                       );
5585                   END IF;
5586                   OPEN csi_pending_txn(l_disp_rec.wip_entity_id, l_disp_rec.INVENTORY_ITEM_ID,
5587                                        WIP_CONSTANTS.RETCOMP_TYPE, l_disp_rec.ITEM_Revision);
5588                   FETCH csi_pending_txn INTO l_pend_count;
5589                   IF (l_pend_count IS NULL) THEN
5590                      l_pend_count := 0;
5591                   END IF;
5592 
5593                   --IF (csi_pending_txn%FOUND) THEN
5594                   IF (l_pend_count > 0) THEN
5595                     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5596                         fnd_log.string
5597                         (
5598                           G_LEVEL_STATEMENT,
5599                           'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5600                           'Found pending txns:qty:ii_qty:' || l_pend_count || ':' || l_ii_quantity
5601                         );
5602                     END IF;
5603                     l_ii_quantity := l_ii_quantity - l_pend_count;
5604                   END IF;
5605                   CLOSE csi_pending_txn;
5606                   IF (l_ii_quantity <= 0) THEN
5607                     l_valid_flag := FALSE;
5608                     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5609                         fnd_log.string
5610                         (
5611                           G_LEVEL_STATEMENT,
5612                           'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5613                           'II Qty less or equal to 0:' || l_ii_quantity
5614                         );
5615                     END IF;
5616                   END IF;
5617 
5618                END IF; -- l_inv_serial
5619              END IF; -- valid_flag
5620 
5621              IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5622                 fnd_log.string
5623                 (
5624                    G_LEVEL_STATEMENT,
5625                    'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5626                    'after all validations'
5627                 );
5628              END IF;
5629 
5630              -- add row to table without disposition information.
5631              IF (l_valid_flag) AND ((l_cnt_disposition > l_ii_quantity AND l_ii_quantity > 0) OR
5632                                     (l_cnt_disposition < l_ii_quantity AND l_cnt_disposition > 0)) THEN
5633                p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id:=l_disp_rec.workorder_id;
5634                p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_name:=l_disp_rec.workorder_name;
5635                p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_status:=l_disp_rec.job_status_meaning;
5636                p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id:=l_disp_rec.Organization_Id;
5637                p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id:=l_disp_rec.Workorder_operation_Id;
5638                p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_disp_rec.ITEM_NUMBER;
5639                p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id:=l_disp_rec.INVENTORY_ITEM_ID;
5640                p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_disp_rec.ITEM_DESC;
5641                --p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_name:=l_disp_rec.IMMEDIATE_TYPE;
5642                --p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_id:=l_disp_rec.disposition_id;
5643                --p_x_ahl_prd_mtl_txn_tbl(l_index).Condition:=l_disp_rec.CONDITION_ID;
5644                --p_x_ahl_prd_mtl_txn_tbl(l_index).Condition_desc:=l_disp_rec.CONDITION_CODE;
5645                p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number:=l_disp_rec.Serial_Number;
5646                p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity:= AHL_PRD_MTLTXN_PVT.GET_WORKORD_LEVEL_QTY(l_disp_rec.workorder_id,
5647                                                            l_disp_rec.INVENTORY_ITEM_ID, l_disp_rec.Organization_Id,
5648                                                            l_disp_rec.lot_number, l_disp_rec.ITEM_Revision,
5649                                                            l_disp_rec.Serial_Number); -- issue qty
5650                IF (l_cnt_disposition > l_ii_quantity) THEN
5651                  p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity:= l_ii_quantity;
5652                  --reset l_valid_flag
5653                  l_valid_flag := FALSE;
5654 
5655                  IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5656                    fnd_log.string
5657                    (
5658                      G_LEVEL_STATEMENT,
5659                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5660                      'Disp Qty > ii Qty. Adding row with NO disposition :' || l_cnt_disposition || '>' || l_ii_quantity
5661                    );
5662                  END IF;
5663                ELSIF (l_cnt_disposition < l_ii_quantity) THEN
5664                  p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity:= l_ii_quantity - l_cnt_disposition;
5665                  p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_id:= -1; -- to disable disposition LOV in UI.
5666 
5667                  IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5668                    fnd_log.string
5669                    (
5670                      G_LEVEL_STATEMENT,
5671                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5672                      'Disp Qty < ii Qty. Adding row with DIFF QTY :' || l_cnt_disposition || '<' || l_ii_quantity
5673                    );
5674                  END IF;
5675                END IF;
5676 
5677                -- JKJAIN FP ER # 6436303 - start
5678                p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty:= l_disp_rec.Wo_Net_Total_Qty; --l_ii_quantity;
5679                -- JKJAIN FP ER # 6436303 - end
5680                p_x_ahl_prd_mtl_txn_tbl(l_index).Uom:=l_disp_rec.Uom;
5681                p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_DESC:=l_disp_rec.UNIT_OF_MEASURE;
5682                p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number:=l_disp_rec.Lot_Number;
5683                p_x_ahl_prd_mtl_txn_tbl(l_index).Revision:=l_disp_rec.ITEM_Revision;
5684                --p_x_ahl_prd_mtl_txn_tbl(l_index).Qa_Collection_Id:=l_disp_rec.COLLECTION_ID;
5685                p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name:=l_disp_rec.DEFAULT_PULL_SUPPLY_SUBINV;
5686                p_x_ahl_prd_mtl_txn_tbl(l_index).Item_Instance_Number:=l_disp_rec.instance_number;
5687                p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id:=l_disp_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
5688                p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments:=l_disp_rec.concatenated_segments;
5689                p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date   :=SYSDATE;
5690 
5691                -- pdoki added for bug 12564439; sorao for backporting project
5692                p_x_ahl_prd_mtl_txn_tbl(l_index).item_instance_id := l_disp_rec.instance_id;
5693                p_x_ahl_prd_mtl_txn_tbl(l_index).item_instance_number := l_instance_number;
5694 
5695                -- ER 5854712- servicable locator.
5696                IF (l_disp_rec.inv_locator_id IS NULL) THEN
5697                   p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
5698                ELSE
5699                   p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
5700                END IF;
5701 
5702                l_index:=l_index+1;
5703 
5704              END IF; -- (l_valid_flag)
5705            END IF; -- match item attib.
5706          END IF; -- track_flag
5707 
5708 /*
5709             l_valid_flag := TRUE;
5710             IF (Is_Item_Trackable(l_disp_rec.organization_id, l_disp_rec.INVENTORY_ITEM_ID)) THEN
5711                 -- validate instance location.
5712                 OPEN chk_inst_relationship_csr (l_disp_rec.INVENTORY_ITEM_ID,
5713                                                 l_disp_rec.wip_entity_id,
5714                                                 l_disp_rec.ITEM_Revision,
5715                                                 l_disp_rec.lot_number,
5716                                                 l_disp_rec.Serial_Number);
5717                 FETCH chk_inst_relationship_csr INTO l_ii_quantity, l_reln_exists;
5718                 IF (chk_inst_relationship_csr%NOTFOUND) THEN
5719                      l_valid_flag := FALSE;
5720                 ELSIF l_reln_exists = 'X' THEN
5721                      l_valid_flag := FALSE;
5722                 END IF;
5723                 CLOSE chk_inst_relationship_csr;
5724 
5725 --              JKJain, Bug 9268076
5726 --              Do not allow duplicate dispositions for instances of IB Trees
5727                 IF (l_disp_rec.path_position_id IS NULL) THEN
5728 
5729                    AHL_PRD_PARTS_CHANGE_PVT.Get_Unit_Config_Information(
5730                                    p_item_instance_id => NULL,
5731                    p_workorder_id     => l_disp_rec.workorder_id,
5732                    x_unit_config_id   => l_unit_config_id,
5733                    x_unit_config_name => l_unit_config_name,
5734                    x_return_status    => l_return_status);
5735 
5736                 IF (l_unit_config_name IS NULL ) THEN
5737                 --IB Tree
5738                 -- sracha: Added for bug# 6328554.
5739                 -- Check for duplicate dispositions for the same instance.
5740                 -- Occurs in case of multiple removals in IB tree case.
5741                 IF (l_valid_flag) AND (l_index > l_index_start) THEN
5742                   FOR i IN l_index_start..p_x_ahl_prd_mtl_txn_tbl.LAST LOOP
5743                     IF (l_disp_rec.INVENTORY_ITEM_ID = p_x_ahl_prd_mtl_txn_tbl(i).inventory_item_id) AND
5744                        (nvl(l_disp_rec.Serial_Number,'1') = nvl(p_x_ahl_prd_mtl_txn_tbl(i).Serial_Number,'1') AND
5745                         nvl(l_disp_rec.ITEM_Revision,'1') = nvl(p_x_ahl_prd_mtl_txn_tbl(i).Revision,'1') AND
5746                         nvl(l_disp_rec.lot_number,'1') = nvl(p_x_ahl_prd_mtl_txn_tbl(i).lot_number,'1')) THEN
5747                        l_valid_flag := FALSE;
5748                        EXIT;
5749                     END IF;
5750                   END LOOP;
5751                 END IF; -- (l_valid_flag) AND l_index > l_index_start
5752                END IF;--l_unit_config_name IS NULL
5753               END IF;--  path_position_id IS NULL
5754             END IF; -- Is_Item_Trackable
5755 */
5756             IF (l_valid_flag) THEN
5757                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5758                    fnd_log.string
5759                    (
5760                      G_LEVEL_STATEMENT,
5761                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5762                      'Adding row with disposition:InvId:WONAME:' || l_disp_rec.disposition_id || ':' || l_disp_rec.INVENTORY_ITEM_ID
5763                       || ':' || l_disp_rec.workorder_name
5764                    );
5765                END IF;
5766                p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id:=l_disp_rec.workorder_id;
5767                p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_name:=l_disp_rec.workorder_name;
5768                p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_status:=l_disp_rec.job_status_meaning;
5769                p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id:=l_disp_rec.Organization_Id;
5770                p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id:=l_disp_rec.Workorder_operation_Id;
5771                p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_disp_rec.ITEM_NUMBER;
5772                p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id:=l_disp_rec.INVENTORY_ITEM_ID;
5773                p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_disp_rec.ITEM_DESC;
5774                p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_name:=l_disp_rec.IMMEDIATE_TYPE;
5775                p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_id:=l_disp_rec.disposition_id;
5776                p_x_ahl_prd_mtl_txn_tbl(l_index).Item_Instance_Number:=l_disp_rec.instance_number;
5777                p_x_ahl_prd_mtl_txn_tbl(l_index).Condition:=l_disp_rec.CONDITION_ID;
5778                p_x_ahl_prd_mtl_txn_tbl(l_index).Condition_desc:=l_disp_rec.CONDITION_CODE;
5779                p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number:=l_disp_rec.Serial_Number;
5780                p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity:=l_disp_rec.quantity;
5781                p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity:=l_disp_rec.Net_quantity;
5782                -- JKJAIN FP ER # 6436303 - start
5783                p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty:=l_disp_rec.Wo_Net_Total_Qty;
5784                -- JKJAIN FP ER # 6436303 - end
5785                p_x_ahl_prd_mtl_txn_tbl(l_index).Uom:=l_disp_rec.Uom;
5786                p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_DESC:=l_disp_rec.UNIT_OF_MEASURE;
5787                p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number:=l_disp_rec.Lot_Number;
5788                p_x_ahl_prd_mtl_txn_tbl(l_index).Revision:=l_disp_rec.ITEM_Revision;
5789                p_x_ahl_prd_mtl_txn_tbl(l_index).Qa_Collection_Id:=l_disp_rec.COLLECTION_ID;
5790                p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name:=l_disp_rec.DEFAULT_PULL_SUPPLY_SUBINV;
5791                p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id:=l_disp_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
5792                p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments:=l_disp_rec.concatenated_segments;
5793                --p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date   :=l_disp_rec.SYSDATE;
5794                p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date   :=SYSDATE;
5795 
5796                -- pdoki added for bug 12564439;sorao for backporting project
5797                p_x_ahl_prd_mtl_txn_tbl(l_index).item_instance_id := l_disp_rec.instance_id;
5798                p_x_ahl_prd_mtl_txn_tbl(l_index).item_instance_number := l_instance_number;
5799 
5800                -- ER 5854712- servicable locator.
5801                IF (l_disp_rec.inv_locator_id IS NULL) THEN
5802                   p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
5803                ELSE
5804                   p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
5805                END IF;
5806 
5807                l_index:=l_index+1;
5808 
5809                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
5810                    fnd_log.string
5811                    (
5812                      G_LEVEL_STATEMENT,
5813                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5814                      'l_disp_rec.workorder_name: ' || l_disp_rec.workorder_name
5815                    );
5816                    fnd_log.string
5817                    (
5818                      G_LEVEL_STATEMENT,
5819                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5820                      'l_disp_rec.workorder_id: ' || l_disp_rec.workorder_id
5821                    );
5822                    fnd_log.string
5823                    (
5824                      G_LEVEL_STATEMENT,
5825                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5826                      'l_disp_rec.disposition_id: ' || l_disp_rec.disposition_id
5827                    );
5828                    fnd_log.string
5829                    (
5830                      G_LEVEL_STATEMENT,
5831                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5832                      'l_disp_rec.ITEM_NUMBER: ' || l_disp_rec.ITEM_NUMBER
5833                    );
5834                    fnd_log.string
5835                    (
5836                      G_LEVEL_STATEMENT,
5837                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5838                     'l_disp_rec.serial_number: ' || l_disp_rec.serial_number
5839                    );
5840                    fnd_log.string
5841                    (
5842                      G_LEVEL_STATEMENT,
5843                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5844                     'l_disp_rec.ISSUEQTY: ' || l_disp_rec.quantity
5845                    );
5846                    fnd_log.string
5847                    (
5848                      G_LEVEL_STATEMENT,
5849                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5850                      'Net Qty: ' || l_disp_rec.Net_Quantity
5851                    );
5852 
5853                    fnd_log.string
5854                    (
5855                      G_LEVEL_STATEMENT,
5856                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5857                     'l_disp_rec.Instance Id: ' || l_disp_rec.instance_id
5858                    );
5859                    fnd_log.string
5860                    (
5861                      G_LEVEL_STATEMENT,
5862                      'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
5863                      'l_disp_rec.Instance Number: ' || l_instance_number
5864                    );
5865 
5866                END IF; -- G_LEVEL_STATEMENT
5867 
5868             END IF;
5869 
5870     END LOOP;
5871     CLOSE l_mtl_txns_returns_cur;
5872 
5873     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
5874         fnd_log.string
5875         (
5876             G_LEVEL_PROCEDURE,
5877             'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn.end',
5878             'At the start of PLSQL procedure'
5879         );
5880     END IF;
5881 END  getDispositionReturn;
5882 
5883 -- modified for bug# 9268076 - this procedure only processes non-tracked items.
5884 -- All tracked items will be either processed in procedure getTrackedWOMtl or getdispositionreturns APIs
5885 PROCEDURE getMtlTxnsReturns(
5886             p_x_ahl_prd_mtl_txn_tbl  IN OUT  NOCOPY Ahl_Mtltxn_Tbl_Type,
5887             P_prd_Mtltxn_criteria_rec in Prd_Mtltxn_criteria_rec
5888             ) AS
5889 
5890 -- pdoki commented for Bug 9164678
5891 /*CURSOR getMtlTxnsReturnsCur
5892            (
5893              p_job_number   IN VARCHAR2,
5894              p_visit_number IN NUMBER,
5895              p_priority     IN NUMBER,
5896              p_dept_name    IN VARCHAR2,
5897              p_org_name     IN VARCHAR2,
5898              p_item         IN VARCHAR2,
5899              p_incident_number IN VARCHAR2
5900            ) IS
5901 
5902 /* Tamal [R12 APPSPERF fixes]
5903  * R12 Drop 4 - SQL ID: 14401324
5904  * Bug #4918991
5905  */
5906 /*SELECT DISTINCT
5907     W.WORKORDER_ID,
5908     T.ORGANIZATION_ID,
5909     T.INVENTORY_ITEM_ID,
5910     T.SERIAL_NUMBER,
5911     T.LOT_NUMBER,
5912     T.REVISION,
5913     T.INSTANCE_ID,   -- added to fix FP bug# 5172147.
5914     W.WIP_ENTITY_ID,  -- added to filter chk_inst_relationship_csr for wip_job_id.
5915     (select inv_locator_id from ahl_visits_b where visit_id = w.visit_id) inv_locator_id
5916 FROM
5917     AHL_WORKORDER_MTL_TXNS T,
5918     MTL_SYSTEM_ITEMS_KFV I,
5919     AHL_WORKORDERS W,
5920     AHL_VISITS_B V,
5921     AHL_VISIT_TASKS_B VT,
5922     CS_INCIDENTS_ALL_B C,
5923     WIP_DISCRETE_JOBS WDJ,
5924     INV_ORGANIZATION_NAME_V ORG,
5925     BOM_DEPARTMENTS B,
5926     AHL_WORKORDER_OPERATIONS O
5927 WHERE
5928     T.ORGANIZATION_ID = V.ORGANIZATION_ID
5929     AND T.WORKORDER_OPERATION_ID = O.WORKORDER_OPERATION_ID
5930     AND W.WORKORDER_ID = O.WORKORDER_ID
5931     AND T.TRANSACTION_TYPE_ID = 35
5932     AND T.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
5933     AND T.ORGANIZATION_ID = I.ORGANIZATION_ID
5934     AND W.VISIT_TASK_ID = VT.VISIT_TASK_ID
5935     AND VT.VISIT_ID = V.VISIT_ID
5936     AND V.SERVICE_REQUEST_ID = C.INCIDENT_ID(+)
5937     AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
5938     AND WDJ.OWNING_DEPARTMENT = B.DEPARTMENT_ID (+)
5939     AND V.ORGANIZATION_ID = ORG.ORGANIZATION_ID
5940     --AND W.STATUS_CODE NOT IN ('5','7','12')
5941     AND W.STATUS_CODE IN ('3', '4', '20')
5942     AND I.ENABLED_FLAG = 'Y'
5943     AND ((I.START_DATE_ACTIVE IS NULL) OR (I.START_DATE_ACTIVE <= SYSDATE))
5944     AND ((I.END_DATE_ACTIVE IS NULL) OR (I.END_DATE_ACTIVE >= SYSDATE))
5945     AND I.CONCATENATED_SEGMENTS LIKE NVL(p_item,I.CONCATENATED_SEGMENTS)
5946     AND UPPER(ORG.ORGANIZATION_NAME) LIKE UPPER(NVL(p_org_name,ORG.ORGANIZATION_NAME))
5947     AND UPPER(B.DESCRIPTION) LIKE UPPER(NVL(p_dept_name,B.DESCRIPTION))
5948     AND UPPER(NVL(C.INCIDENT_NUMBER,'X')) LIKE UPPER(NVL(p_incident_number,NVL(C.INCIDENT_NUMBER,'X')))
5949     AND NVL(WDJ.PRIORITY,0) = NVL(p_priority,NVL(WDJ.PRIORITY,0))
5950     AND V.VISIT_NUMBER = NVL(p_visit_number,V.VISIT_NUMBER)
5951     AND UPPER(W.WORKORDER_NAME) LIKE UPPER(NVL(p_job_number,W.WORKORDER_NAME)); */
5952 
5953    --Query to validate disp
5954 
5955    CURSOR CHECK_DISPITEM_CUR
5956          (
5957               c_wid in number,
5958               c_itemId NUMBER,
5959               --c_org_id IN NUMBER,
5960               c_sno in varchar2,
5961               c_rev in varchar2,
5962               c_lotNumber in varchar2
5963          ) IS
5964 /* Tamal [R12 APPSPERF fixes]
5965  * R12 Drop 4 - SQL ID: 14401875
5966  * Bug #4918991
5967  * BTW there is no code change here, the ahl_mtl_ret_dispositions_v view has been tuned for performance
5968  */
5969 SELECT 'T'
5970 FROM AHL_MTL_RET_DISPOSITIONS_V A
5971 WHERE
5972     WORKORDER_ID = c_wid AND
5973     INVENTORY_ITEM_ID = c_itemId AND
5974     --ORGANIZATION_ID = c_org_id AND
5975     NVL(SERIAL_NUMBER, 'X') = NVL(c_sno, NVL(SERIAL_NUMBER, 'X')) AND
5976     NVL(LOT_NUMBER, 'X') = NVL(c_lotNumber, NVL(LOT_NUMBER, 'X')) AND
5977     NVL(ITEM_REVISION, 'X') = NVL(c_rev, NVL(ITEM_REVISION, 'X')) AND
5978     WORKORDER_OPERATION_ID IS NOT NULL;
5979 
5980 
5981    CURSOR mtlOpRtns
5982          (
5983                c_wid in number,
5984                --c_wopId  IN NUMBER,
5985                c_itemId NUMBER,
5986                c_org_id IN NUMBER,
5987                c_sno in varchar2,
5988                c_rev in varchar2,
5989                c_lotNumber in varchar2
5990           ) IS
5991 /* Tamal [R12 APPSPERF fixes]
5992  * R12 Drop 4 - SQL ID: 14401907
5993  * Bug #4918991
5994  */
5995 SELECT DISTINCT
5996     WO.WORKORDER_ID,
5997     WO.WORKORDER_NAME JOB_NUMBER ,
5998     VST.ORGANIZATION_ID,
5999     TXNS.WORKORDER_OPERATION_ID,
6000     WO_OP.OPERATION_SEQUENCE_NUM,
6001     MTL.CONCATENATED_SEGMENTS,
6002     TXNS.INVENTORY_ITEM_ID,
6003     MTL.DESCRIPTION,
6004     TXNS.SERIAL_NUMBER ,
6005     AHL_PRD_MTLTXN_PVT.GET_ISSUED_QTY(TXNS.ORGANIZATION_ID, TXNS.INVENTORY_ITEM_ID,TXNS.WORKORDER_OPERATION_ID) ISSUEQTY,
6006 -- JKJAIN FP ER # 6436303 - start
6007         AHL_PP_MATERIALS_PVT.GET_NET_QTY(TXNS.ORGANIZATION_ID, TXNS.INVENTORY_ITEM_ID,TXNS.WORKORDER_OPERATION_ID) Net_Total_Qty,
6008 -- JKJAIN FP ER # 6436303 - end
6009     TXNS.UOM,
6010     UOM.UNIT_OF_MEASURE,
6011     TXNS.RECEPIENT_ID,
6012     PER.FULL_NAME,
6013     WO_STS.MEANING JOB_STATUS_MEANING,
6014     TXNS.LOT_NUMBER,
6015     TXNS.REVISION,
6016     WP.DEFAULT_PULL_SUPPLY_SUBINV,
6017     WP.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
6018     --MTL_LOC.CONCATENATED_SEGMENTS LOCATOR
6019     --Fix for bug number 5903275
6020     inv_project.GET_LOCSEGS(WP.DEFAULT_PULL_SUPPLY_LOCATOR_ID, WP.organization_id) || fnd_flex_ext.get_delimiter('INV', 'MTLL',  101)
6021                     || INV_ProjectLocator_PUB.get_project_number(MTL_LOC.segment19) || fnd_flex_ext.get_delimiter('INV', 'MTLL',  101)
6022             || INV_ProjectLocator_PUB.get_task_number(MTL_LOC.segment20) LOCATOR,
6023     --SYSDATE
6024     (select inv_locator_id from ahl_visits_b where visit_id = vst.visit_id) inv_locator_id,
6025     (Select csi.instance_number from csi_item_instances csi where csi.instance_id = TXNS.INSTANCE_ID) instance_number
6026 FROM
6027     AHL_WORKORDER_MTL_TXNS TXNS,
6028     AHL_WORKORDERS WO,
6029     (SELECT LOOKUP_CODE, MEANING FROM FND_LOOKUP_VALUES WHERE LOOKUP_TYPE = 'AHL_JOB_STATUS' AND LANGUAGE= USERENV('LANG')) WO_STS,
6030     AHL_VISIT_TASKS_B VST_TASK,
6031     AHL_VISITS_B VST,
6032     AHL_WORKORDER_OPERATIONS WO_OP,
6033     MTL_SYSTEM_ITEMS_KFV MTL,
6034     MTL_UNITS_OF_MEASURE_VL UOM,
6035     -- modified to retrieve segment19 and 20 from base table to fix bug# 6611033.
6036     --MTL_ITEM_LOCATIONS_KFV MTL_LOC,
6037     MTL_ITEM_LOCATIONS MTL_LOC,
6038     WIP_PARAMETERS WP,
6039     PER_ALL_PEOPLE_F PER
6040 WHERE
6041     TXNS.TRANSACTION_TYPE_ID = 35 AND
6042     TXNS.INVENTORY_ITEM_ID = MTL.INVENTORY_ITEM_ID AND
6043     TXNS.ORGANIZATION_ID = MTL.ORGANIZATION_ID AND
6044     TXNS.WORKORDER_OPERATION_ID = WO_OP.WORKORDER_OPERATION_ID AND
6045     WO_OP.WORKORDER_ID = WO.WORKORDER_ID AND
6046     TXNS.ORGANIZATION_ID = VST.ORGANIZATION_ID AND
6047     TXNS.UOM = UOM.UOM_CODE AND
6048     --MTL_LOC setup is optional(bug# 6761128).
6049     --MTL_LOC.ORGANIZATION_ID = VST.ORGANIZATION_ID AND
6050     VST.ORGANIZATION_ID = WP.ORGANIZATION_ID AND
6051     WO.STATUS_CODE = WO_STS.LOOKUP_CODE AND
6052     WO.VISIT_TASK_ID = VST_TASK.VISIT_TASK_ID AND
6053     VST.VISIT_ID = VST_TASK.VISIT_ID AND
6054     WO.MASTER_WORKORDER_FLAG = 'N' AND
6055     --WO.STATUS_CODE NOT IN ('17', '22') AND
6056     WO.STATUS_CODE IN ('3', '4', '20') AND
6057     WP.ORGANIZATION_ID = MTL_LOC.ORGANIZATION_ID (+) AND
6058     WP.DEFAULT_PULL_SUPPLY_LOCATOR_ID = MTL_LOC.INVENTORY_LOCATION_ID (+) AND
6059     TXNS.RECEPIENT_ID = PER.PERSON_ID (+) AND
6060 
6061     WO.WORKORDER_ID = c_wid AND
6062     MTL.INVENTORY_ITEM_ID =c_itemid AND
6063     NVL(TXNS.SERIAL_NUMBER,'X') = NVL(c_SNO, NVL(TXNS.SERIAL_NUMBER,'X')) AND
6064     NVL(TXNS.LOT_NUMBER,'X') = NVL(c_lotNumber, NVL(TXNS.LOT_NUMBER,'X')) AND
6065     NVL(TXNS.REVISION,'X') = NVL(c_rev, NVL(TXNS.REVISION,'X')) AND
6066     TXNS.ORGANIZATION_ID = c_ORG_ID;
6067 
6068      CURSOR mtlWoRtns
6069             (
6070                 c_wid in number,
6071                 c_itemId NUMBER,
6072                 c_org_id IN NUMBER,
6073                 c_sno in varchar2,
6074                 c_rev in varchar2,
6075                 c_lotNumber in varchar2
6076             ) IS
6077 /* Tamal [R12 APPSPERF fixes]
6078  * R12 Drop 4 - SQL ID: 14402096
6079  * Bug #4918991
6080  */
6081 SELECT DISTINCT
6082     E.WORKORDER_ID,
6083     E.WORKORDER_NAME JOB_NUMBER,
6084     V.ORGANIZATION_ID,
6085     B.CONCATENATED_SEGMENTS ,
6086     A.INVENTORY_ITEM_ID,
6087     B.DESCRIPTION,
6088     A.SERIAL_NUMBER ,
6089     AHL_PRD_MTLTXN_PVT.GET_WORKORD_LEVEL_QTY(c_wid, c_itemid, c_ORG_ID, c_lotNumber, c_rev, c_SNO) issWoQty,
6090  -- JKJAIN FP ER # 6436303 - start
6091     AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY(c_wid,c_itemid,c_ORG_ID) Wo_Net_Total_Qty,
6092 -- JKJAIN FP ER # 6436303 - end
6093     A.UOM ,
6094     UOM.unit_of_measure,
6095     WO_STS.MEANING JOB_STATUS_MEANING,
6096     A.LOT_NUMBER,
6097     A.REVISION,
6098     W.DEFAULT_PULL_SUPPLY_SUBINV,
6099     W.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
6100     --D.CONCATENATED_SEGMENTS Locator
6101     -- Fix for bug number 5903275
6102     inv_project.GET_LOCSEGS(W.DEFAULT_PULL_SUPPLY_LOCATOR_ID, W.organization_id) || fnd_flex_ext.get_delimiter('INV', 'MTLL',  101)
6103                         || INV_ProjectLocator_PUB.get_project_number(D.segment19) || fnd_flex_ext.get_delimiter('INV', 'MTLL',  101)
6104             || INV_ProjectLocator_PUB.get_task_number(D.segment20) LOCATOR,
6105     --SYSDATE
6106     (select inv_locator_id from ahl_visits_b where visit_id = E.visit_id) inv_locator_id,
6107     (Select csi.instance_number from csi_item_instances csi where csi.instance_id = A.INSTANCE_ID) instance_number
6108 
6109 
6110 FROM
6111     AHL_WORKORDER_MTL_TXNS A,
6112     MTL_SYSTEM_ITEMS_KFV B,
6113     MTL_UNITS_OF_MEASURE_VL UOM,
6114     -- modified to retrieve segment19 and 20 from base table to fix bug# 6611033.
6115     --MTL_ITEM_LOCATIONS_KFV D,
6116     MTL_ITEM_LOCATIONS D,
6117     AHL_WORKORDERS E,
6118     (SELECT LOOKUP_CODE, MEANING FROM FND_LOOKUP_VALUES WHERE LOOKUP_TYPE = 'AHL_JOB_STATUS' AND LANGUAGE= USERENV('LANG')) WO_STS,
6119     AHL_VISITS_B V,
6120     AHL_VISIT_TASKS_B VT,
6121     AHL_WORKORDER_OPERATIONS F,
6122     WIP_PARAMETERS W
6123 WHERE
6124     A.INVENTORY_ITEM_ID=B.INVENTORY_ITEM_ID
6125     AND A.WORKORDER_OPERATION_ID=F.WORKORDER_OPERATION_ID
6126     AND A.ORGANIZATION_ID=B.ORGANIZATION_ID
6127     AND A.ORGANIZATION_ID=V.ORGANIZATION_ID
6128     AND A.TRANSACTION_TYPE_ID=35
6129     AND A.uom=UOM.uom_code
6130     --MTL_LOC setup is optional(bug# 6761128).
6131     --AND D.organization_id=V.organization_id
6132     AND F.WORKORDER_ID=E.WORKORDER_ID
6133     AND E.VISIT_TASK_ID = VT.VISIT_TASK_ID
6134     AND E.MASTER_WORKORDER_FLAG = 'N'
6135     --AND E.STATUS_CODE NOT IN ('17', '22')
6136     AND E.STATUS_CODE IN ('3', '4', '20')
6137     AND E.STATUS_CODE = WO_STS.LOOKUP_CODE
6138     AND VT.VISIT_ID = V.VISIT_ID
6139     AND V.ORGANIZATION_ID=W.ORGANIZATION_ID
6140     AND W.organization_id = D.organization_id(+)
6141     AND W.default_pull_supply_locator_id =D.inventory_location_id(+)
6142 
6143     AND E.workorder_id = c_wid
6144     AND B.INVENTORY_ITEM_ID = c_itemid
6145     AND NVL(A.SERIAL_NUMBER, 'X') = NVL(c_SNO ,NVL(A.SERIAL_NUMBER, 'X'))
6146     AND NVL(A.lot_number, 'X') = NVL(c_lotNumber ,NVL(A.LOT_NUMBER, 'X'))
6147     AND NVL(A.revision, 'X') = NVL(c_rev ,NVL(A.REVISION, 'X'))
6148     AND A.organization_id = c_ORG_ID;
6149 
6150     /* Not Required -- modified as part of fix for bug# 9268076
6151     -- check if issued instance has been installed / validate instance.
6152     -- and is located in the wip job.
6153     CURSOR chk_inst_relationship_csr (p_instance_id IN NUMBER,
6154                                       p_wip_entity_id IN NUMBER) IS
6155        SELECT 'x'
6156        FROM  CSI_ITEM_INSTANCES CII
6157        WHERE CII.INSTANCE_ID = p_instance_id
6158          AND CII.ACTIVE_START_DATE <= SYSDATE
6159          AND ((CII.ACTIVE_END_DATE IS NULL) OR (CII.ACTIVE_END_DATE > SYSDATE))
6160          AND CII.QUANTITY > 0
6161          AND CII.LOCATION_TYPE_CODE = 'WIP'
6162          AND CII.WIP_JOB_ID = p_wip_entity_id
6163          AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
6164                          WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
6165                            AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
6166                            AND SYSDATE BETWEEN NVL(CIR.ACTIVE_START_DATE,SYSDATE) AND NVL(CIR.ACTIVE_END_DATE,SYSDATE));
6167     */
6168 
6169       l_index      NUMBER := p_x_ahl_prd_mtl_txn_tbl.count;
6170       l_qty       NUMBER  := 0;
6171       l_opseq_flag varchar2(1);
6172       l_junk       varchar2(1);
6173       l_valid_flag BOOLEAN;
6174 
6175       -- pdoki added for Bug 9164678
6176       l_bind_value_tbl AHL_OSP_UTIL_PKG.ahl_conditions_tbl;
6177       l_mtl_txns_returns_cur AHL_OSP_UTIL_PKG.ahl_search_csr;
6178       l_bind_index NUMBER;
6179       l_mtl_txn_dtls VARCHAR2(10000);
6180       l_mtl_txn_dtls_where VARCHAR2(10000);
6181 
6182       TYPE l_mtlTxn_rec_type IS RECORD (
6183               workorder_id      AHL_WORKORDERS.WORKORDER_ID%TYPE,
6184               organization_id   AHL_WORKORDER_MTL_TXNS.ORGANIZATION_ID%TYPE,
6185               inventory_item_id AHL_WORKORDER_MTL_TXNS.INVENTORY_ITEM_ID%TYPE,
6186               serial_number     AHL_WORKORDER_MTL_TXNS.SERIAL_NUMBER%TYPE,
6187               lot_number        AHL_WORKORDER_MTL_TXNS.LOT_NUMBER%TYPE,
6188               revision          AHL_WORKORDER_MTL_TXNS.REVISION%TYPE,
6189               instance_id       AHL_WORKORDER_MTL_TXNS.INSTANCE_ID%TYPE,
6190               wip_entity_id     AHL_WORKORDERS.WIP_ENTITY_ID%TYPE,
6191               inv_locator_id    AHL_VISITS_B.INV_LOCATOR_ID%TYPE
6192               );
6193      l_mtlTxn_rec  l_mtlTxn_rec_type;
6194 
6195 BEGIN
6196    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
6197         fnd_log.string
6198         (
6199             G_LEVEL_PROCEDURE,
6200             'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns.begin',
6201             'At the start of PLSQL procedure'
6202         );
6203     END IF;
6204 
6205     -- pdoki added for Bug 9164678 start.
6206     l_mtl_txn_dtls := '
6207         SELECT DISTINCT
6208             W.WORKORDER_ID,
6209             T.ORGANIZATION_ID,
6210             T.INVENTORY_ITEM_ID,
6211             T.SERIAL_NUMBER,
6212             T.LOT_NUMBER,
6213             T.REVISION,
6214             T.INSTANCE_ID,
6215             W.WIP_ENTITY_ID,
6216             V.INV_LOCATOR_ID
6217         FROM
6218             AHL_WORKORDER_MTL_TXNS T,
6219             AHL_WORKORDERS W,
6220             AHL_WORKORDER_OPERATIONS O,
6221             AHL_VISITS_B V ' ;
6222 
6223     l_mtl_txn_dtls_where := '
6224            WHERE T.TRANSACTION_TYPE_ID = 35
6225            AND   W.STATUS_CODE IN (''3'', ''4'', ''20'')
6226            AND   W.VISIT_ID = V.VISIT_ID
6227            AND W.WORKORDER_ID = O.WORKORDER_ID
6228            AND T.WORKORDER_OPERATION_ID = O.WORKORDER_OPERATION_ID ' ;
6229 
6230    l_bind_index := 1;
6231 
6232 IF (P_prd_Mtltxn_criteria_rec.JOB_NUMBER IS NOT NULL) THEN
6233    l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND W.WORKORDER_NAME LIKE :'||l_bind_index;
6234    l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.JOB_NUMBER;
6235    l_bind_index := l_bind_index + 1;
6236 END IF;
6237 
6238 IF (P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME IS NOT NULL) THEN
6239   l_mtl_txn_dtls := l_mtl_txn_dtls || ', HR_ORGANIZATION_UNITS ORG';
6240   l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND T.ORGANIZATION_ID = ORG.ORGANIZATION_ID
6241   AND ORG.NAME LIKE :'||l_bind_index;
6242   l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME;
6243   l_bind_index := l_bind_index + 1;
6244 END IF;
6245 
6246 IF (P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS IS NOT NULL) THEN
6247   l_mtl_txn_dtls := l_mtl_txn_dtls || ', MTL_SYSTEM_ITEMS_KFV I';
6248   l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND T.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
6249   AND T.ORGANIZATION_ID = I.ORGANIZATION_ID AND I.ENABLED_FLAG = ''Y''
6250   AND ((I.START_DATE_ACTIVE IS NULL) OR (I.START_DATE_ACTIVE <= SYSDATE))
6251   AND ((I.END_DATE_ACTIVE IS NULL) OR (I.END_DATE_ACTIVE >= SYSDATE))
6252   AND I.CONCATENATED_SEGMENTS LIKE :'||l_bind_index;
6253   l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS;
6254   l_bind_index := l_bind_index + 1;
6255 
6256 END IF;
6257 
6258 IF (P_prd_Mtltxn_criteria_rec.PRIORITY IS NOT NULL) THEN
6259   l_mtl_txn_dtls := l_mtl_txn_dtls || ', WIP_DISCRETE_JOBS WDJ';
6260   l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
6261   AND WDJ.PRIORITY = :'||l_bind_index;
6262   l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.PRIORITY;
6263   l_bind_index := l_bind_index + 1;
6264 END IF;
6265 
6266 IF (P_prd_Mtltxn_criteria_rec.VISIT_NUMBER IS NOT NULL) THEN
6267   IF (instr(P_prd_Mtltxn_criteria_rec.VISIT_NUMBER,'%') > 0)  THEN
6268     l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND V.VISIT_NUMBER LIKE :'||l_bind_index;
6269   ELSE
6270    l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND V.VISIT_NUMBER = :'||l_bind_index;
6271   END IF;
6272 
6273   l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.VISIT_NUMBER;
6274   l_bind_index := l_bind_index + 1;
6275 END IF;
6276 
6277 IF (P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME IS NOT NULL) THEN
6278   l_mtl_txn_dtls := l_mtl_txn_dtls || ', WIP_DISCRETE_JOBS WDJ,BOM_DEPARTMENTS B';
6279   l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
6280   AND WDJ.OWNING_DEPARTMENT = B.DEPARTMENT_ID (+)
6281   AND B.DESCRIPTION LIKE :'||l_bind_index;
6282   l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME;
6283   l_bind_index := l_bind_index + 1;
6284 END IF;
6285 
6286 IF (P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER IS NOT NULL) THEN
6287   IF (P_prd_Mtltxn_criteria_rec.VISIT_NUMBER IS NOT NULL) THEN
6288     l_mtl_txn_dtls := l_mtl_txn_dtls || ',AHL_VISIT_TASKS_B VT,CS_INCIDENTS_ALL_B C';
6289     l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND W.VISIT_TASK_ID = VT.VISIT_TASK_ID AND VT.SERVICE_REQUEST_ID = C.INCIDENT_ID(+)
6290                             AND C.INCIDENT_NUMBER LIKE :'||l_bind_index;
6291     l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER;
6292     l_bind_index := l_bind_index + 1;
6293   ELSE
6294     l_mtl_txn_dtls := l_mtl_txn_dtls || ', AHL_VISITS_B V,AHL_VISIT_TASKS_B VT,CS_INCIDENTS_ALL_B C';
6295     l_mtl_txn_dtls_where := l_mtl_txn_dtls_where || ' AND W.VISIT_TASK_ID = VT.VISIT_TASK_ID
6296                             AND VT.VISIT_ID = V.VISIT_ID
6297                             AND VT.SERVICE_REQUEST_ID = C.INCIDENT_ID(+)
6298                             AND C.INCIDENT_NUMBER LIKE :'||l_bind_index;
6299     l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER;
6300     l_bind_index := l_bind_index + 1;
6301   END IF;
6302 
6303 END IF;
6304 
6305 l_mtl_txn_dtls := l_mtl_txn_dtls || l_mtl_txn_dtls_where ;
6306 
6307 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
6308       fnd_log.string
6309       (
6310              G_LEVEL_STATEMENT,
6311              'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6312              'SQL Query String: ' || l_mtl_txn_dtls
6313       );
6314 END IF;
6315 
6316 AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR(l_mtl_txns_returns_cur, l_bind_value_tbl, l_mtl_txn_dtls);
6317 
6318 
6319     LOOP
6320       FETCH l_mtl_txns_returns_cur INTO l_mtlTxn_rec;
6321       EXIT WHEN l_mtl_txns_returns_cur%NOTFOUND;
6322     --pdoki added for Bug 9164678 end.
6323 
6324       l_valid_flag := TRUE;
6325       IF (Is_Item_Trackable(l_mtlTxn_rec.organization_id, l_mtlTxn_rec.INVENTORY_ITEM_ID)) THEN
6326          l_valid_flag := FALSE;
6327       END IF;
6328 
6329       IF (l_valid_flag) THEN
6330           OPEN CHECK_DISPITEM_CUR(
6331             c_wid           => l_mtlTxn_rec.Workorder_Id,
6332             c_itemId        => l_mtlTxn_rec.Inventory_Item_Id,
6333             --c_org_id        => l_mtlTxn_rec.Organization_Id,
6334             c_sno           => l_mtlTxn_rec.Serial_Number,
6335             c_rev           => l_mtlTxn_rec.Revision,
6336             c_lotNumber     => l_mtlTxn_rec.Lot_Number
6337           );
6338           FETCH CHECK_DISPITEM_CUR into l_opseq_flag;
6339           IF CHECK_DISPITEM_CUR%FOUND THEN
6340               l_opseq_flag :='T';
6341 
6342               IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
6343                 fnd_log.string
6344                 (
6345                        G_LEVEL_STATEMENT,
6346                        'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6347                        'l_opseq_flag: ' || l_opseq_flag
6348                 );
6349               END IF;
6350           ELSE
6351             l_opseq_flag :='F';
6352             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
6353                   fnd_log.string
6354                   (
6355                          G_LEVEL_STATEMENT,
6356                          'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6357                          'l_opseq_flag: ' || l_opseq_flag
6358                   );
6359             END IF;
6360           END IF;
6361           CLOSE CHECK_DISPITEM_CUR;
6362 
6363           IF (l_opseq_flag = 'T') THEN -- Fetch material operations returs
6364             FOR l_mtloprtns_rec IN   mtlOpRtns (
6365                c_wid           => l_mtlTxn_rec.Workorder_Id,
6366 --             c_wopId         => l_mtlTxn_rec.Workorder_operation_id,
6367                c_itemId        => l_mtlTxn_rec.Inventory_Item_Id,
6368                c_org_id        => l_mtlTxn_rec.Organization_Id,
6369                c_sno           => l_mtlTxn_rec.Serial_Number,
6370                c_rev           => l_mtlTxn_rec.Revision,
6371                c_lotNumber     => l_mtlTxn_rec.Lot_Number)
6372             LOOP
6373               CALCULATE_QTY(
6374                   p_wo_id   => l_mtloprtns_rec.Workorder_Id,
6375                   p_item_id => l_mtloprtns_rec.Inventory_Item_Id,
6376                   p_org_id  => l_mtloprtns_rec.Organization_Id,
6377                   p_lot_num => l_mtloprtns_rec.Lot_Number,
6378                   p_rev_num => l_mtloprtns_rec.Revision,
6379                   p_serial_num => l_mtloprtns_rec.Serial_Number,
6380                   x_qty => l_qty,
6381                   p_wo_op_id    => l_mtloprtns_rec.Workorder_operation_Id
6382                   );
6383 
6384               IF (l_qty >0) THEN
6385                 p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id       :=l_mtloprtns_rec.workorder_id;
6386                 p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id    :=l_mtloprtns_rec.Organization_Id;
6387                 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Name     :=l_mtloprtns_rec.JOB_NUMBER;
6388                 p_x_ahl_prd_mtl_txn_tbl(l_index).Operation_Seq_Num  :=l_mtloprtns_rec.OPERATION_SEQUENCE_NUM;
6389                 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id:=l_mtloprtns_rec.Workorder_operation_Id;
6390                 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_mtloprtns_rec.CONCATENATED_SEGMENTS;
6391                 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id  :=l_mtloprtns_rec.INVENTORY_ITEM_ID;
6392                 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_mtloprtns_rec.DESCRIPTION;
6393                 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status   :=l_mtloprtns_rec.JOB_STATUS_MEANING;
6394                 p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number      :=l_mtloprtns_rec.Serial_Number;
6395                 p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity           :=l_mtloprtns_rec.ISSUEQTY;
6396                 -- JKJAIN FP ER # 6436303- start
6397                 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty      :=l_mtloprtns_rec.Net_Total_Qty;
6398                 -- JKJain, Return Qty issue fixed with bug 9268076.
6399                 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity       :=l_qty;
6400                 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom                :=l_mtloprtns_rec.Uom;
6401                 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_Desc           :=l_mtloprtns_rec.UNIT_OF_MEASURE;
6402                 p_x_ahl_prd_mtl_txn_tbl(l_index).recepient_name     :=l_mtloprtns_rec.FULL_NAME;
6403                 --p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status   :=l_mtloprtns_rec.JOB_STATUS_MEANING;
6404                 p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number         :=l_mtloprtns_rec.Lot_Number;
6405                 p_x_ahl_prd_mtl_txn_tbl(l_index).Revision           :=l_mtloprtns_rec.Revision;
6406                 p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name  :=l_mtloprtns_rec.DEFAULT_PULL_SUPPLY_SUBINV;
6407                 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id         :=l_mtloprtns_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
6408                 p_x_ahl_prd_mtl_txn_tbl(l_index).item_instance_number         :=l_mtloprtns_rec.instance_number;
6409                 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments   :=l_mtloprtns_rec.Locator;
6410                 --p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date   :=l_mtloprtns_rec.SYSDATE;
6411                 p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date   :=SYSDATE;
6412 
6413                 --ER 5854712. retrieve visit locator.
6414                 IF (l_mtloprtns_rec.inv_locator_id IS NULL) THEN
6415                    p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
6416                 ELSE
6417                    p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
6418                 END IF;
6419 
6420 
6421                 --added to fix bug# 9268076 - disable disposition LOV on UI.
6422                 p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_id   := -1;
6423 
6424                 l_index:=l_index+1;
6425               END IF;
6426             END LOOP;
6427         ELSE -- Fetch material workorder returns
6428             FOR l_mtlWoRtns_rec IN mtlWoRtns(
6429                 c_wid           => l_mtlTxn_rec.Workorder_Id,
6430                 c_itemId        => l_mtlTxn_rec.Inventory_Item_Id,
6431                 c_org_id        => l_mtlTxn_rec.Organization_Id,
6432                 c_sno           => l_mtlTxn_rec.Serial_Number,
6433                 c_rev           => l_mtlTxn_rec.Revision,
6434                 c_lotNumber     => l_mtlTxn_rec.Lot_Number)
6435             LOOP
6436                 CALCULATE_QTY(
6437                      p_wo_id   => l_mtlWoRtns_rec.Workorder_Id,
6438                      p_item_id => l_mtlWoRtns_rec.Inventory_Item_Id,
6439                         p_org_id  => l_mtlWoRtns_rec.Organization_Id,
6440                      p_lot_num => l_mtlWoRtns_rec.Lot_Number,
6441                      p_rev_num => l_mtlWoRtns_rec.Revision,
6442                      p_serial_num => l_mtlWoRtns_rec.Serial_Number,
6443                      x_qty => l_qty,
6444                      p_wo_op_id    => null
6445                    );
6446 
6447                 IF (l_qty > 0) THEN
6448                    p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id           :=l_mtlWoRtns_rec.workorder_id;
6449                    p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id        :=l_mtlWoRtns_rec.Organization_Id;
6450                    p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Name         :=l_mtlWoRtns_rec.JOB_NUMBER;
6451                    --p_x_ahl_prd_mtl_txn_tbl(l_index).Operation_Seq_Num      :=l_mtlWoRtns_rec.OPERATION_SEQUENCE_NUM;
6452                    --p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id :=l_mtlWoRtns_rec.Workorder_operation_Id;
6453                    p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_mtlWoRtns_rec.CONCATENATED_SEGMENTS;
6454                    p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id      :=l_mtlWoRtns_rec.INVENTORY_ITEM_ID;
6455                    p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_mtlWoRtns_rec.DESCRIPTION;
6456                    p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status       :=l_mtlWoRtns_rec.JOB_STATUS_MEANING;
6457                    p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number          :=l_mtlWoRtns_rec.Serial_Number;
6458                    p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity               :=l_mtlWoRtns_rec.issWoQty;
6459                    -- JKJAIN FP ER # 6436303- start
6460                    p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty          :=l_mtlWoRtns_rec.Wo_Net_Total_Qty;
6461                    -- JKJAIN FP ER # 6436303- end
6462                    p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity           :=l_qty;
6463                    p_x_ahl_prd_mtl_txn_tbl(l_index).Uom                    :=l_mtlWoRtns_rec.Uom;
6464                    p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_Desc               :=l_mtlWoRtns_rec.UNIT_OF_MEASURE;
6465                    --p_x_ahl_prd_mtl_txn_tbl(l_index).recepient_name       :=l_mtlWoRtns_rec.FULL_NAME;
6466                    --p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status       :=l_mtlWoRtns_rec.JOB_STATUS_MEANING;
6467                    p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number             :=l_mtlWoRtns_rec.Lot_Number;
6468                    p_x_ahl_prd_mtl_txn_tbl(l_index).Revision               :=l_mtlWoRtns_rec.Revision;
6469                    p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name      :=l_mtlWoRtns_rec.DEFAULT_PULL_SUPPLY_SUBINV;
6470                    p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id             :=l_mtlWoRtns_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
6471                    p_x_ahl_prd_mtl_txn_tbl(l_index).item_instance_number         :=l_mtlWoRtns_rec.instance_number;
6472                    p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments       :=l_mtlWoRtns_rec.Locator;
6473                    --p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date       :=l_mtlWoRtns_rec.SYSDATE;
6474                    p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date       :=SYSDATE;
6475 
6476                    -- ER 5854712.
6477                    IF (l_mtlWoRtns_rec.inv_locator_id IS NULL) THEN
6478                       p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
6479                    ELSE
6480                       p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
6481                    END IF;
6482 
6483                    --added to fix bug# 9268076 - disable disposition LOV on UI.
6484                    p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_id   := -1;
6485 
6486                    l_index:=l_index+1;
6487 
6488                 END IF; -- l_qty > 0
6489 
6490                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
6491                       fnd_log.string
6492                       (
6493                         G_LEVEL_STATEMENT,
6494                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6495                         'l_mtlWoRtns_rec.workorder_id: ' || l_mtlWoRtns_rec.workorder_id
6496                       );
6497                       fnd_log.string
6498                       (
6499                         G_LEVEL_STATEMENT,
6500                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6501                         'l_mtlWoRtns_rec.job_number: ' || l_mtlWoRtns_rec.job_number
6502                       );
6503                       fnd_log.string
6504                       (
6505                         G_LEVEL_STATEMENT,
6506                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6507                         'l_mtlWoRtns_rec.CONCATENATED_SEGMENTS: ' || l_mtlWoRtns_rec.CONCATENATED_SEGMENTS
6508                       );
6509                       fnd_log.string
6510                       (
6511                         G_LEVEL_STATEMENT,
6512                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6513                         'l_mtlWoRtns_rec.serial_number: ' || l_mtlWoRtns_rec.serial_number
6514                       );
6515                       fnd_log.string
6516                       (
6517                         G_LEVEL_STATEMENT,
6518                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
6519                         'l_mtlWoRtns_rec.issWoQty: ' || l_mtlWoRtns_rec.issWoQty
6520                       );
6521                       fnd_log.string
6522                       (
6523                         G_LEVEL_STATEMENT,
6524                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.l_mtlWoRtns_rec',
6525                         'l_mtlWoRtns_rec.Net_Quantity: ' || l_qty
6526                       );
6527 
6528                 END IF; -- debug messages.
6529 
6530            END LOOP;
6531          END IF; -- l_opseq_flag = 'T'
6532        END IF; -- l_valid_flag
6533     END LOOP;
6534     CLOSE l_mtl_txns_returns_cur;
6535 
6536 
6537     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
6538         fnd_log.string
6539         (
6540             G_LEVEL_PROCEDURE,
6541             'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns.end',
6542             'At the end of PLSQL procedure'
6543         );
6544     END IF;
6545 
6546 END getMtlTxnsReturns;
6547 
6548 -- Added for FP bug# 5903256.
6549 -- This procedure will retrieve all trackable parts in the job
6550 -- Fix for bug# 7579641 -- renamed api name to getTrackedWOMtl
6551 -- this API bypasses issued and tracked non-serialized items
6552 PROCEDURE getTrackedWOMtl ( p_x_ahl_prd_mtl_txn_tbl   IN OUT  NOCOPY Ahl_Mtltxn_Tbl_Type,
6553                             p_prd_Mtltxn_criteria_rec IN Prd_Mtltxn_criteria_rec) IS
6554 
6555    --pdoki commented for Bug 9164678
6556 
6557     -- Added for bug fix 6594140.
6558     -- get tracked items in a workorder.
6559   /*  CURSOR get_tracked_inst_csr(
6560                                 p_job_number   IN VARCHAR2,
6561                                 p_visit_number IN NUMBER,
6562                                 p_priority     IN NUMBER,
6563                                 p_dept_name    IN VARCHAR2,
6564                                 p_org_name     IN VARCHAR2,
6565                                 p_item         IN VARCHAR2,
6566                                 p_incident_number IN VARCHAR2) IS
6567 
6568         SELECT  W.WORKORDER_ID,
6569                W.job_number,
6570                W.job_status_meaning,
6571                I.Description,
6572                W.ORGANIZATION_ID,
6573                csi.INVENTORY_ITEM_ID,
6574                I.concatenated_segments,
6575                csi.SERIAL_NUMBER ,
6576                csi.LOT_NUMBER,
6577                csi.INVENTORY_REVISION REVISION,
6578                csi.INSTANCE_ID,
6579                W.WIP_ENTITY_ID,
6580                csi.quantity,
6581                csi.Unit_Of_measure UOM,
6582                UOM.unit_of_measure,
6583                P.DEFAULT_PULL_SUPPLY_SUBINV,
6584                P.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
6585                inv_project.GET_LOCSEGS(P.DEFAULT_PULL_SUPPLY_LOCATOR_ID, W.organization_id)|| '.'
6586                ||
6587                DECODE(D.segment19,NULL,NULL,inv_project.GET_PROJECT_NUMBER(D.segment19)) || '.'
6588                ||
6589                DECODE(D.segment20,NULL,NULL,inv_project.GET_TASK_NUMBER(D.segment20)) Locator,
6590                (select inv_locator_id from ahl_visits_b where visit_id = w.visit_id) inv_locator_id
6591        FROM
6592                CSI_ITEM_INSTANCES CSI,
6593                MTL_SYSTEM_ITEMS_KFV I,
6594                AHL_SEARCH_WORKORDERS_v W,
6595                WIP_PARAMETERS P,
6596                MTL_UNITS_OF_MEASURE_VL UOM,
6597                MTL_ITEM_LOCATIONS D,
6598                MTL_PARAMETERS MP
6599        WHERE
6600              csi.inventory_item_id = I.inventory_item_id
6601        AND   W.organization_id = MP.organization_id
6602        AND   csi.inv_master_organization_id  = mp.master_organization_id
6603        AND   MP.organization_id = I.organization_id
6604        AND   CSI.WIP_JOB_ID = W.WIP_ENTITY_ID
6605        AND   CSI.LOCATION_TYPE_CODE = 'WIP'
6606        AND   W.organization_id = P.organization_id
6607        AND   CSI.Unit_Of_Measure = UOM.UOM_CODE
6608        AND   P.default_pull_supply_locator_id = D.inventory_location_id(+)
6609        AND   P.organization_id = D.organization_id(+)
6610        AND   I.ENABLED_FLAG = 'Y'
6611        --AND   W.JOB_STATUS_CODE NOT IN ('5','7','12')
6612        AND   W.JOB_STATUS_CODE IN ('3','4','20')
6613        AND   ((I.START_DATE_ACTIVE IS NULL) OR (I.START_DATE_ACTIVE <= SYSDATE))
6614        AND   ((I.END_DATE_ACTIVE IS NULL) OR (I.END_DATE_ACTIVE >= SYSDATE))
6615        AND   UPPER(I.concatenated_segments) LIKE UPPER(nvl(p_item,I.concatenated_segments))
6616        AND   UPPER(W.ORGANIZATION_NAME) LIKE UPPER(NVL(p_org_name,W.ORGANIZATION_NAME))
6617        AND   UPPER(W.DEPARTMENT_NAME) LIKE UPPER(NVL(p_dept_name,W.DEPARTMENT_NAME))
6618        AND   UPPER(NVL(W.INCIDENT_NUMBER,'x')) LIKE UPPER(NVL(p_incident_number,NVL(W.INCIDENT_NUMBER,'x')))
6619        AND   NVL(W.PRIORITY,0) = NVL(p_priority,NVL(W.PRIORITY,0))
6620        AND   W.VISIT_NUMBER = NVL(p_visit_number,W.VISIT_NUMBER)
6621        AND   UPPER(W.JOB_NUMBER) LIKE UPPER(NVL(p_job_number,W.job_number))
6622        AND   NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
6623                          WHERE CIR.SUBJECT_ID = CSI.INSTANCE_Id
6624                            AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
6625                            AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE)
6626                            AND NVL(ACTIVE_END_DATE,SYSDATE))
6627        /* fix for bug#  6310766: extra row being displayed with 0 qty
6628           -- split this query into two to handle serialized and non-serialized items.
6629        AND   NOT EXISTS (SELECT 'x'
6630                          from ahl_workorder_mtl_txns txn, AHL_WORKORDER_OPERATIONS o
6631                          where txn.workorder_operation_id = o.workorder_operation_id
6632                            and o.workorder_id = w.workorder_id
6633                            and txn.instance_id = csi.instance_id
6634                            and txn.TRANSACTION_TYPE_ID    = 35)
6635        */
6636        -- for non-serialized items
6637     /*   AND   NOT EXISTS (SELECT 'x'
6638                          from ahl_workorder_mtl_txns txn, AHL_WORKORDER_OPERATIONS o
6639                          where txn.workorder_operation_id = o.workorder_operation_id
6640                            and o.workorder_id = w.workorder_id
6641                            and txn.TRANSACTION_TYPE_ID    = 35
6642                            and txn.serial_number is null
6643                            and txn.inventory_item_id = csi.inventory_item_id
6644                            and nvl(txn.REVISION, 'x') = nvl(csi.inventory_revision,'x')
6645                            and nvl(txn.lot_number,'x') = nvl(csi.lot_number,'x')
6646                         )
6647        AND CSI.ACTIVE_START_DATE     <= SYSDATE
6648        AND ((CSI.ACTIVE_END_DATE IS NULL) OR (CSI.ACTIVE_END_DATE > SYSDATE))
6649        AND CSI.quantity > 0; */
6650 
6651 
6652        -- Check existence of disposition.
6653        -- query replaced as part of fix for bug# 9268076 as this procedure also handles non-serialized tracked items.
6654       /*
6655       CURSOR ahl_disp_csr (p_workorder_id IN NUMBER,
6656                            p_instance_id  IN NUMBER) IS
6657         SELECT 'X'
6658         FROM AHL_MTL_RET_DISPOSITIONS_V disp
6659         WHERE disp.WORKORDER_ID= p_WORKORDER_ID
6660           AND disp.instance_id = p_instance_id;
6661       */
6662 
6663       CURSOR ahl_disp_csr (p_workorder_id IN NUMBER,
6664                            p_inventory_item_id IN NUMBER,
6665                            p_serial_number     IN VARCHAR2,
6666                            p_lot_number        IN VARCHAR2,
6667                            p_item_revision     IN VARCHAR2)
6668       IS
6669         SELECT 'X'
6670         FROM AHL_MTL_RET_DISPOSITIONS_V D
6671         WHERE D.WORKORDER_ID = p_workorder_id
6672           AND D.INVENTORY_ITEM_ID = p_inventory_item_id
6673           AND nvl(D.Serial_Number, '1') = nvl(p_serial_number, '1')
6674           AND nvl(D.lot_number, '1')  = nvl(p_lot_number, '1')
6675           AND nvl(D.ITEM_Revision, '1')  = nvl(p_item_revision, '1');
6676 
6677       l_index      NUMBER := p_x_ahl_prd_mtl_txn_tbl.count;
6678       l_junk       varchar2(1);
6679 
6680       --pdoki added for Bug 9164678
6681       l_bind_value_tbl AHL_OSP_UTIL_PKG.ahl_conditions_tbl;
6682       l_mtl_txns_returns_cur AHL_OSP_UTIL_PKG.ahl_search_csr;
6683       l_bind_index NUMBER;
6684       l_mtl_txn_dtls VARCHAR2(10000);
6685       l_mtl_txn_dtls_where VARCHAR2(10000);
6686 
6687       TYPE l_mtl_txn_rec_type IS RECORD (
6688               workorder_id                    AHL_WORKORDERS.WORKORDER_ID%TYPE,
6689               job_number                      AHL_WORKORDERS.WORKORDER_NAME%TYPE,
6690               job_status_meaning              FND_LOOKUP_VALUES_VL.MEANING%TYPE,
6691               description                     MTL_SYSTEM_ITEMS_KFV.DESCRIPTION%TYPE,
6692               organization_id                 AHL_VISITS_B.ORGANIZATION_ID%TYPE,
6693               inventory_item_id               CSI_ITEM_INSTANCES.INVENTORY_ITEM_ID%TYPE,
6694               concatenated_segments           MTL_SYSTEM_ITEMS_KFV.CONCATENATED_SEGMENTS%TYPE,
6695               serial_number                   CSI_ITEM_INSTANCES.SERIAL_NUMBER%TYPE,
6696               instance_number                 CSI_ITEM_INSTANCES.INSTANCE_NUMBER%TYPE,
6697 	      lot_number                      CSI_ITEM_INSTANCES.LOT_NUMBER%TYPE,
6698               revision                        CSI_ITEM_INSTANCES.INVENTORY_REVISION%TYPE,
6699               instance_id                     CSI_ITEM_INSTANCES.INSTANCE_ID%TYPE,
6700               wip_entity_id                   AHL_WORKORDERS.WIP_ENTITY_ID%TYPE,
6701               quantity                        CSI_ITEM_INSTANCES.QUANTITY%TYPE,
6702               uom                             CSI_ITEM_INSTANCES.UNIT_OF_MEASURE%TYPE,
6703               unit_of_measure                 MTL_UNITS_OF_MEASURE_VL.UNIT_OF_MEASURE%TYPE,
6704               default_pull_supply_subinv      WIP_PARAMETERS.DEFAULT_PULL_SUPPLY_SUBINV%TYPE,
6705               default_pull_supply_locator_id  WIP_PARAMETERS.DEFAULT_PULL_SUPPLY_LOCATOR_ID%TYPE,
6706               locator                         VARCHAR2(500),
6707 
6708               inv_locator_id                  AHL_VISITS_B.INV_LOCATOR_ID%TYPE,
6709               SERIAL_NUM_STATUS               mtl_serial_numbers.current_status%TYPE );
6710 
6711      l_mtl_txn_rec  l_mtl_txn_rec_type;
6712 
6713 BEGIN
6714 
6715     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
6716                 fnd_log.string
6717                 (
6718                         G_LEVEL_PROCEDURE,
6719                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl.Begin',
6720                         'At the Start of PLSQL procedure'
6721                 );
6722     END IF;
6723 
6724         --pdoki added for Bug 9164678 start.
6725         l_mtl_txn_dtls := '
6726         SELECT    W.WORKORDER_ID,
6727                   W.WORKORDER_NAME JOB_NUMBER,
6728                   MLU.MEANING JOB_STATUS_MEANING,
6729                   I.DESCRIPTION,
6730                   V.ORGANIZATION_ID,
6731                   C.INVENTORY_ITEM_ID,
6732                   I.CONCATENATED_SEGMENTS,
6733                   C.SERIAL_NUMBER ,
6734       C.INSTANCE_NUMBER ,
6735                   C.LOT_NUMBER,
6736                   C.INVENTORY_REVISION REVISION,
6737                   C.INSTANCE_ID,
6738                   W.WIP_ENTITY_ID,
6739                   C.QUANTITY,
6740                   C.UNIT_OF_MEASURE UOM,
6741                   UOM.UNIT_OF_MEASURE,
6742                   P.DEFAULT_PULL_SUPPLY_SUBINV,
6743                   P.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
6744                   INV_PROJECT.GET_LOCSEGS(P.DEFAULT_PULL_SUPPLY_LOCATOR_ID, V.ORGANIZATION_ID)
6745                   || ''.''
6746                   || DECODE(D.SEGMENT19,NULL,NULL, INV_PROJECT.GET_PROJECT_NUMBER(D.SEGMENT19))
6747                   || ''.''
6748                   || DECODE(D.SEGMENT20, NULL,NULL,INV_PROJECT.GET_TASK_NUMBER(D.SEGMENT20)) LOCATOR,
6749 
6750                   V.INV_LOCATOR_ID,
6751                   (select msn.current_status from mtl_serial_numbers msn where msn.inventory_item_id = C.INVENTORY_ITEM_ID and msn.serial_number = C.serial_number) serial_num_status
6752          FROM     AHL_WORKORDERS W,
6753                   FND_LOOKUP_VALUES_VL MLU,
6754                   MTL_SYSTEM_ITEMS_KFV I,
6755                   AHL_VISITS_B V,
6756                   CSI_ITEM_INSTANCES C,
6757                   MTL_UNITS_OF_MEASURE_VL UOM,
6758                   WIP_PARAMETERS P,
6759                   MTL_ITEM_LOCATIONS D ';
6760 
6761 
6762     l_mtl_txn_dtls_where := '
6763                 WHERE  V.VISIT_ID                     = W.VISIT_ID
6764                   AND  C.INVENTORY_ITEM_ID            = I.INVENTORY_ITEM_ID
6765                   AND  C.INV_MASTER_ORGANIZATION_ID   = I.Organization_id
6766                   AND  C.WIP_JOB_ID                   = W.WIP_ENTITY_ID
6767                   AND  C.LOCATION_TYPE_CODE           = ''WIP''
6768                   AND  V.ORGANIZATION_ID                = P.ORGANIZATION_ID
6769                   AND  C.UNIT_OF_MEASURE              = UOM.UOM_CODE
6770                   AND  P.DEFAULT_PULL_SUPPLY_LOCATOR_ID = D.INVENTORY_LOCATION_ID(+)
6771                   AND  P.ORGANIZATION_ID                = D.ORGANIZATION_ID(+)
6772                   AND  I.ENABLED_FLAG                   = ''Y''
6773                   AND  W.STATUS_CODE                   IN (''3'',''4'',''20'')
6774                   AND  MLU.LOOKUP_TYPE                  =''AHL_JOB_STATUS''
6775                   AND  MLU.LOOKUP_CODE                  = W.STATUS_CODE
6776                   AND ( ( I.START_DATE_ACTIVE         IS NULL )
6777                   OR  ( I.START_DATE_ACTIVE            <= SYSDATE ) )
6778                   AND ( ( I.END_DATE_ACTIVE           IS NULL )
6779                   OR  ( I.END_DATE_ACTIVE              >= SYSDATE ) )
6780                   AND NOT EXISTS
6781                           (SELECT ''X''
6782                           FROM CSI_II_RELATIONSHIPS CIR
6783                           WHERE CIR.SUBJECT_ID           = C.INSTANCE_ID
6784                           AND CIR.RELATIONSHIP_TYPE_CODE = ''COMPONENT-OF''
6785                           AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE) AND NVL(ACTIVE_END_DATE, SYSDATE)
6786                           )
6787                   AND C.ACTIVE_START_DATE   <= SYSDATE
6788                   AND ( ( C.ACTIVE_END_DATE IS NULL )
6789                   OR ( C.ACTIVE_END_DATE     > SYSDATE ) )
6790                   AND C.QUANTITY             > 0 ';
6791 
6792     l_bind_index := 1;
6793 
6794     IF (P_PRD_MTLTXN_CRITERIA_REC.JOB_NUMBER IS NOT NULL) THEN
6795            L_MTL_TXN_DTLS_WHERE := L_MTL_TXN_DTLS_WHERE || ' AND W.WORKORDER_NAME LIKE :' || l_bind_index;
6796            l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.JOB_NUMBER;
6797            l_bind_index := l_bind_index + 1;
6798     END IF;
6799 
6800     IF (P_PRD_MTLTXN_CRITERIA_REC.ORGANIZATION_NAME IS NOT NULL) THEN
6801           L_MTL_TXN_DTLS := L_MTL_TXN_DTLS || ', (
6802                       SELECT
6803                         ORGANIZATION_ID,
6804                         ORGANIZATION_NAME
6805                       FROM
6806                         ORG_ORGANIZATION_DEFINITIONS
6807                       WHERE
6808                         NVL (OPERATING_UNIT, MO_GLOBAL.GET_CURRENT_ORG_ID()) =
6809                         MO_GLOBAL.GET_CURRENT_ORG_ID()
6810                     ) ORG';
6811           L_MTL_TXN_DTLS_WHERE := L_MTL_TXN_DTLS_WHERE || ' AND V.ORGANIZATION_ID = ORG.ORGANIZATION_ID
6812         AND ORG.ORGANIZATION_NAME LIKE :' || l_bind_index;
6813         l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME;
6814         l_bind_index := l_bind_index + 1;
6815     END IF;
6816 
6817     IF (P_PRD_MTLTXN_CRITERIA_REC.CONCATENATED_SEGMENTS IS NOT NULL) THEN
6818        L_MTL_TXN_DTLS_WHERE := L_MTL_TXN_DTLS_WHERE || ' AND I.CONCATENATED_SEGMENTS LIKE :' || l_bind_index;
6819        l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS;
6820        l_bind_index := l_bind_index + 1;
6821     END IF;
6822 
6823     IF (P_PRD_MTLTXN_CRITERIA_REC.PRIORITY IS NOT NULL) THEN
6824       L_MTL_TXN_DTLS := L_MTL_TXN_DTLS || ', WIP_DISCRETE_JOBS WDJ';
6825       L_MTL_TXN_DTLS_WHERE := L_MTL_TXN_DTLS_WHERE || ' AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
6826       AND WDJ.PRIORITY = :' || l_bind_index;
6827       l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.PRIORITY;
6828       l_bind_index := l_bind_index + 1;
6829     END IF;
6830 
6831     IF (P_PRD_MTLTXN_CRITERIA_REC.VISIT_NUMBER IS NOT NULL) THEN
6832       L_MTL_TXN_DTLS_WHERE := L_MTL_TXN_DTLS_WHERE || ' AND V.VISIT_NUMBER = :' || l_bind_index;
6833       l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.VISIT_NUMBER;
6834       l_bind_index := l_bind_index + 1;
6835     END IF;
6836 
6837    IF (P_PRD_MTLTXN_CRITERIA_REC.DEPARTMENT_NAME IS NOT NULL) THEN
6838       L_MTL_TXN_DTLS := L_MTL_TXN_DTLS || ', WIP_DISCRETE_JOBS WDJ,BOM_DEPARTMENTS BMD';
6839       L_MTL_TXN_DTLS_WHERE := L_MTL_TXN_DTLS_WHERE || ' AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
6840       AND WDJ.OWNING_DEPARTMENT = BMD.DEPARTMENT_ID (+)
6841       AND BMD.DESCRIPTION LIKE :'  || l_bind_index;
6842       l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME;
6843       l_bind_index := l_bind_index + 1;
6844     END IF;
6845 
6846     IF (P_PRD_MTLTXN_CRITERIA_REC.INCIDENT_NUMBER IS NOT NULL) THEN
6847       L_MTL_TXN_DTLS := L_MTL_TXN_DTLS || ', AHL_VISIT_TASKS_B VTS,CS_INCIDENTS_ALL_B CSIN';
6848       L_MTL_TXN_DTLS_WHERE := L_MTL_TXN_DTLS_WHERE || ' AND W.VISIT_TASK_ID = VTS.VISIT_TASK_ID
6849       AND VTS.VISIT_ID = V.VISIT_ID
6850       AND VTS.SERVICE_REQUEST_ID = CSIN.INCIDENT_ID(+)
6851       AND CSIN.INCIDENT_NUMBER LIKE :' || l_bind_index;
6852       l_bind_value_tbl(l_bind_index) := P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER;
6853       l_bind_index := l_bind_index + 1;
6854     END IF;
6855 
6856     l_mtl_txn_dtls := l_mtl_txn_dtls || l_mtl_txn_dtls_where ;
6857 
6858     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
6859          fnd_log.string
6860          (
6861                 G_LEVEL_STATEMENT,
6862                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6863                 'SQL Query String: ' || l_mtl_txn_dtls
6864          );
6865     END IF;
6866 
6867     -- execute query
6868     AHL_OSP_UTIL_PKG.OPEN_SEARCH_CURSOR(l_mtl_txns_returns_cur, l_bind_value_tbl, l_mtl_txn_dtls);
6869 
6870    LOOP
6871       FETCH l_mtl_txns_returns_cur INTO l_mtl_txn_rec;
6872       EXIT WHEN l_mtl_txns_returns_cur%NOTFOUND;
6873     --pdoki added for Bug 9164678 end.
6874 
6875        -- check if disposition exists.
6876        OPEN ahl_disp_csr(l_mtl_txn_rec.workorder_id,
6877                          -- l_mtl_txn_rec.instance_id);
6878                          l_mtl_txn_rec.INVENTORY_ITEM_ID,
6879                          l_mtl_txn_rec.Serial_Number,
6880                          l_mtl_txn_rec.Lot_Number,
6881                          l_mtl_txn_rec.Revision);
6882        FETCH ahl_disp_csr INTO l_junk;
6883 
6884        IF ((ahl_disp_csr%NOTFOUND AND l_mtl_txn_rec.serial_num_status IS NULL) OR
6885            (ahl_disp_csr%NOTFOUND AND (l_mtl_txn_rec.serial_num_status IS NOT NULL
6886             AND l_mtl_txn_rec.serial_num_status IN ('1','4')))
6887           ) THEN
6888               -- add instance to search results.
6889               p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id :=l_mtl_txn_rec.workorder_id;
6890               p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id :=l_mtl_txn_rec.Organization_Id;
6891               p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Name :=l_mtl_txn_rec.JOB_NUMBER;
6892               --p_x_ahl_prd_mtl_txn_tbl(l_index).Operation_Seq_Num :=l_mtl_txn_rec.OPERATION_SEQUENCE_NUM;
6893               --p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id :=l_mtl_txn_rec.Workorder_operation_Id;
6894               p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_mtl_txn_rec.CONCATENATED_SEGMENTS;
6895               p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id :=l_mtl_txn_rec.INVENTORY_ITEM_ID;
6896               p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_mtl_txn_rec.DESCRIPTION;
6897               p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status :=l_mtl_txn_rec.JOB_STATUS_MEANING;
6898               p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number :=l_mtl_txn_rec.Serial_Number;
6899               p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity :=0;
6900               p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity :=l_mtl_txn_rec.Quantity;
6901               -- JKJAIN FP ER # 6436303- start
6902               p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty := AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY(l_mtl_txn_rec.workorder_id,l_mtl_txn_rec.INVENTORY_ITEM_ID,l_mtl_txn_rec.Organization_Id);
6903               -- JKJAIN FP ER # 6436303- end
6904               p_x_ahl_prd_mtl_txn_tbl(l_index).Uom :=l_mtl_txn_rec.Uom;
6905               p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_Desc :=l_mtl_txn_rec.UNIT_OF_MEASURE;
6906               p_x_ahl_prd_mtl_txn_tbl(l_index).Item_Instance_Number :=l_mtl_txn_rec.INSTANCE_NUMBER;
6907               p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number :=l_mtl_txn_rec.Lot_Number;
6908               p_x_ahl_prd_mtl_txn_tbl(l_index).Revision :=l_mtl_txn_rec.Revision;
6909               p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name :=l_mtl_txn_rec.DEFAULT_PULL_SUPPLY_SUBINV;
6910               p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id :=l_mtl_txn_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
6911               p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments :=l_mtl_txn_rec.Locator;
6912               p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=SYSDATE;
6913 
6914               -- pdoki added for bug 12564439;sorao for backporting project
6915               p_x_ahl_prd_mtl_txn_tbl(l_index).Item_Instance_ID :=  l_mtl_txn_rec.INSTANCE_ID;
6916               p_x_ahl_prd_mtl_txn_tbl(l_index).Item_Instance_Number := l_mtl_txn_rec.INSTANCE_NUMBER;
6917 
6918               -- ER 5854712.
6919               IF (l_mtl_txn_rec.inv_locator_id IS NULL) THEN
6920                  p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
6921               ELSE
6922                  p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
6923               END IF;
6924               -- added to fix bug# 9268076 -- disable disposition LOV.
6925               p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_id := -1;
6926 
6927               l_index:=l_index+1;
6928 
6929               IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
6930                   fnd_log.string
6931                   (
6932                     G_LEVEL_STATEMENT,
6933                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6934                     'l_mtl_txn_rec.workorder_id: ' || l_mtl_txn_rec.workorder_id
6935                   );
6936                   fnd_log.string
6937                   (
6938                     G_LEVEL_STATEMENT,
6939                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6940                     'l_mtl_txn_rec.job_number: ' || l_mtl_txn_rec.job_number
6941                   );
6942                   fnd_log.string
6943                   (
6944                     G_LEVEL_STATEMENT,
6945                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6946                     'l_mtl_txn_rec.CONCATENATED_SEGMENTS: ' || l_mtl_txn_rec.CONCATENATED_SEGMENTS
6947                   );
6948                   fnd_log.string
6949                   (
6950                     G_LEVEL_STATEMENT,
6951                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6952                     'l_mtl_txn_rec.JOB_STATUS_MEANING: ' || l_mtl_txn_rec.JOB_STATUS_MEANING
6953                   );
6954                   fnd_log.string
6955                   (
6956                     G_LEVEL_STATEMENT,
6957                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6958                     'l_mtl_txn_rec.INSTANCE_NUMBER: ' || l_mtl_txn_rec.INSTANCE_NUMBER
6959                   );
6960                   fnd_log.string
6961                   (
6962                     G_LEVEL_STATEMENT,
6963                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6964                     'l_mtl_txn_rec.ISSUEQTY is zero '
6965                   );
6966                   fnd_log.string
6967                   (
6968                     G_LEVEL_STATEMENT,
6969                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6970                     'l_mtl_txn_rec.Net Qty: ' || l_mtl_txn_rec.Quantity
6971                   );
6972 
6973                   fnd_log.string
6974                   (
6975                     G_LEVEL_STATEMENT,
6976                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6977                     'l_mtl_txn_rec.Instance Id: ' || l_mtl_txn_rec.instance_id
6978                   );
6979 
6980                   fnd_log.string
6981                   (
6982                     G_LEVEL_STATEMENT,
6983                     'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl',
6984                     'l_mtl_txn_rec.Instance Number: ' || l_mtl_txn_rec.instance_number
6985                   );
6986               END IF;  -- debug messages.
6987 
6988        END IF;
6989        CLOSE ahl_disp_csr;
6990 
6991     END LOOP;
6992     CLOSE l_mtl_txns_returns_cur;
6993 
6994     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
6995                 fnd_log.string
6996                 (
6997                         G_LEVEL_PROCEDURE,
6998                         'ahl.plsql.AHL_PRD_MTLTXN_PVT.getTrackedWOMtl.end',
6999                         'At the end of PLSQL procedure'
7000                 );
7001     END IF;
7002 
7003 END getTrackedWOMtl;
7004 
7005 --Material txns search api. Called from Material txn return UI.
7006 PROCEDURE GET_MTL_TRANS_RETURNS(
7007             p_api_version                   IN            NUMBER     := 1.0,
7008             p_init_msg_list                 IN            VARCHAR2   := FND_API.G_FALSE,
7009             p_commit                        IN            VARCHAR2   := FND_API.G_FALSE,
7010             p_validation_level              IN            NUMBER     := FND_API.G_VALID_LEVEL_FULL,
7011             p_default                       IN            VARCHAR2   := FND_API.G_FALSE,
7012             p_module_type                   IN            VARCHAR2   := NULL,
7013             x_return_status                 OUT NOCOPY           VARCHAR2,
7014             x_msg_count                     OUT NOCOPY           NUMBER,
7015             x_msg_data                      OUT NOCOPY           VARCHAR2,
7016             P_prd_Mtltxn_criteria_rec       IN            Prd_Mtltxn_criteria_rec,
7017             x_ahl_mtltxn_tbl                IN OUT NOCOPY Ahl_Mtltxn_Tbl_Type
7018             )AS
7019 
7020      l_api_name                  CONSTANT VARCHAR2(30) := 'GET_MTL_TRANS_RETURNS';
7021      l_api_version          CONSTANT NUMBER       := 1.0;
7022      l_ahl_prd_mtl_txn_tbl       Ahl_Mtltxn_Tbl_Type;
7023 
7024 BEGIN
7025      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
7026         fnd_log.string
7027         (
7028             G_LEVEL_PROCEDURE,
7029             'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURN.begin',
7030             'At the start of PLSQL procedure'
7031         );
7032      END IF;
7033      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
7034          fnd_log.string
7035          (
7036                 G_LEVEL_STATEMENT,
7037                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7038                 'P_prd_Mtltxn_criteria_rec.JOB_NUMBER : ' || P_prd_Mtltxn_criteria_rec.JOB_NUMBER
7039          );
7040          fnd_log.string
7041          (
7042                 G_LEVEL_STATEMENT,
7043                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7044                 'P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME : ' || P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME
7045          );
7046          fnd_log.string
7047          (
7048                 G_LEVEL_STATEMENT,
7049                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7050                 'P_prd_Mtltxn_criteria_rec.PRIORITY : ' || P_prd_Mtltxn_criteria_rec.PRIORITY
7051          );
7052          fnd_log.string
7053          (
7054                 G_LEVEL_STATEMENT,
7055                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7056                 'P_prd_Mtltxn_criteria_rec.VISIT_NUMBER : ' || P_prd_Mtltxn_criteria_rec.VISIT_NUMBER
7057          );
7058          fnd_log.string
7059          (
7060                 G_LEVEL_STATEMENT,
7061                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7062                 'P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME : ' || P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME
7063          );
7064          fnd_log.string
7065          (
7066                 G_LEVEL_STATEMENT,
7067                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7068                 'P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS : ' || P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS
7069          );
7070          fnd_log.string
7071          (
7072                 G_LEVEL_STATEMENT,
7073                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7074                 'P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME : ' || P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME
7075          );
7076          fnd_log.string
7077          (
7078                 G_LEVEL_STATEMENT,
7079                 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7080                 'P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER : ' || P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER
7081          );
7082 
7083      END IF;
7084      -- Standard start of API savepoint
7085      SAVEPOINT GET_MTL_TRANS_RETURNS_PVT;
7086 
7087      -- Standard call to check for call compatibility
7088      IF NOT FND_API.Compatible_API_Call
7089             (l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
7090         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7091      END IF;
7092      -- Initialize message list if p_init_msg_list is set to TRUE
7093      IF FND_API.To_Boolean(p_init_msg_list) THEN
7094         FND_MSG_PUB.Initialize;
7095      END IF;
7096 
7097      -- Initialize API return status to success
7098      x_return_status := FND_API.G_RET_STS_SUCCESS;
7099      IF(P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME IS NULL)THEN
7100        getMtlTxnsReturns
7101             (
7102             p_x_ahl_prd_mtl_txn_tbl   => x_ahl_mtltxn_tbl,
7103             P_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
7104             );
7105 
7106        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
7107            fnd_log.string
7108            (
7109             G_LEVEL_STATEMENT,
7110             'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS', 'After getMtlTxnsReturns x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
7111            );
7112         END IF;
7113 
7114         getDispositionReturn
7115             (
7116             p_x_ahl_prd_mtl_txn_tbl   => x_ahl_mtltxn_tbl,
7117             P_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
7118             );
7119 
7120        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
7121            fnd_log.string
7122            (
7123             G_LEVEL_STATEMENT,
7124             'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS', 'After getDispositionReturn x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
7125            );
7126         END IF;
7127 
7128         -- Fix for Bug # 9274691 -- start
7129         -- getTrackedWOMtl gets records only when disposition is not present for the material.
7130         -- Hence no need to call this method when disposition search criteria is not entered.
7131 
7132         -- get trackable items that have not been issued and not in the diposition
7133         -- list. Added for FP Bug# 5925805. It is possible to have tracked items in
7134         -- a job without a disposition and a material issue.
7135         -- bug fix# 6594140.
7136 
7137         getTrackedWOMtl
7138             (
7139             p_x_ahl_prd_mtl_txn_tbl   => x_ahl_mtltxn_tbl,
7140             p_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
7141             );
7142 
7143         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
7144              fnd_log.string
7145                  (
7146                             G_LEVEL_STATEMENT,
7147                             'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
7148                             'After getTrackedWOMtl:x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
7149                  );
7150         END IF;
7151         -- Fix for Bug # 9274691 -- end
7152 
7153       ELSE
7154         getDispositionReturn
7155             (
7156             p_x_ahl_prd_mtl_txn_tbl   => x_ahl_mtltxn_tbl,
7157             P_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
7158             );
7159 
7160        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL)THEN
7161            fnd_log.string
7162            (
7163             G_LEVEL_STATEMENT,
7164             'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS', 'After getDispositionReturn x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
7165            );
7166         END IF;
7167       END IF;
7168 
7169 
7170 
7171       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)THEN
7172         fnd_log.string
7173         (
7174             G_LEVEL_PROCEDURE,
7175             'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURN.end',
7176             'At the end of PLSQL procedure'
7177         );
7178       END IF;
7179 
7180       --
7181 EXCEPTION
7182     WHEN FND_API.G_EXC_ERROR THEN
7183         x_return_status := FND_API.G_RET_STS_ERROR;
7184         Rollback to GET_MTL_TRANS_RETURNS_PVT;
7185         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
7186         p_data  => x_msg_data,
7187         p_encoded => fnd_api.g_false);
7188 
7189 
7190     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7191         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7192         Rollback to GET_MTL_TRANS_RETURNS_PVT;
7193         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
7194         p_data  => x_msg_data,
7195         p_encoded => fnd_api.g_false);
7196 
7197     WHEN OTHERS THEN
7198         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7199         Rollback to GET_MTL_TRANS_RETURNS_PVT;
7200         fnd_msg_pub.add_exc_msg(p_pkg_name       => G_PKG_NAME,
7201         p_procedure_name => 'GET_MTL_TRANS_RETURNS',
7202         p_error_text     => SQLERRM);
7203         FND_MSG_PUB.count_and_get( p_count => x_msg_count,
7204         p_data  => x_msg_data,
7205         p_encoded => fnd_api.g_false);
7206 
7207 END GET_MTL_TRANS_RETURNS;
7208 
7209 /*
7210 PROCEDURE SHOW_MTX_ERRORS
7211 AS
7212 x_row MTL_TRANSACTIONS_INTERFACE%rowtype;
7213 CURSOR CL
7214 IS
7215 select * into x_row
7216 from MTL_TRANSACTIONS_INTERFACE;
7217 begin
7218 return;
7219             FOR CLREC IN CL
7220             LOOP
7221                 IF CLREC.error_code IS NOT NULL
7222                 THEN
7223                     FND_MESSAGE.Set_Name('AHL','AHL_COM_GENERIC_ERROR');
7224                                 FND_MESSAGE.Set_Token('MESSAGE',CLREC.error_code);
7225                     FND_MSG_PUB.ADD;
7226                 END IF;
7227             END LOOP;
7228 end;
7229 */
7230 
7231 
7232 -- R12: Serial Reservation enhancements.
7233 -- Added procedure to relieve reservation when user is issuing a reserved serial
7234 -- number against a different workorder.
7235 PROCEDURE Relieve_Serial_Reservation(p_ahl_mtl_txn_rec  IN            AHL_MTLTXN_REC_TYPE,
7236                                      x_reservation_flag IN OUT NOCOPY VARCHAR2,
7237                                      x_return_status    IN OUT NOCOPY VARCHAR2
7238                                     )
7239 IS
7240   -- get the demand_source_header_id and demand_source_line_id for the serial number.
7241   CURSOR get_scheduled_mater_csr (p_serial_number     IN VARCHAR2,
7242                                   p_inventory_item_id IN NUMBER,
7243                                   p_organization_id   IN NUMBER) IS
7244     SELECT rsv.DEMAND_SOURCE_LINE_DETAIL schedule_material_id, rsv.demand_source_header_id,
7245            rsv.demand_source_line_id, rsv.demand_source_type_id
7246     FROM  mtl_serial_numbers msn, mtl_reservations rsv
7247     WHERE msn.reservation_id = rsv.reservation_id
7248       AND msn.serial_number = p_serial_number
7249       AND msn.current_organization_id = p_organization_id
7250       AND msn.inventory_item_id = p_inventory_item_id;
7251 
7252   l_schedule_material_id    NUMBER;
7253   l_demand_source_header_id NUMBER;
7254   l_demand_source_line_id   NUMBER;
7255   l_demand_source_type_id   NUMBER;
7256   l_msg_count               NUMBER;
7257   l_msg_data                VARCHAR2(2000);
7258 
7259 BEGIN
7260 
7261   -- initialize out parameters.
7262   x_return_status := FND_API.G_RET_STS_SUCCESS;
7263   x_reservation_flag := 'N';
7264 
7265   -- check if serial reservation exists against a different workorder.
7266   OPEN get_scheduled_mater_csr (p_ahl_mtl_txn_rec.serial_number,
7267                                 p_ahl_mtl_txn_rec.inventory_item_id,
7268                                 p_ahl_mtl_txn_rec.organization_id);
7269   FETCH get_scheduled_mater_csr INTO l_schedule_material_id,
7270                                      l_demand_source_header_id,
7271                                      l_demand_source_line_id,
7272                                      l_demand_source_type_id;
7273   IF (get_scheduled_mater_csr%FOUND) THEN
7274      -- match l_demand_source_header_id and l_demand_source_line_id.
7275      IF (l_demand_source_header_id = p_ahl_mtl_txn_rec.wip_entity_id
7276          AND l_demand_source_line_id = p_ahl_mtl_txn_rec.operation_seq_num
7277          AND l_demand_source_type_id = INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_WIP) THEN
7278 
7279          -- valid reservation for the workorder.
7280          x_reservation_flag := 'Y';
7281 
7282      ELSE
7283         -- relieve reservation against l_demand_source_header_id.
7284 
7285         AHL_RSV_RESERVATIONS_PVT.RELIEVE_RESERVATION(
7286                     p_api_version           => 1.0,
7287                     p_init_msg_list         => FND_API.G_FALSE,
7288                     p_commit                => FND_API.G_FALSE,
7289                     p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
7290                     p_module_type           => NULL,
7291                     x_return_status         => x_return_status,
7292                     x_msg_count             => l_msg_count,
7293                     x_msg_data              => l_msg_data,
7294                     p_scheduled_material_id => l_schedule_material_id,
7295                     p_serial_number         => p_ahl_mtl_txn_rec.serial_number
7296                    );
7297 
7298         IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7299           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7300         ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
7301           RAISE FND_API.G_EXC_ERROR;
7302         END IF;
7303 
7304      END IF; -- l_demand_source_header_id <>
7305 
7306   END IF; -- get_scheduled_mater_csr%FOUND
7307   CLOSE get_scheduled_mater_csr;
7308 
7309 END Relieve_Serial_Reservation;
7310 
7311 -- Added for pre processing(FP bug# 5903207).
7312 PROCEDURE Perform_MtlTxn_Pre( p_x_ahl_mtltxn_tbl IN OUT NOCOPY AHL_MTLTXN_TBL_TYPE,
7313                               x_msg_count        IN OUT NOCOPY NUMBER,
7314                               x_msg_data         IN OUT NOCOPY VARCHAR2,
7315                               x_return_status    IN OUT NOCOPY VARCHAR2) IS
7316 
7317   l_x_material_txn_tbl  AHL_PRD_MATERIAL_TXN_PUB.Ahl_Material_Txn_Tbl_Type;
7318 
7319 BEGIN
7320    -- copy to l_x_material_txn_tbl record structure.
7321    IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
7322      FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST LOOP
7323 
7324           l_x_material_txn_tbl(i).Workorder_Id            := p_x_ahl_mtltxn_tbl(i).Workorder_Id;
7325           l_x_material_txn_tbl(i).Workorder_Name          := p_x_ahl_mtltxn_tbl(i).Workorder_Name;
7326           l_x_material_txn_tbl(i).Operation_Seq_Num       := p_x_ahl_mtltxn_tbl(i).Operation_Seq_Num;
7327           l_x_material_txn_tbl(i).Transaction_Type_Id     := p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id;
7328           l_x_material_txn_tbl(i).Transaction_Type_Name   := p_x_ahl_mtltxn_tbl(i).Transaction_Type_Name;
7329 
7330           l_x_material_txn_tbl(i).Inventory_Item_Id       := p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id;
7331           l_x_material_txn_tbl(i).Inventory_Item_Segments := p_x_ahl_mtltxn_tbl(i).Inventory_Item_Segments;
7332           l_x_material_txn_tbl(i).Item_Instance_Number    := p_x_ahl_mtltxn_tbl(i).Item_Instance_Number;
7333           l_x_material_txn_tbl(i).Item_Instance_ID        := p_x_ahl_mtltxn_tbl(i).Item_Instance_ID;
7334           l_x_material_txn_tbl(i).Revision                := p_x_ahl_mtltxn_tbl(i).Revision;
7335           l_x_material_txn_tbl(i).Condition               := p_x_ahl_mtltxn_tbl(i).Condition;
7336           l_x_material_txn_tbl(i).Condition_desc          := p_x_ahl_mtltxn_tbl(i).Condition_desc;
7337           l_x_material_txn_tbl(i).Subinventory_Name       := p_x_ahl_mtltxn_tbl(i).Subinventory_Name;
7338           l_x_material_txn_tbl(i).Locator_Id              := p_x_ahl_mtltxn_tbl(i).Locator_Id;
7339           l_x_material_txn_tbl(i).Locator_Segments        := p_x_ahl_mtltxn_tbl(i).Locator_Segments;
7340           l_x_material_txn_tbl(i).Quantity                := p_x_ahl_mtltxn_tbl(i).Quantity;
7341           l_x_material_txn_tbl(i).Uom_Code                := p_x_ahl_mtltxn_tbl(i).Uom;
7342           l_x_material_txn_tbl(i).Unit_Of_Measure         := p_x_ahl_mtltxn_tbl(i).Uom_Desc;
7343           l_x_material_txn_tbl(i).Serial_Number           := p_x_ahl_mtltxn_tbl(i).Serial_Number;
7344           l_x_material_txn_tbl(i).Lot_Number              := p_x_ahl_mtltxn_tbl(i).Lot_Number;
7345           l_x_material_txn_tbl(i).Transaction_Date        := p_x_ahl_mtltxn_tbl(i).Transaction_Date;
7346           l_x_material_txn_tbl(i).Transaction_Reference   := p_x_ahl_mtltxn_tbl(i).Transaction_Reference;
7347           l_x_material_txn_tbl(i).recepient_id            := p_x_ahl_mtltxn_tbl(i).recepient_id;
7348           l_x_material_txn_tbl(i).recepient_name          := p_x_ahl_mtltxn_tbl(i).recepient_name;
7349           l_x_material_txn_tbl(i).disposition_id          := p_x_ahl_mtltxn_tbl(i).disposition_id;
7350 
7351           -- Target visit is currently not used.
7352           --p_x_material_txn_tbl(i).Target_Visit_Id       := p_x_ahl_mtltxn_tbl(i).Target_Visit_Id;
7353           --p_x_material_txn_tbl(i).Target_Visit_Num      := p_x_ahl_mtltxn_tbl(i).Target_Visit_Num;
7354 
7355           l_x_material_txn_tbl(i).Reason_Id               := p_x_ahl_mtltxn_tbl(i).Reason_Id;
7356           l_x_material_txn_tbl(i).Reason_Name             := p_x_ahl_mtltxn_tbl(i).Reason_Name;
7357           l_x_material_txn_tbl(i).Problem_Code            := p_x_ahl_mtltxn_tbl(i).Problem_Code;
7358           l_x_material_txn_tbl(i).Problem_Code_Meaning    := p_x_ahl_mtltxn_tbl(i).Problem_Code_Meaning;
7359           l_x_material_txn_tbl(i).Sr_Summary              := p_x_ahl_mtltxn_tbl(i).Sr_Summary;
7360           l_x_material_txn_tbl(i).Qa_Collection_Id        := p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id;
7361 
7362           l_x_material_txn_tbl(i).ATTRIBUTE_CATEGORY      := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY;
7363           l_x_material_txn_tbl(i).ATTRIBUTE1              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE1;
7364           l_x_material_txn_tbl(i).ATTRIBUTE2              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE2;
7365           l_x_material_txn_tbl(i).ATTRIBUTE3              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE3;
7366           l_x_material_txn_tbl(i).ATTRIBUTE4              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE4;
7367           l_x_material_txn_tbl(i).ATTRIBUTE5              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE5;
7368           l_x_material_txn_tbl(i).ATTRIBUTE6              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE6;
7369           l_x_material_txn_tbl(i).ATTRIBUTE7              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE7;
7370           l_x_material_txn_tbl(i).ATTRIBUTE8              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE8;
7371           l_x_material_txn_tbl(i).ATTRIBUTE9              := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE9;
7372           l_x_material_txn_tbl(i).ATTRIBUTE10             := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE10;
7373           l_x_material_txn_tbl(i).ATTRIBUTE11             := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE11;
7374           l_x_material_txn_tbl(i).ATTRIBUTE12             := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE12;
7375           l_x_material_txn_tbl(i).ATTRIBUTE13             := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE13;
7376           l_x_material_txn_tbl(i).ATTRIBUTE14             := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE14;
7377           l_x_material_txn_tbl(i).ATTRIBUTE15             := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE15;
7378      END LOOP;
7379 
7380      -- call user hook api.
7381      AHL_PRD_MATERIAL_TXN_CUHK.Perform_MtlTxn_Pre(
7382                       p_x_material_txn_tbl => l_x_material_txn_tbl,
7383                       x_msg_count => x_msg_count,
7384                       x_msg_data => x_msg_data,
7385                       x_return_status => x_return_status);
7386 
7387      IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_x_material_txn_tbl.count > 0) THEN
7388        FOR i IN l_x_material_txn_tbl.FIRST..l_x_material_txn_tbl.LAST LOOP
7389 
7390           p_x_ahl_mtltxn_tbl(i).Workorder_Id            := l_x_material_txn_tbl(i).Workorder_Id;
7391           p_x_ahl_mtltxn_tbl(i).Workorder_Name          := l_x_material_txn_tbl(i).Workorder_Name;
7392           p_x_ahl_mtltxn_tbl(i).Operation_Seq_Num       := l_x_material_txn_tbl(i).Operation_Seq_Num;
7393           p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id     := l_x_material_txn_tbl(i).Transaction_Type_Id;
7394           p_x_ahl_mtltxn_tbl(i).Transaction_Type_Name   := l_x_material_txn_tbl(i).Transaction_Type_Name;
7395 
7396           p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id       := l_x_material_txn_tbl(i).Inventory_Item_Id;
7397           p_x_ahl_mtltxn_tbl(i).Inventory_Item_Segments := l_x_material_txn_tbl(i).Inventory_Item_Segments;
7398           p_x_ahl_mtltxn_tbl(i).Item_Instance_Number    := l_x_material_txn_tbl(i).Item_Instance_Number;
7399           p_x_ahl_mtltxn_tbl(i).Item_Instance_ID        := l_x_material_txn_tbl(i).Item_Instance_ID;
7400           p_x_ahl_mtltxn_tbl(i).Revision                := l_x_material_txn_tbl(i).Revision;
7401           p_x_ahl_mtltxn_tbl(i).Condition               := l_x_material_txn_tbl(i).Condition;
7402           p_x_ahl_mtltxn_tbl(i).Condition_desc          := l_x_material_txn_tbl(i).Condition_desc;
7403           p_x_ahl_mtltxn_tbl(i).Subinventory_Name       := l_x_material_txn_tbl(i).Subinventory_Name;
7404           p_x_ahl_mtltxn_tbl(i).Locator_Id              := l_x_material_txn_tbl(i).Locator_Id;
7405           p_x_ahl_mtltxn_tbl(i).Locator_Segments        := l_x_material_txn_tbl(i).Locator_Segments;
7406           p_x_ahl_mtltxn_tbl(i).Quantity                := l_x_material_txn_tbl(i).Quantity;
7407           p_x_ahl_mtltxn_tbl(i).Uom                     := l_x_material_txn_tbl(i).Uom_code;
7408           p_x_ahl_mtltxn_tbl(i).Uom_Desc               := l_x_material_txn_tbl(i).Unit_of_measure;
7409           p_x_ahl_mtltxn_tbl(i).Serial_Number           := l_x_material_txn_tbl(i).Serial_Number;
7410           p_x_ahl_mtltxn_tbl(i).Lot_Number              := l_x_material_txn_tbl(i).Lot_Number;
7411           p_x_ahl_mtltxn_tbl(i).Transaction_Date        := l_x_material_txn_tbl(i).Transaction_Date;
7412           p_x_ahl_mtltxn_tbl(i).Transaction_Reference   := l_x_material_txn_tbl(i).Transaction_Reference;
7413           p_x_ahl_mtltxn_tbl(i).recepient_id            := l_x_material_txn_tbl(i).recepient_id;
7414           p_x_ahl_mtltxn_tbl(i).recepient_name          := l_x_material_txn_tbl(i).recepient_name;
7415           p_x_ahl_mtltxn_tbl(i).disposition_id          := l_x_material_txn_tbl(i).disposition_id;
7416 
7417           -- Target visit is currently not used.
7418           --p_x_ahl_mtltxn_tbl(i).Target_Visit_Id       := l_x_material_txn_tbl(i).Target_Visit_Id;
7419           --p_x_ahl_mtltxn_tbl(i).Target_Visit_Num      := l_x_material_txn_tbl(i).Target_Visit_Num;
7420 
7421           p_x_ahl_mtltxn_tbl(i).Reason_Id               := l_x_material_txn_tbl(i).Reason_Id;
7422           p_x_ahl_mtltxn_tbl(i).Reason_Name             := l_x_material_txn_tbl(i).Reason_Name;
7423           p_x_ahl_mtltxn_tbl(i).Problem_Code            := l_x_material_txn_tbl(i).Problem_Code;
7424           p_x_ahl_mtltxn_tbl(i).Problem_Code_Meaning    := l_x_material_txn_tbl(i).Problem_Code_Meaning;
7425           p_x_ahl_mtltxn_tbl(i).Sr_Summary              := l_x_material_txn_tbl(i).Sr_Summary;
7426           p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id        := l_x_material_txn_tbl(i).Qa_Collection_Id;
7427 
7428           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY      := l_x_material_txn_tbl(i).ATTRIBUTE_CATEGORY;
7429           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE1              := l_x_material_txn_tbl(i).ATTRIBUTE1;
7430           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE2              := l_x_material_txn_tbl(i).ATTRIBUTE2;
7431           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE3              := l_x_material_txn_tbl(i).ATTRIBUTE3;
7432           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE4              := l_x_material_txn_tbl(i).ATTRIBUTE4;
7433           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE5              := l_x_material_txn_tbl(i).ATTRIBUTE5;
7434           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE6              := l_x_material_txn_tbl(i).ATTRIBUTE6;
7435           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE7              := l_x_material_txn_tbl(i).ATTRIBUTE7;
7436           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE8              := l_x_material_txn_tbl(i).ATTRIBUTE8;
7437           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE9              := l_x_material_txn_tbl(i).ATTRIBUTE9;
7438           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE10             := l_x_material_txn_tbl(i).ATTRIBUTE10;
7439           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE11             := l_x_material_txn_tbl(i).ATTRIBUTE11;
7440           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE12             := l_x_material_txn_tbl(i).ATTRIBUTE12;
7441           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE13             := l_x_material_txn_tbl(i).ATTRIBUTE13;
7442           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE14             := l_x_material_txn_tbl(i).ATTRIBUTE14;
7443           p_x_ahl_mtltxn_tbl(i).ATTRIBUTE15             := l_x_material_txn_tbl(i).ATTRIBUTE15;
7444        END LOOP; -- l_x_material_txn_tbl.FIRST
7445      END IF; -- x_return_status.
7446    END IF;
7447 END Perform_MtlTxn_Pre;
7448 
7449 
7450 -- Added for post processing (FP bug# 5903207).
7451 PROCEDURE Perform_MtlTxn_Post( p_ahl_mtltxn_tbl   IN AHL_MTLTXN_TBL_TYPE,
7452                                x_msg_count        IN OUT NOCOPY NUMBER,
7453                                x_msg_data         IN OUT NOCOPY VARCHAR2,
7454                                x_return_status    IN OUT NOCOPY VARCHAR2) IS
7455 
7456   l_material_txn_tbl  AHL_PRD_MATERIAL_TXN_PUB.Ahl_Material_Txn_Tbl_Type;
7457 
7458 BEGIN
7459 
7460    -- copy to l_x_material_txn_tbl record structure.
7461    IF (p_ahl_mtltxn_tbl.COUNT > 0) THEN
7462      FOR i IN p_ahl_mtltxn_tbl.FIRST..p_ahl_mtltxn_tbl.LAST LOOP
7463 
7464           l_material_txn_tbl(i).Workorder_Id            := p_ahl_mtltxn_tbl(i).Workorder_Id;
7465           l_material_txn_tbl(i).Workorder_Name          := p_ahl_mtltxn_tbl(i).Workorder_Name;
7466           l_material_txn_tbl(i).Operation_Seq_Num       := p_ahl_mtltxn_tbl(i).Operation_Seq_Num;
7467           l_material_txn_tbl(i).Transaction_Type_Id     := p_ahl_mtltxn_tbl(i).Transaction_Type_Id;
7468           l_material_txn_tbl(i).Transaction_Type_Name   := p_ahl_mtltxn_tbl(i).Transaction_Type_Name;
7469 
7470           l_material_txn_tbl(i).Inventory_Item_Id       := p_ahl_mtltxn_tbl(i).Inventory_Item_Id;
7471           l_material_txn_tbl(i).Inventory_Item_Segments := p_ahl_mtltxn_tbl(i).Inventory_Item_Segments;
7472           l_material_txn_tbl(i).Item_Instance_Number    := p_ahl_mtltxn_tbl(i).Item_Instance_Number;
7473           l_material_txn_tbl(i).Item_Instance_ID        := p_ahl_mtltxn_tbl(i).Item_Instance_ID;
7474           l_material_txn_tbl(i).Revision                := p_ahl_mtltxn_tbl(i).Revision;
7475           l_material_txn_tbl(i).Condition               := p_ahl_mtltxn_tbl(i).Condition;
7476           l_material_txn_tbl(i).Condition_desc          := p_ahl_mtltxn_tbl(i).Condition_desc;
7477           l_material_txn_tbl(i).Subinventory_Name       := p_ahl_mtltxn_tbl(i).Subinventory_Name;
7478           l_material_txn_tbl(i).Locator_Id              := p_ahl_mtltxn_tbl(i).Locator_Id;
7479           l_material_txn_tbl(i).Locator_Segments        := p_ahl_mtltxn_tbl(i).Locator_Segments;
7480           l_material_txn_tbl(i).Quantity                := p_ahl_mtltxn_tbl(i).Quantity;
7481           l_material_txn_tbl(i).Uom_Code                := p_ahl_mtltxn_tbl(i).Uom;
7482           l_material_txn_tbl(i).Unit_Of_Measure         := p_ahl_mtltxn_tbl(i).Uom_Desc;
7483           l_material_txn_tbl(i).Serial_Number           := p_ahl_mtltxn_tbl(i).Serial_Number;
7484           l_material_txn_tbl(i).Lot_Number              := p_ahl_mtltxn_tbl(i).Lot_Number;
7485           l_material_txn_tbl(i).Transaction_Date        := p_ahl_mtltxn_tbl(i).Transaction_Date;
7486           l_material_txn_tbl(i).Transaction_Reference   := p_ahl_mtltxn_tbl(i).Transaction_Reference;
7487           l_material_txn_tbl(i).recepient_id            := p_ahl_mtltxn_tbl(i).recepient_id;
7488           l_material_txn_tbl(i).recepient_name          := p_ahl_mtltxn_tbl(i).recepient_name;
7489           l_material_txn_tbl(i).disposition_id          := p_ahl_mtltxn_tbl(i).disposition_id;
7490 
7491           -- Target visit is currently not used.
7492           --p_material_txn_tbl(i).Target_Visit_Id       := p_ahl_mtltxn_tbl(i).Target_Visit_Id;
7493           --p_material_txn_tbl(i).Target_Visit_Num      := p_ahl_mtltxn_tbl(i).Target_Visit_Num;
7494 
7495           l_material_txn_tbl(i).Reason_Id               := p_ahl_mtltxn_tbl(i).Reason_Id;
7496           l_material_txn_tbl(i).Reason_Name             := p_ahl_mtltxn_tbl(i).Reason_Name;
7497           l_material_txn_tbl(i).Problem_Code            := p_ahl_mtltxn_tbl(i).Problem_Code;
7498           l_material_txn_tbl(i).Problem_Code_Meaning    := p_ahl_mtltxn_tbl(i).Problem_Code_Meaning;
7499           l_material_txn_tbl(i).Sr_Summary              := p_ahl_mtltxn_tbl(i).Sr_Summary;
7500           l_material_txn_tbl(i).Qa_Collection_Id        := p_ahl_mtltxn_tbl(i).Qa_Collection_Id;
7501 
7502           l_material_txn_tbl(i).ATTRIBUTE_CATEGORY      := p_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY;
7503           l_material_txn_tbl(i).ATTRIBUTE1              := p_ahl_mtltxn_tbl(i).ATTRIBUTE1;
7504           l_material_txn_tbl(i).ATTRIBUTE2              := p_ahl_mtltxn_tbl(i).ATTRIBUTE2;
7505           l_material_txn_tbl(i).ATTRIBUTE3              := p_ahl_mtltxn_tbl(i).ATTRIBUTE3;
7506           l_material_txn_tbl(i).ATTRIBUTE4              := p_ahl_mtltxn_tbl(i).ATTRIBUTE4;
7507           l_material_txn_tbl(i).ATTRIBUTE5              := p_ahl_mtltxn_tbl(i).ATTRIBUTE5;
7508           l_material_txn_tbl(i).ATTRIBUTE6              := p_ahl_mtltxn_tbl(i).ATTRIBUTE6;
7509           l_material_txn_tbl(i).ATTRIBUTE7              := p_ahl_mtltxn_tbl(i).ATTRIBUTE7;
7510           l_material_txn_tbl(i).ATTRIBUTE8              := p_ahl_mtltxn_tbl(i).ATTRIBUTE8;
7511           l_material_txn_tbl(i).ATTRIBUTE9              := p_ahl_mtltxn_tbl(i).ATTRIBUTE9;
7512           l_material_txn_tbl(i).ATTRIBUTE10             := p_ahl_mtltxn_tbl(i).ATTRIBUTE10;
7513           l_material_txn_tbl(i).ATTRIBUTE11             := p_ahl_mtltxn_tbl(i).ATTRIBUTE11;
7514           l_material_txn_tbl(i).ATTRIBUTE12             := p_ahl_mtltxn_tbl(i).ATTRIBUTE12;
7515           l_material_txn_tbl(i).ATTRIBUTE13             := p_ahl_mtltxn_tbl(i).ATTRIBUTE13;
7516           l_material_txn_tbl(i).ATTRIBUTE14             := p_ahl_mtltxn_tbl(i).ATTRIBUTE14;
7517           l_material_txn_tbl(i).ATTRIBUTE15             := p_ahl_mtltxn_tbl(i).ATTRIBUTE15;
7518 
7519      END LOOP;
7520 
7521      AHL_PRD_MATERIAL_TXN_CUHK.Perform_MtlTxn_Post( p_material_txn_tbl => l_material_txn_tbl,
7522                                                     x_msg_count => x_msg_count,
7523                                                     x_msg_data => x_msg_data,
7524                                                     x_return_status => x_return_status);
7525    END IF;
7526 
7527 
7528 END Perform_MtlTxn_Post;
7529 
7530 
7531 -- Added for FP ER 6447935 - dynamic locator support.
7532 -- breakup input locator concatenated segments to populate MTI.
7533 PROCEDURE Get_MTL_LocatorSegs (p_concat_segs     IN VARCHAR2,
7534                                p_organization_id IN NUMBER,
7535                                p_x_mti_seglist   IN OUT NOCOPY fnd_flex_ext.SegmentArray,
7536                                x_return_status      OUT NOCOPY VARCHAR2)
7537 
7538 IS
7539 
7540       l_flex_nseg      NUMBER;
7541       l_flex_seglist   fnd_flex_key_api.segment_list;
7542       l_fftype         fnd_flex_key_api.flexfield_type;
7543       l_ffstru         fnd_flex_key_api.structure_type;
7544       l_segment_type   fnd_flex_key_api.segment_type;
7545       l_delim          VARCHAR2(1);
7546 
7547       l_loc_nseg     number;
7548       l_loc_seglist  fnd_flex_ext.SegmentArray;
7549       l_mti_seglist  fnd_flex_ext.SegmentArray;
7550       l_concat_seg_IDs VARCHAR2(4000);
7551 
7552       l_valid_flag    BOOLEAN;
7553 
7554 BEGIN
7555 
7556    IF G_DEBUG='Y' THEN
7557       AHL_DEBUG_PUB.DEBUG('Start Procedure:Splitting locator concatenated segments:' || p_concat_segs, 'Get_MTL_LocatorSegs');
7558    END IF;
7559 
7560    -- initialize status to success.
7561    x_return_status := FND_API.G_RET_STS_SUCCESS;
7562 
7563    -- set mfg_organization_id profile - bug# 6010795.
7564    fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id);
7565 
7566    l_mti_seglist := p_x_mti_seglist;
7567 
7568    fnd_flex_key_api.set_session_mode('seed_data');
7569 
7570    -- find flex field type
7571    l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MTLL');
7572 
7573    -- find flex structure type
7574    l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
7575 
7576    -- find segment list for the key flex field
7577    fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_flex_nseg, l_flex_seglist);
7578 
7579    -- find segment delimiter
7580    l_delim := l_ffstru.segment_separator;
7581 
7582    IF G_DEBUG='Y' THEN
7583      AHL_DEBUG_PUB.DEBUG('Before Loc Seg validate:Profile mfg_organization_id:'  || fnd_profile.value('MFG_ORGANIZATION_ID') );
7584    END IF;
7585 
7586    -- validate locator segments.
7587    l_valid_flag := fnd_flex_keyval.validate_segs(
7588                            operation                    => 'CHECK_COMBINATION'
7589                          , appl_short_name              => 'INV'
7590                          , key_flex_code                => 'MTLL'
7591                          , structure_number             => 101
7592                          , concat_segments              => p_concat_segs
7593                          , values_or_ids                => 'V'
7594                          , data_set                     => p_organization_id
7595                    );
7596 
7597    IF NOT(l_valid_flag) THEN
7598       FND_MESSAGE.Set_Name('AHL','AHL_INPUT_NUM_LOC_SEGS_INVALID');
7599       FND_MESSAGE.Set_Token('LOC_SEG',p_concat_segs);
7600       FND_MSG_PUB.ADD;
7601       x_return_status := FND_API.G_RET_STS_ERROR;
7602       RETURN;
7603    END IF;
7604 
7605    -- get IDs for the concatenated segments as MTI validates IDs.
7606    l_concat_seg_IDs := fnd_flex_keyval.concatenated_ids;
7607 
7608    -- breakup locator concat IDs into segments.
7609    l_loc_nseg := fnd_flex_ext.breakup_segments (l_concat_seg_IDs, l_delim, l_loc_seglist);
7610 
7611    /*
7612    -- validate if enabled segments equal to input locator segments.
7613    -- if not, raise error and return.
7614    IF (l_loc_nseg <> l_flex_nseg) THEN
7615       IF G_DEBUG='Y' THEN
7616          AHL_DEBUG_PUB.DEBUG('FND Enabled Segments:' || l_flex_nseg);
7617          AHL_DEBUG_PUB.DEBUG('FND Enabled Segments:' || l_loc_nseg);
7618       END IF;
7619 
7620       FND_MESSAGE.Set_Name('AHL','AHL_INPUT_NUM_LOC_SEGS_INVALID');
7621       FND_MESSAGE.Set_Token('LOC_NUM',l_flex_nseg);
7622       FND_MESSAGE.Set_Token('LOC_SEG',p_concat_segs);
7623       FND_MSG_PUB.ADD;
7624       x_return_status := FND_API.G_RET_STS_ERROR;
7625       RETURN;
7626    END IF;
7627    */
7628 
7629    -- get the corresponding column for all segments
7630    --
7631    -- 'To_number(Substr(l_segment_type.column_name, 8))' gives the
7632    -- number of the segment i.e. 1 - 20 which is used as index to
7633    -- populate the corresponding columns from segments array.
7634    --
7635    FOR l_loop IN 1..l_flex_nseg LOOP
7636 
7637       l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_flex_seglist(l_loop));
7638       --dbms_output.put_line('l_segment_type is : ' || l_segment_type.column_name);
7639 
7640       l_mti_seglist(To_number(Substr(l_segment_type.column_name, 8))) := l_loc_seglist(l_loop);
7641 
7642    END LOOP;
7643 
7644    -- assign out parameter.
7645    p_x_mti_seglist := l_mti_seglist;
7646 
7647    IF G_DEBUG='Y' THEN
7648       FOR i IN 1..20 LOOP
7649         --dbms_output.put_line('Segs final(' || i || ') : ' || l_mti_seglist(i));
7650         AHL_DEBUG_PUB.DEBUG('Segs final(' || i || ') : ' || p_x_mti_seglist(i), 'Get_MTL_LocatorSegs');
7651       END LOOP;
7652       AHL_DEBUG_PUB.DEBUG('End of procedure', 'Get_MTL_LocatorSegs');
7653    END IF;
7654 
7655 END Get_MTL_LocatorSegs;
7656 
7657 -- pdoki added for Marshalling Enhancement, Start.
7658 -- Function to check, if there exists RTS workorder in the same visit as of the given workorder and for the given instance.
7659 -- Returns 'Y' if it has atleast one RTS Workorder, Oherwise 'N'.
7660 FUNCTION Check_Rts_Workorder_Exists (
7661       p_workorder_id                IN             NUMBER,
7662       p_instance_id                 IN             NUMBER
7663 ) RETURN VARCHAR2
7664 IS
7665 l_result  VARCHAR2(1) := 'N';
7666 l_dummy   VARCHAR2(1);
7667 
7668    -- Cursor to check if there exists RTS workorder in the same visit as of the given workorder and for the given instance.
7669    CURSOR Chk_Rts_Workorder(C_WORKORDER_ID NUMBER, c_ins_id  NUMBER)
7670    IS
7671    SELECT  'x'
7672    FROM    AHL_WORKORDERS WO,
7673            AHL_VISIT_TASKS_B VTS,
7674            AHL_WORKORDERS WO1
7675    WHERE   WO.STATUS_CODE NOT IN ('7','12','17','22' )  -- Cancelled,Closed,Draft and Deleted
7676    AND     WO.VISIT_ID = WO1.VISIT_ID
7677    AND     wo1.workorder_id = C_WORKORDER_ID
7678    AND     VTS.VISIT_TASK_ID = WO.VISIT_TASK_ID
7679    AND     NVL(VTS.RETURN_TO_SUPPLY_FLAG,'N') = 'Y'
7680    AND     VTS.INSTANCE_ID = C_INS_ID;
7681 
7682 BEGIN
7683 
7684     OPEN Chk_Rts_Workorder(p_workorder_id, p_instance_id);
7685     FETCH Chk_Rts_Workorder INTO l_dummy;
7686     IF(Chk_Rts_Workorder%FOUND) THEN
7687         l_result := 'Y';
7688     END IF;
7689     CLOSE Chk_Rts_Workorder;
7690 
7691     RETURN l_result;
7692 END Check_Rts_Workorder_Exists;
7693 -- pdoki added for Marshalling Enhancement, End.
7694 
7695 END AHL_PRD_MTLTXN_PVT ;