[Home] [Help]
PACKAGE BODY: APPS.AHL_PRD_MTLTXN_PVT
Source
1 PACKAGE BODY AHL_PRD_MTLTXN_PVT AS
2 /* $Header: AHLVMTXB.pls 120.28.12010000.4 2008/11/26 11:31:26 jkjain 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 -- Hard coded string used in this proc
9 -- These are the profile names used to populate service request record default values
10
11 C_AHL_DEF_SR_TYPE CONSTANT VARCHAR2(30) := 'AHL_DEFAULT_SR_TYPE';
12 C_AHL_DEF_TASK_EST_DURATION CONSTANT VARCHAR2(40) := 'AHL_DEFAULT_TASK_EST_DURATION';
13
14 --- LOOKUP Tpye for problem code values
15 C_REQUEST_PROBLEM_CODE CONSTANT VARCHAR2(30) := 'REQUEST_PROBLEM_CODE';
16
17 --ITEM Params
18 C_NO_SERIAL_CONTROL CONSTANT NUMBER := 1;
19 C_NO_LOT_CONTROL CONSTANT NUMBER := 1;
20 C_NO_LOCATOR_CONTROL CONSTANT NUMBER := 1;
21 C_SUBINV_LOCATOR CONSTANT NUMBER := 4;
22 C_ITEM_LOCATOR CONSTANT NUMBER := 5;
23 C_JOB_RELEASED CONSTANT VARCHAR2(30) := '3';
24 C_JOB_COMPLETE CONSTANT VARCHAR2(30) := '4';
25 C_JOB_PENDING_QA CONSTANT VARCHAR2(30) := '20';
26 C_JOB_PARTS_HOLD CONSTANT VARCHAR2(30) := '19';
27
28 -- Declare the private procedures.
29 FUNCTION IS_ITEM_TRACKABLE(p_Org_Id IN NUMBER, p_Item_Id IN NUMBER) RETURN BOOLEAN;
30
31 --PROCEDURE SHOW_MTX_ERRORS;
32
33 PROCEDURE Insert_Mtl_Txn_Row
34 (
35 p_x_ahl_mtltxn_rec IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
36 p_material_Transaction_Id IN NUMBER,
37 p_nonroutine_workorder_Id IN NUMBER,
38 p_prim_uom_qty IN NUMBER:=0,
39 x_return_status OUT NOCOPY VARCHAR2,
40 x_msg_count OUT NOCOPY NUMBER,
41 x_msg_data OUT NOCOPY VARCHAR2,
42 x_ahl_mtl_txn_id OUT NOCOPY NUMBER
43 );
44
45 PROCEDURE Insert_Sch_Mtl_Row
46 (
47 p_mtl_txn_Rec IN Ahl_Mtltxn_Rec_Type,
48 x_return_status OUT NOCOPY VARCHAR2,
49 x_msg_count OUT NOCOPY NUMBER,
50 x_msg_data OUT NOCOPY VARCHAR2,
51 x_ahl_sch_mtl_id OUT NOCOPY NUMBER
52 );
53 PROCEDURE Populate_Srvc_Rec(
54 p_item_instance_id NUMBER,
55 p_srvc_rec OUT NOCOPY AHL_PRD_NONROUTINE_PVT.Sr_task_Rec_type,
56 p_x_ahl_mtltxn_rec IN Ahl_Mtltxn_Rec_Type);
57
58 -- Added p_eam_item_type_id for FP ER#6310766.
59 PROCEDURE INSERT_MTL_TXN_INTF
60 (
61 p_x_ahl_mtl_txn_rec IN OUT NOCOPY AHL_MTLTXN_REC_TYPE,
62 p_eam_item_type_id IN NUMBER,
63 p_x_txn_hdr_id IN OUT NOCOPY NUMBER,
64 p_x_txn_intf_id IN OUT NOCOPY NUMBER,
65 p_reservation_flag IN VARCHAR2,
66 x_return_status OUT NOCOPY VARCHAR2
67
68 );
69 procedure dumpInput(p_x_ahl_mtltxn_tbl IN AHL_MTLTXN_TBL_TYPE);
70
71 -- R12: Serial Reservation enhancements.
72 -- Added procedure to relieve reservation when user is issuing a reserved serial
73 -- number against a different workorder.
74 PROCEDURE Relieve_Serial_Reservation(p_ahl_mtl_txn_rec IN AHL_MTLTXN_REC_TYPE,
75 x_reservation_flag IN OUT NOCOPY VARCHAR2,
76 x_return_status IN OUT NOCOPY VARCHAR2
77 );
78
79 -- Added for pre/post user hooks(FP bug# 5903207).
80 PROCEDURE Perform_MtlTxn_Pre( p_x_ahl_mtltxn_tbl IN OUT NOCOPY AHL_MTLTXN_TBL_TYPE,
81 x_msg_count IN OUT NOCOPY NUMBER,
82 x_msg_data IN OUT NOCOPY VARCHAR2,
83 x_return_status IN OUT NOCOPY VARCHAR2);
84
85
86 PROCEDURE Perform_MtlTxn_Post( p_ahl_mtltxn_tbl IN AHL_MTLTXN_TBL_TYPE,
87 x_msg_count IN OUT NOCOPY NUMBER,
88 x_msg_data IN OUT NOCOPY VARCHAR2,
89 x_return_status IN OUT NOCOPY VARCHAR2);
90
91 -- Added for FP ER 6447935.
92 -- breakup input locator concatenated segments to populate MTI.
93 PROCEDURE Get_MTL_LocatorSegs (p_concat_segs IN VARCHAR2,
94 p_organization_id IN NUMBER,
95 p_x_mti_seglist IN OUT NOCOPY fnd_flex_ext.SegmentArray,
96 x_return_status OUT NOCOPY VARCHAR2);
97
98
99 --Declare any types used by the procedure
100 TYPE TXN_INTF_ID_TBL IS TABLE OF NUMBER index by BINARY_INTEGER;
101 TYPE INSTANCE_ID_TBL IS TABLE OF NUMBER index by BINARY_INTEGER;
102 TYPE ITEM_TYPE_TBL IS TABLE OF NUMBER index by BINARY_INTEGER;
103 TYPE SR_MTL_ID_MAP_TBL IS TABLE OF NUMBER index by BINARY_INTEGER;
104
105 --------------------------------------------------------------------
106 -- PROCEDURE
107 -- Convert_Name_To_Id
108 --
109 -- PURPOSE
110 -- Converts Name to ID
111 --------------------------------------------------------------------
112 PROCEDURE Convert_Name_To_Id(
113 p_x_ahl_mtltxn_rec IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
114 p_module_type IN VARCHAR2 := NULL,
115 x_return_status OUT NOCOPY VARCHAR2)
116 IS
117
118 -- Query for validating item segments and selecting item id
119 CURSOR Item_Cur(p_org_id number, p_item_name varchar2) IS
120 SELECT Inventory_Item_Id
121 FROM MTL_SYSTEM_ITEMS_KFV
122 WHERE Concatenated_Segments = p_item_name
123 AND Organization_Id = p_org_id
124 AND ENABLED_FLAG = 'Y'
125 AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
126 AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
127
128 -- Query for validating location segments and selecting location_id
129 /*CURSOR Location_Cur(p_org_id number, p_location_name varchar2) IS
130 SELECT INVENTORY_LOCATION_ID
131 FROM MTL_ITEM_LOCATIONS_KFV
132 WHERE ORGANIZATION_ID = p_org_Id
133 AND CONCATENATED_SEGMENTS = p_location_name
134 AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
135 AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));*/
136 -- fix for bug number 5903275
137 -- modified to retrieve segment19 and 20 from base table to fix bug# 6611033.
138 CURSOR Location_Cur(p_org_id number, p_location_name varchar2) IS
139 SELECT MIL.INVENTORY_LOCATION_ID, MIL_kfv.CONCATENATED_SEGMENTS
140 FROM MTL_ITEM_LOCATIONS_KFV MIL_kfv, MTL_ITEM_LOCATIONS MIL
141 WHERE MIL_kfv.INVENTORY_LOCATION_ID = MIL.INVENTORY_LOCATION_ID
142 AND MIL.ORGANIZATION_ID = p_org_Id
143 AND upper(decode(MIL.segment19, null, MIL_kfv.concatenated_segments,
144 INV_PROJECT.GET_LOCSEGS(MIL_kfv.concatenated_segments) || fnd_flex_ext.get_delimiter('INV', 'MTLL', 101)
145 || INV_ProjectLocator_PUB.get_project_number(MIL.segment19) || fnd_flex_ext.get_delimiter('INV', 'MTLL', 101)
146 || INV_ProjectLocator_PUB.get_task_number(MIL.segment20))) = upper(p_location_name)
147 AND ((MIL.START_DATE_ACTIVE IS NULL) OR (MIL.START_DATE_ACTIVE <= SYSDATE))
148 AND ((MIL.END_DATE_ACTIVE IS NULL) OR (MIL.END_DATE_ACTIVE >= SYSDATE));
149
150 l_locator_segments VARCHAR2(240);
151
152 --Query for validating reason name and selecting reason id.
153 CURSOR Reason_Cur(p_reason_Name varchar2) IS
154 SELECT REASON_ID
155 FROM MTL_TRANSACTION_REASONS
156 WHERE REASON_NAME = p_reason_Name
157 AND (DISABLE_DATE IS NULL OR DISABLE_DATE > SYSDATE);
158
159 -- Query for validating Transaction_Type_NAme and selecting Transaction_Type_Id
160 CURSOR Transaction_Type_Cur(p_Transaction_Type_name varchar2) IS
161 SELECT Transaction_Type_Id
162 FROM MTL_TRANSACTION_TYPES
163 WHERE TRANSACTION_TYPE_NAME = p_Transaction_Type_Name
164 AND (DISABLE_DATE IS NULL OR DISABLE_DATE > SYSDATE);
165
166 -- Query for Selcting Problem_Code
167 CURSOR Fnd_Lookups_Cur(p_Lookup_Meaning varchar2) IS
168 SELECT LOOKUP_CODE
169 FROM FND_LOOKUP_VALUES_VL
170 WHERE MEANING = p_Lookup_Meaning
171 AND LOOKUP_TYPE = C_REQUEST_PROBLEM_CODE
172 AND ENABLED_FLAG = 'Y'
173 AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
174 AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
175 -- Cursor for Selecting UOM from UOM description.
176 CURSOR Uom_Cur(p_Uom_Desc varchar2) IS
177 SELECT UOM_CODE
178 FROM MTL_UNITS_OF_MEASURE
179 WHERE UNIT_OF_MEASURE = p_Uom_Desc;
180 -- Cursor for Wip job id.
181 CURSOR WIP_JOB_ID_CUR(p_wo_id NUMBER) IS
182 SELECT A.WIP_ENTITY_ID, C.ORGANIZATION_ID
183 FROM AHL_WORKORDERS A, AHL_VISIT_TASKS_B B, AHL_VISITS_B C
184 WHERE A.WORKORDER_ID = p_wo_id
185 AND B.VISIT_TASK_ID = A.VISIT_TASK_ID
186 AND C.VISIT_ID = B.VISIT_ID;
187 -- Cursor for Work order operation id.
188 CURSOR WO_OP_CUR(p_wo_id NUMBER, p_oper_seq NUMBER) IS
189 SELECT WORKORDER_OPERATION_ID
190 FROM AHL_WORKORDER_OPERATIONS
191 WHERE WORKORDER_ID = p_wo_id
192 AND OPERATION_SEQUENCE_NUM = p_oper_seq;
193 -- query for converting condition desc
194 CURSOR CONDITION_CUR (p_condition_desc VARCHAR2) IS
195 SELECT STATUS_ID
196 FROM MTL_MATERIAL_STATUSES
197 WHERE STATUS_CODE= RTRIM(LTRIM(p_condition_desc))
198 AND ENABLED_FLAG = 1;
199 -- query for converting Employee/Recepient to employee_id
200 CURSOR RECEPIENT_CUR (p_recepient_name VARCHAR2) IS
201 SELECT PERSON_ID
202 FROM PER_PEOPLE_F
203 WHERE FULL_NAME = p_recepient_name
204 AND SYSDATE BETWEEN NVL(EFFECTIVE_START_DATE,SYSDATE) AND
205 NVL(EFFECTIVE_END_DATE,SYSDATE);
206
207 -- query for converting Employee/Recepient to employee_id
208 CURSOR DEFAULT_USER_CUR
209 IS
210 SELECT A.employee_id
211 FROM FND_USER A
212 WHERE USER_ID=FND_GLOBAL.USER_ID;
213
214 -- Query for Disposition..
215
216 CURSOR DISPOSITION_CUR(C_WORKORDER_ID NUMBER,C_DISP_ID NUMBER)
217 IS
218 /* Tamal [R12 APPSPERF fixes]
219 * R12 Drop 4 - SQL ID: 14399309
220 * Bug #4918991
221 */
222 SELECT DISPOSITION_ID
223 FROM AHL_PRD_DISPOSITIONS_B A
224 WHERE
225 A.WORKORDER_ID = C_WORKORDER_ID AND
226 A.DISPOSITION_ID = C_DISP_ID;
227
228 -- Query based on workorder name.
229 -- Need to strip by OU.
230 CURSOR WORKORDER_CUR(C_WORKORDER_NAME IN VARCHAR2)
231 IS
232 /* Tamal [R12 APPSPERF fixes]
233 * R12 Drop 4 - SQL ID: 14399329
234 * Bug #4918991
235 */
236 SELECT
237 A.JOB_NUMBER,
238 A.WORKORDER_ID,
239 A.ORGANIZATION_ID,
240 A.ORGANIZATION_NAME,
241 A.JOB_STATUS_CODE,
242 A.JOB_STATUS_MEANING,
243 A.WIP_ENTITY_ID
244 FROM
245 AHL_SEARCH_WORKORDERS_V A
246 --AHL_VISITS_B V,
247 --AHL_VISIT_TASKS_B VT,
248 --INV_ORGANIZATION_NAME_V ORG,
249 --FND_LOOKUP_VALUES WO_STS
250 WHERE
251 A.JOB_NUMBER = C_WORKORDER_NAME
252 AND A.JOB_STATUS_CODE NOT IN ('17', '22');
253 --AND A.MASTER_WORKORDER_FLAG = 'N'
254 --AND A.VISIT_TASK_ID = VT.VISIT_TASK_ID
255 --AND VT.VISIT_ID = V.VISIT_ID
256 --AND V.ORGANIZATION_ID = ORG.ORGANIZATION_ID
257 --AND WO_STS.LOOKUP_TYPE = 'AHL_JOB_STATUS'
258 --AND WO_STS.LANGUAGE = USERENV('LANG')
259 --AND WO_STS.LOOKUP_CODE = A.STATUS_CODE;
260
261 -- Query based on workorder ID.
262 -- Added for public api support.
263 CURSOR WORKORDER_ID_CUR(C_WORKORDER_ID IN VARCHAR2)
264 IS
265 SELECT A.job_number,
266 A.workorder_id,
267 A.organization_id,
268 A.Organization_name,
269 A.JOB_STATUS_CODE,
270 A.job_status_meaning,
271 A.wip_entity_id
272 FROM AHL_SEARCH_WORKORDERS_V A
273 WHERE A.workorder_id=C_WORKORDER_ID;
274
275 L_WORKDET_REC WORKORDER_CUR%ROWTYPE;
276 L_WORKDET_ID_REC WORKORDER_ID_CUR%ROWTYPE;
277
278 l_recepient_id NUMBER;
279 BEGIN
280
281 x_return_status := Fnd_Api.G_RET_STS_SUCCESS;
282
283 -- Get the vlaues for Entity ID from Workorders table
284 -- and workorder operation id from workorder_operations table for the given work
285 -- order id and Operation seq number
286 -- ?????????
287
288 IF G_DEBUG='Y' THEN
289 AHL_DEBUG_PUB.debug('Convert_Name_To_Id');
290 END IF;
291
292 IF ( (p_x_ahl_mtltxn_rec.Workorder_Id IS NULL
293 OR p_x_ahl_mtltxn_rec.Workorder_Id = FND_API.G_MISS_NUM)) THEN
294
295 IF (p_x_ahl_mtltxn_rec.WORKORDER_NAME IS NOT NULL AND
296 p_x_ahl_mtltxn_rec.WORKORDER_NAME <> FND_API.G_MISS_CHAR)
297 THEN
298
299 OPEN WORKORDER_CUR(p_x_ahl_mtltxn_rec.WORKORDER_NAME);
300 FETCH WORKORDER_CUR INTO L_WORKDET_REC;
301 IF WORKORDER_CUR%NOTFOUND
302 THEN
303 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WORKORDER');
304 FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_name);
305 FND_MSG_PUB.ADD;
306 x_return_status := Fnd_Api.G_RET_STS_ERROR;
307 ELSIF L_WORKDET_REC.JOB_STATUS_CODE<>'3' AND
308 L_WORKDET_REC.JOB_STATUS_CODE<>'19' AND
309 L_WORKDET_REC.JOB_STATUS_CODE<>'20' AND
310 L_WORKDET_REC.JOB_STATUS_CODE<>'6' AND
311 L_WORKDET_REC.JOB_STATUS_CODE<>'4' THEN
312 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_JOB_STATUS');
313 FND_MESSAGE.Set_Token('STATUS',L_WORKDET_REC.job_status_meaning);
314 FND_MSG_PUB.ADD;
315 x_return_status := Fnd_Api.G_RET_STS_ERROR;
316 ELSE
317 p_x_ahl_mtltxn_rec.Workorder_Id :=L_WORKDET_REC.WORKORDER_ID;
318 p_x_ahl_mtltxn_rec.Workorder_Status :=L_WORKDET_REC.JOB_STATUS_MEANING;
319 p_x_ahl_mtltxn_rec.Workorder_Status_Code :=L_WORKDET_REC.JOB_STATUS_CODE;
320 p_x_ahl_mtltxn_rec.Organization_Id :=L_WORKDET_REC.ORGANIZATION_ID;
321 p_x_ahl_mtltxn_rec.Wip_Entity_Id :=L_WORKDET_REC.WIP_ENTITY_ID;
322 END IF; -- WORKORDER_CUR%NOTFOUND
323 CLOSE WORKORDER_CUR;
324 ELSE -- both Workorder_Id and WORKORDER_NAME are NULLs
325 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_WORKORDER_ID');
326 FND_MSG_PUB.ADD;
327 x_return_status := Fnd_Api.G_RET_STS_ERROR;
328 END IF; -- p_x_ahl_mtltxn_rec.WORKORDER_NAME
329 ELSE -- workorderId is not null.
330 OPEN WORKORDER_ID_CUR(p_x_ahl_mtltxn_rec.Workorder_Id);
331 FETCH WORKORDER_ID_CUR INTO L_WORKDET_ID_REC;
332 IF WORKORDER_ID_CUR%NOTFOUND
333 THEN
334 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WORKORDER');
335 FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_Id);
336 FND_MSG_PUB.ADD;
337 x_return_status := Fnd_Api.G_RET_STS_ERROR;
338 ELSIF L_WORKDET_REC.JOB_STATUS_CODE<>'3' AND -- Released
339 L_WORKDET_REC.JOB_STATUS_CODE<>'19' AND -- Parts Hold
340 L_WORKDET_REC.JOB_STATUS_CODE<>'20' AND -- pending deferral
341 L_WORKDET_REC.JOB_STATUS_CODE<>'6' AND -- on hold
342 L_WORKDET_REC.JOB_STATUS_CODE<>'4' -- complete
343 THEN
344 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_JOB_STATUS');
345 FND_MESSAGE.Set_Token('STATUS',L_WORKDET_ID_REC.job_status_meaning);
346 FND_MSG_PUB.ADD;
347 ELSE
348 p_x_ahl_mtltxn_rec.Workorder_Id := L_WORKDET_ID_REC.WORKORDER_ID;
349 p_x_ahl_mtltxn_rec.Workorder_Status := L_WORKDET_ID_REC.JOB_STATUS_MEANING;
350 p_x_ahl_mtltxn_rec.Workorder_Status_Code := L_WORKDET_ID_REC.JOB_STATUS_CODE;
351 p_x_ahl_mtltxn_rec.Organization_Id := L_WORKDET_ID_REC.ORGANIZATION_ID;
352 p_x_ahl_mtltxn_rec.Wip_Entity_Id :=L_WORKDET_ID_REC.WIP_ENTITY_ID;
353 END IF; -- WORKORDER_ID_CUR%NOTFOUND
354 CLOSE WORKORDER_ID_CUR;
355 END IF; -- p_x_ahl_mtltxn_tbl(i).Workorder_Id
356
357 -- Check for operation sequence number.
358 IF ( p_x_ahl_mtltxn_rec.Operation_Seq_num IS NULL
359 OR p_x_ahl_mtltxn_rec.Operation_Seq_num = FND_API.G_MISS_NUM) THEN
360 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_OPER_SEQ');
361 FND_MSG_PUB.ADD;
362 x_return_status := Fnd_Api.G_RET_STS_ERROR;
363 END IF;
364
365 -- Check for errors.
366 IF (x_return_status = Fnd_Api.G_RET_STS_ERROR)
367 THEN
368 RETURN; -- do not proceed for the rest of the validations.
369 END IF;
370
371 IF (p_x_ahl_mtltxn_rec.Wip_Entity_Id IS NULL
372 OR p_x_ahl_mtltxn_rec.Wip_Entity_Id = FND_API.G_MISS_NUM) THEN
373 IF G_DEBUG='Y' THEN
374 AHL_DEBUG_PUB.debug('Getting WipEntity for['||p_x_ahl_mtltxn_rec.Workorder_Id||']');
375 END IF;
376 OPEN WIP_JOB_ID_CUR(p_x_ahl_mtltxn_rec.Workorder_Id);
377 FETCH WIP_JOB_ID_CUR INTO p_x_ahl_mtltxn_rec.Wip_Entity_Id,p_x_ahl_mtltxn_rec.Organization_Id ;
378 IF(WIP_JOB_ID_CUR%NOTFOUND) THEN
379 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WIP_ENTITY_WO');
380 FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_Id);
381 FND_MSG_PUB.ADD;
382 x_return_status := Fnd_Api.G_RET_STS_ERROR;
383 END IF;
384 CLOSE WIP_JOB_ID_CUR;
385 END IF;
386
387
388
389 IF G_DEBUG='Y' THEN
390 AHL_DEBUG_PUB.debug('after the Wip entity select['||p_x_ahl_mtltxn_rec.Wip_Entity_Id||','||p_x_ahl_mtltxn_rec.Organization_Id||']');
391
392 END IF;
393
394
395 IF (p_x_ahl_mtltxn_rec.Workorder_Operation_Id IS NULL
396 OR p_x_ahl_mtltxn_rec.Workorder_Operation_Id = FND_API.G_MISS_NUM) THEN
397 IF G_DEBUG='Y' THEN
398 AHL_DEBUG_PUB.debug('selecting woopid for['||p_x_ahl_mtltxn_rec.Workorder_Id||','||p_x_ahl_mtltxn_rec.Operation_Seq_num||']');
399
400 END IF;
401 OPEN WO_OP_CUR(p_x_ahl_mtltxn_rec.Workorder_Id,
402 p_x_ahl_mtltxn_rec.Operation_Seq_num);
403 FETCH WO_OP_CUR INTO p_x_ahl_mtltxn_rec.Workorder_Operation_Id ;
404 IF(WO_OP_CUR%NOTFOUND) THEN
405 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WO_OP');
406 FND_MESSAGE.Set_Token('WORKORDER',p_x_ahl_mtltxn_rec.Workorder_Id);
407 FND_MESSAGE.Set_Token('OP_SEQUENCE',p_x_ahl_mtltxn_rec.Operation_Seq_num);
408 FND_MSG_PUB.ADD;
409 x_return_status := Fnd_Api.G_RET_STS_ERROR;
410 END IF;
411 CLOSE WO_OP_CUR;
412 END IF;
413 IF G_DEBUG='Y' THEN
414 AHL_DEBUG_PUB.debug('after the woop id select');
415 END IF;
416
417 --Convert Transaction Type Name into Transaction Type Id
418 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id IS NULL
419 OR p_x_ahl_mtltxn_rec.Transaction_Type_Id = FND_API.G_MISS_NUM) THEN
420 IF G_DEBUG='Y' THEN
421 AHL_DEBUG_PUB.debug('Converting Txn type name['||p_x_ahl_mtltxn_rec.Transaction_Type_Name||']');
422 END IF;
423 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Name IS NULL
424 OR p_x_ahl_mtltxn_rec.Transaction_Type_Name = FND_API.G_MISS_CHAR) THEN
425 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_TXN_TYPE');
426 FND_MSG_PUB.ADD;
427 x_return_status := Fnd_Api.G_RET_STS_ERROR;
428 ELSE
429 OPEN Transaction_Type_Cur(p_x_ahl_mtltxn_rec.Transaction_Type_Name);
430 FETCH Transaction_Type_Cur INTO p_x_ahl_mtltxn_rec.Transaction_Type_Id ;
431 IF(Transaction_Type_Cur%NOTFOUND) THEN
432 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXN_TYPE');
433 FND_MESSAGE.Set_Token('TXN_TYPE',p_x_ahl_mtltxn_rec.Transaction_Type_Name);
434 FND_MSG_PUB.ADD;
435 x_return_status := Fnd_Api.G_RET_STS_ERROR;
436 END IF;
437 CLOSE Transaction_Type_Cur;
438 END IF;
439 END IF;
440 IF G_DEBUG='Y' THEN
441 AHL_DEBUG_PUB.debug('after the txn type select');
442 END IF;
443
444 -- Convert item segments into item id
445 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
446 IF G_DEBUG='Y' THEN
447 AHL_DEBUG_PUB.debug('Converting item for['||to_char(p_x_ahl_mtltxn_rec.Organization_Id)||','||p_x_ahl_mtltxn_rec.Inventory_Item_Segments||']');
448 END IF;
449
450 IF (p_x_ahl_mtltxn_rec.Inventory_Item_Segments IS NULL
451 OR p_x_ahl_mtltxn_rec.Inventory_Item_Segments = FND_API.G_MISS_CHAR) THEN
452 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_ITEM');
453 FND_MSG_PUB.ADD;
454 RAISE FND_API.G_EXC_ERROR;
455 ELSE
456 OPEN Item_Cur(p_x_ahl_mtltxn_rec.Organization_Id,
457 p_x_ahl_mtltxn_rec.Inventory_Item_Segments);
458 FETCH Item_Cur INTO p_x_ahl_mtltxn_rec.Inventory_Item_Id ;
459 IF(Item_Cur%NOTFOUND) THEN
460 FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_ITEM');
461 FND_MESSAGE.Set_Token('FIELD',p_x_ahl_mtltxn_rec.Inventory_Item_Segments);
462 FND_MSG_PUB.ADD;
463 x_return_status := Fnd_Api.G_RET_STS_ERROR;
464 END IF;
465 CLOSE Item_Cur;
466 END IF;
467
468 END IF;
469 IF G_DEBUG='Y'
470 THEN
471 AHL_DEBUG_PUB.debug('after the item id select:'||to_char(p_x_ahl_mtltxn_rec.Inventory_Item_Id)||'.');
472 END IF;
473
474 -- Convert Locator segments into locator id when item is locator controlled.
475 IF (p_x_ahl_mtltxn_rec.Locator_Id IS NULL
476 OR p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
477 IF (p_x_ahl_mtltxn_rec.Locator_Segments IS NOT NULL
478 AND p_x_ahl_mtltxn_rec.Locator_Segments <> FND_API.G_MISS_CHAR) THEN
479 IF G_DEBUG='Y' THEN
480 AHL_DEBUG_PUB.debug('Converting locator['||to_char(p_x_ahl_mtltxn_rec.Organization_Id)||','||p_x_ahl_mtltxn_rec.Locator_Segments||']');
481 END IF;
482 OPEN Location_Cur(p_x_ahl_mtltxn_rec.Organization_Id,
483 p_x_ahl_mtltxn_rec.Locator_Segments);
484 FETCH Location_Cur INTO p_x_ahl_mtltxn_rec.Locator_Id,l_locator_segments ;--Fix for bug number 5903275
485 -- ER 5854712 (if locator not found, it will be created.)
486 /*
487 IF(Location_Cur%NOTFOUND)
488 THEN
489 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATION');
490 FND_MESSAGE.Set_Token('LOCATOR',p_x_ahl_mtltxn_rec.Locator_Segments);
491 FND_MSG_PUB.ADD;
492 x_return_status := Fnd_Api.G_RET_STS_ERROR;
493 ELSE
494 */
495 IF (Location_Cur%FOUND) THEN
496 p_x_ahl_mtltxn_rec.Locator_Segments := l_locator_segments;--Fix for bug number 5903275
497 IF G_DEBUG='Y' THEN
498 AHL_DEBUG_PUB.debug('Converted locator['||to_char(p_x_ahl_mtltxn_rec.Organization_Id)||','||p_x_ahl_mtltxn_rec.Locator_Segments||']');
499 END IF;
500 END IF;
501 CLOSE Location_Cur;
502 END IF;
503
504 END IF;
505 IF G_DEBUG='Y' THEN
506 AHL_DEBUG_PUB.debug('after the locator select');
507 END IF;
508
509 -- convert reason name into reason id.
510 IF (p_x_ahl_mtltxn_rec.Reason_Id IS NULL OR p_x_ahl_mtltxn_rec.Reason_Id = FND_API.G_MISS_NUM)
511 THEN
512 IF (p_x_ahl_mtltxn_rec.Reason_Name IS NOT NULL
513 AND p_x_ahl_mtltxn_rec.Reason_Name <> FND_API.G_MISS_CHAR)
514 THEN
515 IF G_DEBUG='Y' THEN
516 AHL_DEBUG_PUB.debug('Converting reason name'||p_x_ahl_mtltxn_rec.Reason_Name||']');
517 END IF;
518 OPEN Reason_Cur(p_x_ahl_mtltxn_rec.Reason_Name);
519 FETCH Reason_Cur INTO p_x_ahl_mtltxn_rec.Reason_Id ;
520 IF(Reason_Cur%NOTFOUND) THEN
521 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_REASON');
522 FND_MESSAGE.Set_Token('REASON',p_x_ahl_mtltxn_rec.Reason_Name);
523 FND_MSG_PUB.ADD;
524 x_return_status := Fnd_Api.G_RET_STS_ERROR;
525 END IF;
526 CLOSE Reason_Cur;
527 END IF;
528
529 END IF;
530
531 IF G_DEBUG='Y' THEN
532 AHL_DEBUG_PUB.debug('after the reason name select');
533 END IF;
534
535
536 --Convert Problem_code_Meaning to Problem_code incase of returns
537
538 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
539 IF (p_x_ahl_mtltxn_rec.Problem_Code IS NULL
540 OR p_x_ahl_mtltxn_rec.Problem_Code = FND_API.G_MISS_CHAR) THEN
541 IF (p_x_ahl_mtltxn_rec.Problem_Code_Meaning IS NOT NULL
542 AND p_x_ahl_mtltxn_rec.Problem_Code_Meaning <> FND_API.G_MISS_CHAR) THEN
543 IF G_DEBUG='Y' THEN
544 AHL_DEBUG_PUB.debug('Converting Problem code['||p_x_ahl_mtltxn_rec.Problem_Code_Meaning||']');
545
546 END IF;
547 OPEN Fnd_Lookups_Cur(p_x_ahl_mtltxn_rec.Problem_Code_Meaning);
548 FETCH Fnd_Lookups_Cur INTO p_x_ahl_mtltxn_rec.Problem_Code ;
549 IF(Fnd_Lookups_Cur%NOTFOUND) THEN
550 FND_MESSAGE.Set_Name('AHL','AHL_PRD_PROBLEM_CODE_INVALID');
551 FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Problem_Code_Meaning);
552 FND_MSG_PUB.ADD;
553 x_return_status := Fnd_Api.G_RET_STS_ERROR;
554 END IF;
555 CLOSE Fnd_Lookups_Cur;
556 END IF;
557 END IF;
558 IF G_DEBUG='Y' THEN
559 AHL_DEBUG_PUB.debug('after problem code select');
560 END IF;
561 IF (p_x_ahl_mtltxn_rec.Condition_Desc IS NOT NULL
562 AND p_x_ahl_mtltxn_rec.Condition_Desc <> FND_API.G_MISS_CHAR)
563 THEN
564 IF G_DEBUG='Y' THEN
565 AHL_DEBUG_PUB.debug('Getting Condition for['||p_x_ahl_mtltxn_rec.Condition_Desc||']');
566 END IF;
567 OPEN CONDITION_CUR(p_x_ahl_mtltxn_rec.Condition_Desc);
568 FETCH CONDITION_CUR INTO p_x_ahl_mtltxn_rec.Condition;
569
570 IF(CONDITION_CUR%NOTFOUND) THEN
571 FND_MESSAGE.Set_Name('AHL','AHL_PRD_COND_INVALID');
572 FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Condition_Desc);
573 FND_MSG_PUB.ADD;
574 x_return_status := Fnd_Api.G_RET_STS_ERROR;
575 END IF;
576
577 CLOSE CONDITION_CUR;
578 END IF;
579
580
581 IF G_DEBUG='Y' THEN
582 AHL_DEBUG_PUB.debug('after the CONDITION select['||p_x_ahl_mtltxn_rec.CONDITION||']');
583 END IF;
584
585 END IF;
586
587 IF (p_module_type = 'JSP') THEN
588
589 -- nullify id and retrive id from name entered.
590 p_x_ahl_mtltxn_rec.RECEPIENT_ID := NULL;
591
592 IF (p_x_ahl_mtltxn_rec.recepient_name IS NOT NULL AND p_x_ahl_mtltxn_rec.recepient_name <> FND_API.G_MISS_CHAR)
593 THEN
594 OPEN RECEPIENT_CUR(p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
595 FETCH RECEPIENT_CUR INTO p_x_ahl_mtltxn_rec.RECEPIENT_ID;
596 IF(RECEPIENT_CUR%NOTFOUND)
597 THEN
598 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
599 THEN
600 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
601 ELSE
602 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
603 END IF;
604 FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
605 FND_MSG_PUB.ADD;
606 x_return_status := Fnd_Api.G_RET_STS_ERROR;
607 END IF;
608 CLOSE RECEPIENT_CUR;
609 END IF;
610
611 ELSE
612 --if backend call.
613 IF (p_x_ahl_mtltxn_rec.recepient_name IS NOT NULL AND p_x_ahl_mtltxn_rec.recepient_name <> FND_API.G_MISS_CHAR)
614 THEN
615 -- if name is availave retrive id from name
616 OPEN RECEPIENT_CUR(p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
617 FETCH RECEPIENT_CUR INTO l_recepient_id;
618 IF(RECEPIENT_CUR%NOTFOUND)
619 THEN
620 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
621 THEN
622 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
623 ELSE
624 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
625 END IF;
626 FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
627 FND_MSG_PUB.ADD;
628 x_return_status := Fnd_Api.G_RET_STS_ERROR;
629 ELSE
630 -- if id is available then see if this id is the same as the one retrived from the name.
631 IF(p_x_ahl_mtltxn_rec.recepient_id IS NOT NULL AND p_x_ahl_mtltxn_rec.recepient_id <> FND_API.G_MISS_NUM)
632 THEN
633 IF(l_recepient_id <> p_x_ahl_mtltxn_rec.RECEPIENT_ID)
634 THEN
635 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
636 THEN
637 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
638 ELSE
639 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
640 END IF;
641 FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
642 FND_MSG_PUB.ADD;
643 x_return_status := Fnd_Api.G_RET_STS_ERROR;
644 END IF;
645 ELSE
646 -- if id is not available then populate the id with the id retrived.
647 p_x_ahl_mtltxn_rec.recepient_id:=l_recepient_id;
648 END IF;
649 END IF;
650 CLOSE RECEPIENT_CUR;
651 END IF;
652 END IF;
653
654 IF(p_x_ahl_mtltxn_rec.recepient_id IS NULL OR p_x_ahl_mtltxn_rec.recepient_id = FND_API.G_MISS_NUM)
655 THEN
656 IF(NVL(FND_PROFILE.VALUE('AHL_PRD_MTX_RECEPIENT'),'N')='Y')
657 THEN
658 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
659 THEN
660 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_MANDATORY2');
661 ELSE
662 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_MANDATORY');
663 END IF;
664 FND_MSG_PUB.ADD;
665 x_return_status := Fnd_Api.G_RET_STS_ERROR;
666 ELSE
667 OPEN DEFAULT_USER_CUR;
668 FETCH DEFAULT_USER_CUR INTO p_x_ahl_mtltxn_rec.RECEPIENT_ID;
669 IF DEFAULT_USER_CUR%NOTFOUND
670 THEN
671 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
672 THEN
673 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID2');
674 ELSE
675 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTX_PERSON_INVALID');
676 END IF;
677 FND_MESSAGE.Set_Token('RECEPIENT',p_x_ahl_mtltxn_rec.RECEPIENT_NAME);
678 FND_MSG_PUB.ADD;
679 x_return_status := Fnd_Api.G_RET_STS_ERROR;
680 END IF;
681 CLOSE DEFAULT_USER_CUR;
682 END IF;
683 END IF;
684
685 --Convert UOM DESC into UOM
686 IF (p_x_ahl_mtltxn_rec.Uom IS NULL
687 OR p_x_ahl_mtltxn_rec.Uom = FND_API.G_MISS_CHAR) THEN
688 IF G_DEBUG='Y' THEN
689 AHL_DEBUG_PUB.debug('Converting UOM['||p_x_ahl_mtltxn_rec.Uom_Desc||']');
690
691 END IF;
692 IF (p_x_ahl_mtltxn_rec.Uom_Desc IS NULL
693 OR p_x_ahl_mtltxn_rec.Uom_Desc = FND_API.G_MISS_CHAR) THEN
694 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_UOM');
695 FND_MSG_PUB.ADD;
696 x_return_status := Fnd_Api.G_RET_STS_ERROR;
697 ELSE
698 OPEN Uom_Cur(p_x_ahl_mtltxn_rec.Uom_Desc);
699 FETCH Uom_Cur INTO p_x_ahl_mtltxn_rec.Uom ;
700 IF(Uom_Cur%NOTFOUND) THEN
701 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_UOM');
702 FND_MESSAGE.Set_Token('UOM',p_x_ahl_mtltxn_rec.Uom_Desc);
703 FND_MSG_PUB.ADD;
704 x_return_status := Fnd_Api.G_RET_STS_ERROR;
705 END IF;
706 CLOSE Uom_Cur;
707 END IF;
708
709 END IF;
710 IF G_DEBUG='Y' THEN
711 AHL_DEBUG_PUB.debug('after UOM select');
712
713 END IF;
714 EXCEPTION
715 WHEN FND_API.G_EXC_ERROR THEN
716 x_return_status := Fnd_Api.G_RET_STS_ERROR;
717
718 END Convert_Name_To_Id;
719
720
721
722
723 /***********************************************************************/
724
725
726 /***********************************************************************/
727
728 PROCEDURE PERFORM_MTL_TXN
729 (
730 p_api_version IN NUMBER := 1.0,
731 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
732 p_commit IN VARCHAR2 := FND_API.G_FALSE,
733 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
734 p_default IN VARCHAR2 := FND_API.G_FALSE,
735 p_module_type IN VARCHAR2 := NULL,
736 p_create_sr IN VARCHAR2,
737 p_x_ahl_mtltxn_tbl IN OUT NOCOPY Ahl_Mtltxn_Tbl_Type,
738 x_return_status OUT NOCOPY VARCHAR2,
739 x_msg_count OUT NOCOPY NUMBER,
740 x_msg_data OUT NOCOPY VARCHAR2
741 )
742 IS
743 l_api_name CONSTANT VARCHAR2(30) := 'PERFORM_MTL_TXN';
744 l_api_version CONSTANT NUMBER := 1.0;
745 --l_count NUMBER;
746 l_x_Mtl_Txn_id NUMBER;
747 l_sch_Mtl_Id NUMBER;
748 l_Txn_Header_Id NUMBER;
749 l_Txn_tmp_Id NUMBER;
750 l_x_sr_rec_tbl AHL_PRD_NONROUTINE_PVT.Sr_task_tbl_type;
751 l_Txn_Id_Tbl TXN_INTF_ID_TBL;
752 l_instance_id_tbl INSTANCE_ID_TBL;
753 l_eam_item_type_id_tbl ITEM_TYPE_TBL;
754 l_timeout NUMBER;
755 l_outcome BOOLEAN;
756 l_error_msg varchar2(240);
757 l_error_code varchar2(240);
758 l_error BOOLEAN;
759 l_nonrtn_wo_id NUMBER;
760 l_item_instance_id NUMBER;
761 l_eam_item_type_id NUMBER;
762 j INTEGER;
763
764 l_completed_quantity NUMBER;
765 l_object_version_number NUMBER;
766 l_uom_code AHL_SCHEDULE_MATERIALS.UOM%TYPE;
767 l_quantity NUMBER;
768
769 l_concatenated_segments mtl_system_items_kfv.concatenated_segments%TYPE;
770 l_workorder_name ahl_workorders.workorder_name%TYPE;
771
772 l_reservation_flag VARCHAR2(1);
773 l_sr_mtl_id_map_tbl SR_MTL_ID_MAP_TBL;
774
775 --Query to get the error message
776 CURSOR Txn_Error_Cur(p_txn_Id NUMBER) IS
777 SELECT intf.ERROR_EXPLANATION ,intf.ERROR_CODE, kfv.concatenated_segments,
778 WO.workorder_name
779 --FROM MTL_MATERIAL_TRANSACTIONS_TEMP
780 FROM MTL_TRANSACTIONS_INTERFACE INTF, mtl_system_items_kfv kfv,
781 ahl_workorders WO
782 --WHERE TRANSACTION_TEMP_ID = p_txn_Id;
783 WHERE TRANSACTION_INTERFACE_ID = p_txn_Id
784 AND intf.inventory_item_id = kfv.inventory_item_id
785 AND intf.organization_id = kfv.organization_id
786 AND WO.wip_entity_id = intf.transaction_source_id;
787
788 -- Query for finding the scheduled materials
789 CURSOR Sch_Mtl_Cur(p_org_id NUMBER, p_workorder_Op_id NUMBER,
790 p_item_Id NUMBER) IS
791 SELECT COMPLETED_QUANTITY, UOM, object_version_number
792 FROM AHL_SCHEDULE_MATERIALS A
793 WHERE ORGANIZATION_ID = p_org_id
794 AND A.WORKORDER_OPERATION_ID =p_workorder_op_id
795 AND A.INVENTORY_ITEM_ID = p_item_Id
796 AND A.MATERIAL_REQUEST_TYPE <> 'FORECAST'
797 --AND A.status='ACTIVE'
798 --Added for FP ER# 6310725.
799 AND A.status IN ('ACTIVE','HISTORY', 'IN-SERVICE')
800 FOR UPDATE OF COMPLETED_QUANTITY NOWAIT;
801
802 -- Query to check existence of AHL_SCHEDULE_MATERIALS record.
803 CURSOR Sch_Mtl_Exists_Cur(p_org_id NUMBER, p_workorder_Op_id NUMBER,
804 p_item_Id NUMBER) IS
805 SELECT 'x'
806 FROM AHL_SCHEDULE_MATERIALS A
807 WHERE ORGANIZATION_ID = p_org_id
808 AND A.WORKORDER_OPERATION_ID =p_workorder_op_id
809 AND A.INVENTORY_ITEM_ID = p_item_Id
810 AND A.MATERIAL_REQUEST_TYPE <> 'FORECAST'
811 --AND A.status='ACTIVE';
812 --Added for FP ER# 6310725.
813 AND A.status IN ('ACTIVE','HISTORY','IN-SERVICE');
814
815 /* commented out as part of FP bug fix 5172147. Instead querying disposition ID in
816 * procedure validate_txn_rec.
817
818 -- Cursor to check if disposition exists for the item instance.
819 CURSOR ahl_mtl_ret_disp_csr (p_item_instance_id IN NUMBER,
820 p_workorder_id IN NUMBER) IS
821
822 /* Tamal [R12 APPSPERF fixes]
823 * R12 Drop 4 - SQL ID: 14399558
824 * Bug #4918991
825 */
826 /*
827 SELECT 'x'
828 FROM AHL_PRD_DISPOSITIONS_B DISP, AHL_WORKORDERS WO, CSI_ITEM_INSTANCES CSI
829 WHERE
830 DISP.INSTANCE_ID = CSI.INSTANCE_ID AND
831 DISP.WORKORDER_ID = WO.WORKORDER_ID AND
832 WO.WIP_ENTITY_ID = CSI.WIP_JOB_ID AND
833 CSI.LOCATION_TYPE_CODE NOT IN ('PO', 'IN-TRANSIT', 'PROJECT', 'INVENTORY') AND
834 TRUNC(SYSDATE) BETWEEN TRUNC(NVL(CSI.ACTIVE_START_DATE, SYSDATE)) AND TRUNC(NVL(CSI.ACTIVE_END_DATE, SYSDATE)) AND
835 DISP.INSTANCE_ID = p_item_instance_id AND
836 DISP.WORKORDER_ID = p_workorder_id AND
837 CSI.QUANTITY > 0;
838 */
839
840 l_junk VARCHAR2(1);
841
842 -- Added for FP bug# 6086419.
843 l_mr_asso_tbl AHL_PRD_NONROUTINE_PVT.MR_Association_tbl_type;
844
845 -- sracha: Added for ER 5854712.
846 l_valid_flag BOOLEAN;
847
848
849 BEGIN
850 -- Standard start of API savepoint
851 SAVEPOINT PERFORM_MTL_TXN_PVT;
852
853 -- Standard call to check for call compatibility
854 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version, l_api_name,
855 G_PKG_NAME) THEN
856 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
857 END IF;
858 -- Initialize message list if p_init_msg_list is set to TRUE
859 IF FND_API.To_Boolean(p_init_msg_list) THEN
860 FND_MSG_PUB.Initialize;
861 END IF;
862
863 -- Initialize API return status to success
864 x_return_status := FND_API.G_RET_STS_SUCCESS;
865
866 -- call user hook api.
867 -- User Hooks
868 IF (JTF_USR_HKS.Ok_to_execute('AHL_PRD_MATERIAL_TXN_CUHK', 'PERFORM_MTLTXN_PRE', 'B', 'C')) THEN
869 Perform_MtlTxn_Pre(p_x_ahl_mtltxn_tbl => p_x_ahl_mtltxn_tbl,
870 x_msg_count => x_msg_count,
871 x_msg_data => x_msg_data,
872 x_return_status => x_return_status);
873 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
874 RAISE FND_API.G_EXC_ERROR;
875 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
876 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
877 END IF;
878 END IF;
879
880 dumpInput(p_x_ahl_mtltxn_tbl);
881
882
883 IF G_DEBUG='Y' THEN
884 AHL_DEBUG_PUB.enable_debug;
885 AHL_DEBUG_PUB.debug('Entered ahl mtl api');
886 END IF;
887
888 IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
889
890 -- Validation LOOP.
891 --l_Error := false;
892 FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST LOOP
893
894 IF (p_module_type = 'JSP')
895 THEN
896 -- Set all the Ids to null for which there is an LOV.
897 p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id := FND_API.G_MISS_NUM;
898 p_x_ahl_mtltxn_tbl(i).Locator_Id := FND_API.G_MISS_NUM;
899 p_x_ahl_mtltxn_tbl(i).Reason_Id := FND_API.G_MISS_NUM;
900 p_x_ahl_mtltxn_tbl(i).Problem_Code := FND_API.G_MISS_CHAR;
901 --p_x_ahl_mtltxn_tbl(i).Uom := FND_API.G_MISS_CHAR;
902 END IF;
903 /*Public api changes: Moved to Convert_Name_To_Id api
904 --Check the context fields
905 IF ( (p_x_ahl_mtltxn_tbl(i).Workorder_Id IS NULL
906 OR p_x_ahl_mtltxn_tbl(i).Workorder_Id = FND_API.G_MISS_NUM)) THEN
907 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_WORKORDER_ID');
908 FND_MSG_PUB.ADD;
909 l_error := true;
910 ELSIF ( p_x_ahl_mtltxn_tbl(i).Operation_Seq_num IS NULL
911 OR p_x_ahl_mtltxn_tbl(i).Operation_Seq_num = FND_API.G_MISS_NUM) THEN
912 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NULL_OPER_SEQ');
913 FND_MSG_PUB.ADD;
914 l_error := true;
915 ELSE
916 */
917 IF G_DEBUG='Y' THEN
918 AHL_DEBUG_PUB.debug('calling Convert_Name_To_Id for i=['||i||']');
919 END IF;
920
921 -- This procedure will convert name parameters into IDs in the input
922 Convert_Name_To_Id(p_x_ahl_mtltxn_rec => p_x_ahl_mtltxn_tbl(i),
923 p_module_type => p_module_type ,
924 x_return_status => x_return_status );
925
926 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
927 --l_error := true;
928 -- raise error if mandatory paramaters missing or WO-OP
929 -- validation fails.
930 RAISE FND_API.G_EXC_ERROR;
931
932 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
933 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
934 END IF;
935
936
937 IF G_DEBUG='Y' THEN
938 AHL_DEBUG_PUB.debug('calling Validate_Txn_rec for i=['||i||']');
939 END IF;
940
941 --Call Validate_Txn(Ahl_Mtltxn_rec) to validate the material txn record.
942 Validate_Txn_rec(p_x_ahl_mtltxn_rec => p_x_ahl_mtltxn_tbl(i),
943 x_item_instance_id => l_item_instance_id,
944 x_return_status => x_Return_Status,
945 x_msg_data => x_msg_data,
946 x_msg_count => x_msg_Count,
947 x_eam_item_type_id => l_eam_item_type_id );
948
949 IF G_DEBUG='Y' THEN
950 AHL_DEBUG_PUB.debug('After calling Validate_Txn_rec');
951 END IF;
952
953 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
954 l_error := true;
955
956 IF G_DEBUG='Y' THEN
957 AHL_DEBUG_PUB.debug('Error in Validation');
958 END IF;
959 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
960 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
961
962 IF G_DEBUG='Y' THEN
963 AHL_DEBUG_PUB.debug('Unexpected error in Validate_Txn_rec');
964 END IF;
965 ELSE
966 l_instance_id_tbl(i) := l_item_instance_id;
967 l_eam_item_type_id_tbl(i) := l_eam_item_type_id;
968 END IF;
969 -- END IF; -- commented out for public api changes.
970
971 END LOOP;
972 -- End of Validation LOOP
973 IF (l_Error) THEN
974 RAISE FND_API.G_EXC_ERROR;
975 END IF;
976
977 -- Inteface table insert.
978 l_txn_Header_Id := NULL;
979 l_Error := false;
980 FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST LOOP
981
982
983 l_reservation_flag := 'N';
984 IF (p_x_ahl_mtltxn_tbl(i).serial_number IS NOT NULL) THEN
985 -- Added in R12: Serial Reservation.. (to relieve reservation if serial number
986 -- is reserved against a different demand source)
987 Relieve_Serial_Reservation(p_ahl_mtl_txn_rec => p_x_ahl_mtltxn_tbl(i),
988 x_reservation_flag => l_reservation_flag,
989 x_return_status => x_return_status);
990 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
991 l_error := true;
992 RAISE FND_API.G_EXC_ERROR;
993 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
994 l_error := true;
995 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
996 END IF;
997
998 END IF;
999
1000 -- For an issue transaction and return transaction (bug 5499575)
1001 -- IF Material requlrements are not existing in the AHL_SCHEDULE_MATERIALS
1002 -- then insert into the scheduled materials table with submitted status.
1003 OPEN Sch_Mtl_Exists_Cur(p_x_ahl_mtltxn_tbl(i).Organization_Id,
1004 p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id,
1005 p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
1006 FETCH Sch_Mtl_Exists_Cur INTO l_junk;
1007
1008 If(Sch_Mtl_Exists_Cur%NOTFOUND) THEN
1009
1010 --Check if the material exists in the AHL_SCHEDULE_MATERIALS table
1011 --for the given work order operation id.
1012 --IF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
1013
1014 Insert_Sch_Mtl_Row( p_mtl_txn_rec => p_x_ahl_mtltxn_tbl(i),
1015 x_return_status => x_Return_Status,
1016 x_msg_count => x_Msg_Count,
1017 x_msg_data => x_Msg_Data,
1018 x_ahl_sch_mtl_id => l_sch_Mtl_Id);
1019
1020
1021 IF G_DEBUG='Y' THEN
1022 AHL_DEBUG_PUB.debug('after Sch_Mtl insert api');
1023 END IF;
1024
1025 IF (x_return_status = FND_API.G_RET_STS_ERROR
1026 OR x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1027 CLOSE Sch_Mtl_Exists_Cur;
1028 FND_MESSAGE.Set_Name('AHL','AHL_PRD_SCHMTLAPI_ERROR');
1029 FND_MESSAGE.Set_Token('MSG',x_msg_data);
1030 FND_MSG_PUB.ADD;
1031 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1032 END IF;
1033 --END IF; -- fix for bug# 5499575
1034
1035 END IF;
1036 CLOSE Sch_Mtl_Exists_Cur;
1037
1038 --call Insert_Interface_Temp API to insert data into transaction
1039 --temp tables. F
1040
1041 IF G_DEBUG='Y' THEN
1042 AHL_DEBUG_PUB.debug('Calling Insert_Txn_Intf...');
1043 END IF;
1044
1045 -- Added l_eam_item_type_id_tbl(i) for FP ER# 6310766.
1046 Insert_Mtl_Txn_Intf(p_x_ahl_mtl_txn_rec => p_x_ahl_mtltxn_tbl(i),
1047 p_eam_item_type_id => l_eam_item_type_id_tbl(i),
1048 p_x_txn_Hdr_Id => l_txn_Header_Id,
1049 p_x_txn_intf_Id => l_txn_tmp_Id,
1050 p_reservation_flag => l_reservation_flag, -- added for R12.
1051 x_return_status => x_return_status
1052 );
1053
1054 l_txn_Id_Tbl(i) := l_Txn_tmp_Id;
1055 IF G_DEBUG='Y' THEN
1056 AHL_DEBUG_PUB.debug('After Calling Insert_Txn_Intf...ret_status['||x_return_status||']');
1057 AHL_DEBUG_PUB.debug('Ahl_mtltxn_id'||p_x_ahl_mtltxn_tbl(i).ahl_mtltxn_id);
1058 END IF;
1059
1060
1061 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1062 l_error := true;
1063 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1064 l_error := true;
1065 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1066 END IF;
1067
1068 END LOOP; -- End of loop for Interface table inserts
1069
1070 IF(l_error ) THEN
1071 RAISE FND_API.G_EXC_ERROR;
1072 END IF;
1073 -- Now process the interface records
1074 IF G_DEBUG='Y' THEN
1075 AHL_DEBUG_PUB.debug('Before calling wip_mtlInterfaceProc_pub.processInterface....');
1076 END IF;
1077
1078 wip_mtlInterfaceProc_pub.processInterface(
1079 p_txnHdrId => l_Txn_Header_Id,
1080 x_returnStatus => x_return_status
1081 );
1082
1083 --Adithya added the following code to fix bugs 5611465 and 6962468
1084 mo_global.init('AHL');
1085
1086 IF(x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1087 IF G_DEBUG='Y' THEN
1088 AHL_DEBUG_PUB.debug('wip_mtlInterfaceProc_pub.processInterface....errored');
1089 AHL_DEBUG_PUB.debug('count of error msgs: ' || FND_MSG_PUB.COUNT_MSG);
1090 END IF;
1091 --RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1092 END IF;
1093
1094 END IF;
1095
1096 -- Now Loop thru the transaction Id table, Check Errors and update AHL tables
1097 IF (l_txn_Id_Tbl.COUNT > 0) THEN
1098
1099 -- This loop checks for errors. No interface record implies
1100 -- tha there is no error.
1101 l_error := false;
1102 FOR i IN l_txn_Id_Tbl.FIRST..l_txn_Id_Tbl.LAST LOOP
1103
1104 OPEN Txn_Error_cur(l_txn_Id_Tbl(i));
1105 FETCH Txn_Error_cur INTO l_error_msg,l_error_code,
1106 l_concatenated_segments, l_workorder_name;
1107 IF(Txn_Error_cur%FOUND AND (l_error_code IS NOT NULL
1108 OR trim(l_error_code) = '')) THEN
1109
1110 IF G_DEBUG='Y' THEN
1111 AHL_DEBUG_PUB.debug('Error in transaction['||l_error_msg||']');
1112 END IF;
1113
1114 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
1115 FND_MESSAGE.Set_Token('MSG',l_error_msg);
1116 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
1117 FND_MESSAGE.Set_Token('WO_NAME',l_workorder_name);
1118 FND_MSG_PUB.ADD;
1119 l_error := true;
1120 END IF;
1121 CLOSE Txn_Error_cur;
1122 END LOOP;
1123
1124 IF(l_error ) THEN
1125 RAISE FND_API.G_EXC_ERROR;
1126 END IF;
1127
1128 -- No errors returned by WIP API.Initialize message list to
1129 -- remove 'Txn success' message.
1130 IF FND_API.To_Boolean(p_init_msg_list) THEN
1131 FND_MSG_PUB.Initialize;
1132 END IF;
1133
1134 FOR i IN l_txn_Id_Tbl.FIRST..l_txn_Id_Tbl.LAST LOOP
1135
1136 -- Tamal: Bug #4095376: Begin
1137 -- For all cases (i.e. ISSUE / RETURN + whether found in AHL_SCHEDULE_MATERIALS) do the following
1138 l_quantity := p_x_ahl_mtltxn_tbl(i).quantity;
1139
1140 -- The following depends on the fact that ahl_schedule_materials records all quantities in the primary_uom_code
1141 -- of the item, which is the case currently as it is a requirement from WIP
1142 SELECT PRIMARY_UOM_CODE INTO l_uom_code
1143 FROM MTL_SYSTEM_ITEMS_B
1144 WHERE INVENTORY_ITEM_ID = p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id
1145 AND ORGANIZATION_ID = p_x_ahl_mtltxn_tbl(i).Organization_Id;
1146
1147 IF (l_uom_code <> p_x_ahl_mtltxn_tbl(i).uom)
1148 THEN
1149 l_quantity := inv_convert.inv_um_convert
1150 (
1151 item_id => p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id,
1152 precision => null,
1153 from_quantity => p_x_ahl_mtltxn_tbl(i).quantity,
1154 from_unit => p_x_ahl_mtltxn_tbl(i).uom,
1155 to_unit => l_uom_code,
1156 from_name => null,
1157 to_name => null
1158 );
1159
1160 IF (l_quantity < 0)
1161 THEN
1162 FND_MESSAGE.Set_Name('AHL', 'AHL_PRD_UOMCONVERT_ERROR');
1163 FND_MESSAGE.Set_Token('UOM_FROM', p_x_ahl_mtltxn_tbl(i).uom);
1164 FND_MESSAGE.Set_Token('UOM_TO', l_uom_code);
1165 FND_MSG_PUB.ADD;
1166 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1167 END IF;
1168 END IF;
1169 -- Tamal: Bug #4095376: End
1170
1171 OPEN Sch_Mtl_Cur(p_x_ahl_mtltxn_tbl(i).Organization_Id,
1172 p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id,
1173 p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
1174 FETCH Sch_Mtl_Cur INTO l_completed_quantity, l_uom_code, l_object_version_number;
1175
1176 If(Sch_Mtl_Cur%NOTFOUND) THEN
1177 FND_MESSAGE.Set_Name('AHL','AHL_PRD_SCHMTL_NOTFOUND');
1178 FND_MESSAGE.Set_Token('WO_OP',p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id);
1179 FND_MESSAGE.Set_Token('INV_ITEM',p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
1180 FND_MSG_PUB.ADD;
1181 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1182 ELSE
1183
1184 IF G_DEBUG='Y' THEN
1185 AHL_DEBUG_PUB.debug('l_completed_quantity=['||l_completed_quantity||']');
1186 END IF;
1187
1188 -- Tamal: Bug #4095376: Begin
1189 -- Retrieving quantity, then converting to primary uom, etc have been moved out of this ELSE loop
1190 -- to ensure that quantity is not updated to NULL in mtl_txn rows
1191 -- Tamal: Bug #4095376: End
1192
1193 -- Update Completion quantity for cMRO-APS integration.
1194 IF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
1195 -- Issue Txn.
1196 UPDATE AHL_SCHEDULE_MATERIALS
1197 SET completed_quantity = nvl(completed_quantity,0) + l_quantity,
1198 object_version_number = l_object_version_number + 1
1199 WHERE CURRENT OF Sch_Mtl_Cur;
1200 -- 11/20: Commented out updation of completed quantity to fix bug# 6598809
1201 /*
1202 ELSIF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
1203 -- Return Txn.
1204 UPDATE AHL_SCHEDULE_MATERIALS
1205 SET completed_quantity = nvl(completed_quantity,0) - l_quantity,
1206 object_version_number = l_object_version_number + 1
1207 WHERE CURRENT OF Sch_Mtl_Cur;
1208 */
1209 END IF;
1210 END IF;
1211 CLOSE Sch_Mtl_Cur;
1212
1213
1214 --IF( l_x_sr_rec_tbl.COUNT > 0) THEN
1215 -- l_nonrtn_wo_id := l_x_sr_rec_tbl(i).Nonroutine_wo_id;
1216 --END IF;
1217
1218 --Insert a record into the AHL_WORKORDER_MTL_TXNS.
1219 IF(p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id = FND_API.G_MISS_NUM OR
1220 p_x_ahl_mtltxn_tbl(i).disposition_id is NOT NULL) THEN
1221 p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id := NULL;
1222 END IF;
1223 IF(l_nonrtn_wo_id = FND_API.G_MISS_NUM) THEN
1224 l_nonrtn_wo_id := NULL;
1225 END IF;
1226
1227 IF(p_x_ahl_mtltxn_tbl(i).Locator_Id = FND_API.G_MISS_NUM) THEN
1228 p_x_ahl_mtltxn_tbl(i).Locator_Id := NULL;
1229 END IF;
1230
1231 -- In case of dynamic locator creation, retrieve locator ID to populate ahl_workorder_mtl_txns table.
1232 IF (p_x_ahl_mtltxn_tbl(i).locator_segments IS NOT NULL AND
1233 p_x_ahl_mtltxn_tbl(i).locator_id IS NULL) THEN
1234
1235 IF G_DEBUG='Y' THEN
1236 AHL_DEBUG_PUB.DEBUG('Profile mfg_organization_id:' || fnd_profile.value('MFG_ORGANIZATION_ID') );
1237 END IF;
1238
1239 l_valid_flag := fnd_flex_keyval.validate_segs(
1240 operation => 'FIND_COMBINATION'
1241 , appl_short_name => 'INV'
1242 , key_flex_code => 'MTLL'
1243 , structure_number => 101
1244 , concat_segments => p_x_ahl_mtltxn_tbl(i).locator_segments
1245 , values_or_ids => 'V'
1246 , data_set => p_x_ahl_mtltxn_tbl(i).organization_id
1247 );
1248
1249 IF (l_valid_flag) THEN
1250 p_x_ahl_mtltxn_tbl(i).locator_id := fnd_flex_keyval.combination_id;
1251 END IF;
1252
1253 END IF;
1254
1255 IF(p_x_ahl_mtltxn_tbl(i).condition = FND_API.G_MISS_NUM) THEN
1256 p_x_ahl_mtltxn_tbl(i).condition := NULL;
1257 END IF;
1258 IF G_DEBUG='Y' THEN
1259 AHL_DEBUG_PUB.debug('RECEPIENT_ID'||p_x_ahl_mtltxn_tbl(i).RECEPIENT_ID);
1260 END IF;
1261
1262 Insert_Mtl_Txn_Row(p_x_ahl_mtltxn_rec => p_x_ahl_mtltxn_tbl(i),
1263 p_material_Transaction_Id => NULL,
1264 p_nonroutine_workorder_Id => l_nonrtn_wo_id,
1265 p_prim_uom_qty =>L_QUANTITY,
1266 x_return_status => x_Return_Status,
1267 x_msg_count => x_Msg_Count,
1268 x_msg_data => x_Msg_Data,
1269 x_ahl_mtl_txn_id => l_x_Mtl_Txn_Id);
1270
1271
1272 IF G_DEBUG='Y' THEN
1273 AHL_DEBUG_PUB.debug('after mtl_Txn insert api');
1274 AHL_DEBUG_PUB.debug('after mtl_Txn insert api call ret status=['||x_return_status||']');
1275 AHL_DEBUG_PUB.debug('after mtl_Txn insert api call msg=['||x_msg_data||']');
1276 END IF;
1277
1278
1279 IF (x_return_status = FND_API.G_RET_STS_ERROR
1280 OR x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1281 FND_MESSAGE.Set_Name('AHL','AHL_PRD_AHLMTLTXN_ERROR');
1282 FND_MESSAGE.Set_Token('MSG',x_msg_data);
1283 FND_MSG_PUB.ADD;
1284 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1285 END IF;
1286
1287 p_x_ahl_mtltxn_tbl(i).ahl_mtltxn_id := l_x_Mtl_Txn_Id;
1288
1289 -- For trackable returns, update ahl_parts_change table for return_mtl_txn_id.
1290 IF (l_instance_id_tbl(i) IS NOT NULL) AND
1291 (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
1292 AHL_PRD_PARTS_CHANGE_PVT.Update_Material_Return
1293 (
1294 p_return_mtl_txn_id => l_x_Mtl_Txn_Id,
1295 p_workorder_id => p_x_ahl_mtltxn_tbl(i).workorder_id,
1296 p_Item_Instance_Id => l_instance_id_tbl(i),
1297 x_return_status => x_return_status
1298 );
1299
1300 IF G_DEBUG='Y' THEN
1301 AHL_DEBUG_PUB.debug('after PartsChange Update api');
1302 AHL_DEBUG_PUB.debug('after PartsChange Update api call ret status=['||x_return_status||']');
1303 END IF;
1304
1305 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1306 RAISE FND_API.G_EXC_ERROR;
1307 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1308 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1309 END IF;
1310
1311 END IF;
1312
1313 END LOOP;
1314 END IF;
1315
1316 -- END of if which checks the count of transactions created
1317
1318 IF (G_DEBUG='Y') THEN
1319 AHL_DEBUG_PUB.debug('Unservicable profile value:' || G_AHL_UNSERVICEABLE_CONDITION);
1320 AHL_DEBUG_PUB.debug('MRB profile value:' || G_AHL_MRB_CONDITION);
1321 END IF;
1322
1323 IF (l_txn_Id_Tbl.COUNT > 0) THEN
1324 -- THis loop is for creating service request. Since
1325 -- service reques API commits, we need to do this separately.
1326 BEGIN
1327 l_error := false;
1328 --j:=1;
1329 j := l_txn_Id_Tbl.FIRST;
1330 FOR i IN l_txn_Id_Tbl.FIRST..l_txn_Id_Tbl.LAST LOOP
1331 IF G_DEBUG='Y' THEN
1332 AHL_DEBUG_PUB.debug('Processing SR for item:' || p_x_ahl_mtltxn_tbl(i).inventory_item_id);
1333 AHL_DEBUG_PUB.debug('Condition is:' || p_x_ahl_mtltxn_tbl(i).Condition);
1334 AHL_DEBUG_PUB.debug('Disposition ID is:' || p_x_ahl_mtltxn_tbl(i).disposition_id);
1335 AHL_DEBUG_PUB.debug('Instance ID is:' || l_instance_id_tbl(i));
1336 AHL_DEBUG_PUB.debug('Create WO Option is:' || p_x_ahl_mtltxn_tbl(i).create_wo_option);
1337
1338 END IF;
1339
1340 --If (condition is unserviceable/MRB AND P_create_SR == 'Y' ) then
1341 --Select EMP_ID from FND_USERS table for the FND_GLOBAL.USER_ID
1342 --Call Service request API to create service request.
1343 --( AHL_NONROUTINE_JOB_PVT.process_nonroutine_job)
1344 IF ((p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
1345 AND l_eam_item_type_id_tbl(i) = wip_constants.rebuild_item_type
1346 AND (p_x_ahl_mtltxn_tbl(i).Condition = G_AHL_UNSERVICEABLE_CONDITION
1347 OR p_x_ahl_mtltxn_tbl(i).Condition = G_AHL_MRB_CONDITION)
1348 AND (p_create_sr = 'Y')
1349 AND (l_instance_id_tbl(i) IS NOT NULL)
1350 AND (p_x_ahl_mtltxn_tbl(i).disposition_id IS NULL)
1351 -- added for FP bug# 5903318.
1352 AND (p_x_ahl_mtltxn_tbl(i).create_wo_option <> 'CREATE_SR_NO')) THEN
1353 populate_Srvc_Rec( p_item_instance_id => l_instance_id_tbl(i),
1354 p_srvc_rec => l_x_sr_rec_tbl(j),
1355 p_x_ahl_mtltxn_rec => p_x_ahl_mtltxn_tbl(i));
1356 -- populate l_sr_mtl_id_map_tbl to link the mtl_txnID with the l_x_sr_rec_tbl
1357 -- table index.
1358 l_sr_mtl_id_map_tbl(j) := p_x_ahl_mtltxn_tbl(i).ahl_mtltxn_id;
1359
1360 j := j+1;
1361 END IF;
1362
1363 END LOOP;
1364 -- added for FP bug# 5903318.
1365 IF G_DEBUG='Y' THEN
1366 AHL_DEBUG_PUB.debug('Will call service request API if there are srvc request to be created');
1367 AHL_DEBUG_PUB.debug('srvc req rec count=['||to_Char(l_x_sr_rec_tbl.COUNT)||']');
1368 AHL_DEBUG_PUB.debug('mr tbl count=['||to_Char(l_mr_asso_tbl.COUNT)||']');
1369 END IF;
1370
1371
1372 IF(l_x_sr_rec_tbl.COUNT > 0) THEN
1373 AHL_PRD_NONROUTINE_PVT.PROCESS_NONROUTINE_JOB (
1374 p_api_version => 1.0,
1375 p_commit => Fnd_Api.g_false,
1376 p_module_type => NULL,
1377 x_return_status =>x_return_status,
1378 x_msg_count =>x_msg_count,
1379 x_msg_data =>x_msg_data,
1380 p_x_sr_task_tbl =>l_x_sr_rec_tbl,
1381 --Parameter added for bug# 6086419.
1382 p_x_mr_asso_tbl => l_mr_asso_tbl);
1383 IF G_DEBUG='Y' THEN
1384 AHL_DEBUG_PUB.debug('after the srvc req api call ret status=['||x_return_status||']');
1385 AHL_DEBUG_PUB.debug('after the srvc req api call x_msg_count=['||x_msg_count||']');
1386 AHL_DEBUG_PUB.debug('after the srvc req api call msg=['||x_msg_data||']');
1387 END IF;
1388
1389 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1390 RAISE FND_API.G_EXC_ERROR;
1391 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1392 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1393 END IF;
1394
1395 -- ANd now update the nonroutine workorder id in the workorder_mtl_Txns table
1396 FOR j IN l_x_sr_rec_tbl.FIRST..l_x_sr_rec_tbl.LAST LOOP
1397 IF G_DEBUG='Y' THEN
1398 AHL_DEBUG_PUB.debug('l_x_sr_rec_tbl.Incident_id[' || j || ']=['||l_x_sr_rec_tbl(j).Incident_id||']');
1399 AHL_DEBUG_PUB.debug('l_x_sr_rec_tbl.Visit_task_id[' || j || ']=['||l_x_sr_rec_tbl(j).Visit_task_id||']');
1400 AHL_DEBUG_PUB.debug('l_sr_mtl_id_map_tbl[' || j || ']=['|| l_sr_mtl_id_map_tbl(j) ||']');
1401 END IF;
1402
1403 -- update non-routine workorder id.
1404 UPDATE AHL_WORKORDER_MTL_TXNS
1405 SET NON_ROUTINE_WORKORDER_ID = l_x_sr_rec_tbl(j).Nonroutine_wo_id,
1406 -- Adithya added for bug# 6995541
1407 CS_INCIDENT_ID = l_x_sr_rec_tbl(j).Incident_id
1408 WHERE WORKORDER_MTL_TXN_ID = l_sr_mtl_id_map_tbl(j);
1409 END LOOP; -- l_x_sr_rec_tbl.FIRST
1410 END IF;
1411 END; -- begin
1412 END IF; -- Second if stmt which checks the count of txns created.
1413
1414 -- Fix for bug# 5501482.
1415 IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
1416
1417 FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST LOOP
1418 IF (p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE AND
1419 p_x_ahl_mtltxn_tbl(i).Condition = G_AHL_MRB_CONDITION AND
1420 p_x_ahl_mtltxn_tbl(i).disposition_id IS NULL AND
1421 p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id IS NOT NULL AND FND_API.to_boolean( p_commit )) THEN
1422 QA_SS_RESULTS.wrapper_fire_action
1423 (
1424 q_collection_id => p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id,
1425 q_return_status => x_return_status,
1426 q_msg_count => x_msg_count,
1427 q_msg_data => x_msg_data
1428 );
1429
1430 IF ( x_return_status = FND_API.G_RET_STS_ERROR ) THEN
1431 IF ( x_msg_data IS NULL ) THEN
1432 FND_MESSAGE.set_name( 'AHL', 'AHL_PRD_QA_ACTION_UNEXP_ERROR' );
1433 FND_MSG_PUB.add;
1434 RAISE FND_API.G_EXC_ERROR;
1435 END IF;
1436 ELSIF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR ) THEN
1437 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1438 END IF;
1439 END IF;
1440 END LOOP;
1441 END IF;
1442
1443 -- Standard check of p_commit
1444 IF FND_API.To_Boolean(p_commit) THEN
1445 COMMIT WORK;
1446 END IF;
1447 x_return_status := FND_API.G_RET_STS_SUCCESS;
1448 dumpInput(p_x_ahl_mtltxn_tbl);
1449
1450 -- call user hook api.
1451 -- User Hooks
1452 IF (JTF_USR_HKS.Ok_to_execute('AHL_PRD_MATERIAL_TXN_CUHK', 'PERFORM_MTLTXN_POST', 'A', 'C')) THEN
1453 Perform_MtlTxn_Post( p_ahl_mtltxn_tbl => p_x_ahl_mtltxn_tbl,
1454 x_msg_count => x_msg_count,
1455 x_msg_data => x_msg_data,
1456 x_return_status => x_return_status);
1457 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
1458 RAISE FND_API.G_EXC_ERROR;
1459 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1460 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1461 END IF;
1462 END IF;
1463
1464 -- Standard call to get message count and if count is 1, get message
1465 FND_MSG_PUB.Count_And_Get
1466 ( p_count => x_msg_count,
1467 p_data => x_msg_data,
1468 p_encoded => fnd_api.g_false);
1469
1470 --
1471 EXCEPTION
1472 WHEN FND_API.G_EXC_ERROR THEN
1473 x_return_status := FND_API.G_RET_STS_ERROR;
1474 --SHOW_MTX_ERRORS;
1475 Rollback to PERFORM_MTL_TXN_PVT;
1476 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1477 p_data => x_msg_data,
1478 p_encoded => fnd_api.g_false);
1479
1480
1481 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1482 --SHOW_MTX_ERRORS;
1483 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1484 Rollback to PERFORM_MTL_TXN_PVT;
1485 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1486 p_data => x_msg_data,
1487 p_encoded => fnd_api.g_false);
1488
1489 WHEN OTHERS THEN
1490 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1491 --SHOW_MTX_ERRORS;
1492 Rollback to PERFORM_MTL_TXN_PVT;
1493 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
1494 p_procedure_name => 'Perform_Mtl_txn',
1495 p_error_text => SQLERRM);
1496 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
1497 p_data => x_msg_data,
1498 p_encoded => fnd_api.g_false);
1499
1500 END PERFORM_MTL_TXN;
1501
1502 /**********************************************************
1503 This procedure will insert a record in the AHL_WO_MTL_TXNS table.
1504 **********************************************************/
1505
1506 PROCEDURE Insert_Mtl_Txn_Row(
1507 p_x_ahl_mtltxn_rec IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
1508 p_material_Transaction_Id IN NUMBER,
1509 p_nonroutine_workorder_Id IN NUMBER,
1510 p_prim_uom_qty IN NUMBER:=0,
1511 x_return_status OUT NOCOPY VARCHAR2,
1512 x_msg_count OUT NOCOPY NUMBER,
1513 x_msg_data OUT NOCOPY VARCHAR2,
1514 x_ahl_mtl_txn_id OUT NOCOPY NUMBER)
1515 IS
1516 l_x_row_id VARCHAR2(240);
1517 l_quantity NUMBER;
1518 BEGIN
1519
1520 IF G_DEBUG='Y' THEN
1521 AHL_DEBUG_PUB.enable_debug;
1522 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);
1523 AHL_DEBUG_PUB.debug('Entered Insert_Mtl_Txn_Row, p_x_ahl_mtltxn_rec.Recepient_id='||p_x_ahl_mtltxn_rec.Recepient_id);
1524 END IF;
1525 AHL_WORKORDER_MTL_TXNS_PKG.INSERT_ROW(
1526 X_ROWID => l_x_row_id,
1527 X_WORKORDER_MTL_TXN_ID => x_ahl_mtl_txn_id,
1528 X_OBJECT_VERSION_NUMBER => 1,
1529 X_WORKORDER_OPERATION_ID => p_x_ahl_mtltxn_rec.workorder_Operation_Id,
1530 X_MATERIAL_TRANSACTION_ID => p_material_Transaction_Id,
1531 X_COLLECTION_ID => p_x_ahl_mtltxn_rec.Qa_Collection_Id,
1532 X_STATUS_ID => p_x_ahl_mtltxn_rec.Condition,
1533 X_NON_ROUTINE_WORKORDER_ID => p_nonroutine_workorder_Id,
1534 X_ORGANIZATION_ID => p_x_ahl_mtltxn_rec.Organization_Id,
1535 X_INVENTORY_ITEM_ID => p_x_ahl_mtltxn_rec.Inventory_Item_Id,
1536 X_REVISION => p_x_ahl_mtltxn_rec.Revision,
1537 X_LOT_NUMBER => p_x_ahl_mtltxn_rec.Lot_Number,
1538 X_SERIAL_NUMBER => p_x_ahl_mtltxn_rec.Serial_Number,
1539 X_LOCATOR_ID => p_x_ahl_mtltxn_rec.Locator_Id,
1540 X_SUBINVENTORY_CODE => p_x_ahl_mtltxn_rec.Subinventory_Name,
1541 X_QUANTITY => p_x_ahl_mtltxn_rec.Quantity,
1542 X_TRANSACTION_TYPE_ID => p_x_ahl_mtltxn_rec.Transaction_Type_Id,
1543 X_UOM => p_x_ahl_mtltxn_rec.Uom,
1544 X_RECEPIENT_ID => p_x_ahl_mtltxn_rec.Recepient_id,
1545 X_PRIMARY_UOM_QUANTITY => P_PRIM_UOM_QTY,
1546 X_INSTANCE_ID => p_x_ahl_mtltxn_rec.Item_Instance_ID,
1547 X_TRANSACTION_DATE => p_x_ahl_mtltxn_rec.transaction_date,
1548 X_ATTRIBUTE_CATEGORY => NULL ,
1549 X_ATTRIBUTE1 => NULL ,
1550 X_ATTRIBUTE2 => NULL ,
1551 X_ATTRIBUTE3 => NULL ,
1552 X_ATTRIBUTE4 => NULL ,
1553 X_ATTRIBUTE5 => NULL ,
1554 X_ATTRIBUTE6 => NULL ,
1555 X_ATTRIBUTE7 => NULL ,
1556 X_ATTRIBUTE8 => NULL ,
1557 X_ATTRIBUTE9 => NULL ,
1558 X_ATTRIBUTE10 => NULL ,
1559 X_ATTRIBUTE11 => NULL ,
1560 X_ATTRIBUTE12 => NULL ,
1561 X_ATTRIBUTE13 => NULL ,
1562 X_ATTRIBUTE14 => NULL ,
1563 X_ATTRIBUTE15 => NULL ,
1564 X_CREATION_DATE => SYSDATE,
1565 X_CREATED_BY => FND_GLOBAL.USER_ID,
1566 X_LAST_UPDATE_DATE => SYSDATE,
1567 X_LAST_UPDATED_BY => FND_GLOBAL.USER_ID,
1568 X_LAST_UPDATE_LOGIN => FND_GLOBAL.LOGIN_ID);
1569
1570 select AHL_WORKORDER_MTL_TXNS_S.currval into p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id from dual;
1571 -- p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id:=x_ahl_mtl_txn_id;
1572
1573 IF G_DEBUG='Y' THEN
1574 AHL_DEBUG_PUB.debug('Entered p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id='||p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id);
1575 END IF;
1576
1577 /*
1578
1579 EXCEPTION
1580 WHEN OTHERS THEN
1581 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1582 IF G_DEBUG='Y'
1583 THEN
1584 AHL_DEBUG_PUB.debug('Exception inserting into mtl_txn' || SQLCODE);
1585 AHL_DEBUG_PUB.debug('SQLERRM:' || SQLERRM);
1586 END IF;
1587
1588 */
1589 END Insert_Mtl_Txn_Row;
1590 /*******************************************************************
1591 This procedure will do all the validations requried for the matrial
1592 transaction record .
1593 *******************************************************************/
1594
1595
1596 PROCEDURE Validate_item_duplic
1597 (
1598 p_ahl_mtltxn_rec IN Ahl_Mtltxn_Rec_Type
1599 )
1600 IS
1601 CURSOR GET_WO_MTL_TXNS
1602 (C_WRK_ID IN NUMBER,
1603 C_INV_ITEM_ID IN NUMBER,
1604 C_REVISION IN VARCHAR2,
1605 C_SERIAL_NO IN VARCHAR2,
1606 C_WO_MTLTXN_ID IN NUMBER
1607 )
1608 IS
1609 SELECT COUNT(A.workorder_mtl_txn_id)
1610 FROM AHL_WORKORDER_MTL_TXNS A,
1611 AHL_WORKORDER_OPERATIONS_V B,
1612 AHL_SCHEDULE_MATERIALS C
1613 WHERE B.WORKORDER_ID=C_WRK_ID
1614 AND B.WORKORDER_OPERATION_ID=A.WORKORDER_OPERATION_ID
1615 AND B.WORKORDER_OPERATION_ID=C.WORKORDER_OPERATION_ID
1616 AND A.INVENTORY_ITEM_ID=C.INVENTORY_ITEM_ID
1617 AND C.STATUS='ACTIVE'
1618 AND A.INVENTORY_ITEM_ID=C_INV_ITEM_ID
1619 AND A.SERIAL_NUMBER=C_SERIAL_NO
1620 AND A.REVISION=C_REVISION
1621 AND A.workorder_mtl_txn_id<>C_WO_MTLTXN_ID;
1622 L_COUNTER NUMBER:=0;
1623 BEGIN
1624 OPEN GET_WO_MTL_TXNS(p_ahl_mtltxn_rec.WORKORDER_ID,
1625 p_ahl_mtltxn_rec.INVENTORY_ITEM_ID,
1626 p_ahl_mtltxn_rec.REVISION,
1627 p_ahl_mtltxn_rec.SERIAL_NUMBER,
1628 p_ahl_mtltxn_rec.AHL_MTLTXN_ID
1629 );
1630 FETCH GET_WO_MTL_TXNS INTO L_COUNTER;
1631 IF L_COUNTER >0
1632 THEN
1633 FND_MESSAGE.Set_Name('AHL','AHL_PRD_DUPLICATE_ITEM');
1634 FND_MESSAGE.Set_Token('INV_ITEM',p_ahl_mtltxn_rec.INVENTORY_ITEM_SEGMENTS);
1635 FND_MSG_PUB.ADD;
1636 END IF;
1637 CLOSE GET_WO_MTL_TXNS;
1638 END;
1639
1640
1641
1642
1643 PROCEDURE Validate_Txn_Rec
1644 (
1645 p_x_ahl_mtltxn_rec IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
1646 x_item_instance_id OUT NOCOPY NUMBER,
1647 x_eam_item_type_id OUT NOCOPY NUMBER,
1648 x_return_status OUT NOCOPY VARCHAR2,
1649 x_msg_count OUT NOCOPY NUMBER,
1650 x_msg_data OUT NOCOPY VARCHAR2
1651 )
1652 IS
1653 l_Count NUMBER;
1654 l_sql VARCHAR2(1024);
1655 l_serial_control NUMBER;
1656 l_revision_control NUMBER;
1657 l_lot_control NUMBER;
1658 l_location_control NUMBER;
1659 --l_wip_location NUMBER;
1660 l_job_status VARCHAR2(30);
1661 l_plan_id NUMBER;
1662 l_return_status VARCHAR2(10);
1663 l_msg_count NUMBER;
1664 l_msg_data VARCHAR2(240);
1665
1666 l_lot_flag BOOLEAN := FALSE; -- indicator for lot.
1667 l_revision_flag BOOLEAN := FALSE; -- indicator for revision.
1668
1669 --Query to get the Location_id
1670 -- R12: Fix for bug# 5221513
1671 -- IB team have asked us to remove the location validation to fix the issue.
1672 /*
1673 CURSOR CSI_LOCATION_CUR(p_org_id IN NUMBER) IS
1674
1675 --SELECT WIP_LOCATION_ID
1676 --FROM CSI_INSTALL_PARAMETERS;
1677
1678 SELECT location_id
1679 FROM hr_all_organization_units
1680 WHERE organization_id = p_org_id;
1681 */
1682
1683 --Query to validate the instance for the job
1684 -- R12: Fix for bug# 5221513
1685 CURSOR CSI_SER_ITEM_CUR(p_item_id IN NUMBER,
1686 p_job_id IN NUMBER,
1687 p_serial_num IN VARCHAR2) IS
1688 --p_wip_location NUMBER) IS (fix for bug# 5221513).
1689 SELECT INSTANCE_ID
1690 FROM CSI_ITEM_INSTANCES CII
1691 WHERE INVENTORY_ITEM_ID = p_item_id
1692 AND WIP_JOB_ID = p_job_id
1693 AND SERIAL_NUMBER = p_serial_num
1694 AND ACTIVE_START_DATE <= SYSDATE
1695 AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE > SYSDATE))
1696 --AND LOCATION_TYPE_CODE = 'WIP'
1697 --AND LOCATION_ID = p_wip_location
1698 AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
1699 WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
1700 AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1701 --AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE) AND NVL(ACTIVE_END_DATE,SYSDATE));
1702 AND NVL(ACTIVE_START_DATE,SYSDATE) <= SYSDATE
1703 AND SYSDATE < NVL(ACTIVE_END_DATE,SYSDATE+1));
1704
1705 --fix for bug number 4089691 -- inserted by sikumar
1706 --Query to validate the instance for the job during issue if there is a serial number avaialble
1707 CURSOR CSI_ISSUE_SER_ITEM_CUR(p_item_id IN NUMBER,
1708 p_serial_num IN VARCHAR2)IS
1709 SELECT INSTANCE_ID
1710 FROM CSI_ITEM_INSTANCES CII
1711 WHERE INVENTORY_ITEM_ID = p_item_id
1712 AND SERIAL_NUMBER = p_serial_num
1713 AND ACTIVE_START_DATE <= SYSDATE
1714 AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE > SYSDATE))
1715 AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
1716 WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
1717 AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
1718 AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE) AND NVL(ACTIVE_END_DATE,SYSDATE));
1719
1720 --Query to validate workorder operaiton id.
1721 CURSOR AHL_WORKORDER_OPER_CUR (p_wo_id NUMBER,p_op_seq NUMBER, p_woop_id IN NUMBER) IS
1722 SELECT 1
1723 FROM AHL_WORKORDER_OPERATIONS
1724 WHERE WORKORDER_OPERATION_ID =p_woop_id
1725 AND WORKORDER_ID =p_wo_id
1726 AND OPERATION_SEQUENCE_NUM = p_op_seq;
1727
1728 -- Query to validate job id
1729 -- Added project and locator for ER# 5854712.
1730 CURSOR AHL_WIPJOB_CUR (p_org_id NUMBER, p_wo_id NUMBER, p_wipjob IN NUMBER) IS
1731 SELECT A.STATUS_CODE, C.Visit_id, C.Inv_Locator_Id, C.project_id, B.project_task_id,
1732 LOC.subinventory_code
1733 FROM AHL_WORKORDERS A, AHL_VISIT_TASKS_B B, AHL_VISITS_B C, MTL_ITEM_LOCATIONS LOC
1734 WHERE A.WIP_ENTITY_ID = p_wipjob
1735 AND A.WORKORDER_ID = p_wo_id
1736 AND B.VISIT_TASK_ID = A.VISIT_TASK_ID
1737 AND C.VISIT_ID = B.VISIT_ID
1738 AND C.ORGANIZATION_ID = p_org_id
1739 AND C.ORGANIZATION_ID = LOC.ORGANIZATION_ID(+)
1740 AND C.INV_LOCATOR_ID = LOC.INVENTORY_LOCATION_ID(+);
1741
1742 -- Item id validation and selecting serial control code,lot control code values
1743 CURSOR AHL_ITEM_ID_CUR (p_org_id NUMBER, p_item NUMBER) IS
1744 SELECT SERIAL_NUMBER_CONTROL_CODE, LOT_CONTROL_CODE, REVISION_QTY_CONTROL_CODE,
1745 LOCATION_CONTROL_CODE,EAM_ITEM_TYPE, primary_uom_code, concatenated_segments
1746 FROM MTL_SYSTEM_ITEMS_kfv
1747 WHERE ORGANIZATION_ID = p_org_id
1748 AND INVENTORY_ITEM_ID = p_item
1749 AND ENABLED_FLAG = 'Y'
1750 AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
1751 AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
1752
1753 --Sub inventory Query
1754 CURSOR AHL_SUBINV_CUR (p_org_id NUMBER, p_subinv VARCHAR2) IS
1755 SELECT 1
1756 FROM MTL_SECONDARY_INVENTORIES
1757 WHERE ORGANIZATION_ID = p_org_id
1758 AND SECONDARY_INVENTORY_NAME = p_subinv;
1759
1760 -- Locator query
1761 CURSOR AHL_LOCATOR_CUR (p_org_id NUMBER, p_locator_id NUMBER, p_subinv VARCHAR2) IS
1762 SELECT 1
1763 FROM MTL_ITEM_LOCATIONS
1764 WHERE ORGANIZATION_ID = p_org_id
1765 AND INVENTORY_LOCATION_ID = p_locator_id
1766 ;--AND SUBINVENTORY_CODE = p_subinv;
1767
1768 -- Revision query
1769 CURSOR AHL_REVISION_CUR (p_org_id NUMBER, p_item NUMBER, p_revision VARCHAR2) IS
1770 SELECT 1
1771 FROM MTL_ITEM_REVISIONS
1772 WHERE ORGANIZATION_ID = p_org_id
1773 AND INVENTORY_ITEM_ID = p_item
1774 AND REVISION = p_revision;
1775
1776 -- Reason query
1777 CURSOR AHL_REASON_CUR (p_reason NUMBER) IS
1778 SELECT 1
1779 FROM MTL_TRANSACTION_REASONS
1780 WHERE REASON_ID = p_reason;
1781
1782 -- Condition Validaiton
1783 CURSOR Condition_Cur(p_condition NUMBER) IS
1784 SELECT STATUS_ID
1785 FROM MTL_MATERIAL_STATUSES
1786 WHERE STATUS_ID = p_Condition;
1787
1788 -- Query to Validate Problem Code
1789 CURSOR PROBLEM_CODE_LKUP_CUR (p_problem_code VARCHAR2) IS
1790 /* Tamal [R12 APPSPERF fixes]
1791 * R12 Drop 4 - SQL ID: 14399922
1792 * Bug #4918991
1793 */
1794 SELECT 1
1795 FROM FND_LOOKUP_VALUES FL
1796 WHERE
1797 FL.LOOKUP_TYPE = 'REQUEST_PROBLEM_CODE' AND
1798 FL.LOOKUP_CODE = p_problem_code AND
1799 FL.ENABLED_FLAG = 'Y' AND
1800 FL.LANGUAGE = USERENV('LANG') AND
1801 TRUNC(SYSDATE) BETWEEN TRUNC(NVL(FL.START_DATE_ACTIVE,SYSDATE)) AND TRUNC(NVL(FL.END_DATE_ACTIVE,SYSDATE)) AND
1802 (
1803 (
1804 NOT EXISTS
1805 (
1806 SELECT 1
1807 FROM CS_SR_PROB_CODE_MAPPING_DETAIL
1808 WHERE
1809 INCIDENT_TYPE_ID = FND_PROFILE.VALUE('AHL_PRD_SR_TYPE') AND
1810 TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
1811 )
1812 )
1813 OR
1814 (
1815 EXISTS
1816 (
1817 SELECT 1
1818 FROM CS_SR_PROB_CODE_MAPPING_DETAIL
1819 WHERE
1820 INCIDENT_TYPE_ID = FND_PROFILE.VALUE('AHL_PRD_SR_TYPE') AND
1821 PROBLEM_CODE = p_problem_code AND
1822 TRUNC(SYSDATE) BETWEEN TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
1823 )
1824 )
1825 );
1826
1827 /*
1828 CURSOR TRANSACTION_DATE_CUR(C_WORKORDER_OPERATION_ID NUMBER,C_WORKORDER_ID NUMBER,C_INV_ITEM_ID NUMBER) IS
1829 SELECT A.scheduled_start_date
1830 FROM AHL_WORKORDER_OPERATIONS_V A ,AHL_SCHEDULE_MATERIALS B
1831 WHERE A.WORKORDER_OPERATION_ID=C_WORKORDER_OPERATION_ID
1832 AND A.WORKORDER_ID=C_WORKORDER_ID
1833 AND A.WORKORDER_OPERATION_ID=B.WORKORDER_OPERATION_ID
1834 AND B.INVENTORY_ITEM_ID=C_INV_ITEM_ID
1835 AND A.OPERATION_SEQUENCE_NUM=B.OPERATION_SEQUENCE;
1836 */
1837
1838 CURSOR mtl_srl_num_csr(p_org_id In NUMBER,
1839 p_inv_id IN NUMBER,
1840 p_serial_number IN VARCHAR2) IS
1841 SELECT current_subinventory_code, current_locator_id
1842 FROM mtl_serial_numbers
1843 WHERE serial_number = p_serial_number
1844 AND current_organization_id = p_org_id
1845 AND inventory_item_id = p_inv_id
1846 AND current_status = 3;
1847
1848 -- Default Subinventory.
1849 CURSOR wip_params_cur (p_org_id IN NUMBER) IS
1850 SELECT default_pull_supply_subinv, default_pull_supply_locator_id
1851 FROM wip_parameters
1852 WHERE organization_id = p_org_id;
1853
1854 CURSOR workorder_released_date_csr(p_wip_entity_id IN NUMBER) IS
1855 SELECT DATE_RELEASED FROM WIP_DISCRETE_JOBS
1856 WHERE WIP_ENTITY_ID = p_wip_entity_id;
1857
1858 -- Lot Number
1859 CURSOR mtl_lot_num_csr (p_org_id In NUMBER,
1860 p_inventory_item_id IN NUMBER,
1861 p_lot_number IN VARCHAR2) IS
1862 SELECT 'x'
1863 FROM mtl_lot_numbers
1864 WHERE organization_id = p_org_id
1865 AND inventory_item_id = p_inventory_item_id
1866 AND lot_number = p_lot_number
1867 AND nvl(disable_flag,2) = 2;
1868
1869 -- fix for bug# 5172147.
1870 -- check if disposition exists.
1871 -- commented out org_id to fix bug# 6120115.
1872 CURSOR disposition_cur (p_disposition_id in NUMBER,
1873 p_workorder_id in NUMBER,
1874 p_inventory_item_id IN NUMBER,
1875 --p_org_id IN NUMBER,
1876 p_serial_num IN VARCHAR2,
1877 p_revision IN VARCHAR2,
1878 p_lotNumber IN VARCHAR2) IS
1879
1880 SELECT disposition_id
1881 FROM AHL_MTL_RET_DISPOSITIONS_V a
1882 WHERE WORKORDER_ID = p_workorder_id
1883 AND a.disposition_id = p_disposition_id
1884 AND INVENTORY_ITEM_ID = p_inventory_item_id
1885 --AND ORGANIZATION_ID = p_org_id
1886 AND nvl(SERIAL_NUMBER,'x')=NVL(p_serial_num,nvl(SERIAL_NUMBER,'x'))
1887 AND nvl(LOT_NUMBER,'x')=NVL(p_lotNumber,nvl(lot_number,'x'))
1888 AND nvl(ITEM_REVISION,'x')=NVL(p_revision,nvl(ITEM_REVISION,'x'));
1889 -- commented workorder_operation_id condition.
1890 -- disposition created against a material issue will not have this value
1891 -- populated.
1892 --AND WORKORDER_OPERATION_ID is not null;
1893
1894 -- Added for FP bug# 5903318.
1895 -- validate create_wo_option.
1896 CURSOR create_wo_cur(p_lookup_code IN VARCHAR2, p_lookup_type IN VARCHAR2) IS
1897 SELECT meaning
1898 FROM FND_LOOKUP_VALUES_VL
1899 WHERE lookup_type = p_lookup_type
1900 AND lookup_code = p_lookup_code
1901 AND ENABLED_FLAG = 'Y'
1902 AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
1903 AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
1904
1905 l_curr_subinventory_code mtl_serial_numbers.current_subinventory_code%TYPE;
1906 l_curr_locator_id NUMBER;
1907 l_primary_uom_code mtl_system_items.primary_uom_code%TYPE;
1908 l_quantity NUMBER;
1909 l_concatenated_segments mtl_system_items_kfv.concatenated_segments%TYPE;
1910 l_visit_id NUMBER;
1911 l_def_supply_subinv wip_parameters.default_pull_supply_subinv%TYPE;
1912 l_def_supply_locator_id NUMBER;
1913
1914 L_SCHED_START_DATE DATE;
1915
1916 l_workorder_released_date DATE;
1917
1918 l_junk VARCHAR2(1);
1919 l_disposition_id NUMBER;
1920
1921 -- Added for FP bug# 5903318.
1922 l_fnd_meaning fnd_lookup_values_vl.meaning%TYPE;
1923
1924 -- Added for ER# 5854712.
1925 l_inv_locator_id NUMBER;
1926 l_project_id NUMBER;
1927 l_project_task_id NUMBER;
1928 l_subinventory_code mtl_item_locations.subinventory_code%TYPE;
1929 l_project_locator_id NUMBER;
1930
1931
1932 BEGIN
1933
1934 x_return_status := FND_API.G_RET_STS_SUCCESS;
1935
1936 IF G_DEBUG='Y' THEN
1937 AHL_DEBUG_PUB.enable_debug;
1938 AHL_DEBUG_PUB.debug('Ahl Validating TxnType...['||to_Char(p_x_ahl_mtltxn_rec.Transaction_Type_Id)||']');
1939 END IF;
1940
1941 -- Validate transaction type id(should be one of wip conponent issue or return
1942 IF(p_x_ahl_mtltxn_rec.Transaction_Type_Id <> WIP_CONSTANTS.RETCOMP_TYPE AND
1943 p_x_ahl_mtltxn_rec.Transaction_Type_Id <> WIP_CONSTANTS.ISSCOMP_TYPE ) THEN
1944 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXNTYPE');
1945 FND_MSG_PUB.ADD;
1946 x_return_status := FND_API.G_RET_STS_ERROR;
1947 END IF;
1948 -- transaction quantity should be +ve always. Negative quantities are not
1949 -- supported currently.
1950 IF G_DEBUG='Y' THEN
1951 AHL_DEBUG_PUB.debug('Validating quantity...['||to_Char(p_x_ahl_mtltxn_rec.Quantity)||']');
1952 END IF;
1953
1954 IF(nvl(p_x_ahl_mtltxn_rec.Quantity,0) <= 0) THEN
1955 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_QTY');
1956 FND_MESSAGE.Set_Token('QUANTITY',p_x_ahl_mtltxn_rec.Quantity);
1957 FND_MSG_PUB.ADD;
1958 x_return_status := FND_API.G_RET_STS_ERROR;
1959 END IF;
1960
1961 IF G_DEBUG='Y' THEN
1962 AHL_DEBUG_PUB.debug('Validating Wip_Entity_id['
1963 ||to_char(p_x_ahl_mtltxn_rec.Organization_ID)||','
1964 ||to_Char(p_x_ahl_mtltxn_rec.Workorder_ID)
1965 ||','||to_Char(p_x_ahl_mtltxn_rec.Wip_Entity_Id)||']');
1966
1967
1968 END IF;
1969
1970 -- Validate the Wip_job_id and workorder_operation_Id
1971 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);
1972 FETCH AHL_WIPJOB_CUR INTO l_job_status, l_visit_id, l_inv_locator_id,
1973 l_project_id, l_project_task_id, l_subinventory_code;
1974 IF(AHL_WIPJOB_CUR%NOTFOUND) THEN
1975 IF G_DEBUG='Y' THEN
1976 AHL_DEBUG_PUB.debug('JOB validation failed');
1977 END IF;
1978 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WIP_ENTITY');
1979 if(p_x_ahl_mtltxn_rec.Wip_Entity_Id = FND_API.G_MISS_NUM) THEN
1980 p_x_ahl_mtltxn_rec.Wip_Entity_Id := NULL;
1981 END IF;
1982 FND_MESSAGE.Set_Token('WIP_ENTITY',p_x_ahl_mtltxn_rec.Wip_Entity_Id);
1983 FND_MSG_PUB.ADD;
1984 x_return_status := FND_API.G_RET_STS_ERROR;
1985 CLOSE AHL_WIPJOB_CUR;
1986 RETURN;
1987 ELSE
1988 -- Assign visit ID to mtl_txn_rec.
1989 -- Added post 11.5.10.
1990 IF (p_x_ahl_mtltxn_rec.target_visit_id IS NULL OR
1991 p_x_ahl_mtltxn_rec.target_visit_id = FND_API.G_MISS_NUM) THEN
1992 p_x_ahl_mtltxn_rec.target_visit_id := l_visit_id;
1993 END IF;
1994 --
1995
1996 IF G_DEBUG='Y' THEN
1997 AHL_DEBUG_PUB.debug('JOB validation success['||l_job_status||']');
1998 END IF;
1999 IF(l_job_status <> C_JOB_RELEASED
2000 AND l_job_status <> C_JOB_PENDING_QA
2001 AND l_job_status <> C_JOB_COMPLETE
2002 AND l_job_status <> C_JOB_PARTS_HOLD) THEN
2003 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_JOB_STATUS');
2004 FND_MESSAGE.Set_Token('STATUS',l_job_status);
2005 FND_MSG_PUB.ADD;
2006 x_return_status := FND_API.G_RET_STS_ERROR;
2007 END IF;
2008 END IF;
2009 CLOSE AHL_WIPJOB_CUR;
2010
2011 IF G_DEBUG='Y' THEN
2012 AHL_DEBUG_PUB.debug('Validating Workorder operation Id ['||to_Char(p_x_ahl_mtltxn_rec.Workorder_ID)||','
2013 ||to_Char(p_x_ahl_mtltxn_rec.Operation_Seq_Num)||','||to_Char(p_x_ahl_mtltxn_rec.Workorder_Operation_Id)||']');
2014 END IF;
2015
2016
2017 -- Validate the Workorder Id and Operation Seq num
2018 OPEN AHL_WORKORDER_OPER_CUR(p_x_ahl_mtltxn_rec.Workorder_ID,
2019 p_x_ahl_mtltxn_rec.Operation_Seq_Num,
2020 p_x_ahl_mtltxn_rec.Workorder_Operation_Id);
2021 FETCH AHL_WORKORDER_OPER_CUR INTO l_Count;
2022 IF(AHL_WORKORDER_OPER_CUR%NOTFOUND) THEN
2023 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WORKORDER_OP');
2024 FND_MESSAGE.Set_Token('WO',p_x_ahl_mtltxn_rec.Workorder_Id);
2025 FND_MESSAGE.Set_Token('SEQ',p_x_ahl_mtltxn_rec.Operation_Seq_Num);
2026 FND_MESSAGE.Set_Token('OP',p_x_ahl_mtltxn_rec.Workorder_Operation_Id);
2027 FND_MSG_PUB.ADD;
2028 x_return_status := FND_API.G_RET_STS_ERROR;
2029 END IF;
2030 CLOSE AHL_WORKORDER_OPER_CUR;
2031
2032 IF G_DEBUG='Y' THEN
2033 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)||']');
2034 END IF;
2035
2036 If p_x_ahl_mtltxn_rec.transaction_type_id= WIP_CONSTANTS.RETCOMP_TYPE
2037 and p_x_ahl_mtltxn_rec.Ahl_mtltxn_Id is null
2038 then
2039
2040 Validate_item_duplic
2041 (
2042 p_x_ahl_mtltxn_rec
2043 );
2044
2045 End if;
2046
2047
2048 /*
2049 OPEN TRANSACTION_DATE_CUR(
2050 p_x_ahl_mtltxn_rec.Workorder_Operation_Id,
2051 p_x_ahl_mtltxn_rec.Workorder_ID,
2052 p_x_ahl_mtltxn_rec.INVENTORY_ITEM_ID
2053 );
2054 FETCH TRANSACTION_DATE_CUR INTO L_SCHED_START_DATE;
2055 IF TRANSACTION_DATE_CUR%FOUND
2056 THEN
2057 IF L_SCHED_START_DATE > p_x_ahl_mtltxn_rec.TRANSACTION_DATE
2058 THEN
2059 FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_TRANSACTION_DATE');
2060 --FND_MESSAGE.Set_Token('FIELD',p_x_ahl_mtltxn_rec.Inventory_Item_Id);
2061 FND_MSG_PUB.ADD;
2062
2063 END IF;
2064 END IF;
2065 CLOSE TRANSACTION_DATE_CUR;
2066 */
2067
2068
2069 -- Validate Item id
2070 OPEN AHL_ITEM_ID_CUR(p_x_ahl_mtltxn_rec.Organization_ID,
2071 p_x_ahl_mtltxn_rec.Inventory_Item_Id);
2072 FETCH AHL_ITEM_ID_CUR INTO l_serial_Control, l_lot_control, l_revision_control, l_location_control,
2073 x_eam_item_type_id, l_primary_uom_code,
2074 l_concatenated_segments;
2075 IF(AHL_ITEM_ID_CUR%NOTFOUND) THEN
2076 FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_ITEM');
2077 if(p_x_ahl_mtltxn_rec.Inventory_Item_Id = FND_API.G_MISS_NUM) THEN
2078 p_x_ahl_mtltxn_rec.Inventory_Item_Id := NULL;
2079 END IF;
2080 FND_MESSAGE.Set_Token('FIELD',p_x_ahl_mtltxn_rec.Inventory_Item_Id);
2081 FND_MSG_PUB.ADD;
2082 x_return_status := FND_API.G_RET_STS_ERROR;
2083 CLOSE AHL_ITEM_ID_CUR;
2084 -- Skip the rest of the validations.
2085 RETURN;
2086 END IF;
2087 CLOSE AHL_ITEM_ID_CUR;
2088
2089
2090 -- default project locator if move_to_project flag is checked.(ER 5854712).
2091 -- For return txns only.
2092 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE)
2093 AND (p_x_ahl_mtltxn_rec.move_to_project_flag = 'Y') THEN
2094 IF (l_inv_locator_id IS NOT NULL) THEN
2095 IF G_DEBUG='Y' THEN
2096 AHL_DEBUG_PUB.debug('Defaulting from Visit Locator['||l_inv_locator_id||','|| l_project_id ||',' || l_project_task_id || ']');
2097 END IF;
2098 PJM_PROJECT_LOCATOR.Get_DefaultProjectLocator(
2099 p_organization_id => p_x_ahl_mtltxn_rec.organization_id,
2100 p_locator_id => l_inv_locator_id,
2101 p_project_id => l_project_id,
2102 p_task_id => l_project_task_id,
2103 p_project_locator_id => l_project_locator_id);
2104 IF (l_project_locator_id IS NULL) THEN
2105 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATOR');
2106 FND_MESSAGE.Set_Token('LOC',l_inv_locator_id);
2107 FND_MSG_PUB.ADD;
2108 RAISE FND_API.G_EXC_ERROR;
2109 ELSE
2110 p_x_ahl_mtltxn_rec.locator_id := l_project_locator_id;
2111 p_x_ahl_mtltxn_rec.subinventory_name := l_subinventory_code;
2112 END IF;
2113 ELSE
2114 -- move_to_project_flag error.
2115 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MOVEPRJ_FLAG_INVALID');
2116 FND_MSG_PUB.ADD;
2117 END IF;
2118
2119 END IF; -- p_x_ahl_mtltxn_rec.Locator_Id.move_to_project_flag = 'Y'
2120
2121
2122 -- Added Post 11.5.10: Default subinventory.
2123 --
2124 IF G_DEBUG='Y' THEN
2125 AHL_DEBUG_PUB.debug('Defaulting SubInv/Locator['||p_x_ahl_mtltxn_rec.Subinventory_Name||',' ||
2126 p_x_ahl_mtltxn_rec.Locator_id || ']');
2127 END IF;
2128 OPEN wip_params_cur(p_x_ahl_mtltxn_rec.Organization_ID);
2129 FETCH wip_params_cur INTO l_def_supply_subinv, l_def_supply_locator_id;
2130 IF (wip_params_cur%FOUND) THEN
2131 IF ((p_x_ahl_mtltxn_rec.Subinventory_Name IS NULL OR
2132 p_x_ahl_mtltxn_rec.Subinventory_Name = FND_API.G_MISS_CHAR) AND
2133 l_def_supply_subinv IS NOT NULL) THEN
2134 p_x_ahl_mtltxn_rec.Subinventory_Name := l_def_supply_subinv;
2135 END IF;
2136
2137 -- Locator.
2138 -- Added check for ER 5854712 - support dynamic locator creation.
2139 -- default only when both locator ID and Segments are null.
2140 IF ((p_x_ahl_mtltxn_rec.Locator_id IS NULL OR
2141 p_x_ahl_mtltxn_rec.Locator_id = FND_API.G_MISS_NUM) AND
2142 (p_x_ahl_mtltxn_rec.Locator_Segments IS NULL OR
2143 p_x_ahl_mtltxn_rec.Locator_Segments = FND_API.G_MISS_CHAR) AND
2144 l_def_supply_locator_id IS NOT NULL) THEN
2145 p_x_ahl_mtltxn_rec.Locator_id := l_def_supply_locator_id;
2146 END IF;
2147
2148 END IF;
2149 CLOSE wip_params_cur;
2150
2151
2152 IF G_DEBUG='Y' THEN
2153 AHL_DEBUG_PUB.debug('Validating serial num(control, srl_num)['||to_Char(l_serial_Control)||','||p_x_ahl_mtltxn_rec.Serial_Number||']');
2154 END IF;
2155
2156 -- If the item is of serial controlled check if the serial numebr is null
2157 IF((p_x_ahl_mtltxn_rec.Serial_Number IS NULL
2158 OR p_x_ahl_mtltxn_rec.Serial_Number = FND_API.G_MISS_CHAR)
2159 AND (nvl(l_serial_Control,0) <> nvl(C_NO_SERIAL_CONTROL,0)) ) THEN
2160 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_SRLNUM');
2161 FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
2162 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2163 FND_MSG_PUB.ADD;
2164 x_return_status := FND_API.G_RET_STS_ERROR;
2165 END IF;
2166
2167 IF (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL AND
2168 p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR AND
2169 nvl(l_serial_Control,1) = 1) THEN
2170 FND_MESSAGE.Set_Name('AHL','AHL_PRD_SRLNUM_NOTMAND');
2171 FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
2172 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2173 FND_MSG_PUB.ADD;
2174 x_return_status := FND_API.G_RET_STS_ERROR;
2175 END IF;
2176
2177 -- Added for FP bug# 5903318.
2178 IF G_DEBUG='Y' THEN
2179 AHL_DEBUG_PUB.debug('Validating Create WO Option['||p_x_ahl_mtltxn_rec.create_wo_option ||']');
2180 END IF;
2181
2182 -- Validate Create WO Option lookup code.
2183 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
2184 IF (p_x_ahl_mtltxn_rec.create_wo_option IS NULL OR
2185 p_x_ahl_mtltxn_rec.create_wo_option = FND_API.G_MISS_CHAR) THEN
2186 IF (nvl(l_serial_Control,0) = C_NO_SERIAL_CONTROL) THEN
2187 p_x_ahl_mtltxn_rec.create_wo_option := 'CREATE_SR_NO';
2188 ELSE
2189 -- serialized.
2190 p_x_ahl_mtltxn_rec.create_wo_option := 'CREATE_WO_NO';
2191 END IF;
2192 ELSE
2193 -- validate lookup code.
2194 OPEN create_wo_cur(p_x_ahl_mtltxn_rec.create_wo_option, 'AHL_SR_WO_CREATE_OPTIONS');
2195 FETCH create_wo_cur INTO l_fnd_meaning;
2196 IF (create_wo_cur%NOTFOUND) THEN
2197 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INV_LOOKUP');
2198 FND_MESSAGE.Set_Token('LCODE',p_x_ahl_mtltxn_rec.create_wo_option);
2199 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2200 FND_MSG_PUB.ADD;
2201 x_return_status := FND_API.G_RET_STS_ERROR;
2202 END IF;
2203 CLOSE create_wo_cur;
2204 END IF;
2205
2206 IF G_DEBUG='Y' THEN
2207 AHL_DEBUG_PUB.debug('After Defaulting Create WO Option['||p_x_ahl_mtltxn_rec.create_wo_option ||']');
2208 END IF;
2209
2210 -- Check if create_wo_option is valid based on l_serial_Control.
2211 IF (nvl(l_serial_Control,0) = C_NO_SERIAL_CONTROL ) THEN
2212 -- non-serial.
2213 IF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_WO_NO') THEN
2214 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NONSRL_WO_OPT');
2215 FND_MESSAGE.Set_Token('WO_OPT',l_fnd_meaning);
2216 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2217 FND_MSG_PUB.ADD;
2218 x_return_status := FND_API.G_RET_STS_ERROR;
2219 END IF;
2220 END IF;
2221 END IF;
2222 -- End changes for FP bug# 5903318.
2223
2224 IF G_DEBUG='Y' THEN
2225 AHL_DEBUG_PUB.debug('Validating lot num(control, srl_num)['||to_Char(l_lot_Control)||','||p_x_ahl_mtltxn_rec.serial_Number||']');
2226 END IF;
2227
2228 -- If the item is of lot controlled check if the lot number is null
2229 IF((p_x_ahl_mtltxn_rec.Lot_Number IS NULL
2230 OR p_x_ahl_mtltxn_rec.Lot_Number = FND_API.G_MISS_CHAR)
2231 AND (l_lot_Control <> C_NO_LOT_CONTROL) ) THEN
2232 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOT');
2233 FND_MESSAGE.Set_Token('LOT',p_x_ahl_mtltxn_rec.Lot_Number);
2234 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2235 FND_MSG_PUB.ADD;
2236 x_return_status := FND_API.G_RET_STS_ERROR;
2237 END IF;
2238 -- validate lot number.
2239 IF ((p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL AND
2240 p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR)
2241 AND (l_lot_Control <> C_NO_LOT_CONTROL) ) THEN
2242 OPEN mtl_lot_num_csr(p_x_ahl_mtltxn_rec.organization_id,
2243 p_x_ahl_mtltxn_rec.inventory_item_id,
2244 p_x_ahl_mtltxn_rec.Lot_Number);
2245 FETCH mtl_lot_num_csr INTO l_junk;
2246 IF (mtl_lot_num_csr%NOTFOUND) THEN
2247 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOT');
2248 FND_MESSAGE.Set_Token('LOT',p_x_ahl_mtltxn_rec.Lot_Number);
2249 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2250 FND_MSG_PUB.ADD;
2251 x_return_status := FND_API.G_RET_STS_ERROR;
2252 END IF;
2253 CLOSE mtl_lot_num_csr;
2254 END IF;
2255
2256 -- raise error if item is not lot controlled.
2257 IF ((p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL AND
2258 p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR)
2259 AND (l_lot_Control = C_NO_LOT_CONTROL) ) THEN
2260 FND_MESSAGE.Set_Name('AHL','AHL_PRD_LOT_NOTNULL');
2261 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2262 FND_MSG_PUB.ADD;
2263 x_return_status := FND_API.G_RET_STS_ERROR;
2264 END IF;
2265
2266 -- If the locator controlled is true at the item level or sub inventory level
2267 -- check if the locator id is given or not.
2268 /****************************************************************
2269 This vlaidation happens in the MTL API, so we do not need it here
2270
2271 IF G_DEBUG='Y' THEN
2272 AHL_DEBUG_PUB.debug('Validating locator(control, srl_num)['||to_Char(l_location_Control)||','||to_Char(p_x_ahl_mtltxn_rec.Locator_Id)||']');
2273
2274 END IF;
2275
2276 IF(p_x_ahl_mtltxn_rec.Locator_Id IS NULL
2277 OR p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
2278 IF (l_location_Control <> C_NO_LOCATOR_CONTROL) THEN
2279 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATOR');
2280 if(p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
2281 p_x_ahl_mtltxn_rec.Locator_Id := NULL;
2282 END IF;
2283 FND_MESSAGE.Set_Token('LOC',p_x_ahl_mtltxn_rec.Locator_Id);
2284 FND_MSG_PUB.ADD;
2285 x_return_status := FND_API.G_RET_STS_ERROR;
2286 END IF;
2287 ELSE
2288 ****************************************************************/
2289 IF (p_x_ahl_mtltxn_rec.Locator_Id IS NOT NULL AND
2290 p_x_ahl_mtltxn_rec.Locator_Id <> FND_API.G_MISS_NUM) THEN
2291 OPEN AHL_LOCATOR_CUR(p_x_ahl_mtltxn_rec.Organization_ID,
2292 p_x_ahl_mtltxn_rec.Locator_Id,
2293 p_x_ahl_mtltxn_rec.Subinventory_Name);
2294 FETCH AHL_LOCATOR_CUR INTO l_Count;
2295 IF(AHL_LOCATOR_CUR%NOTFOUND) THEN
2296 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOCATOR');
2297 if(p_x_ahl_mtltxn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
2298 p_x_ahl_mtltxn_rec.Locator_Id := NULL;
2299 END IF;
2300 FND_MESSAGE.Set_Token('LOC',p_x_ahl_mtltxn_rec.Locator_Id);
2301 FND_MSG_PUB.ADD;
2302 x_return_status := FND_API.G_RET_STS_ERROR;
2303 END IF;
2304 CLOSE AHL_LOCATOR_CUR;
2305 END IF;
2306
2307 IF G_DEBUG='Y' THEN
2308 AHL_DEBUG_PUB.debug('Validating revision['||p_x_ahl_mtltxn_rec.Revision||']');
2309 END IF;
2310
2311 -- Tamal: Bug #4091154: Begin
2312 -- If item is revision-controlled, then verify revision is NOT NULL and is valid
2313 -- If item is not revision-controlled, then verify revision is NULL
2314 IF (nvl(l_revision_control, -1) = 2)
2315 THEN
2316 IF (p_x_ahl_mtltxn_rec.Revision IS NULL OR p_x_ahl_mtltxn_rec.Revision = FND_API.G_MISS_CHAR)
2317 THEN
2318 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_REVISION');
2319 FND_MESSAGE.Set_Token('REVISION',p_x_ahl_mtltxn_rec.Revision);
2320 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2321 FND_MSG_PUB.ADD;
2322 x_return_status := FND_API.G_RET_STS_ERROR;
2323 ELSE
2324 OPEN AHL_REVISION_CUR
2325 (
2326 p_x_ahl_mtltxn_rec.Organization_ID,
2327 p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2328 p_x_ahl_mtltxn_rec.Revision
2329 );
2330 FETCH AHL_REVISION_CUR INTO l_Count;
2331 IF (AHL_REVISION_CUR%NOTFOUND)
2332 THEN
2333 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_REVISION');
2334 FND_MESSAGE.Set_Token('REVISION',p_x_ahl_mtltxn_rec.Revision);
2335 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2336 FND_MSG_PUB.ADD;
2337 x_return_status := FND_API.G_RET_STS_ERROR;
2338 END IF;
2339 CLOSE AHL_REVISION_CUR;
2340 END IF;
2341 ELSE
2342 IF (p_x_ahl_mtltxn_rec.Revision IS NOT NULL AND p_x_ahl_mtltxn_rec.Revision <> FND_API.G_MISS_CHAR)
2343 THEN
2344 FND_MESSAGE.Set_Name('AHL','AHL_PRD_REVNUM_NOTMAND');
2345 FND_MESSAGE.Set_Token('REV',p_x_ahl_mtltxn_rec.Revision);
2346 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2347 FND_MSG_PUB.ADD;
2348 x_return_status := FND_API.G_RET_STS_ERROR;
2349 END IF;
2350 END IF;
2351 -- Tamal: Bug #4091154: End
2352
2353 --Reason should be valid
2354 IF(p_x_ahl_mtltxn_rec.Reason_Id IS NOT NULL AND
2355 p_x_ahl_mtltxn_rec.Reason_Id <> FND_API.G_MISS_NUM) THEN
2356 OPEN AHL_REASON_CUR(p_x_ahl_mtltxn_rec.Reason_Id);
2357 FETCH AHL_REASON_CUR INTO l_Count;
2358 IF(AHL_REASON_CUR%NOTFOUND) THEN
2359 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVLD_REASON');
2360 FND_MESSAGE.Set_Token('REASON',p_x_ahl_mtltxn_rec.Revision);
2361 FND_MSG_PUB.ADD;
2362 x_return_status := FND_API.G_RET_STS_ERROR;
2363 END IF;
2364 CLOSE AHL_REASON_CUR;
2365 END IF;
2366
2367 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
2368 --Condition Validation
2369 OPEN Condition_Cur(p_x_ahl_mtltxn_rec.Condition);
2370 FETCH Condition_Cur INTO l_Count;
2371 IF(Condition_Cur%NOTFOUND) THEN
2372 FND_MESSAGE.Set_Name('AHL','AHL_PRD_COND_INVALID');
2373 if(p_x_ahl_mtltxn_rec.Condition = FND_API.G_MISS_NUM) THEN
2374 p_x_ahl_mtltxn_rec.Condition := NULL;
2375 END IF;
2376 FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Condition);
2377 FND_MSG_PUB.ADD;
2378 x_return_status := FND_API.G_RET_STS_ERROR;
2379 END IF;
2380 CLOSE Condition_Cur;
2381
2382 IF G_DEBUG='Y' THEN
2383 AHL_DEBUG_PUB.debug('Validating Condition/Subinv['||p_x_ahl_mtltxn_rec.Condition||','||p_x_ahl_mtltxn_rec.Subinventory_Name||']');
2384 END IF;
2385
2386 -- Check if the Condition matches the Sub inventory status
2387 -- in case of unserviceable and MRB
2388 AHL_PRD_UTIL_PKG.Validate_Material_Status(p_x_ahl_mtltxn_rec.Organization_Id,
2389 p_x_ahl_mtltxn_rec.Subinventory_Name,
2390 p_x_ahl_mtltxn_rec.Condition,
2391 l_return_Status);
2392 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
2393 x_return_status := FND_API.G_RET_STS_ERROR;
2394 END IF;
2395
2396 ELSE
2397 IF G_DEBUG='Y' THEN
2398 AHL_DEBUG_PUB.debug('Validating Subinv['||p_x_ahl_mtltxn_rec.Subinventory_Name||']');
2399 END IF;
2400
2401 -- Sub inventory validation
2402 AHL_PRD_UTIL_PKG.Validate_Material_Status(p_x_ahl_mtltxn_rec.Organization_Id,
2403 p_x_ahl_mtltxn_rec.Subinventory_Name,
2404 NULL,
2405 l_return_Status);
2406 IF G_DEBUG='Y' THEN
2407 AHL_DEBUG_PUB.debug('After Validating Subinv['||p_x_ahl_mtltxn_rec.Subinventory_Name||','||x_return_Status || ']');
2408 END IF;
2409
2410 IF (l_return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
2411 x_return_status := FND_API.G_RET_STS_ERROR;
2412 END IF;
2413 END IF;
2414
2415 --If the Transaction_type_id is WIP RETURN
2416 IF (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.RETCOMP_TYPE) THEN
2417
2418
2419 --If the item is trackkable check if the parent item
2420 --exists for the item, if exists return error : AHL_MTL_TXN_NOT_ALLOWED
2421
2422 IF (Is_Item_Trackable(p_x_ahl_mtltxn_rec.Organization_Id,
2423 p_x_ahl_mtltxn_rec.Inventory_Item_Id)) THEN
2424
2425 IF G_DEBUG='Y' THEN
2426 AHL_DEBUG_PUB.debug('selecting wip location id..');
2427 END IF;
2428 -- R12: Fix for bug# 5221513
2429 -- IB team have asked us to remove the location validation to fix the issue.
2430 /*
2431 OPEN CSI_LOCATION_CUR(p_x_ahl_mtltxn_rec.Organization_Id);
2432 FETCH CSI_LOCATION_CUR INTO l_wip_location;
2433 IF(CSI_LOCATION_CUR%NOTFOUND) THEN
2434 FND_MESSAGE.Set_Name('AHL','AHL_PRD_CSI_INSTALL_ERROR');
2435 FND_MSG_PUB.ADD;
2436 x_return_status := FND_API.G_RET_STS_ERROR;
2437 END IF;
2438 CLOSE CSI_LOCATION_CUR;
2439 IF G_DEBUG='Y' THEN
2440 AHL_DEBUG_PUB.debug('wip location id['||to_char(l_wip_location)||']');
2441 END IF;
2442 */
2443
2444 IF (p_x_ahl_mtltxn_rec.Serial_Number IS NULL
2445 OR p_x_ahl_mtltxn_rec.Serial_Number = FND_API.G_MISS_CHAR) THEN
2446
2447 -- Non serialized item:
2448
2449 l_sql := 'SELECT INSTANCE_ID FROM CSI_ITEM_INSTANCES CII ';
2450 l_sql := l_sql || ' WHERE 1=1';
2451 --l_sql := l_Sql || ' AND INV_MASTER_ORGANIZATION_ID=:b1';
2452 l_sql := l_sql || ' AND INVENTORY_ITEM_ID =:b2' ;
2453 l_sql := l_sql || ' AND WIP_JOB_ID=:b3';
2454 --l_sql := l_sql || ' AND INV_SUBINVENTORY_NAME=:b4' ;
2455 -- commenting our location check to fix bug# 5221513.
2456 --l_sql := l_sql || ' AND LOCATION_TYPE_CODE=''WIP''' ;
2457 --l_sql := l_sql || ' AND LOCATION_ID=:b7 ';
2458 -- Fix for bug# 4074091. -- ORA-1422 error.
2459 l_sql := l_sql || ' AND ROWNUM < 2 ';
2460 -- End changes for bug fix.
2461
2462 l_sql := l_sql || ' AND ACTIVE_START_DATE <=SYSDATE ';
2463 l_sql := l_sql || ' AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE>SYSDATE))';
2464 l_sql := l_sql || ' AND NOT EXISTS (SELECT null FROM CSI_II_RELATIONSHIPS CIR ';
2465 l_sql := l_sql || ' WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID ';
2466 l_sql := l_sql || ' AND CIR.RELATIONSHIP_TYPE_CODE = ''COMPONENT-OF''';
2467 l_sql := l_sql || ' AND ((CIR.ACTIVE_START_DATE IS NULL) OR (CIR.ACTIVE_START_DATE <= SYSDATE))';
2468 l_sql := l_sql || ' AND ((CIR.ACTIVE_END_DATE IS NULL) OR (CIR.ACTIVE_END_DATE > SYSDATE)) )';
2469
2470 IF(p_x_ahl_mtltxn_rec.Revision IS NOT NULL
2471 AND p_x_ahl_mtltxn_rec.Revision <> FND_API.G_MISS_CHAR) THEN
2472 --l_sql := l_sql || ' AND INVENTORY_REVISION='''||p_x_ahl_mtltxn_rec.Revision||'''';
2473 l_sql := l_sql || ' AND INVENTORY_REVISION=:b5';
2474 l_revision_flag := TRUE;
2475 END IF;
2476 IF(p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL
2477 AND p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR) THEN
2478 --l_sql := l_sql || ' AND LOT_NUMBER='''||p_x_ahl_mtltxn_rec.Lot_Number||'''';
2479 l_sql := l_sql || ' AND LOT_NUMBER=:b6';
2480 l_lot_flag := TRUE;
2481 END IF;
2482
2483 BEGIN
2484 IF G_DEBUG='Y' THEN
2485 AHL_DEBUG_PUB.debug('Validating instance:item/wipjob/subinv['
2486 ||to_Char(p_x_ahl_mtltxn_rec.Inventory_Item_Id)||','
2487 ||to_Char(p_x_ahl_mtltxn_rec.Wip_Entity_Id)||']');
2488
2489 AHL_DEBUG_PUB.debug('['||p_x_ahl_mtltxn_rec.Subinventory_Name||']');
2490 AHL_DEBUG_PUB.debug('[Length of sql string:'||length(l_sql)||']');
2491 AHL_DEBUG_PUB.debug('[1:'||substr(l_sql,1,240)||']');
2492 AHL_DEBUG_PUB.debug('[2:'||substr(l_sql,241,240)||']');
2493 AHL_DEBUG_PUB.debug('[3:'||substr(l_sql,481,240)||']');
2494 END IF;
2495 -- R12: Fix for bug# 5221513
2496 -- remove WIP location validation.
2497 IF (l_revision_flag = TRUE) AND (l_lot_flag = TRUE)
2498 THEN
2499 EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id
2500 USING --p_x_ahl_mtltxn_rec.Organization_Id,
2501 p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2502 p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2503 --, p_x_ahl_mtltxn_rec.Subinventory_Name,
2504 --l_wip_location,
2505 p_x_ahl_mtltxn_rec.Revision,
2506 p_x_ahl_mtltxn_rec.Lot_Number;
2507 ELSIF (l_revision_flag = TRUE) THEN
2508 EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id
2509 USING --p_x_ahl_mtltxn_rec.Organization_Id,
2510 p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2511 p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2512 --, p_x_ahl_mtltxn_rec.Subinventory_Name,
2513 --l_wip_location,
2514 p_x_ahl_mtltxn_rec.Revision;
2515 ELSIF (l_lot_flag = TRUE) THEN
2516 EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id
2517 USING --p_x_ahl_mtltxn_rec.Organization_Id,
2518 p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2519 p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2520 --, p_x_ahl_mtltxn_rec.Subinventory_Name,
2521 --l_wip_location,
2522 p_x_ahl_mtltxn_rec.Lot_Number;
2523 ELSE
2524 EXECUTE IMMEDIATE l_sql INTO x_Item_Instance_Id
2525 USING --p_x_ahl_mtltxn_rec.Organization_Id,
2526 p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2527 p_x_ahl_mtltxn_rec.Wip_Entity_Id;
2528 --l_wip_location;
2529 --, p_x_ahl_mtltxn_rec.Subinventory_Name;
2530 END IF;
2531 EXCEPTION
2532 WHEN NO_DATA_FOUND THEN
2533 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_TXN_NOT_ALLOWED');
2534 FND_MSG_PUB.ADD;
2535 x_return_status := FND_API.G_RET_STS_ERROR;
2536 END;
2537 p_x_ahl_mtltxn_rec.Item_Instance_ID := x_Item_Instance_Id;
2538
2539 ELSE
2540 -- Serialized item...
2541
2542 IF G_DEBUG='Y' THEN
2543 AHL_DEBUG_PUB.debug('Validating instance:item/wipjob/srl['||to_Char(p_x_ahl_mtltxn_rec.Inventory_Item_Id)||','
2544 ||to_Char(p_x_ahl_mtltxn_rec.Wip_Entity_Id)||','
2545 ||p_x_ahl_mtltxn_rec.Serial_Number||']');
2546 END IF;
2547
2548 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
2549 fnd_log.string
2550 (
2551 fnd_log.level_statement,
2552 'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2553 'p_x_ahl_mtltxn_rec.Inventory_Item_Id : ' || p_x_ahl_mtltxn_rec.Inventory_Item_Id
2554 );
2555 fnd_log.string
2556 (
2557 fnd_log.level_statement,
2558 'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2559 'p_x_ahl_mtltxn_rec.Wip_Entity_Id : ' || p_x_ahl_mtltxn_rec.Wip_Entity_Id
2560 );
2561 fnd_log.string
2562 (
2563 fnd_log.level_statement,
2564 'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2565 'p_x_ahl_mtltxn_rec.Serial_Number : ' || p_x_ahl_mtltxn_rec.Serial_Number
2566 );
2567 /*
2568 fnd_log.string
2569 (
2570 fnd_log.level_statement,
2571 'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2572 'l_wip_location : ' || l_wip_location
2573 );*/
2574 END IF;
2575
2576 OPEN CSI_SER_ITEM_CUR( p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2577 p_x_ahl_mtltxn_rec.Wip_Entity_Id,
2578 p_x_ahl_mtltxn_rec.Serial_Number);
2579 --l_wip_location);
2580 FETCH CSI_SER_ITEM_CUR INTO x_Item_Instance_Id;
2581 IF(CSI_SER_ITEM_CUR%NOTFOUND) THEN
2582 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_TXN_NOT_ALLOWED');
2583 FND_MSG_PUB.ADD;
2584 x_return_status := FND_API.G_RET_STS_ERROR;
2585 END IF;
2586 CLOSE CSI_SER_ITEM_CUR;
2587 p_x_ahl_mtltxn_rec.Item_Instance_ID := x_Item_Instance_Id;
2588 END IF;
2589
2590
2591 --If the 'Condition' is MRB and the QA_COLLECTION_ID is null return
2592 --the Error AHL_NO_QA_RESULTS
2593 --only in case the return is not tied to a disposition.
2594
2595 IF (p_x_ahl_mtltxn_rec.Condition = G_AHL_MRB_CONDITION AND
2596 p_x_ahl_mtltxn_rec.disposition_id IS NULL) THEN
2597
2598 AHL_QA_RESULTS_PVT.get_qa_plan
2599 (
2600 p_api_version => 1.0,
2601 p_init_msg_list => FND_API.G_False,
2602 p_commit => FND_API.G_FALSE,
2603 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
2604 p_default => FND_API.G_FALSE,
2605 p_module_type => 'JSP',
2606 p_organization_id => p_x_ahl_mtltxn_rec.Organization_Id,
2607 p_transaction_number => 2004,
2608 p_col_trigger_value => fnd_profile.value('AHL_MRB_DISP_PLAN_TYPE'),
2609 x_return_status => l_return_status,
2610 x_msg_count => l_msg_count,
2611 x_msg_data => l_msg_data,
2612 x_plan_id => l_plan_id
2613 );
2614 IF(l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2615 l_plan_id := null;
2616 END If;
2617
2618 IF ((l_plan_id is not null) AND
2619 (p_x_ahl_mtltxn_rec.Qa_Collection_Id = FND_API.G_MISS_NUM OR
2620 p_x_ahl_mtltxn_rec.Qa_Collection_Id IS NULL)) THEN
2621 FND_MESSAGE.Set_Name('AHL','AHL_PRD_NO_QA_RESULTS');
2622 FND_MSG_PUB.ADD;
2623 x_return_status := FND_API.G_RET_STS_ERROR;
2624 END IF;
2625 END IF;
2626
2627 IF(p_x_ahl_mtltxn_rec.Problem_Code IS NOT NULL
2628 AND p_x_ahl_mtltxn_rec.Problem_Code <> FND_API.G_MISS_CHAR) THEN
2629
2630 IF G_DEBUG='Y' THEN
2631 AHL_DEBUG_PUB.debug('Validating problem code['||p_x_ahl_mtltxn_rec.Problem_Code||']');
2632 END IF;
2633
2634 OPEN PROBLEM_CODE_LKUP_CUR(p_x_ahl_mtltxn_rec.Problem_Code) ;
2635 FETCH PROBLEM_CODE_LKUP_CUR INTO l_count;
2636 IF(PROBLEM_CODE_LKUP_CUR%NOTFOUND) THEN
2637 FND_MESSAGE.Set_Name('AHL','AHL_PRD_PROBLEM_CODE_INVALID');
2638 FND_MESSAGE.Set_Token('CODE',p_x_ahl_mtltxn_rec.Problem_Code);
2639 FND_MSG_PUB.ADD;
2640 x_return_status := FND_API.G_RET_STS_ERROR;
2641 END IF;
2642 CLOSE PROBLEM_CODE_LKUP_CUR;
2643 END IF;
2644
2645 END IF; -- End of If for trackkable item check
2646 ELSE -- if it is a material issue
2647 -- find out instance id if possible : here (fix for bug number 4089691)
2648 -- Added trackable item check to fix bug# 6331012.
2649 IF (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL
2650 AND p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR
2651 AND Is_Item_Trackable(p_x_ahl_mtltxn_rec.Organization_Id,
2652 p_x_ahl_mtltxn_rec.Inventory_Item_Id)) THEN
2653 OPEN CSI_ISSUE_SER_ITEM_CUR( p_x_ahl_mtltxn_rec.Inventory_Item_Id,p_x_ahl_mtltxn_rec.Serial_Number );
2654 FETCH CSI_ISSUE_SER_ITEM_CUR INTO p_x_ahl_mtltxn_rec.Item_Instance_ID;
2655 IF(CSI_ISSUE_SER_ITEM_CUR%NOTFOUND) THEN
2656 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_TXN_NOT_ALLOWED');
2657 FND_MSG_PUB.ADD;
2658 x_return_status := FND_API.G_RET_STS_ERROR;
2659 END IF;
2660 CLOSE CSI_ISSUE_SER_ITEM_CUR;
2661 END IF;
2662 END IF; -- End of IF for WIP Return Check.
2663
2664
2665 --If the serial number is not null and the quantity is <>1 return the
2666 --Error AHL_INVALID_SRL_QTY
2667
2668 IF G_DEBUG='Y' THEN
2669 AHL_DEBUG_PUB.debug('Validating serial num/qty['||p_x_ahl_mtltxn_rec.quantity||']');
2670 END IF;
2671
2672 IF ((p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR) AND
2673 (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) AND
2674 nvl(l_serial_Control,1) <> 1) THEN
2675 IF (p_x_ahl_mtltxn_rec.uom IS NOT NULL AND
2676 p_x_ahl_mtltxn_rec.uom <> l_primary_uom_code) THEN
2677 -- convert qty to primary quantity.
2678 l_quantity := inv_convert.inv_um_convert
2679 (item_id => p_x_ahl_mtltxn_rec.Inventory_Item_Id,
2680 precision => 6,
2681 from_quantity => p_x_ahl_mtltxn_rec.Quantity,
2682 from_unit => p_x_ahl_mtltxn_rec.uom,
2683 to_unit => l_primary_uom_code,
2684 from_name => NULL,
2685 to_name => NULL );
2686
2687 IF (l_quantity <> 1) THEN
2688 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_ITEM_QTY');
2689 FND_MESSAGE.Set_Token('PRIM_UOM',l_primary_uom_code);
2690 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2691 FND_MSG_PUB.ADD;
2692 x_return_status := FND_API.G_RET_STS_ERROR;
2693 END IF;
2694 ELSE
2695 -- qty in primary uom.
2696 IF (p_x_ahl_mtltxn_rec.Quantity <> 1) THEN
2697 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_ITEM_QTY');
2698 FND_MESSAGE.Set_Token('PRIM_UOM',l_primary_uom_code);
2699 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2700 FND_MSG_PUB.ADD;
2701 x_return_status := FND_API.G_RET_STS_ERROR;
2702 END IF;
2703 END IF; -- uom code.
2704 END IF; -- serial num.
2705
2706 IF G_DEBUG='Y' THEN
2707 AHL_DEBUG_PUB.debug('Validating serial subinv, loc['||p_x_ahl_mtltxn_rec.Serial_Number||']');
2708 END IF;
2709
2710 -- For issue txn with serial number, validate if subinventory and locator match
2711 -- that from mtl_serial_numbers.
2712 IF (p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) AND
2713 (p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR) AND
2714 (nvl(l_serial_Control,0) <> 1) AND
2715 (p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
2716 OPEN mtl_srl_num_csr(p_x_ahl_mtltxn_rec.Organization_ID,
2717 p_x_ahl_mtltxn_rec.Inventory_Item_id,
2718 p_x_ahl_mtltxn_rec.Serial_Number);
2719 FETCH mtl_srl_num_csr INTO l_curr_subinventory_code, l_curr_locator_id;
2720 IF (mtl_srl_num_csr%FOUND) THEN
2721
2722 IF G_DEBUG='Y' THEN
2723 AHL_DEBUG_PUB.debug('Validating serial subinv['||p_x_ahl_mtltxn_rec.subinventory_Name||']');
2724 END IF;
2725
2726 IF (p_x_ahl_mtltxn_rec.subinventory_Name IS NOT NULL AND
2727 p_x_ahl_mtltxn_rec.subinventory_Name <> FND_API.G_MISS_CHAR AND
2728 p_x_ahl_mtltxn_rec.subinventory_Name <> l_curr_subinventory_code) THEN
2729 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_SUB_CODE');
2730 FND_MESSAGE.Set_Token('CODE',l_curr_subinventory_code);
2731 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2732 FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
2733 FND_MSG_PUB.ADD;
2734 x_return_status := FND_API.G_RET_STS_ERROR;
2735 END IF;
2736
2737 IF G_DEBUG='Y' THEN
2738 AHL_DEBUG_PUB.debug('Validating serial subinv['||p_x_ahl_mtltxn_rec.subinventory_Name||']');
2739 END IF;
2740
2741 IF (p_x_ahl_mtltxn_rec.locator_id IS NOT NULL AND
2742 p_x_ahl_mtltxn_rec.locator_id <> FND_API.G_MISS_NUM AND
2743 l_curr_locator_id IS NOT NULL AND
2744 p_x_ahl_mtltxn_rec.locator_id <> l_curr_locator_id) THEN
2745 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_LOC_CODE');
2746 --FND_MESSAGE.Set_Token('CODE',l_curr_locator_id);
2747 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2748 FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
2749 FND_MSG_PUB.ADD;
2750 x_return_status := FND_API.G_RET_STS_ERROR;
2751 END IF;
2752 ELSE
2753 -- serial number not found.
2754 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_SRLNUM');
2755 FND_MESSAGE.Set_Token('ITEM',l_concatenated_segments);
2756 FND_MESSAGE.Set_Token('SER',p_x_ahl_mtltxn_rec.Serial_Number);
2757 FND_MSG_PUB.ADD;
2758 x_return_status := FND_API.G_RET_STS_ERROR;
2759 END IF;
2760
2761 CLOSE mtl_srl_num_csr;
2762 END IF;
2763
2764 IF G_DEBUG='Y' THEN
2765 AHL_DEBUG_PUB.debug('Validating transaction date['||p_x_ahl_mtltxn_rec.transaction_date||']');
2766 END IF;
2767
2768 -- Validate transaction date.
2769 IF (p_x_ahl_mtltxn_rec.transaction_date IS NULL OR
2770 p_x_ahl_mtltxn_rec.transaction_date = FND_API.G_MISS_DATE) THEN
2771 p_x_ahl_mtltxn_rec.transaction_date := SYSDATE;
2772 /*
2773 * defaulting the time component to 23:59:59(for past dates) and systime for current date to fix bug#4096941
2774 */
2775 ELSIF(trunc(p_x_ahl_mtltxn_rec.transaction_date) = trunc(SYSDATE))THEN
2776 p_x_ahl_mtltxn_rec.transaction_date := SYSDATE;
2777 ELSIF(trunc(p_x_ahl_mtltxn_rec.transaction_date) < trunc(SYSDATE))THEN
2778 p_x_ahl_mtltxn_rec.transaction_date := trunc(p_x_ahl_mtltxn_rec.transaction_date) + 86399/86400;
2779 ELSE
2780 IF (p_x_ahl_mtltxn_rec.transaction_date > SYSDATE) THEN
2781
2782 IF G_DEBUG='Y' THEN
2783 AHL_DEBUG_PUB.debug('Error in txn date');
2784 END IF;
2785 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXN_DATE');
2786 FND_MESSAGE.Set_Token('DATE',p_x_ahl_mtltxn_rec.transaction_date);
2787 FND_MSG_PUB.ADD;
2788 x_return_status := FND_API.G_RET_STS_ERROR;
2789 END IF;
2790
2791 END IF;
2792 /*
2793 * adding release date validation(txns date should be > release date) to fix bug#4096941
2794 */
2795 OPEN workorder_released_date_csr(p_x_ahl_mtltxn_rec.Wip_Entity_Id);
2796 FETCH workorder_released_date_csr INTO l_workorder_released_date;
2797 IF(workorder_released_date_csr%NOTFOUND)THEN
2798 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WIP_ENTITY');
2799 IF(p_x_ahl_mtltxn_rec.Wip_Entity_Id = FND_API.G_MISS_NUM) THEN
2800 p_x_ahl_mtltxn_rec.Wip_Entity_Id := NULL;
2801 END IF;
2802 FND_MESSAGE.Set_Token('WIP_ENTITY',p_x_ahl_mtltxn_rec.Wip_Entity_Id);
2803 FND_MSG_PUB.ADD;
2804 x_return_status := FND_API.G_RET_STS_ERROR;
2805 ELSE
2806 IF G_DEBUG='Y' THEN
2807 AHL_DEBUG_PUB.debug('transaction date['||to_char(p_x_ahl_mtltxn_rec.transaction_date,'dd-mon-yyyy hh24:mi:ss') ||']');
2808 AHL_DEBUG_PUB.debug('workorder release date['||to_char(l_workorder_released_date,'dd-mon-yyyy hh24:mi:ss') ||']');
2809 END IF;
2810 IF(l_workorder_released_date > p_x_ahl_mtltxn_rec.transaction_date)THEN
2811 IF G_DEBUG='Y' THEN
2812 AHL_DEBUG_PUB.debug('release date is greater than transaction date');
2813 END IF;
2814 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_TXN_REL_DT');
2815 FND_MESSAGE.Set_Token('TXNS_DATE',to_char(p_x_ahl_mtltxn_rec.transaction_date,'dd-MON-yyyy hh24:mi:ss'));
2816 FND_MESSAGE.Set_Token('REL_DATE',to_char(l_workorder_released_date,'dd-MON-yyyy hh24:mi:ss'));
2817 FND_MSG_PUB.ADD;
2818 x_return_status := FND_API.G_RET_STS_ERROR;
2819 END IF;
2820 END IF;
2821 CLOSE workorder_released_date_csr;
2822
2823 -- validate disposition ID.
2824 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2825 fnd_log.string
2826 (
2827 fnd_log.level_statement,
2828 'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2829 'Validating disposition ID'
2830 );
2831 END IF;
2832
2833 -- validate disposition id.
2834 IF (p_x_ahl_mtltxn_rec.disposition_id IS NOT NULL AND
2835 p_x_ahl_mtltxn_rec.disposition_id <> FND_API.G_MISS_NUM) THEN
2836
2837 -- chk if disposition exists.
2838 OPEN disposition_cur ( p_x_ahl_mtltxn_rec.disposition_id,
2839 p_x_ahl_mtltxn_rec.workorder_id,
2840 p_x_ahl_mtltxn_rec.Inventory_Item_id,
2841 --p_x_ahl_mtltxn_rec.Organization_ID,
2842 p_x_ahl_mtltxn_rec.Serial_Number,
2843 p_x_ahl_mtltxn_rec.Revision,
2844 p_x_ahl_mtltxn_rec.Lot_Number);
2845 FETCH disposition_cur INTO l_disposition_id;
2846 IF (disposition_cur%NOTFOUND) THEN
2847 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTL_DISP_INVALID');
2848 FND_MESSAGE.Set_Token('DISP_ID',p_x_ahl_mtltxn_rec.disposition_id);
2849 FND_MSG_PUB.ADD;
2850 x_return_status := FND_API.G_RET_STS_ERROR;
2851 END IF;
2852 CLOSE disposition_cur;
2853 END IF; -- -- p_x_ahl_mtltxn_rec.disposition_id
2854
2855 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN
2856 fnd_log.string
2857 (
2858 fnd_log.level_statement,
2859 'ahl.plsql.AHL_PRD_MTLTXN_PVT.Validate_Txn_Rec',
2860 'Disposition ID:' || p_x_ahl_mtltxn_rec.disposition_id
2861 );
2862 END IF;
2863
2864 IF G_DEBUG='Y' THEN
2865 AHL_DEBUG_PUB.debug('after validations api ret_status['||x_return_status||']');
2866
2867 END IF;
2868
2869
2870 END VALIDATE_TXN_REC;
2871
2872 /********************************************************************************
2873 This procedure will process the material tranasction record. The records are
2874 inserted into interface tables and the API is called to process the transaction.
2875
2876 ********************************************************************************/
2877
2878 /* Tamal [R12 APPSPERF fixes]
2879 * R12 Drop 4 - SQL ID: 14400039
2880 * Bug #4918991
2881 * Since the following procedure has no functional footprint at the moment, commenting out the procedure
2882 * Additionally marking the SQL ID as Obsolete in sql_repos...
2883 */
2884
2885 /*
2886 PROCEDURE INSERT_MTL_TXN_TEMP
2887 (
2888 p_api_version IN NUMBER := 1.0,
2889 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
2890 p_commit IN VARCHAR2 := FND_API.G_FALSE,
2891 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
2892 p_default IN VARCHAR2 := FND_API.G_FALSE,
2893 p_module_type IN VARCHAR2 := NULL,
2894 p_x_ahl_mtltxn_rec IN OUT NOCOPY Ahl_Mtltxn_Rec_Type,
2895 x_txn_Hdr_Id OUT NOCOPY NUMBER,
2896 x_txn_Tmp_id OUT NOCOPY NUMBER,
2897 x_return_status OUT NOCOPY VARCHAR2,
2898 x_msg_count OUT NOCOPY NUMBER,
2899 x_msg_data OUT NOCOPY VARCHAR2
2900 )
2901 IS
2902 l_Process_Flag VARCHAR2(1);
2903 l_Validation_required VARCHAR2(1);
2904 l_txn_action NUMBER;
2905 l_txn_source_type NUMBER;
2906 l_transaction_Mode NUMBER;
2907 l_Srl_Txn_Tmp_Id NUMBER;
2908 l_mmtt_rec mtl_material_transactions_temp%ROWTYPE;
2909 l_msnt_rec mtl_serial_numbers_temp%ROWTYPE;
2910 l_mtlt_rec mtl_transaction_lots_temp%ROWTYPE;
2911
2912 l_transaction_reference mtl_material_transactions_temp.transaction_reference%TYPE;
2913
2914 CURSOR ACCT_PERIOD_CUR(P_org_Id NUMBER) IS
2915 SELECT ACCT_PERIOD_ID from org_acct_periods
2916 where organization_id = p_org_id and open_flag = 'Y'
2917 AND TRUNC(SYSDATE) BETWEEN TRUNC(PERIOD_START_DATE) AND TRUNC(SCHEDULE_CLOSE_DATE);
2918
2919 CURSOR TRX_ACTION_CUR(p_type_Id NUMBER) IS
2920 SELECT TRANSACTION_ACTION_ID,TRANSACTION_SOURCE_TYPE_ID
2921 from MTL_TRANSACTION_TYPES
2922 where TRANSACTION_TYPE_ID = p_type_Id;
2923
2924 BEGIN
2925 l_Process_Flag := 'W';
2926 l_Validation_required := '1';
2927 l_transaction_Mode := 2;
2928 l_txn_action := 1;
2929
2930 OPEN ACCT_PERIOD_CUR(p_x_ahl_mtltxn_rec.Organization_Id);
2931 FETCH ACCT_PERIOD_CUR INTO l_mmtt_rec.ACCT_PERIOD_ID;
2932 IF(ACCT_PERIOD_CUR%NOTFOUND) THEN
2933 IF G_DEBUG='Y' THEN
2934 AHL_DEBUG_PUB.debug('Did not find the account period for org('||p_x_ahl_mtltxn_rec.Organization_Id||')');
2935
2936 END IF;
2937 CLOSE ACCT_PERIOD_CUR;
2938 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2939 END IF;
2940 CLOSE ACCT_PERIOD_CUR;
2941
2942 OPEN TRX_ACTION_CUR(p_x_ahl_mtltxn_rec.Transaction_Type_Id);
2943 FETCH TRX_ACTION_CUR INTO l_txn_action, l_txn_source_type;
2944 IF(TRX_ACTION_CUR%NOTFOUND) THEN
2945 IF G_DEBUG='Y' THEN
2946 AHL_DEBUG_PUB.debug('Did not find the Txn Type');
2947
2948 END IF;
2949 CLOSE TRX_ACTION_CUR;
2950 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2951 END IF;
2952 CLOSE TRX_ACTION_CUR;
2953
2954 l_mmtt_rec.SOURCE_CODE := 'AHL' ;
2955 l_mmtt_rec.SOURCE_LINE_ID := 1;
2956 l_mmtt_rec.TRANSACTION_MODE := l_transaction_Mode;
2957
2958 IF (p_x_ahl_mtltxn_rec.transaction_reference = FND_API.G_MISS_CHAR) THEN
2959 l_transaction_reference := NULL;
2960 ELSE
2961 l_transaction_reference := p_x_ahl_mtltxn_rec.transaction_reference;
2962 END IF;
2963
2964 l_mmtt_rec.LOCK_FLAG := '';
2965 l_mmtt_rec.LAST_UPDATE_DATE := SYSDATE;
2966 l_mmtt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
2967 l_mmtt_rec.CREATION_DATE := SYSDATE;
2968 l_mmtt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
2969 l_mmtt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
2970 --l_mmtt_rec.PROGRAM_APPLICATION_ID :=
2971 --l_mmtt_rec.PROGRAM_ID :=
2972 --l_mmtt_rec.PROGRAM_UPDATE_DATE :=
2973 l_mmtt_rec.INVENTORY_ITEM_ID := p_x_ahl_mtltxn_rec.Inventory_Item_Id;
2974 if(p_x_ahl_mtltxn_rec.Revision IS NOT NULL
2975 AND p_x_ahl_mtltxn_rec.Revision <> FND_API.G_MISS_CHAR) THEN
2976 l_mmtt_rec.REVISION := p_x_ahl_mtltxn_rec.Revision;
2977 END IF;
2978 l_mmtt_rec.ORGANIZATION_ID := p_x_ahl_mtltxn_rec.Organization_Id;
2979 l_mmtt_rec.SUBINVENTORY_CODE := p_x_ahl_mtltxn_rec.Subinventory_Name;
2980 IF(p_x_ahl_mtltxn_rec.Locator_Id IS NOT NULL
2981 AND p_x_ahl_mtltxn_rec.Locator_Id <> FND_API.G_MISS_NUM) THEN
2982 l_mmtt_rec.LOCATOR_ID := p_x_ahl_mtltxn_rec.Locator_Id;
2983 END IF;
2984 if(p_x_ahl_mtltxn_rec.Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
2985 l_mmtt_rec.TRANSACTION_QUANTITY := - p_x_ahl_mtltxn_rec.Quantity;
2986 l_mmtt_rec.PRIMARY_QUANTITY := - p_x_ahl_mtltxn_rec.Quantity;
2987 ELSE
2988 l_mmtt_rec.TRANSACTION_QUANTITY := p_x_ahl_mtltxn_rec.Quantity;
2989 l_mmtt_rec.PRIMARY_QUANTITY := p_x_ahl_mtltxn_rec.Quantity;
2990 END IF;
2991 l_mmtt_rec.TRANSACTION_UOM := p_x_ahl_mtltxn_rec.Uom;
2992 l_mmtt_rec.TRANSACTION_TYPE_ID := p_x_ahl_mtltxn_rec.Transaction_Type_Id;
2993 l_mmtt_rec.TRANSACTION_ACTION_ID :=l_txn_action;
2994 l_mmtt_rec.TRANSACTION_SOURCE_TYPE_ID := l_txn_source_type;
2995 l_mmtt_rec.TRANSACTION_DATE := p_x_ahl_mtltxn_rec.Transaction_Date;
2996 --l_mmtt_rec.ACCT_PERIOD_ID := 2266;
2997 l_mmtt_rec.TRANSACTION_SOURCE_ID := p_x_ahl_mtltxn_rec.Wip_Entity_Id;
2998 -- l_mmtt_rec.DISTRIBUTION_ACCOUNT_ID :=
2999 l_mmtt_rec.TRANSACTION_REFERENCE := l_transaction_reference;
3000 -- l_mmtt_rec.REQUISITION_LINE_ID :=
3001 -- l_mmtt_rec.REQUISITION_DISTRIBUTION_ID :=
3002 IF(p_x_ahl_mtltxn_rec.Reason_Id IS NOT NULL
3003 AND p_x_ahl_mtltxn_rec.Reason_Id <> FND_API.G_MISS_NUM) THEN
3004 l_mmtt_rec.REASON_ID :=p_x_ahl_mtltxn_rec.Reason_Id;
3005 END IF;
3006 --l_mmtt_rec.LOT_NUMBER := p_lot_number;
3007 --l_mmtt_rec.LOT_EXPIRATION_DATE :=
3008 --l_mmtt_rec.SERIAL_NUMBER := p_srl_number;
3009 l_mmtt_rec.WIP_ENTITY_TYPE := WIP_CONSTANTS.DISCRETE;
3010 l_mmtt_rec.WIP_SUPPLY_TYPE := 3;
3011 l_mmtt_rec.OPERATION_SEQ_NUM := p_x_ahl_mtltxn_rec.Operation_Seq_Num;
3012 --l_mmtt_rec.ITEM_LOCATION_CONTROL_CODE :=
3013 l_mmtt_rec.PROCESS_FLAG := l_Process_Flag;
3014 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE_CATEGORY IS NOT NULL
3015 AND p_x_ahl_mtltxn_rec.ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR) THEN
3016 l_mmtt_rec.ATTRIBUTE_CATEGORY := p_x_ahl_mtltxn_rec.ATTRIBUTE_CATEGORY;
3017 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE1 IS NOT NULL
3018 AND p_x_ahl_mtltxn_rec.ATTRIBUTE1 <> FND_API.G_MISS_CHAR) THEN
3019 l_mmtt_rec.ATTRIBUTE1 := p_x_ahl_mtltxn_rec.ATTRIBUTE1;
3020 END IF;
3021 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE2 IS NOT NULL
3022 AND p_x_ahl_mtltxn_rec.ATTRIBUTE2 <> FND_API.G_MISS_CHAR) THEN
3023 l_mmtt_rec.ATTRIBUTE2 := p_x_ahl_mtltxn_rec.ATTRIBUTE2;
3024 END IF;
3025 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE3 IS NOT NULL
3026 AND p_x_ahl_mtltxn_rec.ATTRIBUTE3 <> FND_API.G_MISS_CHAR) THEN
3027 l_mmtt_rec.ATTRIBUTE3 := p_x_ahl_mtltxn_rec.ATTRIBUTE3;
3028 END IF;
3029 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE4 IS NOT NULL
3030 AND p_x_ahl_mtltxn_rec.ATTRIBUTE4 <> FND_API.G_MISS_CHAR) THEN
3031 l_mmtt_rec.ATTRIBUTE4 := p_x_ahl_mtltxn_rec.ATTRIBUTE4;
3032 END IF;
3033 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE5 IS NOT NULL
3034 AND p_x_ahl_mtltxn_rec.ATTRIBUTE5 <> FND_API.G_MISS_CHAR) THEN
3035 l_mmtt_rec.ATTRIBUTE5 := p_x_ahl_mtltxn_rec.ATTRIBUTE5;
3036 END IF;
3037 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE6 IS NOT NULL
3038 AND p_x_ahl_mtltxn_rec.ATTRIBUTE6 <> FND_API.G_MISS_CHAR) THEN
3039 l_mmtt_rec.ATTRIBUTE6 := p_x_ahl_mtltxn_rec.ATTRIBUTE6;
3040 END IF;
3041 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE7 IS NOT NULL
3042 AND p_x_ahl_mtltxn_rec.ATTRIBUTE7 <> FND_API.G_MISS_CHAR) THEN
3043 l_mmtt_rec.ATTRIBUTE7 := p_x_ahl_mtltxn_rec.ATTRIBUTE7;
3044 END IF;
3045 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE8 IS NOT NULL
3046 AND p_x_ahl_mtltxn_rec.ATTRIBUTE8 <> FND_API.G_MISS_CHAR) THEN
3047 l_mmtt_rec.ATTRIBUTE8 := p_x_ahl_mtltxn_rec.ATTRIBUTE8;
3048 END IF;
3049 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE9 IS NOT NULL
3050 AND p_x_ahl_mtltxn_rec.ATTRIBUTE9 <> FND_API.G_MISS_CHAR) THEN
3051 l_mmtt_rec.ATTRIBUTE9 := p_x_ahl_mtltxn_rec.ATTRIBUTE9;
3052 END IF;
3053 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE10 IS NOT NULL
3054 AND p_x_ahl_mtltxn_rec.ATTRIBUTE10 <> FND_API.G_MISS_CHAR) THEN
3055 l_mmtt_rec.ATTRIBUTE10 := p_x_ahl_mtltxn_rec.ATTRIBUTE10;
3056 END IF;
3057 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE11 IS NOT NULL
3058 AND p_x_ahl_mtltxn_rec.ATTRIBUTE11 <> FND_API.G_MISS_CHAR) THEN
3059 l_mmtt_rec.ATTRIBUTE11 := p_x_ahl_mtltxn_rec.ATTRIBUTE11;
3060 END IF;
3061 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE12 IS NOT NULL
3062 AND p_x_ahl_mtltxn_rec.ATTRIBUTE12 <> FND_API.G_MISS_CHAR) THEN
3063 l_mmtt_rec.ATTRIBUTE12 := p_x_ahl_mtltxn_rec.ATTRIBUTE12;
3064 END IF;
3065 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE13 IS NOT NULL
3066 AND p_x_ahl_mtltxn_rec.ATTRIBUTE13 <> FND_API.G_MISS_CHAR) THEN
3067 l_mmtt_rec.ATTRIBUTE13 := p_x_ahl_mtltxn_rec.ATTRIBUTE13;
3068 END IF;
3069 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE14 IS NOT NULL
3070 AND p_x_ahl_mtltxn_rec.ATTRIBUTE14 <> FND_API.G_MISS_CHAR) THEN
3071 l_mmtt_rec.ATTRIBUTE14 := p_x_ahl_mtltxn_rec.ATTRIBUTE14;
3072 END IF;
3073 IF(p_x_ahl_mtltxn_rec.ATTRIBUTE15 IS NOT NULL
3074 AND p_x_ahl_mtltxn_rec.ATTRIBUTE15 <> FND_API.G_MISS_CHAR) THEN
3075 l_mmtt_rec.ATTRIBUTE15 := p_x_ahl_mtltxn_rec.ATTRIBUTE15;
3076 END IF;
3077 END IF;
3078
3079 IF G_DEBUG='Y' THEN
3080 AHL_DEBUG_PUB.debug('inserting the mmtt..');
3081 END IF;
3082
3083 inv_util.insert_mmtt(p_api_version => 1,
3084 p_mmtt_rec =>l_mmtt_rec,
3085 x_trx_header_id => x_Txn_hdr_id,
3086 x_trx_temp_id => x_Txn_Tmp_Id,
3087 x_return_status => x_return_status,
3088 x_msg_count =>x_msg_count,
3089 x_msg_data => x_msg_data);
3090
3091 IF G_DEBUG='Y' THEN
3092 AHL_DEBUG_PUB.debug('inserted in mmtt..ret_status['||x_return_status||']');
3093 END IF;
3094 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3095 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3096 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3097 FND_MSG_PUB.ADD;
3098 RAISE FND_API.G_EXC_ERROR;
3099 END IF;
3100
3101 IF(p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR AND
3102 p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL AND
3103 p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR AND
3104 p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) THEN
3105
3106 --Item is under Lot and Serial Control
3107 --Generate serial transaction Temp id.
3108 SELECT Mtl_Material_Transactions_S.nextval
3109 INTO l_Srl_Txn_Tmp_Id
3110 FROM DUAL;
3111
3112
3113
3114 l_mtlt_rec.Transaction_Temp_Id := x_Txn_Tmp_Id;
3115 l_mtlt_rec.Serial_Transaction_Temp_Id:= l_Srl_Txn_Tmp_Id;
3116 l_mtlt_rec.Lot_Number := p_x_ahl_mtltxn_rec.Lot_Number;
3117
3118 -- Lot expiration date needs to be selected.
3119
3120 --l_mtlt_rec.Lot_Expiration_Date := p_x_ahl_mtltxn_rec.Lot_Expiration_Date;
3121 l_mtlt_rec.Transaction_Quantity := p_x_ahl_mtltxn_rec.Quantity;
3122 l_mtlt_rec.Primary_Quantity := p_x_ahl_mtltxn_rec.Quantity;
3123
3124 l_mtlt_rec.LAST_UPDATE_DATE := SYSDATE;
3125 l_mtlt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3126 l_mtlt_rec.CREATION_DATE := SYSDATE;
3127 l_mtlt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3128 l_mtlt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3129
3130 l_msnt_rec.Transaction_Temp_Id := l_Srl_Txn_Tmp_Id;
3131 l_msnt_rec.Fm_Serial_Number := p_x_ahl_mtltxn_rec.Serial_Number;
3132 l_msnt_rec.To_Serial_Number := p_x_ahl_mtltxn_rec.Serial_Number;
3133 l_msnt_rec.LAST_UPDATE_DATE := SYSDATE;
3134 l_msnt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3135 l_msnt_rec.CREATION_DATE := SYSDATE;
3136 l_msnt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3137 l_msnt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3138
3139 IF G_DEBUG='Y' THEN
3140 AHL_DEBUG_PUB.debug('inserting in mtlt..');
3141 END IF;
3142
3143 inv_util.insert_mtlt(p_api_version => 1,
3144 p_mtlt_rec =>l_mtlt_rec,
3145 x_return_status => x_return_status,
3146 x_msg_count =>x_msg_count,
3147 x_msg_data => x_msg_data);
3148 IF G_DEBUG='Y' THEN
3149 AHL_DEBUG_PUB.debug('inserted in mtlt..ret_status['||x_return_status||']');
3150 END IF;
3151 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3152 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3153 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3154 FND_MSG_PUB.ADD;
3155 RAISE FND_API.G_EXC_ERROR;
3156 END IF;
3157 IF G_DEBUG='Y' THEN
3158 AHL_DEBUG_PUB.debug('inserting in msnt..');
3159
3160 END IF;
3161 inv_util.insert_msnt(p_api_version => 1,
3162 p_msnt_rec =>l_msnt_rec,
3163 x_return_status => x_return_status,
3164 x_msg_count =>x_msg_count,
3165 x_msg_data => x_msg_data);
3166
3167 IF G_DEBUG='Y' THEN
3168 AHL_DEBUG_PUB.debug('inserted in msnt..ret_status['||x_return_status||']');
3169
3170 END IF;
3171
3172 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3173 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3174 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3175 FND_MSG_PUB.ADD;
3176 RAISE FND_API.G_EXC_ERROR;
3177 END IF;
3178
3179 ELSIF (p_x_ahl_mtltxn_rec.Lot_Number <> FND_API.G_MISS_CHAR AND
3180 p_x_ahl_mtltxn_rec.Lot_Number IS NOT NULL ) THEN
3181 --Item is under Lot control
3182 l_mtlt_rec.Transaction_Temp_Id := x_Txn_Tmp_Id;
3183 l_mtlt_rec.Lot_Number := p_x_ahl_mtltxn_rec.Lot_Number;
3184 --l_mtlt_rec.Lot_Expiration_Date := p_x_ahl_mtltxn_rec.Lot_Expiration_Date;
3185 l_mtlt_rec.Transaction_Quantity := p_x_ahl_mtltxn_rec.Quantity;
3186 l_mtlt_rec.Primary_Quantity := p_x_ahl_mtltxn_rec.Quantity;
3187 l_mtlt_rec.LAST_UPDATE_DATE := SYSDATE;
3188 l_mtlt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3189 l_mtlt_rec.CREATION_DATE := SYSDATE;
3190 l_mtlt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3191 l_mtlt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3192
3193 IF G_DEBUG='Y' THEN
3194 AHL_DEBUG_PUB.debug('inserting in mtlt..');
3195
3196 END IF;
3197 inv_util.insert_mtlt(p_api_version => 1,
3198 p_mtlt_rec =>l_mtlt_rec,
3199 x_return_status => x_return_status,
3200 x_msg_count =>x_msg_count,
3201 x_msg_data => x_msg_data);
3202 IF G_DEBUG='Y' THEN
3203 AHL_DEBUG_PUB.debug('inserted in mtlt..ret_status['||x_return_status||']');
3204
3205 END IF;
3206 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3207 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3208 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3209 FND_MSG_PUB.ADD;
3210 RAISE FND_API.G_EXC_ERROR;
3211 END IF;
3212
3213 ELSIF (p_x_ahl_mtltxn_rec.Serial_Number <> FND_API.G_MISS_CHAR AND
3214 p_x_ahl_mtltxn_rec.Serial_Number IS NOT NULL) THEN
3215 -- Item is under serial control
3216 l_msnt_rec.Transaction_Temp_Id := x_Txn_Tmp_Id;
3217 l_msnt_rec.Fm_Serial_Number := p_x_ahl_mtltxn_rec.Serial_Number;
3218 l_msnt_rec.To_Serial_Number := p_x_ahl_mtltxn_rec.Serial_Number;
3219 l_msnt_rec.LAST_UPDATE_DATE := SYSDATE;
3220 l_msnt_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3221 l_msnt_rec.CREATION_DATE := SYSDATE;
3222 l_msnt_rec.CREATED_BY := FND_GLOBAL.USER_ID; --p_x_ahl_mtltxn_rec.Last_Updated_By;
3223 l_msnt_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID; --p_x_ahl_mtltxn_rec.Last_Update_Login;
3224
3225 IF G_DEBUG='Y' THEN
3226 AHL_DEBUG_PUB.debug('inserting in msnt..');
3227
3228 END IF;
3229
3230 inv_util.insert_msnt(p_api_version => 1,
3231 p_msnt_rec =>l_msnt_rec,
3232 x_return_status => x_return_status,
3233 x_msg_count =>x_msg_count,
3234 x_msg_data => x_msg_data);
3235 IF G_DEBUG='Y' THEN
3236 AHL_DEBUG_PUB.debug('inserted in msnt..ret_status['||x_return_status||']');
3237
3238 END IF;
3239
3240 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3241 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3242 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3243 FND_MSG_PUB.ADD;
3244 RAISE FND_API.G_EXC_ERROR;
3245 END IF;
3246 END IF;
3247 END INSERT_MTL_TXN_TEMP;
3248 */
3249
3250 /*****************************************************************
3251 This function returns true if the item is trackable and false if not.
3252
3253 ******************************************************************/
3254 FUNCTION IS_ITEM_TRACKABLE(p_Org_Id IN NUMBER, p_Item_Id IN NUMBER) RETURN BOOLEAN
3255 IS
3256 l_count NUMBER;
3257 ret boolean;
3258 -- Query to check if item is trakkable
3259 CURSOR Item_tr_Cur(p_org_Id NUMBER, p_item_Id NUMBER) IS
3260 SELECT 1
3261 FROM MTL_SYSTEM_ITEMS_B
3262 WHERE INVENTORY_ITEM_ID = p_Item_Id
3263 AND ORGANIZATION_ID = p_Org_Id
3264 AND COMMS_NL_TRACKABLE_FLAG = 'Y'
3265 AND ENABLED_FLAG = 'Y'
3266 AND ((START_DATE_ACTIVE IS NULL) OR (START_DATE_ACTIVE <= SYSDATE))
3267 AND ((END_DATE_ACTIVE IS NULL) OR (END_DATE_ACTIVE >= SYSDATE));
3268
3269 BEGIN
3270
3271 l_Count := 0;
3272 ret := FALSE;
3273 OPEN Item_Tr_Cur(p_org_Id, p_item_Id);
3274 FETCH Item_Tr_Cur into l_Count;
3275 IF (Item_Tr_Cur%NOTFOUND) THEN
3276 ret := FALSE;
3277 ELSE
3278 ret := TRUE;
3279 END IF;
3280
3281 CLOSE Item_Tr_Cur;
3282 RETURN ret;
3283 END IS_ITEM_TRACKABLE;
3284
3285 /***************************************************
3286 This procedure inserts record in the AHL_SCHEDULE_MATERIALS table
3287 TBD to be corrected.
3288 ************************************************/
3289 PROCEDURE Insert_Sch_Mtl_Row(
3290 p_mtl_txn_Rec IN Ahl_Mtltxn_Rec_Type,
3291 x_return_status OUT NOCOPY VARCHAR2,
3292 x_msg_count OUT NOCOPY NUMBER,
3293 x_msg_data OUT NOCOPY VARCHAR2,
3294 x_ahl_sch_mtl_id OUT NOCOPY NUMBER)
3295 IS
3296 Material_Tbl AHL_PP_MATERIALS_PVT.Req_Material_Tbl_Type ;
3297 x_tmp VARCHAR2(10);
3298 l_project_id NUMBER;
3299 l_project_Task_id NUMBER ;
3300 l_Visit_Id NUMBER;
3301 l_visit_task_Id NUMBER;
3302 l_Item_Desc VARCHAR2(240);
3303 l_quantity NUMBER;
3304 l_primary_uom ahl_schedule_materials.UOM%TYPE;
3305
3306 -- QWuey to select the work order dependent data to be passed to Schedule materials API.
3307 CURSOR Workop_Det_Cur(p_wo_id NUMBER) IS
3308 SELECT B.VISIT_ID,C.VISIT_TASK_ID,B.PROJECT_ID,C.PROJECT_TASK_ID
3309 FROM AHL_WORKORDERS A, AHL_VISITS_B B, AHL_VISIT_TASKS_B C
3310 WHERE A.WORKORDER_ID = p_wo_id
3311 AND A.VISIT_TASK_ID = C.VISIT_TASK_ID
3312 AND C.VISIT_ID = B.VISIT_ID;
3313 --Query to select the item desccription
3314 CURSOR Item_Desc_Cur(p_org_id NUMBER, p_item_id NUMBER) IS
3315 SELECT DESCRIPTION
3316 FROM MTL_SYSTEM_ITEMS_KFV
3317 WHERE ORGANIZATION_ID = p_org_id
3318 AND INVENTORY_ITEM_ID = p_item_id;
3319
3320 BEGIN
3321
3322 IF G_DEBUG='Y' THEN
3323 AHL_DEBUG_PUB.debug('Entered Insert_Sch_Mtl_Row');
3324
3325 END IF;
3326 OPEN Workop_Det_Cur( p_mtl_txn_Rec.Workorder_Id);
3327 FETCH Workop_Det_Cur INTO l_Visit_Id,l_visit_task_Id,l_project_id,l_project_Task_id;
3328 IF(Workop_Det_Cur%NOTFOUND) THEN
3329 FND_MESSAGE.Set_Name('AHL','AHL_PRD_INVALID_WO_OP');
3330 FND_MSG_PUB.ADD;
3331 CLOSE Workop_Det_Cur;
3332 RAISE FND_API.G_EXC_ERROR;
3333 END IF;
3334 CLOSE Workop_Det_Cur;
3335 IF G_DEBUG='Y' THEN
3336 AHL_DEBUG_PUB.debug('Selected the work order paramters');
3337 AHL_DEBUG_PUB.debug('l_Visit_Id['||l_Visit_Id||']');
3338 AHL_DEBUG_PUB.debug('l_visit_task_Id['||l_visit_task_Id||']');
3339 AHL_DEBUG_PUB.debug('l_project_id['||l_project_id||']');
3340 AHL_DEBUG_PUB.debug('l_project_Task_id['||l_project_Task_id||']');
3341 AHL_DEBUG_PUB.debug('p_mtl_txn_Rec.Workorder_Operation_Id['||p_mtl_txn_Rec.Workorder_Operation_Id||']');
3342
3343 END IF;
3344
3345 OPEN Item_Desc_Cur( p_mtl_txn_Rec.Organization_id, p_mtl_txn_Rec.Inventory_Item_Id);
3346 FETCH Item_Desc_Cur INTO l_Item_Desc;
3347 IF(Item_Desc_Cur%NOTFOUND) THEN
3348 FND_MESSAGE.Set_Name('AHL','AHL_COM_INVALID_ITEM');
3349 FND_MESSAGE.Set_Token('FIELD',p_mtl_txn_Rec.Inventory_Item_Id);
3350 FND_MSG_PUB.ADD;
3351 CLOSE Item_Desc_Cur;
3352 RAISE FND_API.G_EXC_ERROR;
3353 END IF;
3354 CLOSE Item_Desc_Cur;
3355 IF G_DEBUG='Y' THEN
3356 AHL_DEBUG_PUB.debug('Selected the Item description');
3357
3358 END IF;
3359
3360 -- Get Primary UOM for the item.
3361 l_primary_uom := AHL_LTP_MTL_REQ_PVT.Get_Primary_UOM(p_inventory_item_id => p_mtl_txn_Rec.Inventory_Item_Id,
3362 p_inventory_org_id => p_mtl_txn_Rec.Organization_id);
3363
3364 l_quantity := p_mtl_txn_Rec.Quantity;
3365 -- Convert quantity to primary UOM if p_mtl_txn_Rec.uom is not.
3366 IF (l_primary_uom <> p_mtl_txn_Rec.uom) THEN
3367 l_quantity := AHL_LTP_MTL_REQ_PVT.Get_Primary_UOM_Qty(p_mtl_txn_Rec.Inventory_Item_Id,
3368 p_mtl_txn_Rec.uom,
3369 p_mtl_txn_Rec.Quantity);
3370 END IF;
3371
3372 --Material_Tbl(0).OBJECT_VERSION_NUMBER := 1;
3373 Material_Tbl(0).INVENTORY_ITEM_ID := p_mtl_txn_Rec.Inventory_Item_Id;
3374 --Material_Tbl(0).SCHEDULE_DESIGNATOR :=
3375 Material_Tbl(0).VISIT_ID := l_Visit_Id;
3376 --Material_Tbl(0).VISIT_START_DATE :=
3377 Material_Tbl(0).VISIT_TASK_ID := l_visit_task_Id;
3378 Material_Tbl(0).ORGANIZATION_ID := p_mtl_txn_Rec.Organization_Id;
3379 --Material_Tbl(0).SCHEDULED_DATE :=
3380 --Material_Tbl(0).REQUEST_ID :=
3381 --Material_Tbl(0).PROCESS_STATUS :=
3382 --Material_Tbl(0).ERROR_MESSAGE :=
3383 --Material_Tbl(0).TRANSACTION_ID :=
3384 --Material_Tbl(0).CONCATENATED_SEGMENTS :=
3385 --Material_Tbl(0).ITEM_DESCRIPTION :=
3386 --Material_Tbl(0).RT_OPER_MATERIAL_ID :=
3387 -- Fix bug# 6598809. Pass requested quantity as 0.
3388 --Material_Tbl(0).REQUESTED_QUANTITY := l_quantity;
3389 Material_Tbl(0).REQUESTED_QUANTITY := 0;
3390 Material_Tbl(0).REQUESTED_DATE := SYSDATE;
3391 Material_Tbl(0).UOM_CODE := l_primary_Uom;
3392 --Material_Tbl(0).SCHEDULED_QUANTITY := ;
3393 --Material_Tbl(0).JOB_NUMBER :=
3394 Material_Tbl(0).WORKORDER_ID := p_mtl_txn_Rec.Workorder_Id;
3395 Material_Tbl(0).OPERATION_SEQUENCE := p_mtl_txn_Rec.Operation_Seq_Num;
3396 Material_Tbl(0).WORKORDER_OPERATION_ID := p_mtl_txn_Rec.Workorder_Operation_Id;
3397 --Material_Tbl(0).ITEM_GROUP_ID :=
3398 --Material_Tbl(0).PROGRAM_ID :=
3399 --Material_Tbl(0).PROGRAM_UPDATE_DATE :=
3400 --Material_Tbl(0).LAST_UPDATED_DATE := SYSDATE;
3401 Material_Tbl(0).DESCRIPTION := l_Item_Desc;
3402 --Material_Tbl(0).DEPARTMENT_ID :=
3403 Material_Tbl(0).PROJECT_TASK_ID := l_project_Task_id;
3404 Material_Tbl(0).PROJECT_ID := l_project_id;
3405 --Material_Tbl(0).Req_Material_Rec_Type :=
3406
3407
3408 IF G_DEBUG='Y' THEN
3409 AHL_DEBUG_PUB.debug('Calling AHL_PP_MATERIALS_PVT.Create_Material_Reqst...');
3410
3411 END IF;
3412 AHL_PP_MATERIALS_PVT.Create_Material_Reqst(p_api_version => 1.0,
3413 p_x_req_material_tbl => Material_Tbl,
3414 --p_interface_flag => 'N',
3415 p_interface_flag => NULL,
3416 x_job_return_status => x_tmp,
3417 x_return_status => x_return_status,
3418 x_msg_count => x_msg_count,
3419 x_msg_data => x_msg_data);
3420 IF G_DEBUG='Y' THEN
3421 AHL_DEBUG_PUB.debug('after the call AHL_PP_MATERIALS_PVT.Create_Material_Reqst');
3422
3423 END IF;
3424 IF G_DEBUG='Y' THEN
3425 AHL_DEBUG_PUB.debug('x_return_status['||x_return_status||']');
3426 AHL_DEBUG_PUB.debug('x_msg_data['||x_msg_data||']');
3427
3428 END IF;
3429 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3430 FND_MESSAGE.Set_Name('AHL','AHL_PRD_SCHMTLAPI_ERROR');
3431 FND_MESSAGE.Set_Token('MSG',x_msg_data);
3432 FND_MSG_PUB.ADD;
3433 RAISE FND_API.G_EXC_ERROR;
3434 END IF;
3435
3436 /* will be updated after wip api is successful - modified for bug fix 5499575.
3437 -- Update Completed quantity.
3438 Update ahl_schedule_materials
3439 set completed_quantity = l_quantity
3440 where scheduled_material_id = Material_Tbl(0).schedule_material_id;
3441 */
3442
3443 END Insert_Sch_Mtl_Row;
3444
3445
3446 /****************************************************
3447 This procedure will create the service API record from the input material txn
3448 record data.
3449 *****************************************************/
3450 PROCEDURE Populate_Srvc_Rec(
3451 p_item_instance_id NUMBER,
3452 p_srvc_rec OUT NOCOPY AHL_PRD_NONROUTINE_PVT.Sr_task_Rec_type,
3453 p_x_ahl_mtltxn_rec IN Ahl_Mtltxn_Rec_Type)
3454 IS
3455
3456 BEGIN
3457
3458
3459 --p_srvc_rec.TYPE_ID := FND_PROFILE.value(C_AHL_DEF_SR_TYPE);
3460 p_srvc_rec.SUMMARY := p_x_ahl_mtltxn_rec.SR_SUMMARY;
3461 --p_srvc_rec.CONTACT_TYPE := 'EMPLOYEE';
3462 p_srvc_rec.PROBLEM_CODE := p_x_ahl_mtltxn_rec.Problem_Code;
3463 p_srvc_rec.VISIT_ID := p_x_ahl_mtltxn_rec.Target_Visit_Id;
3464 --p_srvc_rec.DURATION := FND_PROFILE.value(C_AHL_DEF_TASK_EST_DURATION);
3465 p_srvc_rec.INSTANCE_ID := p_item_instance_id;
3466 p_srvc_rec.ORIGINATING_WO_ID := p_x_ahl_mtltxn_rec.Workorder_Id;
3467 p_srvc_rec.OPERATION_TYPE := 'CREATE';
3468 p_srvc_rec.source_program_code := 'AHL_NONROUTINE';
3469
3470 -- set create wo option.
3471 IF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_RELEASE_WO') THEN
3472 p_srvc_rec.WO_Create_flag := 'Y';
3473 p_srvc_rec.WO_Release_flag := 'Y';
3474 ELSIF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_WO') THEN
3475 p_srvc_rec.WO_Create_flag := 'Y';
3476 p_srvc_rec.WO_Release_flag := 'N';
3477 ELSIF (p_x_ahl_mtltxn_rec.create_wo_option = 'CREATE_WO_NO') THEN
3478 p_srvc_rec.WO_Create_flag := 'N';
3479 p_srvc_rec.WO_Release_flag := 'N';
3480 END IF;
3481 -- End: Added for bug# 5903318.
3482
3483 -- Added for ER#
3484 p_srvc_rec.move_qty_to_nr_workorder := 'N';
3485 p_srvc_rec.instance_quantity := p_x_ahl_mtltxn_rec.quantity;
3486
3487
3488 IF G_DEBUG='Y' THEN
3489 AHL_DEBUG_PUB.debug('p_srvc_rec.SUMMARY['||p_srvc_rec.SUMMARY||']');
3490 AHL_DEBUG_PUB.debug('PROBLEM_CODE['||p_srvc_rec.PROBLEM_CODE||']');
3491 AHL_DEBUG_PUB.debug('p_srvc_rec.VISIT_ID['||p_srvc_rec.VISIT_ID||']');
3492 AHL_DEBUG_PUB.debug('p_srvc_rec.INSTANCE_ID['||p_srvc_rec.INSTANCE_ID||']');
3493 AHL_DEBUG_PUB.debug('p_srvc_rec.ORIGINATING_WO_ID['||p_srvc_rec.ORIGINATING_WO_ID||']');
3494 AHL_DEBUG_PUB.debug('p_srvc_rec.WO_Create_flag['||p_srvc_rec.WO_Create_flag||']');
3495 AHL_DEBUG_PUB.debug('p_srvc_rec.WO_Release_flag['||p_srvc_rec.WO_Release_flag||']');
3496 AHL_DEBUG_PUB.debug('p_srvc_rec.instance_quantity['||p_srvc_rec.instance_quantity||']');
3497 AHL_DEBUG_PUB.debug('p_srvc_rec.move_qty_to_nr_workorder['||p_srvc_rec.move_qty_to_nr_workorder||']');
3498
3499 END IF;
3500
3501
3502 END Populate_Srvc_Rec;
3503
3504 /*********************************************************************
3505 This procedure will insert the interface records.
3506
3507 *********************************************************************/
3508
3509 PROCEDURE INSERT_MTL_TXN_INTF
3510 (
3511 p_x_ahl_mtl_txn_rec IN OUT NOCOPY AHL_MTLTXN_REC_TYPE,
3512 p_eam_item_type_id IN NUMBER,
3513 p_x_txn_hdr_id IN OUT NOCOPY NUMBER,
3514 p_x_txn_intf_id IN OUT NOCOPY NUMBER,
3515 p_reservation_flag IN VARCHAR2,
3516 x_return_status OUT NOCOPY VARCHAR2
3517 )
3518 IS
3519 l_Process_Flag VARCHAR2(1);
3520 l_Validation_required VARCHAR2(1);
3521 l_transaction_Mode NUMBER;
3522 l_source_code VARCHAR2(240);
3523 l_source_line_id NUMBER;
3524 l_txn_tmp_id NUMBER;
3525 l_Source_Header_Id NUMBER;
3526 l_lot_expiration_Date DATE;
3527 l_txn_action NUMBER;
3528 l_txn_source_type NUMBER;
3529 l_qty NUMBER;
3530 l_reservation_flag VARCHAR2(1);
3531
3532 -- added to support dynamic locator creation.
3533 l_mti_seglist fnd_flex_ext.SegmentArray;
3534
3535 l_loop_count NUMBER;
3536
3537 CURSOR TRX_ACTION_CUR(p_type_Id NUMBER) IS
3538 SELECT TRANSACTION_ACTION_ID,TRANSACTION_SOURCE_TYPE_ID
3539 from MTL_TRANSACTION_TYPES
3540 where TRANSACTION_TYPE_ID = p_type_Id;
3541
3542 BEGIN
3543
3544 l_Process_Flag := '1';
3545 l_Validation_required := '1';
3546 l_transaction_Mode := 2;
3547 l_source_code := 'AHL';
3548 l_source_line_id := 1;
3549 l_Source_Header_Id := 1;
3550
3551
3552 x_return_status := FND_API.G_RET_STS_SUCCESS;
3553
3554 OPEN TRX_ACTION_CUR(p_x_ahl_mtl_txn_rec.Transaction_Type_Id);
3555 FETCH TRX_ACTION_CUR INTO l_txn_action, l_txn_source_type;
3556 IF(TRX_ACTION_CUR%NOTFOUND) THEN
3557 IF G_DEBUG='Y' THEN
3558 AHL_DEBUG_PUB.debug('Did not find the Txn Type');
3559 END IF;
3560 CLOSE TRX_ACTION_CUR;
3561 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3562 END IF;
3563 CLOSE TRX_ACTION_CUR;
3564
3565
3566 IF(p_x_txn_hdr_id IS NULL) THEN
3567 SELECT Mtl_Material_Transactions_S.nextval
3568 INTO p_x_txn_hdr_id
3569 FROM DUAL;
3570 IF G_DEBUG='Y' THEN
3571 AHL_DEBUG_PUB.debug('Header id created..['||p_x_txn_hdr_id||']');
3572 END IF;
3573 END IF;
3574
3575 l_loop_count := 0;
3576
3577 WHILE (l_loop_count < p_x_ahl_mtl_txn_rec.Quantity) LOOP
3578
3579 SELECT Mtl_Material_Transactions_S.nextval
3580 INTO p_x_txn_intf_id
3581 FROM DUAL;
3582
3583 IF G_DEBUG='Y' THEN
3584 AHL_DEBUG_PUB.debug('Interface id created..['||p_x_txn_intf_id||']');
3585 END IF;
3586
3587 if(p_x_ahl_mtl_txn_rec.Revision = FND_API.G_MISS_CHAR) THEN
3588 p_x_ahl_mtl_txn_rec.Revision := NULL;
3589 END IF;
3590 IF(p_x_ahl_mtl_txn_rec.Locator_Id = FND_API.G_MISS_NUM) THEN
3591 p_x_ahl_mtl_txn_rec.Locator_Id := NULL;
3592 END IF;
3593 if(p_x_ahl_mtl_txn_rec.Transaction_Type_Id = WIP_CONSTANTS.ISSCOMP_TYPE) THEN
3594 IF (p_eam_item_type_id = WIP_CONSTANTS.rebuild_item_type AND p_x_ahl_mtl_txn_rec.Quantity > 1) THEN
3595 l_qty := - 1;
3596 l_loop_count := l_loop_count + 1;
3597 ELSE
3598 l_qty := - p_x_ahl_mtl_txn_rec.Quantity;
3599 l_loop_count := p_x_ahl_mtl_txn_rec.Quantity + 1;
3600 END IF;
3601 ELSE
3602 IF (p_eam_item_type_id = WIP_CONSTANTS.rebuild_item_type AND p_x_ahl_mtl_txn_rec.Quantity > 1) THEN
3603 l_qty := 1;
3604 l_loop_count := l_loop_count + 1;
3605 ELSE
3606 l_qty := p_x_ahl_mtl_txn_rec.Quantity;
3607 l_loop_count := p_x_ahl_mtl_txn_rec.Quantity + 1;
3608 END IF;
3609 END IF;
3610 IF G_DEBUG='Y' THEN
3611 AHL_DEBUG_PUB.debug('Loop Count is..['||l_loop_count||']');
3612 AHL_DEBUG_PUB.debug('l_qty is..['||l_qty||']');
3613 END IF;
3614
3615 IF( p_x_ahl_mtl_txn_rec.Reason_Id = FND_API.G_MISS_NUM) THEN
3616 p_x_ahl_mtl_txn_rec.Reason_Id := NULL;
3617 END IF;
3618 IF( p_x_ahl_mtl_txn_rec.Serial_number = FND_API.G_MISS_CHAR) THEN
3619 p_x_ahl_mtl_txn_rec.Serial_number := NULL;
3620 END IF;
3621 IF( p_x_ahl_mtl_txn_rec.Lot_number = FND_API.G_MISS_CHAR) THEN
3622 p_x_ahl_mtl_txn_rec.Lot_number := NULL;
3623 END IF;
3624 IF (p_x_ahl_mtl_txn_rec.ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR) THEN
3625 p_x_ahl_mtl_txn_rec.ATTRIBUTE_CATEGORY := NULL;
3626 END IF;
3627 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE1 = FND_API.G_MISS_CHAR) THEN
3628 p_x_ahl_mtl_txn_rec.ATTRIBUTE1 := NULL;
3629 END IF;
3630 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE2 = FND_API.G_MISS_CHAR) THEN
3631 p_x_ahl_mtl_txn_rec.ATTRIBUTE2 := NULL;
3632 END IF;
3633 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE3 = FND_API.G_MISS_CHAR) THEN
3634 p_x_ahl_mtl_txn_rec.ATTRIBUTE3 := NULL;
3635 END IF;
3636 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE4 = FND_API.G_MISS_CHAR) THEN
3637 p_x_ahl_mtl_txn_rec.ATTRIBUTE4 := NULL;
3638 END IF;
3639 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE5 = FND_API.G_MISS_CHAR) THEN
3640 p_x_ahl_mtl_txn_rec.ATTRIBUTE5 := NULL;
3641 END IF;
3642 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE6 = FND_API.G_MISS_CHAR) THEN
3643 p_x_ahl_mtl_txn_rec.ATTRIBUTE6 := NULL;
3644 END IF;
3645 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE7 = FND_API.G_MISS_CHAR) THEN
3646 p_x_ahl_mtl_txn_rec.ATTRIBUTE7 := NULL;
3647 END IF;
3648 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE8 = FND_API.G_MISS_CHAR) THEN
3649 p_x_ahl_mtl_txn_rec.ATTRIBUTE8 := NULL;
3650 END IF;
3651 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE9 = FND_API.G_MISS_CHAR) THEN
3652 p_x_ahl_mtl_txn_rec.ATTRIBUTE9 := NULL;
3653 END IF;
3654 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE10 = FND_API.G_MISS_CHAR) THEN
3655 p_x_ahl_mtl_txn_rec.ATTRIBUTE10 := NULL;
3656 END IF;
3657 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE11 = FND_API.G_MISS_CHAR) THEN
3658 p_x_ahl_mtl_txn_rec.ATTRIBUTE11 := NULL;
3659 END IF;
3660 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE12 = FND_API.G_MISS_CHAR) THEN
3661 p_x_ahl_mtl_txn_rec.ATTRIBUTE12 := NULL;
3662 END IF;
3663 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE13 = FND_API.G_MISS_CHAR) THEN
3664 p_x_ahl_mtl_txn_rec.ATTRIBUTE13 := NULL;
3665 END IF;
3666 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE14 = FND_API.G_MISS_CHAR) THEN
3667 p_x_ahl_mtl_txn_rec.ATTRIBUTE14 := NULL;
3668 END IF;
3669 IF(p_x_ahl_mtl_txn_rec.ATTRIBUTE15 = FND_API.G_MISS_CHAR) THEN
3670 p_x_ahl_mtl_txn_rec.ATTRIBUTE15 := NULL;
3671 END IF;
3672
3673 IF(p_x_ahl_mtl_txn_rec.transaction_reference = FND_API.G_MISS_CHAR) THEN
3674 p_x_ahl_mtl_txn_rec.transaction_reference := NULL;
3675 END IF;
3676
3677 IF G_DEBUG='Y' THEN
3678 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);
3679 END IF;
3680
3681 -- Added for FP ER 6447935
3682 -- support dynamic locator creation if allowed.
3683 -- inv/wip will validate. We will just split and pass the locator segments.
3684
3685 -- initialze mti locator segment values.
3686 FOR i IN 1..20 LOOP
3687 l_mti_seglist(i) := null;
3688 END LOOP;
3689
3690 IF (p_x_ahl_mtl_txn_rec.Locator_Id IS NULL AND
3691 p_x_ahl_mtl_txn_rec.Locator_Segments IS NOT NULL) THEN
3692 Get_MTL_LocatorSegs (p_concat_segs => p_x_ahl_mtl_txn_rec.Locator_Segments,
3693 p_organization_id => p_x_ahl_mtl_txn_rec.organization_id,
3694 p_x_mti_seglist => l_mti_seglist,
3695 x_return_status => x_return_status);
3696
3697 IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
3698 RAISE FND_API.G_EXC_ERROR;
3699 ELSIF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3700 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3701 END IF;
3702
3703 END IF;
3704
3705 --If the lot controlled inventory record is not null insert reocrds
3706 -- into transaction lots interface table.
3707
3708 IF (p_x_ahl_mtl_txn_rec.Lot_Number IS NOT NULL) THEN
3709
3710 IF(p_x_ahl_mtl_txn_rec.Serial_Number IS NOT NULL) THEN
3711 SELECT Mtl_Material_Transactions_S.nextval
3712 INTO l_txn_tmp_id
3713 FROM DUAL;
3714 ELSE
3715 l_txn_tmp_id := p_x_txn_intf_id;
3716 END IF;
3717
3718 IF G_DEBUG='Y' THEN
3719 AHL_DEBUG_PUB.debug('insertng the lot record,interface id,tempid['
3720 ||to_char(p_x_txn_intf_id)||','
3721 ||to_char(l_txn_tmp_id)||']');
3722 END IF;
3723 INSERT INTO MTL_TRANSACTION_LOTS_INTERFACE
3724 ( TRANSACTION_INTERFACE_ID ,
3725 SOURCE_CODE ,
3726 SOURCE_LINE_ID ,
3727 LAST_UPDATE_DATE ,
3728 LAST_UPDATED_BY ,
3729 CREATION_DATE ,
3730 CREATED_BY ,
3731 LAST_UPDATE_LOGIN ,
3732 LOT_NUMBER ,
3733 LOT_EXPIRATION_DATE ,
3734 TRANSACTION_QUANTITY ,
3735 PRIMARY_QUANTITY,
3736 SERIAL_TRANSACTION_TEMP_ID
3737 )
3738 VALUES(p_x_txn_intf_id,
3739 l_Source_Code,
3740 l_Source_Line_Id,
3741 sysdate,
3742 FND_GLOBAL.USER_ID,
3743 sysdate,
3744 FND_GLOBAL.USER_ID,
3745 FND_GLOBAL.LOGIN_ID,
3746 p_x_ahl_mtl_txn_rec.Lot_Number,
3747 l_lot_expiration_Date,
3748 l_qty,
3749 l_qty,
3750 l_txn_tmp_id);
3751 END IF;
3752
3753 --If the serial controlled rec is not null then insert records
3754 -- into the serial numbers interface table
3755 IF (p_x_ahl_mtl_txn_rec.Serial_Number IS NOT NULL) THEN
3756
3757 IF (p_x_ahl_mtl_txn_rec.Lot_Number IS NULL) THEN
3758 l_txn_tmp_id := p_x_txn_intf_id;
3759 END IF;
3760
3761 IF G_DEBUG='Y' THEN
3762 AHL_DEBUG_PUB.debug('insertng the serial record,interface id['
3763 ||to_char(l_txn_tmp_id)||']');
3764 END IF;
3765 INSERT INTO MTL_SERIAL_NUMBERS_INTERFACE (
3766 TRANSACTION_INTERFACE_ID, SOURCE_CODE, SOURCE_LINE_ID,
3767 LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE,
3768 CREATED_BY, LAST_UPDATE_LOGIN, FM_SERIAL_NUMBER,
3769 TO_SERIAL_NUMBER, PROCESS_FLAG)
3770 VALUES ( l_txn_tmp_id,
3771 l_source_code,
3772 l_source_line_id,
3773 SYSDATE,
3774 FND_GLOBAL.USER_ID,
3775 SYSDATE,
3776 FND_GLOBAL.USER_ID,
3777 FND_GLOBAL.LOGIN_ID,
3778 p_x_ahl_mtl_txn_rec.Serial_Number,
3779 p_x_ahl_mtl_txn_rec.Serial_Number,
3780 l_Process_Flag );
3781 END IF;
3782
3783
3784
3785 IF G_DEBUG='Y' THEN
3786 AHL_DEBUG_PUB.debug('insertng the txn record,header id,interface id['
3787 ||to_char(p_x_txn_hdr_id)||','
3788 ||to_char(p_x_txn_intf_id)||']');
3789 END IF;
3790
3791 INSERT INTO MTL_TRANSACTIONS_INTERFACE
3792
3793 ( TRANSACTION_INTERFACE_ID , TRANSACTION_HEADER_ID ,
3794 SOURCE_CODE , SOURCE_LINE_ID ,
3795 SOURCE_HEADER_ID, PROCESS_FLAG ,
3796 VALIDATION_REQUIRED , TRANSACTION_MODE ,
3797 LAST_UPDATE_DATE , LAST_UPDATED_BY ,
3798 CREATION_DATE , CREATED_BY ,
3799 LAST_UPDATE_LOGIN , INVENTORY_ITEM_ID ,
3800 ORGANIZATION_ID , TRANSACTION_QUANTITY ,
3801 PRIMARY_QUANTITY , TRANSACTION_UOM ,
3802 TRANSACTION_DATE , SUBINVENTORY_CODE ,
3803 LOCATOR_ID , TRANSACTION_TYPE_ID ,
3804 REVISION , TRANSACTION_REFERENCE ,
3805 WIP_ENTITY_TYPE , OPERATION_SEQ_NUM,
3806 TRANSACTION_SOURCE_TYPE_ID, TRANSACTION_SOURCE_ID,
3807 TRX_SOURCE_LINE_ID,
3808 ATTRIBUTE_CATEGORY, ATTRIBUTE1,
3809 ATTRIBUTE2, ATTRIBUTE3,
3810 ATTRIBUTE4, ATTRIBUTE5,
3811 ATTRIBUTE6, ATTRIBUTE7,
3812 ATTRIBUTE8, ATTRIBUTE9,
3813 ATTRIBUTE10, ATTRIBUTE11,
3814 ATTRIBUTE12, ATTRIBUTE13,
3815 ATTRIBUTE14, ATTRIBUTE15,
3816 RELIEVE_RESERVATIONS_FLAG,
3817 REASON_ID,
3818 LOC_SEGMENT1, LOC_SEGMENT2,
3819 LOC_SEGMENT3, LOC_SEGMENT4,
3820 LOC_SEGMENT5, LOC_SEGMENT6,
3821 LOC_SEGMENT7, LOC_SEGMENT8,
3822 LOC_SEGMENT9, LOC_SEGMENT10,
3823 LOC_SEGMENT11, LOC_SEGMENT12,
3824 LOC_SEGMENT13, LOC_SEGMENT14,
3825 LOC_SEGMENT15, LOC_SEGMENT16,
3826 LOC_SEGMENT17, LOC_SEGMENT18,
3827 LOC_SEGMENT19, LOC_SEGMENT20)
3828 values (p_x_txn_intf_id, p_x_txn_hdr_id,
3829 l_Source_Code, l_Source_Line_Id,
3830 l_Source_Header_Id, l_Process_Flag,
3831 l_Validation_required , l_transaction_Mode,
3832 sysdate, FND_GLOBAL.USER_ID,
3833 sysdate, FND_GLOBAL.USER_ID,
3834 FND_GLOBAL.LOGIN_ID, p_x_ahl_mtl_txn_rec.Inventory_Item_Id,
3835 p_x_ahl_mtl_txn_rec.Organization_Id, l_qty,
3836 l_qty, p_x_ahl_mtl_txn_rec.Uom,
3837 p_x_ahl_mtl_txn_rec.Transaction_Date, p_x_ahl_mtl_txn_rec.Subinventory_Name,
3838 p_x_ahl_mtl_txn_rec.Locator_Id, p_x_ahl_mtl_txn_rec.Transaction_Type_Id,
3839 p_x_ahl_mtl_txn_rec.Revision, p_x_ahl_mtl_txn_rec.Transaction_Reference,
3840 WIP_CONSTANTS.DISCRETE, p_x_ahl_mtl_txn_rec.Operation_Seq_Num,
3841 l_txn_source_type, p_x_ahl_mtl_txn_rec.Wip_Entity_id,
3842 p_x_ahl_mtl_txn_rec.Operation_Seq_Num, -- TRX_SOURCE_LINE_ID (needed for relieving reservations)
3843 p_x_ahl_mtl_txn_rec.Attribute_Category, p_x_ahl_mtl_txn_rec.Attribute1,
3844 p_x_ahl_mtl_txn_rec.Attribute2, p_x_ahl_mtl_txn_rec.Attribute3,
3845 p_x_ahl_mtl_txn_rec.Attribute4, p_x_ahl_mtl_txn_rec.Attribute5,
3846 p_x_ahl_mtl_txn_rec.Attribute6, p_x_ahl_mtl_txn_rec.Attribute7,
3847 p_x_ahl_mtl_txn_rec.Attribute8, p_x_ahl_mtl_txn_rec.Attribute9,
3848 p_x_ahl_mtl_txn_rec.Attribute10, p_x_ahl_mtl_txn_rec.Attribute11,
3849 p_x_ahl_mtl_txn_rec.Attribute12, p_x_ahl_mtl_txn_rec.Attribute13,
3850 p_x_ahl_mtl_txn_rec.Attribute14, p_x_ahl_mtl_txn_rec.Attribute15,
3851 p_reservation_flag, -- relieve reservations flag.
3852 p_x_ahl_mtl_txn_rec.reason_id,
3853 l_mti_seglist(1), l_mti_seglist(2),
3854 l_mti_seglist(3), l_mti_seglist(4),
3855 l_mti_seglist(5), l_mti_seglist(6),
3856 l_mti_seglist(7), l_mti_seglist(8),
3857 l_mti_seglist(9), l_mti_seglist(10),
3858 l_mti_seglist(11), l_mti_seglist(12),
3859 l_mti_seglist(13), l_mti_seglist(14),
3860 l_mti_seglist(15), l_mti_seglist(16),
3861 l_mti_seglist(17), l_mti_seglist(18),
3862 l_mti_seglist(19), l_mti_seglist(20)
3863 ) ;
3864 END LOOP; -- WHILE (l_loop_count
3865
3866
3867 IF G_DEBUG='Y' THEN
3868 AHL_DEBUG_PUB.debug('Transaction_source type['||l_txn_source_type||']');
3869 AHL_DEBUG_PUB.debug('Transaction_source Id['||p_x_ahl_mtl_txn_rec.Wip_Entity_id||']');
3870 END IF;
3871
3872 EXCEPTION
3873 WHEN OTHERS THEN
3874 x_return_status := FND_API.G_RET_STS_ERROR;
3875 IF G_DEBUG='Y' THEN
3876 AHL_DEBUG_PUB.debug('Exception inserting into mtl_txn interface' || SQLCODE);
3877 AHL_DEBUG_PUB.debug('SQLERRM:' || SQLERRM);
3878
3879 END IF;
3880 FND_MESSAGE.Set_Name('AHL','AHL_PRD_MTLTXN_ERROR');
3881 FND_MESSAGE.Set_Token('MSG',SQLERRM);
3882 FND_MESSAGE.Set_Token('ITEM',p_x_ahl_mtl_txn_rec.Inventory_Item_Id);
3883 FND_MESSAGE.Set_Token('WO_NAME',p_x_ahl_mtl_txn_rec.workorder_id);
3884 FND_MSG_PUB.ADD;
3885 RAISE FND_API.G_EXC_ERROR;
3886
3887 END INSERT_MTL_TXN_INTF;
3888
3889 /* This is a funciton used by the front queries which
3890 populate the table data. This gets the issued quantity
3891 for rhe given workorder id and item */
3892 Function GET_ISSUED_QTY(P_ORG_ID IN NUMBER, P_ITEM_ID IN NUMBER, P_WORKORDER_OP_ID IN NUMBER) RETURN NUMBER
3893 as
3894 l_iss_qty NUMBER:=0;
3895 BEGIN
3896
3897 -- Tamal: Bug #4095376: Begin
3898 -- The following line will be needed in the case net quantity issued is to be displayed, instead of entire issued quantity
3899 -- SELECT sum(nvl(decode(TRANSACTION_TYPE_ID, 35, QUANTITY, 43, -QUANTITY, 0), 0))
3900 SELECT sum(nvl(QUANTITY, 0))
3901 INTO l_iss_qty
3902 FROM AHL_WORKORDER_MTL_TXNS
3903 WHERE ORGANIZATION_ID = P_ORG_ID
3904 AND INVENTORY_ITEM_ID = P_ITEM_ID
3905 AND WORKORDER_OPERATION_ID = P_WORKORDER_OP_ID
3906 -- The following line will NOT be needed in the case net quantity issued is to be displayed
3907 AND TRANSACTION_TYPE_ID = 35;
3908 -- Tamal: Bug #4095376: End
3909
3910 return nvl(l_iss_qty,0);
3911
3912 END GET_ISSUED_QTY;
3913
3914 Function GET_WORKORD_LEVEL_QTY(
3915 p_wid IN NUMBER,
3916 p_item_id IN NUMBER,
3917 p_org_id IN NUMBER,
3918 p_lotnum IN VARCHAR2,
3919 p_rev IN VARCHAR2,
3920 p_serial_number IN VARCHAR2
3921 )
3922 RETURN NUMBER
3923 As
3924 issued NUMBER;
3925 CURSOR CUR_GET_WOID_LEVEL_QTY IS
3926 SELECT SUM(nvl(QUANTITY,0))
3927 FROM AHL_WORKORDER_MTL_TXNS A
3928 ,AHL_WORKORDER_OPERATIONS_V B
3929 WHERE A.ORGANIZATION_ID = p_org_id
3930 AND A.INVENTORY_ITEM_ID = p_item_id
3931 AND NVL(A.lot_number,'X')=NVL(p_lotnum,NVL(A.lot_number,'X'))
3932 AND NVL(A.revision,'X')=NVL(p_rev,NVL(A.REVISION,'X'))
3933 AND NVL(A.serial_number,'X')=NVL(p_serial_number,NVL(A.SERIAL_NUMBER,'X'))
3934 AND A.TRANSACTION_TYPE_ID=35
3935 AND A.ORGANIZATION_ID = B.organization_id
3936 AND A.workorder_operation_id =B.workorder_operation_id
3937 AND B.workorder_id = p_wid;
3938
3939 BEGIN
3940 OPEN CUR_GET_WOID_LEVEL_QTY;
3941 FETCH CUR_GET_WOID_LEVEL_QTY INTO issued;
3942 IF(CUR_GET_WOID_LEVEL_QTY%NOTFOUND) THEN
3943 issued := 0;
3944 END IF;
3945 CLOSE CUR_GET_WOID_LEVEL_QTY;
3946 return issued;
3947 END GET_WORKORD_LEVEL_QTY;
3948
3949 -- JKJAIN FP ER # 6436303 - start
3950 -- JKJAIN removed p_lotnum,p_rev,p_serial_number for Bug # 7587902
3951 --------------------------------------------------------------------------------
3952 -- Function for returning net quantity of material available with
3953 -- a workorder.
3954 -- Net Total Quantity = Total Quantity Issued - Total quantity returned
3955 -- Balaji added this function for OGMA ER # 5948868.
3956 --------------------------------------------------------------------------------------
3957
3958 Function GET_WORKORD_NET_QTY(
3959 p_wid IN NUMBER,
3960 p_item_id IN NUMBER,
3961 p_org_id IN NUMBER
3962 )
3963 RETURN NUMBER
3964 As
3965
3966 -- Local variables
3967 l_issue_qty NUMBER;
3968 l_rtn_qty NUMBER;
3969 l_net_qty NUMBER;
3970
3971 -- Cursors
3972 -- cursor for getting total issued quantity
3973 CURSOR CUR_GET_WO_ISSUE_QTY
3974 IS
3975 SELECT SUM(nvl(QUANTITY,0))
3976 FROM AHL_WORKORDER_MTL_TXNS A ,
3977 -- AHL_WORKORDER_OPERATIONS_V B
3978 -- JKJAIN BUG # 7587902
3979 AHL_WORKORDER_OPERATIONS B
3980 WHERE A.ORGANIZATION_ID = p_org_id
3981 AND A.INVENTORY_ITEM_ID = p_item_id
3982 AND A.TRANSACTION_TYPE_ID =35
3983 -- AND A.ORGANIZATION_ID = B.organization_id
3984 AND A.workorder_operation_id =B.workorder_operation_id
3985 AND B.workorder_id = p_wid;
3986
3987 -- cursor for getting total returned quantity
3988 CURSOR CUR_GET_WO_RET_QTY
3989 IS
3990 SELECT SUM(nvl(QUANTITY,0))
3991 FROM AHL_WORKORDER_MTL_TXNS A ,
3992 -- AHL_WORKORDER_OPERATIONS_V B
3993 -- JKJAIN BUG # 7587902
3994 AHL_WORKORDER_OPERATIONS B
3995 WHERE A.ORGANIZATION_ID = p_org_id
3996 AND A.INVENTORY_ITEM_ID = p_item_id
3997 AND A.TRANSACTION_TYPE_ID =43
3998 -- AND A.ORGANIZATION_ID = B.organization_id
3999 AND A.workorder_operation_id =B.workorder_operation_id
4000 AND B.workorder_id = p_wid;
4001
4002 BEGIN
4003 OPEN CUR_GET_WO_ISSUE_QTY;
4004 FETCH CUR_GET_WO_ISSUE_QTY INTO l_issue_qty;
4005 CLOSE CUR_GET_WO_ISSUE_QTY;
4006
4007 IF l_issue_qty IS NULL
4008 THEN
4009 l_issue_qty := 0;
4010 END IF;
4011
4012 OPEN CUR_GET_WO_RET_QTY;
4013 FETCH CUR_GET_WO_RET_QTY INTO l_rtn_qty;
4014 CLOSE CUR_GET_WO_RET_QTY;
4015
4016 IF l_rtn_qty IS NULL
4017 THEN
4018 l_rtn_qty := 0;
4019 END IF;
4020
4021 l_net_qty := l_issue_qty - l_rtn_qty;
4022
4023 -- JKJAIN BUG # 7587902
4024 -- IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4025 -- fnd_log.string
4026 -- (
4027 -- fnd_log.level_statement,
4028 -- 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY',
4029 -- 'l_net_qty -> ' || l_net_qty
4030 -- );
4031 -- END IF;
4032
4033 return l_net_qty;
4034
4035 END GET_WORKORD_NET_QTY;
4036 -- JKJAIN FP ER # 6436303 - end
4037
4038 /* this function is used by the front end queries which
4039 populate the table data. This gets the onhand quantity for an
4040 item */
4041
4042 function GET_ONHAND(P_ORG_ID IN NUMBER, P_ITEM_ID IN NUMBER) RETURN NUMBER
4043 IS
4044 onhand NUMBER;
4045 CURSOR Q1(p_org_id NUMBER, p_itme_Id NUMBER) IS
4046 SELECT SUM(TRANSACTION_QUANTITY)
4047 FROM MTL_ONHAND_QUANTITIES
4048 WHERE ORGANIZATION_ID = p_org_id
4049 AND INVENTORY_ITEM_ID = p_item_id;
4050 BEGIN
4051 OPEN Q1(P_ORG_ID,P_ITEM_ID);
4052 FETCH Q1 INTO onhand;
4053 IF(Q1%NOTFOUND) THEN
4054 onhand := 0;
4055 END IF;
4056 CLOSE Q1;
4057 return onhand;
4058 END GET_ONHAND;
4059
4060 procedure dumpInput(p_x_ahl_mtltxn_tbl IN AHL_MTLTXN_TBL_TYPE) IS
4061 BEGIN
4062
4063 IF G_DEBUG='Y' THEN
4064 AHL_DEBUG_PUB.DEBUG('INPUTS TO THE PROC ARE ...');
4065
4066 IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
4067 FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST LOOP
4068
4069 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Ahl_mtltxn_Id:'||p_x_ahl_mtltxn_tbl(i).Ahl_mtltxn_Id);
4070 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Workorder_Id:'||p_x_ahl_mtltxn_tbl(i).Workorder_Id);
4071 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Inventory_Item_Id:'||p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id);
4072 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Inventory_Item_Segments:'||p_x_ahl_mtltxn_tbl(i).Inventory_Item_Segments);
4073 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Revision:'||p_x_ahl_mtltxn_tbl(i).Revision);
4074 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Organization_Id:'||p_x_ahl_mtltxn_tbl(i).Organization_Id);
4075 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Condition:'||p_x_ahl_mtltxn_tbl(i).Condition);
4076 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Condition_desc:'||p_x_ahl_mtltxn_tbl(i).Condition_desc);
4077 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Subinventory_Name:'||p_x_ahl_mtltxn_tbl(i).Subinventory_Name);
4078 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Locator_Id:'||p_x_ahl_mtltxn_tbl(i).Locator_Id);
4079 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Locator_Segments:'||p_x_ahl_mtltxn_tbl(i).Locator_Segments);
4080 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Quantity:'||p_x_ahl_mtltxn_tbl(i).Quantity);
4081 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Uom:'||p_x_ahl_mtltxn_tbl(i).Uom);
4082 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Uom_Desc:'||p_x_ahl_mtltxn_tbl(i).Uom_Desc);
4083 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Transaction_Type_Id:'||p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id);
4084 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Transaction_Type_Name:'||p_x_ahl_mtltxn_tbl(i).Transaction_Type_Name);
4085 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Transaction_Reference:'||p_x_ahl_mtltxn_tbl(i).Transaction_Reference);
4086 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Wip_Entity_Id:'||p_x_ahl_mtltxn_tbl(i).Wip_Entity_Id);
4087 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Operation_Seq_Num:'||p_x_ahl_mtltxn_tbl(i).Operation_Seq_Num);
4088 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Serial_Number:'||p_x_ahl_mtltxn_tbl(i).Serial_Number);
4089 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Lot_Number:'||p_x_ahl_mtltxn_tbl(i).Lot_Number);
4090 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Reason_Id:'||p_x_ahl_mtltxn_tbl(i).Reason_Id);
4091 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Reason_Name:'||p_x_ahl_mtltxn_tbl(i).Reason_Name);
4092 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Problem_Code:'||p_x_ahl_mtltxn_tbl(i).Problem_Code);
4093 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Problem_Code_Meaning:'||p_x_ahl_mtltxn_tbl(i).Problem_Code_Meaning);
4094
4095 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Target_Visit_Id:'||p_x_ahl_mtltxn_tbl(i).Target_Visit_Id);
4096
4097 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Sr_Summary:'||p_x_ahl_mtltxn_tbl(i).Sr_Summary);
4098
4099 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Qa_Collection_Id:'||p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id);
4100
4101 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').Workorder_operation_Id:'||p_x_ahl_mtltxn_tbl(i).Workorder_operation_Id);
4102
4103 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE_CATEGORY:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY);
4104
4105 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE1:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE1);
4106
4107 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE2:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE2);
4108
4109 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE3:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE3);
4110
4111 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE4:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE4);
4112
4113 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE5:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE5);
4114
4115 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE6:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE6);
4116
4117 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE7:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE7);
4118
4119 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE8:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE8);
4120
4121 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE9:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE9);
4122
4123 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE10:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE10);
4124
4125 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE11:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE11);
4126
4127 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE12:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE12);
4128
4129 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE13:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE13);
4130
4131 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE14:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE14);
4132
4133 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').ATTRIBUTE15:'||p_x_ahl_mtltxn_tbl(i).ATTRIBUTE15);
4134 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').transaction_date:'||p_x_ahl_mtltxn_tbl(i).transaction_date);
4135 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').recepient_id:'||p_x_ahl_mtltxn_tbl(i).recepient_id);
4136 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').recepient_name:'||p_x_ahl_mtltxn_tbl(i).recepient_name);
4137 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').disposition_id:'||p_x_ahl_mtltxn_tbl(i).disposition_id);
4138 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').disposition_name:'||p_x_ahl_mtltxn_tbl(i).disposition_name);
4139 AHL_DEBUG_PUB.debug('p_x_ahl_mtltxn_tbl('||i||').move_to_project_flag:'||p_x_ahl_mtltxn_tbl(i).move_to_project_flag);
4140 END LOOP;
4141 END IF; -- p_x_ahl_mtltxn_tbl.COUNT
4142 END IF;
4143 END dumpInput;
4144
4145 Procedure CALCULATE_QTY
4146 (
4147 p_wo_id IN NUMBER,
4148 p_item_id IN NUMBER,
4149 p_org_id IN NUMBER,
4150 p_lot_num IN VARCHAR2,
4151 p_rev_num IN VARCHAR2,
4152 p_serial_num IN VARCHAR2,
4153 p_wo_op_id IN NUMBER,
4154 x_qty OUT NOCOPY NUMBER
4155 )
4156 IS
4157 l_rev_flag VARCHAR2(1) := 'N';
4158 l_lot_flag VARCHAR2(1) := 'N';
4159 l_serial_flag VARCHAR2(1) := 'N';
4160
4161 CURSOR GetItemDet(c_inv_item_id IN NUMBER, c_org_id IN NUMBER)
4162 IS
4163 SELECT
4164 SERIAL_NUMBER_CONTROL_CODE,
4165 LOT_CONTROL_CODE,
4166 REVISION_QTY_CONTROL_CODE
4167 FROM
4168 MTL_SYSTEM_ITEMS_B
4169 WHERE
4170 inventory_item_id=c_inv_item_id
4171 AND ORGANIZATION_ID=c_org_id;
4172
4173 l_item_rec GetItemDet%rowtype;
4174 l_iss_qty NUMBER:=0;
4175 l_rtn_qty NUMBER:=0;
4176 l_disp_qty NUMBER:=0;
4177 l_net_qty NUMBER:=0;
4178
4179 BEGIN
4180
4181 OPEN GetItemDet (p_item_id, p_org_id);
4182 FETCH GetItemDet into l_item_rec;
4183 IF GetItemDet%found
4184 THEN
4185 IF l_item_rec.LOT_CONTROL_CODE = 2 THEN
4186 l_lot_flag:='Y';
4187 END IF;
4188
4189 IF l_item_rec.REVISION_QTY_CONTROL_CODE = 2 THEN
4190 l_rev_flag:='Y';
4191 END IF;
4192
4193 IF l_item_rec.SERIAL_NUMBER_CONTROL_CODE <> 1 THEN
4194 l_serial_flag:='Y';
4195 END IF;
4196 END IF;
4197 CLOSE GetItemDet;
4198
4199
4200 SELECT SUM(NVL(a.primary_uom_qty,0)) INTO l_iss_qty
4201 FROM
4202 AHL_WORKORDER_MTL_TXNS a,
4203 AHL_WORKORDER_OPERATIONS b
4204 WHERE
4205 a.workorder_operation_id=b.workorder_operation_id
4206 AND a.transaction_type_id=35
4207 AND b.workorder_id=p_wo_id
4208 AND a.inventory_item_id=p_item_id
4209 AND a.organization_id=p_org_id
4210 AND nvl(a.serial_number,'X') = nvl(decode(l_serial_flag, 'Y', p_serial_num, a.serial_number),'X')
4211 AND nvl(a.lot_number,'X') = nvl(decode(l_lot_flag, 'Y', p_lot_num, a.lot_number),'X')
4212 AND nvl(a.revision,'X') = nvl(decode(l_rev_flag, 'Y', p_rev_num, a.revision),'X')
4213 AND a.workorder_operation_id=nvl(p_wo_op_id, a.workorder_operation_id);
4214
4215 SELECT SUM(NVL(a.primary_uom_qty,0)) INTO l_rtn_qty
4216 FROM
4217 AHL_WORKORDER_MTL_TXNS a,
4218 AHL_WORKORDER_OPERATIONS b
4219 WHERE
4220 a.workorder_operation_id=b.workorder_operation_id
4221 AND a.transaction_type_id=43
4222 AND b.workorder_id=p_wo_id
4223 AND a.inventory_item_id=p_item_id
4224 AND a.organization_id=p_org_id
4225 AND nvl(a.serial_number,'X') = nvl(decode(l_serial_flag, 'Y', p_serial_num, a.serial_number),'X')
4226 AND nvl(a.lot_number,'X') = nvl(decode(l_lot_flag, 'Y', p_lot_num, a.lot_number),'X')
4227 AND nvl(a.revision,'X') = nvl(decode(l_rev_flag, 'Y', p_rev_num, a.revision),'X')
4228 AND a.workorder_operation_id=nvl(p_wo_op_id, a.workorder_operation_id);
4229
4230 /* Tamal [R12 APPSPERF fixes]
4231 * R12 Drop 4 - SQL ID: 14400506
4232 * Bug #4918991
4233 */
4234 SELECT SUM(NVL(a.net_quantity,0)) INTO l_disp_qty
4235 FROM
4236 AHL_MTL_RET_DISPOSITIONS_V a,
4237 AHL_WORKORDERS b
4238 WHERE
4239 a.workorder_id=b.workorder_id
4240 AND b.master_workorder_flag = 'N'
4241 AND b.status_code NOT IN ('17' , '22')
4242 AND b.workorder_id=p_wo_id
4243 AND a.inventory_item_id=p_item_id
4244 --AND a.organization_id=p_org_id
4245 AND nvl(a.serial_number,'X') = nvl(decode(l_serial_flag, 'Y', p_serial_num, a.serial_number),'X')
4246 AND nvl(a.lot_number,'X') = nvl(decode(l_lot_flag, 'Y', p_lot_num, a.lot_number),'X')
4247 AND nvl(a.item_revision,'X') = nvl(decode(l_rev_flag, 'Y', p_rev_num, a.item_revision),'X')
4248 AND a.workorder_operation_id=nvl(p_wo_op_id, a.workorder_operation_id);
4249
4250 x_qty := nvl(l_iss_qty, 0) - nvl(l_rtn_qty, 0) - nvl(l_disp_qty, 0);
4251
4252 END CALCULATE_QTY;
4253
4254 PROCEDURE getDispositionReturn
4255 (
4256 p_x_ahl_prd_mtl_txn_tbl IN OUT NOCOPY Ahl_Mtltxn_Tbl_Type,
4257 P_prd_Mtltxn_criteria_rec IN Prd_Mtltxn_criteria_rec
4258 )AS
4259
4260 -- pick organization from Visit table. Disp. view returns master org.
4261 CURSOR GetDispDet
4262 (
4263 p_job_number IN VARCHAR2,
4264 p_visit_number IN NUMBER,
4265 p_priority IN NUMBER,
4266 p_dept_name IN VARCHAR2,
4267 p_org_name IN VARCHAR2,
4268 p_item IN VARCHAR2,
4269 p_incident_number IN VARCHAR2,
4270 p_disposition_name IN VARCHAR2
4271 ) IS
4272
4273 /* Tamal [R12 APPSPERF fixes]
4274 * R12 Drop 4 - SQL ID: 14400778
4275 * Bug #4918991
4276 */
4277 SELECT
4278 D.WORKORDER_ID,
4279 D.WORKORDER_NAME,
4280 V.ORGANIZATION_ID,
4281 D.WORKORDER_OPERATION_ID,
4282 O.OPERATION_SEQUENCE_NUM,
4283 D.ITEM_NUMBER,
4284 D.INVENTORY_ITEM_ID,
4285 D.ITEM_DESC,
4286 D.IMMEDIATE_DISPOSITION_CODE,
4287 D.DISPOSITION_ID,
4288 D.IMMEDIATE_TYPE,
4289 D.CONDITION_CODE,
4290 D.CONDITION_ID,
4291 D.SERIAL_NUMBER,
4292 D.UOM,
4293 UOM.UNIT_OF_MEASURE,
4294 WO_STS.MEANING JOB_STATUS_MEANING,
4295 D.LOT_NUMBER,
4296 D.ITEM_REVISION,
4297 D.COLLECTION_ID,
4298 D.INSTANCE_ID,
4299 WIP.DEFAULT_PULL_SUPPLY_SUBINV,
4300 WIP.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
4301 L.CONCATENATED_SEGMENTS,
4302 --SYSDATE,
4303 D.QUANTITY, --GOES TO THE ISSUE QTY UI
4304 D.NET_QUANTITY, --GOES TO THE RETURN QTY
4305 -- JKJAIN FP ER # 6436303 - start
4306 AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY(D.WORKORDER_ID,D.INVENTORY_ITEM_ID,V.ORGANIZATION_ID) Wo_Net_Total_Qty,
4307 -- JKJAIN FP ER # 6436303 - end
4308 W.wip_entity_id,
4309 (select inv_locator_id from ahl_visits_b where visit_id = w.visit_id) inv_locator_id
4310 FROM
4311 AHL_MTL_RET_DISPOSITIONS_V D,
4312 AHL_WORKORDERS W,
4313 (SELECT LOOKUP_CODE, MEANING FROM FND_LOOKUP_VALUES WHERE LOOKUP_TYPE = 'AHL_JOB_STATUS' AND LANGUAGE= USERENV('LANG')) WO_STS,
4314 AHL_VISITS_B V,
4315 AHL_VISIT_TASKS_B VT,
4316 CS_INCIDENTS_ALL_B C,
4317 WIP_DISCRETE_JOBS WDJ,
4318 (SELECT ORGANIZATION_ID, NAME FROM HR_ALL_ORGANIZATION_UNITS_TL WHERE LANGUAGE = USERENV('LANG')) ORG,
4319 BOM_DEPARTMENTS B,
4320 AHL_WORKORDER_OPERATIONS O,
4321 MTL_UNITS_OF_MEASURE_VL UOM,
4322 WIP_PARAMETERS WIP,
4323 MTL_ITEM_LOCATIONS_KFV L
4324 WHERE
4325 D.WORKORDER_ID = W.WORKORDER_ID AND
4326 W.MASTER_WORKORDER_FLAG = 'N' AND
4327 W.STATUS_CODE NOT IN ('17', '22', '5','7','12') AND
4328 W.STATUS_CODE = WO_STS.LOOKUP_CODE AND
4329 O.WORKORDER_OPERATION_ID (+) = D.WORKORDER_OPERATION_ID AND
4330 O.WORKORDER_ID (+) = D.WORKORDER_ID AND
4331 D.UOM = UOM.UOM_CODE AND
4332 WIP.ORGANIZATION_ID = L.ORGANIZATION_ID(+) AND
4333 WIP.DEFAULT_PULL_SUPPLY_LOCATOR_ID = L.INVENTORY_LOCATION_ID(+) AND
4334 WIP.ORGANIZATION_ID = V.ORGANIZATION_ID AND
4335 W.VISIT_TASK_ID = VT.VISIT_TASK_ID AND
4336 V.VISIT_ID = VT.VISIT_ID AND
4337 V.SERVICE_REQUEST_ID = C.INCIDENT_ID(+) AND
4338 WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID AND
4339 WDJ.OWNING_DEPARTMENT = B.DEPARTMENT_ID(+) AND
4340 V.ORGANIZATION_ID = ORG.ORGANIZATION_ID AND
4341 D.IMMEDIATE_TYPE LIKE NVL(p_disposition_name, D.IMMEDIATE_TYPE) AND
4342 D.ITEM_NUMBER LIKE NVL(p_item, D.ITEM_NUMBER) AND
4343 NVL(C.INCIDENT_NUMBER,'X') LIKE NVL(p_incident_number, NVL(C.INCIDENT_NUMBER,'X')) AND
4344 W.WORKORDER_NAME LIKE NVL(p_job_number, W.WORKORDER_NAME) AND
4345 UPPER(ORG.NAME) LIKE UPPER(NVL(p_org_name, ORG.NAME)) AND
4346 NVL(WDJ.PRIORITY,0) = NVL(p_priority, NVL(WDJ.PRIORITY,0)) AND
4347 V.VISIT_NUMBER = NVL(p_visit_number, V.VISIT_NUMBER) AND
4348 UPPER(B.DESCRIPTION) LIKE UPPER(NVL(p_dept_name, B.DESCRIPTION));
4349
4350 -- check if issued instance has been installed / validate instance.
4351 CURSOR chk_inst_relationship_csr (p_INVENTORY_ITEM_ID IN NUMBER,
4352 p_wip_entity_id IN NUMBER,
4353 p_ITEM_Revision IN VARCHAR2,
4354 p_lot_number IN VARCHAR2,
4355 p_Serial_Number IN VARCHAR2) IS
4356 SELECT 'x'
4357 FROM CSI_ITEM_INSTANCES CII
4358 WHERE CII.inventory_item_id = p_INVENTORY_ITEM_ID
4359 AND nvl(cii.inventory_revision,'1') = nvl(p_ITEM_Revision, '1')
4360 AND nvl(cii.lot_number, '1') = nvl(p_lot_number, '1')
4361 AND nvl(cii.serial_number,'1') = nvl(p_serial_number, '1')
4362 AND CII.ACTIVE_START_DATE <= SYSDATE
4363 AND ((CII.ACTIVE_END_DATE IS NULL) OR (CII.ACTIVE_END_DATE > SYSDATE))
4364 AND CII.QUANTITY > 0
4365 AND CII.LOCATION_TYPE_CODE = 'WIP'
4366 AND CII.WIP_JOB_ID = p_wip_entity_id
4367 AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
4368 WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
4369 AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
4370 AND NVL(CIR.ACTIVE_START_DATE,SYSDATE) <= SYSDATE AND
4371 (CIR.ACTIVE_END_DATE IS NULL OR CIR.ACTIVE_END_DATE > SYSDATE));
4372
4373 l_index NUMBER;
4374 l_valid_flag BOOLEAN;
4375 l_junk VARCHAR2(1);
4376
4377 -- sracha: added for bug fix 6328554.
4378 l_index_start NUMBER;
4379
4380 BEGIN
4381 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
4382 fnd_log.string
4383 (
4384 fnd_log.level_procedure,
4385 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn.begin',
4386 'At the start of PLSQL procedure'
4387 );
4388 END IF;
4389
4390 l_index :=p_x_ahl_prd_mtl_txn_tbl.count;
4391 l_index_start := l_index;
4392
4393 FOR l_disp_rec IN GetDispDet
4394 (
4395 p_job_number => P_prd_Mtltxn_criteria_rec.JOB_NUMBER,
4396 p_visit_number => P_prd_Mtltxn_criteria_rec.VISIT_NUMBER,
4397 p_priority => P_prd_Mtltxn_criteria_rec.PRIORITY,
4398 p_dept_name => P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME,
4399 p_org_name => P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME,
4400 p_item => P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS,
4401 p_incident_number => P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER,
4402 p_disposition_name=> P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME
4403 )
4404 LOOP
4405 l_valid_flag := TRUE;
4406 IF (Is_Item_Trackable(l_disp_rec.organization_id, l_disp_rec.INVENTORY_ITEM_ID)) THEN
4407 -- validate instance location.
4408 OPEN chk_inst_relationship_csr (l_disp_rec.INVENTORY_ITEM_ID,
4409 l_disp_rec.wip_entity_id,
4410 l_disp_rec.ITEM_Revision,
4411 l_disp_rec.lot_number,
4412 l_disp_rec.Serial_Number);
4413 FETCH chk_inst_relationship_csr INTO l_junk;
4414 IF (chk_inst_relationship_csr%NOTFOUND) THEN
4415 l_valid_flag := FALSE;
4416 END IF;
4417 CLOSE chk_inst_relationship_csr;
4418
4419 -- sracha: Added for bug# 6328554.
4420 -- Check for duplicate dispositions for the same instance.
4421 -- Occurs in case of multiple removals in IB tree case.
4422 IF (l_valid_flag) AND (l_index > l_index_start) THEN
4423 FOR i IN l_index_start..p_x_ahl_prd_mtl_txn_tbl.LAST LOOP
4424 IF (l_disp_rec.INVENTORY_ITEM_ID = p_x_ahl_prd_mtl_txn_tbl(i).inventory_item_id) AND
4425 (nvl(l_disp_rec.Serial_Number,'1') = nvl(p_x_ahl_prd_mtl_txn_tbl(i).Serial_Number,'1') AND
4426 nvl(l_disp_rec.ITEM_Revision,'1') = nvl(p_x_ahl_prd_mtl_txn_tbl(i).Revision,'1') AND
4427 nvl(l_disp_rec.lot_number,'1') = nvl(p_x_ahl_prd_mtl_txn_tbl(i).lot_number,'1')) THEN
4428 l_valid_flag := FALSE;
4429 EXIT;
4430 END IF;
4431 END LOOP;
4432 END IF; -- (l_valid_flag) AND l_index > l_index_start
4433 END IF; -- Is_Item_Trackable
4434
4435 IF (l_valid_flag) THEN
4436 p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id:=l_disp_rec.workorder_id;
4437 p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_name:=l_disp_rec.workorder_name;
4438 p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id:=l_disp_rec.Organization_Id;
4439 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id:=l_disp_rec.Workorder_operation_Id;
4440 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_disp_rec.ITEM_NUMBER;
4441 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id:=l_disp_rec.INVENTORY_ITEM_ID;
4442 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_disp_rec.ITEM_DESC;
4443 p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_name:=l_disp_rec.IMMEDIATE_TYPE;
4444 p_x_ahl_prd_mtl_txn_tbl(l_index).disposition_id:=l_disp_rec.disposition_id;
4445 p_x_ahl_prd_mtl_txn_tbl(l_index).Condition:=l_disp_rec.CONDITION_ID;
4446 p_x_ahl_prd_mtl_txn_tbl(l_index).Condition_desc:=l_disp_rec.CONDITION_CODE;
4447 p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number:=l_disp_rec.Serial_Number;
4448 p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity:=l_disp_rec.quantity;
4449 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity:=l_disp_rec.Net_quantity;
4450 -- JKJAIN FP ER # 6436303 - start
4451 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty:=l_disp_rec.Wo_Net_Total_Qty;
4452 -- JKJAIN FP ER # 6436303 - end
4453 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom:=l_disp_rec.Uom;
4454 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_DESC:=l_disp_rec.UNIT_OF_MEASURE;
4455 p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number:=l_disp_rec.Lot_Number;
4456 p_x_ahl_prd_mtl_txn_tbl(l_index).Revision:=l_disp_rec.ITEM_Revision;
4457 p_x_ahl_prd_mtl_txn_tbl(l_index).Qa_Collection_Id:=l_disp_rec.COLLECTION_ID;
4458 p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name:=l_disp_rec.DEFAULT_PULL_SUPPLY_SUBINV;
4459 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id:=l_disp_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
4460 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments:=l_disp_rec.concatenated_segments;
4461 --p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=l_disp_rec.SYSDATE;
4462 p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=SYSDATE;
4463
4464 -- ER 5854712- servicable locator.
4465 IF (l_disp_rec.inv_locator_id IS NULL) THEN
4466 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
4467 ELSE
4468 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
4469 END IF;
4470
4471 l_index:=l_index+1;
4472
4473 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4474 fnd_log.string
4475 (
4476 fnd_log.level_statement,
4477 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
4478 'l_disp_rec.workorder_name: ' || l_disp_rec.workorder_name
4479 );
4480 fnd_log.string
4481 (
4482 fnd_log.level_statement,
4483 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
4484 'l_disp_rec.workorder_id: ' || l_disp_rec.workorder_id
4485 );
4486 fnd_log.string
4487 (
4488 fnd_log.level_statement,
4489 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
4490 'l_disp_rec.disposition_id: ' || l_disp_rec.disposition_id
4491 );
4492 fnd_log.string
4493 (
4494 fnd_log.level_statement,
4495 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
4496 'l_disp_rec.ITEM_NUMBER: ' || l_disp_rec.ITEM_NUMBER
4497 );
4498 fnd_log.string
4499 (
4500 fnd_log.level_statement,
4501 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
4502 'l_disp_rec.serial_number: ' || l_disp_rec.serial_number
4503 );
4504 fnd_log.string
4505 (
4506 fnd_log.level_statement,
4507 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
4508 'l_disp_rec.ISSUEQTY: ' || l_disp_rec.quantity
4509 );
4510 fnd_log.string
4511 (
4512 fnd_log.level_statement,
4513 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn',
4514 'Net Qty: ' || l_disp_rec.Net_Quantity
4515 );
4516 END IF; -- fnd_log.level_statement
4517
4518 END IF;
4519
4520 END LOOP;
4521
4522 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
4523 fnd_log.string
4524 (
4525 fnd_log.level_procedure,
4526 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getDispositionReturn.begin',
4527 'At the start of PLSQL procedure'
4528 );
4529 END IF;
4530 END getDispositionReturn;
4531
4532
4533 PROCEDURE getMtlTxnsReturns(
4534 p_x_ahl_prd_mtl_txn_tbl IN OUT NOCOPY Ahl_Mtltxn_Tbl_Type,
4535 P_prd_Mtltxn_criteria_rec in Prd_Mtltxn_criteria_rec
4536 ) AS
4537
4538 CURSOR getMtlTxnsReturnsCur
4539 (
4540 p_job_number IN VARCHAR2,
4541 p_visit_number IN NUMBER,
4542 p_priority IN NUMBER,
4543 p_dept_name IN VARCHAR2,
4544 p_org_name IN VARCHAR2,
4545 p_item IN VARCHAR2,
4546 p_incident_number IN VARCHAR2
4547 ) IS
4548
4549 /* Tamal [R12 APPSPERF fixes]
4550 * R12 Drop 4 - SQL ID: 14401324
4551 * Bug #4918991
4552 */
4553 SELECT DISTINCT
4554 W.WORKORDER_ID,
4555 T.ORGANIZATION_ID,
4556 T.INVENTORY_ITEM_ID,
4557 T.SERIAL_NUMBER,
4558 T.LOT_NUMBER,
4559 T.REVISION,
4560 T.INSTANCE_ID, -- added to fix FP bug# 5172147.
4561 W.WIP_ENTITY_ID, -- added to filter chk_inst_relationship_csr for wip_job_id.
4562 (select inv_locator_id from ahl_visits_b where visit_id = w.visit_id) inv_locator_id
4563 FROM
4564 AHL_WORKORDER_MTL_TXNS T,
4565 MTL_SYSTEM_ITEMS_KFV I,
4566 AHL_WORKORDERS W,
4567 AHL_VISITS_B V,
4568 AHL_VISIT_TASKS_B VT,
4569 CS_INCIDENTS_ALL_B C,
4570 WIP_DISCRETE_JOBS WDJ,
4571 INV_ORGANIZATION_NAME_V ORG,
4572 BOM_DEPARTMENTS B,
4573 AHL_WORKORDER_OPERATIONS O
4574 WHERE
4575 T.ORGANIZATION_ID = V.ORGANIZATION_ID
4576 AND T.WORKORDER_OPERATION_ID = O.WORKORDER_OPERATION_ID
4577 AND W.WORKORDER_ID = O.WORKORDER_ID
4578 AND T.TRANSACTION_TYPE_ID = 35
4579 AND T.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
4580 AND T.ORGANIZATION_ID = I.ORGANIZATION_ID
4581 AND W.VISIT_TASK_ID = VT.VISIT_TASK_ID
4582 AND VT.VISIT_ID = V.VISIT_ID
4583 AND V.SERVICE_REQUEST_ID = C.INCIDENT_ID(+)
4584 AND WDJ.WIP_ENTITY_ID = W.WIP_ENTITY_ID
4585 AND WDJ.OWNING_DEPARTMENT = B.DEPARTMENT_ID (+)
4586 AND V.ORGANIZATION_ID = ORG.ORGANIZATION_ID
4587 AND W.STATUS_CODE NOT IN ('5','7','12')
4588 AND I.ENABLED_FLAG = 'Y'
4589 AND ((I.START_DATE_ACTIVE IS NULL) OR (I.START_DATE_ACTIVE <= SYSDATE))
4590 AND ((I.END_DATE_ACTIVE IS NULL) OR (I.END_DATE_ACTIVE >= SYSDATE))
4591 AND I.CONCATENATED_SEGMENTS LIKE NVL(p_item,I.CONCATENATED_SEGMENTS)
4592 AND UPPER(ORG.ORGANIZATION_NAME) LIKE UPPER(NVL(p_org_name,ORG.ORGANIZATION_NAME))
4593 AND UPPER(B.DESCRIPTION) LIKE UPPER(NVL(p_dept_name,B.DESCRIPTION))
4594 AND UPPER(NVL(C.INCIDENT_NUMBER,'X')) LIKE UPPER(NVL(p_incident_number,NVL(C.INCIDENT_NUMBER,'X')))
4595 AND NVL(WDJ.PRIORITY,0) = NVL(p_priority,NVL(WDJ.PRIORITY,0))
4596 AND V.VISIT_NUMBER = NVL(p_visit_number,V.VISIT_NUMBER)
4597 AND UPPER(W.WORKORDER_NAME) LIKE UPPER(NVL(p_job_number,W.WORKORDER_NAME));
4598
4599 --Query to validate disp
4600
4601 CURSOR CHECK_DISPITEM_CUR
4602 (
4603 c_wid in number,
4604 c_itemId NUMBER,
4605 --c_org_id IN NUMBER,
4606 c_sno in varchar2,
4607 c_rev in varchar2,
4608 c_lotNumber in varchar2
4609 ) IS
4610 /* Tamal [R12 APPSPERF fixes]
4611 * R12 Drop 4 - SQL ID: 14401875
4612 * Bug #4918991
4613 * BTW there is no code change here, the ahl_mtl_ret_dispositions_v view has been tuned for performance
4614 */
4615 SELECT 'T'
4616 FROM AHL_MTL_RET_DISPOSITIONS_V A
4617 WHERE
4618 WORKORDER_ID = c_wid AND
4619 INVENTORY_ITEM_ID = c_itemId AND
4620 --ORGANIZATION_ID = c_org_id AND
4621 NVL(SERIAL_NUMBER, 'X') = NVL(c_sno, NVL(SERIAL_NUMBER, 'X')) AND
4622 NVL(LOT_NUMBER, 'X') = NVL(c_lotNumber, NVL(LOT_NUMBER, 'X')) AND
4623 NVL(ITEM_REVISION, 'X') = NVL(c_rev, NVL(ITEM_REVISION, 'X')) AND
4624 WORKORDER_OPERATION_ID IS NOT NULL;
4625
4626
4627 CURSOR mtlOpRtns
4628 (
4629 c_wid in number,
4630 --c_wopId IN NUMBER,
4631 c_itemId NUMBER,
4632 c_org_id IN NUMBER,
4633 c_sno in varchar2,
4634 c_rev in varchar2,
4635 c_lotNumber in varchar2
4636 ) IS
4637 /* Tamal [R12 APPSPERF fixes]
4638 * R12 Drop 4 - SQL ID: 14401907
4639 * Bug #4918991
4640 */
4641 SELECT DISTINCT
4642 WO.WORKORDER_ID,
4643 WO.WORKORDER_NAME JOB_NUMBER ,
4644 VST.ORGANIZATION_ID,
4645 TXNS.WORKORDER_OPERATION_ID,
4646 WO_OP.OPERATION_SEQUENCE_NUM,
4647 MTL.CONCATENATED_SEGMENTS,
4648 TXNS.INVENTORY_ITEM_ID,
4649 MTL.DESCRIPTION,
4650 TXNS.SERIAL_NUMBER ,
4651 AHL_PRD_MTLTXN_PVT.GET_ISSUED_QTY(TXNS.ORGANIZATION_ID, TXNS.INVENTORY_ITEM_ID,TXNS.WORKORDER_OPERATION_ID) ISSUEQTY,
4652 -- JKJAIN FP ER # 6436303 - start
4653 AHL_PP_MATERIALS_PVT.GET_NET_QTY(TXNS.ORGANIZATION_ID, TXNS.INVENTORY_ITEM_ID,TXNS.WORKORDER_OPERATION_ID) Net_Total_Qty,
4654 -- JKJAIN FP ER # 6436303 - end
4655 TXNS.UOM,
4656 UOM.UNIT_OF_MEASURE,
4657 TXNS.RECEPIENT_ID,
4658 PER.FULL_NAME,
4659 WO_STS.MEANING JOB_STATUS_MEANING,
4660 TXNS.LOT_NUMBER,
4661 TXNS.REVISION,
4662 WIP.DEFAULT_PULL_SUPPLY_SUBINV,
4663 WIP.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
4664 --MTL_LOC.CONCATENATED_SEGMENTS LOCATOR
4665 --Fix for bug number 5903275
4666 inv_project.GET_LOCSEGS(WIP.DEFAULT_PULL_SUPPLY_LOCATOR_ID, WIP.organization_id) || fnd_flex_ext.get_delimiter('INV', 'MTLL', 101)
4667 || INV_ProjectLocator_PUB.get_project_number(MTL_LOC.segment19) || fnd_flex_ext.get_delimiter('INV', 'MTLL', 101)
4668 || INV_ProjectLocator_PUB.get_task_number(MTL_LOC.segment20) LOCATOR,
4669 --SYSDATE
4670 (select inv_locator_id from ahl_visits_b where visit_id = vst.visit_id) inv_locator_id
4671 FROM
4672 AHL_WORKORDER_MTL_TXNS TXNS,
4673 AHL_WORKORDERS WO,
4674 (SELECT LOOKUP_CODE, MEANING FROM FND_LOOKUP_VALUES WHERE LOOKUP_TYPE = 'AHL_JOB_STATUS' AND LANGUAGE= USERENV('LANG')) WO_STS,
4675 AHL_VISIT_TASKS_B VST_TASK,
4676 AHL_VISITS_B VST,
4677 AHL_WORKORDER_OPERATIONS WO_OP,
4678 MTL_SYSTEM_ITEMS_KFV MTL,
4679 MTL_UNITS_OF_MEASURE_VL UOM,
4680 -- modified to retrieve segment19 and 20 from base table to fix bug# 6611033.
4681 --MTL_ITEM_LOCATIONS_KFV MTL_LOC,
4682 MTL_ITEM_LOCATIONS MTL_LOC,
4683 WIP_PARAMETERS WIP,
4684 PER_ALL_PEOPLE_F PER
4685 WHERE
4686 TXNS.TRANSACTION_TYPE_ID = 35 AND
4687 TXNS.INVENTORY_ITEM_ID = MTL.INVENTORY_ITEM_ID AND
4688 TXNS.ORGANIZATION_ID = MTL.ORGANIZATION_ID AND
4689 TXNS.WORKORDER_OPERATION_ID = WO_OP.WORKORDER_OPERATION_ID AND
4690 WO_OP.WORKORDER_ID = WO.WORKORDER_ID AND
4691 TXNS.ORGANIZATION_ID = VST.ORGANIZATION_ID AND
4692 TXNS.UOM = UOM.UOM_CODE AND
4693 --MTL_LOC setup is optional(bug# 6761128).
4694 --MTL_LOC.ORGANIZATION_ID = VST.ORGANIZATION_ID AND
4695 VST.ORGANIZATION_ID = WIP.ORGANIZATION_ID AND
4696 WO.STATUS_CODE = WO_STS.LOOKUP_CODE AND
4697 WO.VISIT_TASK_ID = VST_TASK.VISIT_TASK_ID AND
4698 VST.VISIT_ID = VST_TASK.VISIT_ID AND
4699 WO.MASTER_WORKORDER_FLAG = 'N' AND
4700 WO.STATUS_CODE NOT IN ('17', '22') AND
4701 WIP.ORGANIZATION_ID = MTL_LOC.ORGANIZATION_ID (+) AND
4702 WIP.DEFAULT_PULL_SUPPLY_LOCATOR_ID = MTL_LOC.INVENTORY_LOCATION_ID (+) AND
4703 TXNS.RECEPIENT_ID = PER.PERSON_ID (+) AND
4704
4705 WO.WORKORDER_ID = c_wid AND
4706 MTL.INVENTORY_ITEM_ID =c_itemid AND
4707 NVL(TXNS.SERIAL_NUMBER,'X') = NVL(c_SNO, NVL(TXNS.SERIAL_NUMBER,'X')) AND
4708 NVL(TXNS.LOT_NUMBER,'X') = NVL(c_lotNumber, NVL(TXNS.LOT_NUMBER,'X')) AND
4709 NVL(TXNS.REVISION,'X') = NVL(c_rev, NVL(TXNS.REVISION,'X')) AND
4710 TXNS.ORGANIZATION_ID = c_ORG_ID;
4711
4712 CURSOR mtlWoRtns
4713 (
4714 c_wid in number,
4715 c_itemId NUMBER,
4716 c_org_id IN NUMBER,
4717 c_sno in varchar2,
4718 c_rev in varchar2,
4719 c_lotNumber in varchar2
4720 ) IS
4721 /* Tamal [R12 APPSPERF fixes]
4722 * R12 Drop 4 - SQL ID: 14402096
4723 * Bug #4918991
4724 */
4725 SELECT DISTINCT
4726 E.WORKORDER_ID,
4727 E.WORKORDER_NAME JOB_NUMBER,
4728 V.ORGANIZATION_ID,
4729 B.CONCATENATED_SEGMENTS ,
4730 A.INVENTORY_ITEM_ID,
4731 B.DESCRIPTION,
4732 A.SERIAL_NUMBER ,
4733 AHL_PRD_MTLTXN_PVT.GET_WORKORD_LEVEL_QTY(c_wid, c_itemid, c_ORG_ID, c_lotNumber, c_rev, c_SNO) issWoQty,
4734 -- JKJAIN FP ER # 6436303 - start
4735 AHL_PRD_MTLTXN_PVT.GET_WORKORD_NET_QTY(c_wid,c_itemid,c_ORG_ID) Wo_Net_Total_Qty,
4736 -- JKJAIN FP ER # 6436303 - end
4737 A.UOM ,
4738 UOM.unit_of_measure,
4739 WO_STS.MEANING JOB_STATUS_MEANING,
4740 A.LOT_NUMBER,
4741 A.REVISION,
4742 W.DEFAULT_PULL_SUPPLY_SUBINV,
4743 W.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
4744 --D.CONCATENATED_SEGMENTS Locator
4745 -- Fix for bug number 5903275
4746 inv_project.GET_LOCSEGS(W.DEFAULT_PULL_SUPPLY_LOCATOR_ID, W.organization_id) || fnd_flex_ext.get_delimiter('INV', 'MTLL', 101)
4747 || INV_ProjectLocator_PUB.get_project_number(D.segment19) || fnd_flex_ext.get_delimiter('INV', 'MTLL', 101)
4748 || INV_ProjectLocator_PUB.get_task_number(D.segment20) LOCATOR,
4749 --SYSDATE
4750 (select inv_locator_id from ahl_visits_b where visit_id = E.visit_id) inv_locator_id
4751 FROM
4752 AHL_WORKORDER_MTL_TXNS A,
4753 MTL_SYSTEM_ITEMS_KFV B,
4754 MTL_UNITS_OF_MEASURE_VL UOM,
4755 -- modified to retrieve segment19 and 20 from base table to fix bug# 6611033.
4756 --MTL_ITEM_LOCATIONS_KFV D,
4757 MTL_ITEM_LOCATIONS D,
4758 AHL_WORKORDERS E,
4759 (SELECT LOOKUP_CODE, MEANING FROM FND_LOOKUP_VALUES WHERE LOOKUP_TYPE = 'AHL_JOB_STATUS' AND LANGUAGE= USERENV('LANG')) WO_STS,
4760 AHL_VISITS_B V,
4761 AHL_VISIT_TASKS_B VT,
4762 AHL_WORKORDER_OPERATIONS F,
4763 WIP_PARAMETERS W
4764 WHERE
4765 A.INVENTORY_ITEM_ID=B.INVENTORY_ITEM_ID
4766 AND A.WORKORDER_OPERATION_ID=F.WORKORDER_OPERATION_ID
4767 AND A.ORGANIZATION_ID=B.ORGANIZATION_ID
4768 AND A.ORGANIZATION_ID=V.ORGANIZATION_ID
4769 AND A.TRANSACTION_TYPE_ID=35
4770 AND A.uom=UOM.uom_code
4771 --MTL_LOC setup is optional(bug# 6761128).
4772 --AND D.organization_id=V.organization_id
4773 AND F.WORKORDER_ID=E.WORKORDER_ID
4774 AND E.VISIT_TASK_ID = VT.VISIT_TASK_ID
4775 AND E.MASTER_WORKORDER_FLAG = 'N'
4776 AND E.STATUS_CODE NOT IN ('17', '22')
4777 AND E.STATUS_CODE = WO_STS.LOOKUP_CODE
4778 AND VT.VISIT_ID = V.VISIT_ID
4779 AND V.ORGANIZATION_ID=W.ORGANIZATION_ID
4780 AND W.organization_id = D.organization_id(+)
4781 AND W.default_pull_supply_locator_id =D.inventory_location_id(+)
4782
4783 AND E.workorder_id = c_wid
4784 AND B.INVENTORY_ITEM_ID = c_itemid
4785 AND NVL(A.SERIAL_NUMBER, 'X') = NVL(c_SNO ,NVL(A.SERIAL_NUMBER, 'X'))
4786 AND NVL(A.lot_number, 'X') = NVL(c_lotNumber ,NVL(A.LOT_NUMBER, 'X'))
4787 AND NVL(A.revision, 'X') = NVL(c_rev ,NVL(A.REVISION, 'X'))
4788 AND A.organization_id = c_ORG_ID;
4789
4790 -- check if issued instance has been installed / validate instance.
4791 -- and is located in the wip job.
4792 CURSOR chk_inst_relationship_csr (p_instance_id IN NUMBER,
4793 p_wip_entity_id IN NUMBER) IS
4794 SELECT 'x'
4795 FROM CSI_ITEM_INSTANCES CII
4796 WHERE INSTANCE_ID = p_instance_id
4797 AND ACTIVE_START_DATE <= SYSDATE
4798 AND ((ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE > SYSDATE))
4799 AND QUANTITY > 0
4800 AND LOCATION_TYPE_CODE = 'WIP'
4801 AND WIP_JOB_ID = p_wip_entity_id
4802 AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
4803 WHERE CIR.SUBJECT_ID = CII.INSTANCE_ID
4804 AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
4805 AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE) AND NVL(ACTIVE_END_DATE,SYSDATE));
4806
4807 l_index NUMBER := p_x_ahl_prd_mtl_txn_tbl.count;
4808 l_qty NUMBER := 0;
4809 l_opseq_flag varchar2(1);
4810 l_junk varchar2(1);
4811 l_valid_flag BOOLEAN;
4812
4813 BEGIN
4814 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
4815 fnd_log.string
4816 (
4817 fnd_log.level_procedure,
4818 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns.begin',
4819 'At the start of PLSQL procedure'
4820 );
4821 END IF;
4822 FOR l_mtlTxn_rec IN getMtlTxnsReturnsCur
4823 (
4824 p_job_number => P_prd_Mtltxn_criteria_rec.JOB_NUMBER,
4825 p_visit_number => P_prd_Mtltxn_criteria_rec.VISIT_NUMBER,
4826 p_priority => P_prd_Mtltxn_criteria_rec.PRIORITY,
4827 p_dept_name => P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME,
4828 p_org_name => P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME,
4829 p_item => P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS,
4830 p_incident_number => P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER
4831 )LOOP
4832
4833 l_valid_flag := TRUE;
4834 -- check if instance id has been installed.
4835 IF (l_mtlTxn_rec.instance_id IS NOT NULL) THEN
4836 OPEN chk_inst_relationship_csr (l_mtlTxn_rec.instance_id, l_mtlTxn_rec.wip_entity_id);
4837 FETCH chk_inst_relationship_csr INTO l_junk;
4838 IF (chk_inst_relationship_csr%NOTFOUND) THEN
4839 l_valid_flag := FALSE;
4840 END IF;
4841 CLOSE chk_inst_relationship_csr;
4842 END IF;
4843
4844 IF (l_valid_flag) THEN
4845 OPEN CHECK_DISPITEM_CUR(
4846 c_wid => l_mtlTxn_rec.Workorder_Id,
4847 c_itemId => l_mtlTxn_rec.Inventory_Item_Id,
4848 --c_org_id => l_mtlTxn_rec.Organization_Id,
4849 c_sno => l_mtlTxn_rec.Serial_Number,
4850 c_rev => l_mtlTxn_rec.Revision,
4851 c_lotNumber => l_mtlTxn_rec.Lot_Number
4852 );
4853 FETCH CHECK_DISPITEM_CUR into l_opseq_flag;
4854 IF CHECK_DISPITEM_CUR%FOUND THEN
4855 l_opseq_flag :='T';
4856 ELSE
4857 l_opseq_flag :='F';
4858 END IF;
4859 CLOSE CHECK_DISPITEM_CUR;
4860
4861 IF (l_opseq_flag = 'T') THEN -- Fetch material operations returs
4862 FOR l_mtloprtns_rec IN mtlOpRtns (
4863 c_wid => l_mtlTxn_rec.Workorder_Id,
4864 -- c_wopId => l_mtlTxn_rec.Workorder_operation_id,
4865 c_itemId => l_mtlTxn_rec.Inventory_Item_Id,
4866 c_org_id => l_mtlTxn_rec.Organization_Id,
4867 c_sno => l_mtlTxn_rec.Serial_Number,
4868 c_rev => l_mtlTxn_rec.Revision,
4869 c_lotNumber => l_mtlTxn_rec.Lot_Number)
4870 LOOP
4871 CALCULATE_QTY(
4872 p_wo_id => l_mtloprtns_rec.Workorder_Id,
4873 p_item_id => l_mtloprtns_rec.Inventory_Item_Id,
4874 p_org_id => l_mtloprtns_rec.Organization_Id,
4875 p_lot_num => l_mtloprtns_rec.Lot_Number,
4876 p_rev_num => l_mtloprtns_rec.Revision,
4877 p_serial_num => l_mtloprtns_rec.Serial_Number,
4878 x_qty => l_qty,
4879 p_wo_op_id => l_mtloprtns_rec.Workorder_operation_Id
4880 );
4881
4882 IF (l_qty >0) THEN
4883 p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id :=l_mtloprtns_rec.workorder_id;
4884 p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id :=l_mtloprtns_rec.Organization_Id;
4885 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Name :=l_mtloprtns_rec.JOB_NUMBER;
4886 p_x_ahl_prd_mtl_txn_tbl(l_index).Operation_Seq_Num :=l_mtloprtns_rec.OPERATION_SEQUENCE_NUM;
4887 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id:=l_mtloprtns_rec.Workorder_operation_Id;
4888 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_mtloprtns_rec.CONCATENATED_SEGMENTS;
4889 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id :=l_mtloprtns_rec.INVENTORY_ITEM_ID;
4890 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_mtloprtns_rec.DESCRIPTION;
4891 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status :=l_mtloprtns_rec.JOB_STATUS_MEANING;
4892 p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number :=l_mtloprtns_rec.Serial_Number;
4893 p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity :=l_mtloprtns_rec.ISSUEQTY;
4894 -- JKJAIN FP ER # 6436303- start
4895 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty :=l_mtloprtns_rec.Net_Total_Qty;
4896 -- JKJAIN FP ER # 6436303- end
4897 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom :=l_mtloprtns_rec.Uom;
4898 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_Desc :=l_mtloprtns_rec.UNIT_OF_MEASURE;
4899 p_x_ahl_prd_mtl_txn_tbl(l_index).recepient_name :=l_mtloprtns_rec.FULL_NAME;
4900 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status :=l_mtloprtns_rec.JOB_STATUS_MEANING;
4901 p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number :=l_mtloprtns_rec.Lot_Number;
4902 p_x_ahl_prd_mtl_txn_tbl(l_index).Revision :=l_mtloprtns_rec.Revision;
4903 p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name :=l_mtloprtns_rec.DEFAULT_PULL_SUPPLY_SUBINV;
4904 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id :=l_mtloprtns_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
4905 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments :=l_mtloprtns_rec.Locator;
4906 --p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=l_mtloprtns_rec.SYSDATE;
4907 p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=SYSDATE;
4908
4909 --ER 5854712. retrieve visit locator.
4910 IF (l_mtloprtns_rec.inv_locator_id IS NULL) THEN
4911 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
4912 ELSE
4913 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
4914 END IF;
4915
4916 l_index:=l_index+1;
4917 END IF;
4918 END LOOP;
4919 ELSE -- Fetch material workorder returns
4920
4921 FOR l_mtlWoRtns_rec IN mtlWoRtns(
4922 c_wid => l_mtlTxn_rec.Workorder_Id,
4923 c_itemId => l_mtlTxn_rec.Inventory_Item_Id,
4924 c_org_id => l_mtlTxn_rec.Organization_Id,
4925 c_sno => l_mtlTxn_rec.Serial_Number,
4926 c_rev => l_mtlTxn_rec.Revision,
4927 c_lotNumber => l_mtlTxn_rec.Lot_Number)
4928 LOOP
4929 IF (l_mtlTxn_rec.instance_id IS NULL) THEN
4930 -- only non-serialized case.
4931 CALCULATE_QTY(
4932 p_wo_id => l_mtlWoRtns_rec.Workorder_Id,
4933 p_item_id => l_mtlWoRtns_rec.Inventory_Item_Id,
4934 p_org_id => l_mtlWoRtns_rec.Organization_Id,
4935 p_lot_num => l_mtlWoRtns_rec.Lot_Number,
4936 p_rev_num => l_mtlWoRtns_rec.Revision,
4937 p_serial_num => l_mtlWoRtns_rec.Serial_Number,
4938 x_qty => l_qty,
4939 p_wo_op_id => null
4940 );
4941 ELSE
4942 -- serialized
4943 l_qty := 1;
4944 END IF;
4945
4946 IF (l_qty > 0) THEN
4947 p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id :=l_mtlWoRtns_rec.workorder_id;
4948 p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id :=l_mtlWoRtns_rec.Organization_Id;
4949 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Name :=l_mtlWoRtns_rec.JOB_NUMBER;
4950 --p_x_ahl_prd_mtl_txn_tbl(l_index).Operation_Seq_Num :=l_mtlWoRtns_rec.OPERATION_SEQUENCE_NUM;
4951 --p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id :=l_mtlWoRtns_rec.Workorder_operation_Id;
4952 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_mtlWoRtns_rec.CONCATENATED_SEGMENTS;
4953 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id :=l_mtlWoRtns_rec.INVENTORY_ITEM_ID;
4954 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_mtlWoRtns_rec.DESCRIPTION;
4955 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status :=l_mtlWoRtns_rec.JOB_STATUS_MEANING;
4956 p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number :=l_mtlWoRtns_rec.Serial_Number;
4957 p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity :=l_mtlWoRtns_rec.issWoQty;
4958 -- JKJAIN FP ER # 6436303- start
4959 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Total_Qty :=l_mtlWoRtns_rec.Wo_Net_Total_Qty;
4960 -- JKJAIN FP ER # 6436303- end
4961 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity :=l_qty;
4962 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom :=l_mtlWoRtns_rec.Uom;
4963 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_Desc :=l_mtlWoRtns_rec.UNIT_OF_MEASURE;
4964 --p_x_ahl_prd_mtl_txn_tbl(l_index).recepient_name :=l_mtlWoRtns_rec.FULL_NAME;
4965 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status :=l_mtlWoRtns_rec.JOB_STATUS_MEANING;
4966 p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number :=l_mtlWoRtns_rec.Lot_Number;
4967 p_x_ahl_prd_mtl_txn_tbl(l_index).Revision :=l_mtlWoRtns_rec.Revision;
4968 p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name :=l_mtlWoRtns_rec.DEFAULT_PULL_SUPPLY_SUBINV;
4969 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id :=l_mtlWoRtns_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
4970 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments :=l_mtlWoRtns_rec.Locator;
4971 --p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=l_mtlWoRtns_rec.SYSDATE;
4972 p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=SYSDATE;
4973
4974 -- ER 5854712.
4975 IF (l_mtlWoRtns_rec.inv_locator_id IS NULL) THEN
4976 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
4977 ELSE
4978 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
4979 END IF;
4980
4981 l_index:=l_index+1;
4982
4983 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
4984 fnd_log.string
4985 (
4986 fnd_log.level_statement,
4987 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
4988 'l_mtlWoRtns_rec.workorder_id: ' || l_mtlWoRtns_rec.workorder_id
4989 );
4990 fnd_log.string
4991 (
4992 fnd_log.level_statement,
4993 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
4994 'l_mtlWoRtns_rec.job_number: ' || l_mtlWoRtns_rec.job_number
4995 );
4996 fnd_log.string
4997 (
4998 fnd_log.level_statement,
4999 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
5000 'l_mtlWoRtns_rec.CONCATENATED_SEGMENTS: ' || l_mtlWoRtns_rec.CONCATENATED_SEGMENTS
5001 );
5002 fnd_log.string
5003 (
5004 fnd_log.level_statement,
5005 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
5006 'l_mtlWoRtns_rec.serial_number: ' || l_mtlWoRtns_rec.serial_number
5007 );
5008 fnd_log.string
5009 (
5010 fnd_log.level_statement,
5011 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns',
5012 'l_mtlWoRtns_rec.issWoQty: ' || l_mtlWoRtns_rec.issWoQty
5013 );
5014 fnd_log.string
5015 (
5016 fnd_log.level_statement,
5017 'ahl.plsql.AHL_PRD_MTLTXN_PVT.l_mtlWoRtns_rec',
5018 'l_mtlWoRtns_rec.Net_Quantity: ' || l_qty
5019 );
5020
5021 END IF; -- debug messages.
5022
5023 END IF;
5024 END LOOP;
5025 END IF;
5026 END IF; -- l_valid_flag
5027 END LOOP;
5028
5029 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5030 fnd_log.string
5031 (
5032 fnd_log.level_procedure,
5033 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlTxnsReturns.end',
5034 'At the end of PLSQL procedure'
5035 );
5036 END IF;
5037
5038 END getMtlTxnsReturns;
5039
5040 -- Added for FP bug# 5903256.
5041 -- This procedure will retrieve all trackable parts in the job that
5042 -- have not been issued into the wo and that do not have an associated
5043 -- disposition.
5044 PROCEDURE getMtlNotIssued ( p_x_ahl_prd_mtl_txn_tbl IN OUT NOCOPY Ahl_Mtltxn_Tbl_Type,
5045 p_prd_Mtltxn_criteria_rec IN Prd_Mtltxn_criteria_rec) IS
5046
5047 -- Added for bug fix 6594140.
5048 -- get tracked items in a workorder.
5049 CURSOR get_tracked_inst_csr(
5050 p_job_number IN VARCHAR2,
5051 p_visit_number IN NUMBER,
5052 p_priority IN NUMBER,
5053 p_dept_name IN VARCHAR2,
5054 p_org_name IN VARCHAR2,
5055 p_item IN VARCHAR2,
5056 p_incident_number IN VARCHAR2) IS
5057 SELECT W.WORKORDER_ID,
5058 W.job_number,
5059 W.job_status_meaning,
5060 I.Description,
5061 W.ORGANIZATION_ID,
5062 csi.INVENTORY_ITEM_ID,
5063 I.concatenated_segments,
5064 csi.SERIAL_NUMBER ,
5065 csi.LOT_NUMBER,
5066 csi.INVENTORY_REVISION REVISION,
5067 csi.INSTANCE_ID,
5068 W.WIP_ENTITY_ID,
5069 csi.quantity,
5070 csi.Unit_Of_measure UOM,
5071 UOM.unit_of_measure,
5072 P.DEFAULT_PULL_SUPPLY_SUBINV,
5073 P.DEFAULT_PULL_SUPPLY_LOCATOR_ID,
5074 inv_project.GET_LOCSEGS(P.DEFAULT_PULL_SUPPLY_LOCATOR_ID, W.organization_id)|| '.'
5075 ||
5076 DECODE(D.segment19,NULL,NULL,inv_project.GET_PROJECT_NUMBER(D.segment19)) || '.'
5077 ||
5078 DECODE(D.segment20,NULL,NULL,inv_project.GET_TASK_NUMBER(D.segment20)) Locator,
5079 (select inv_locator_id from ahl_visits_b where visit_id = w.visit_id) inv_locator_id
5080 FROM
5081 CSI_ITEM_INSTANCES CSI,
5082 MTL_SYSTEM_ITEMS_KFV I,
5083 AHL_SEARCH_WORKORDERS_v W,
5084 WIP_PARAMETERS P,
5085 MTL_UNITS_OF_MEASURE_VL UOM,
5086 MTL_ITEM_LOCATIONS D,
5087 MTL_PARAMETERS MP
5088 WHERE
5089 csi.inventory_item_id = I.inventory_item_id
5090 AND W.organization_id = MP.organization_id
5091 AND csi.inv_master_organization_id = mp.master_organization_id
5092 AND MP.organization_id = I.organization_id
5093 AND CSI.WIP_JOB_ID = W.WIP_ENTITY_ID
5094 AND CSI.LOCATION_TYPE_CODE = 'WIP'
5095 AND W.organization_id = P.organization_id
5096 AND CSI.Unit_Of_Measure = UOM.UOM_CODE
5097 AND P.default_pull_supply_locator_id = D.inventory_location_id(+)
5098 AND P.organization_id = D.organization_id(+)
5099 AND I.ENABLED_FLAG = 'Y'
5100 AND W.JOB_STATUS_CODE NOT IN ('5','7','12')
5101 AND ((I.START_DATE_ACTIVE IS NULL) OR (I.START_DATE_ACTIVE <= SYSDATE))
5102 AND ((I.END_DATE_ACTIVE IS NULL) OR (I.END_DATE_ACTIVE >= SYSDATE))
5103 AND UPPER(I.concatenated_segments) LIKE UPPER(nvl(p_item,I.concatenated_segments))
5104 AND UPPER(W.ORGANIZATION_NAME) LIKE UPPER(NVL(p_org_name,W.ORGANIZATION_NAME))
5105 AND UPPER(W.DEPARTMENT_NAME) LIKE UPPER(NVL(p_dept_name,W.DEPARTMENT_NAME))
5106 AND UPPER(NVL(W.INCIDENT_NUMBER,'x')) LIKE UPPER(NVL(p_incident_number,NVL(W.INCIDENT_NUMBER,'x')))
5107 AND NVL(W.PRIORITY,0) = NVL(p_priority,NVL(W.PRIORITY,0))
5108 AND W.VISIT_NUMBER = NVL(p_visit_number,W.VISIT_NUMBER)
5109 AND UPPER(W.JOB_NUMBER) LIKE UPPER(NVL(p_job_number,W.job_number))
5110 AND NOT EXISTS (SELECT 'X' FROM CSI_II_RELATIONSHIPS CIR
5111 WHERE CIR.SUBJECT_ID = CSI.INSTANCE_Id
5112 AND CIR.RELATIONSHIP_TYPE_CODE = 'COMPONENT-OF'
5113 AND SYSDATE BETWEEN NVL(ACTIVE_START_DATE,SYSDATE)
5114 AND NVL(ACTIVE_END_DATE,SYSDATE))
5115 /* fix for bug# 6310766: extra row being displayed with 0 qty
5116 -- split this query into two to handle serialized and non-serialized items.
5117 AND NOT EXISTS (SELECT 'x'
5118 from ahl_workorder_mtl_txns txn, AHL_WORKORDER_OPERATIONS o
5119 where txn.workorder_operation_id = o.workorder_operation_id
5120 and o.workorder_id = w.workorder_id
5121 and txn.instance_id = csi.instance_id
5122 and txn.TRANSACTION_TYPE_ID = 35)
5123 */
5124 -- for serialized items
5125 AND NOT EXISTS (SELECT 'x'
5126 from ahl_workorder_mtl_txns txn, AHL_WORKORDER_OPERATIONS o
5127 where txn.workorder_operation_id = o.workorder_operation_id
5128 and o.workorder_id = w.workorder_id
5129 and txn.instance_id = csi.instance_id
5130 and txn.TRANSACTION_TYPE_ID = 35
5131 and txn.serial_number is not null
5132 -- in case part number or serialnumber changed.
5133 --and txn.serial_number = csi.serial_number
5134 --and txn.inventory_item_id = csi.inventory_item_id
5135 )
5136 -- for non-serialized items
5137 AND NOT EXISTS (SELECT 'x'
5138 from ahl_workorder_mtl_txns txn, AHL_WORKORDER_OPERATIONS o
5139 where txn.workorder_operation_id = o.workorder_operation_id
5140 and o.workorder_id = w.workorder_id
5141 and txn.TRANSACTION_TYPE_ID = 35
5142 and txn.serial_number is null
5143 and txn.inventory_item_id = csi.inventory_item_id
5144 and nvl(txn.REVISION, 'x') = nvl(csi.inventory_revision,'x')
5145 and nvl(txn.lot_number,'x') = nvl(csi.lot_number,'x')
5146 )
5147 AND CSI.ACTIVE_START_DATE <= SYSDATE
5148 AND ((CSI.ACTIVE_END_DATE IS NULL) OR (CSI.ACTIVE_END_DATE > SYSDATE))
5149 AND CSI.quantity > 0;
5150
5151 -- Check existence of disposition.
5152 CURSOR ahl_disp_csr (p_workorder_id IN NUMBER,
5153 p_instance_id IN NUMBER) IS
5154 SELECT 'X'
5155 FROM AHL_MTL_RET_DISPOSITIONS_V disp
5156 WHERE disp.WORKORDER_ID= p_WORKORDER_ID
5157 AND disp.instance_id = p_instance_id;
5158
5159 l_index NUMBER := p_x_ahl_prd_mtl_txn_tbl.count;
5160 l_junk varchar2(1);
5161
5162 BEGIN
5163
5164 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5165 fnd_log.string
5166 (
5167 fnd_log.level_procedure,
5168 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlNotIssued.Begin',
5169 'At the Start of PLSQL procedure'
5170 );
5171 END IF;
5172
5173 FOR l_mtl_txn_rec IN get_tracked_inst_csr(
5174 p_job_number => P_prd_Mtltxn_criteria_rec.JOB_NUMBER,
5175 p_visit_number => P_prd_Mtltxn_criteria_rec.VISIT_NUMBER,
5176 p_priority => P_prd_Mtltxn_criteria_rec.PRIORITY,
5177 p_dept_name => P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME,
5178 p_org_name => P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME,
5179 p_item => P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS,
5180 p_incident_number => P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER)
5181
5182 LOOP
5183 -- check if disposition exists.
5184 OPEN ahl_disp_csr(l_mtl_txn_rec.workorder_id, l_mtl_txn_rec.instance_id);
5185 FETCH ahl_disp_csr INTO l_junk;
5186 IF (ahl_disp_csr%NOTFOUND) THEN
5187 -- add instance to search results.
5188 p_x_ahl_prd_mtl_txn_tbl(l_index).workorder_id :=l_mtl_txn_rec.workorder_id;
5189 p_x_ahl_prd_mtl_txn_tbl(l_index).Organization_Id :=l_mtl_txn_rec.Organization_Id;
5190 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Name :=l_mtl_txn_rec.JOB_NUMBER;
5191 --p_x_ahl_prd_mtl_txn_tbl(l_index).Operation_Seq_Num :=l_mtl_txn_rec.OPERATION_SEQUENCE_NUM;
5192 --p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_operation_Id :=l_mtl_txn_rec.Workorder_operation_Id;
5193 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Segments:=l_mtl_txn_rec.CONCATENATED_SEGMENTS;
5194 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Id :=l_mtl_txn_rec.INVENTORY_ITEM_ID;
5195 p_x_ahl_prd_mtl_txn_tbl(l_index).Inventory_Item_Description:=l_mtl_txn_rec.DESCRIPTION;
5196 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status :=l_mtl_txn_rec.JOB_STATUS_MEANING;
5197 p_x_ahl_prd_mtl_txn_tbl(l_index).Serial_Number :=l_mtl_txn_rec.Serial_Number;
5198 p_x_ahl_prd_mtl_txn_tbl(l_index).Quantity :=0;
5199 p_x_ahl_prd_mtl_txn_tbl(l_index).Net_Quantity :=l_mtl_txn_rec.Quantity;
5200 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom :=l_mtl_txn_rec.Uom;
5201 p_x_ahl_prd_mtl_txn_tbl(l_index).Uom_Desc :=l_mtl_txn_rec.UNIT_OF_MEASURE;
5202 p_x_ahl_prd_mtl_txn_tbl(l_index).Workorder_Status :=l_mtl_txn_rec.JOB_STATUS_MEANING;
5203 p_x_ahl_prd_mtl_txn_tbl(l_index).Lot_Number :=l_mtl_txn_rec.Lot_Number;
5204 p_x_ahl_prd_mtl_txn_tbl(l_index).Revision :=l_mtl_txn_rec.Revision;
5205 p_x_ahl_prd_mtl_txn_tbl(l_index).Subinventory_Name :=l_mtl_txn_rec.DEFAULT_PULL_SUPPLY_SUBINV;
5206 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Id :=l_mtl_txn_rec.DEFAULT_PULL_SUPPLY_LOCATOR_ID;
5207 p_x_ahl_prd_mtl_txn_tbl(l_index).Locator_Segments :=l_mtl_txn_rec.Locator;
5208 p_x_ahl_prd_mtl_txn_tbl(l_index).Transaction_Date :=SYSDATE;
5209 -- ER 5854712.
5210 IF (l_mtl_txn_rec.inv_locator_id IS NULL) THEN
5211 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '0';
5212 ELSE
5213 p_x_ahl_prd_mtl_txn_tbl(l_index).visit_locator_flag := '1';
5214 END IF;
5215
5216 l_index:=l_index+1;
5217
5218 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5219 fnd_log.string
5220 (
5221 fnd_log.level_statement,
5222 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlNotIssued',
5223 'l_mtl_txn_rec.workorder_id: ' || l_mtl_txn_rec.workorder_id
5224 );
5225 fnd_log.string
5226 (
5227 fnd_log.level_statement,
5228 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlNotIssued',
5229 'l_mtl_txn_rec.job_number: ' || l_mtl_txn_rec.job_number
5230 );
5231 fnd_log.string
5232 (
5233 fnd_log.level_statement,
5234 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlNotIssued',
5235 'l_mtl_txn_rec.CONCATENATED_SEGMENTS: ' || l_mtl_txn_rec.CONCATENATED_SEGMENTS
5236 );
5237 fnd_log.string
5238 (
5239 fnd_log.level_statement,
5240 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlNotIssued',
5241 'l_mtl_txn_rec.ISSUEQTY is zero '
5242 );
5243 fnd_log.string
5244 (
5245 fnd_log.level_statement,
5246 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlNotIssued',
5247 'l_mtl_txn_rec.Net Qty: ' || l_mtl_txn_rec.Quantity
5248 );
5249 END IF; -- debug messages.
5250
5251 END IF;
5252 CLOSE ahl_disp_csr;
5253
5254 END LOOP;
5255
5256 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5257 fnd_log.string
5258 (
5259 fnd_log.level_procedure,
5260 'ahl.plsql.AHL_PRD_MTLTXN_PVT.getMtlNotIssued.end',
5261 'At the end of PLSQL procedure'
5262 );
5263 END IF;
5264
5265 END getMtlNotIssued;
5266
5267 --Material txns search api. Called from Material txn return UI.
5268 PROCEDURE GET_MTL_TRANS_RETURNS(
5269 p_api_version IN NUMBER := 1.0,
5270 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
5271 p_commit IN VARCHAR2 := FND_API.G_FALSE,
5272 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
5273 p_default IN VARCHAR2 := FND_API.G_FALSE,
5274 p_module_type IN VARCHAR2 := NULL,
5275 x_return_status OUT NOCOPY VARCHAR2,
5276 x_msg_count OUT NOCOPY NUMBER,
5277 x_msg_data OUT NOCOPY VARCHAR2,
5278 P_prd_Mtltxn_criteria_rec IN Prd_Mtltxn_criteria_rec,
5279 x_ahl_mtltxn_tbl IN OUT NOCOPY Ahl_Mtltxn_Tbl_Type
5280 )AS
5281
5282 l_api_name CONSTANT VARCHAR2(30) := 'GET_MTL_TRANS_RETURNS';
5283 l_api_version CONSTANT NUMBER := 1.0;
5284 l_ahl_prd_mtl_txn_tbl Ahl_Mtltxn_Tbl_Type;
5285
5286 BEGIN
5287 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5288 fnd_log.string
5289 (
5290 fnd_log.level_procedure,
5291 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURN.begin',
5292 'At the start of PLSQL procedure'
5293 );
5294 END IF;
5295 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5296 fnd_log.string
5297 (
5298 fnd_log.level_statement,
5299 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5300 'P_prd_Mtltxn_criteria_rec.JOB_NUMBER : ' || P_prd_Mtltxn_criteria_rec.JOB_NUMBER
5301 );
5302 fnd_log.string
5303 (
5304 fnd_log.level_statement,
5305 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5306 'P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME : ' || P_prd_Mtltxn_criteria_rec.ORGANIZATION_NAME
5307 );
5308 fnd_log.string
5309 (
5310 fnd_log.level_statement,
5311 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5312 'P_prd_Mtltxn_criteria_rec.PRIORITY : ' || P_prd_Mtltxn_criteria_rec.PRIORITY
5313 );
5314 fnd_log.string
5315 (
5316 fnd_log.level_statement,
5317 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5318 'P_prd_Mtltxn_criteria_rec.VISIT_NUMBER : ' || P_prd_Mtltxn_criteria_rec.VISIT_NUMBER
5319 );
5320 fnd_log.string
5321 (
5322 fnd_log.level_statement,
5323 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5324 'P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME : ' || P_prd_Mtltxn_criteria_rec.DEPARTMENT_NAME
5325 );
5326 fnd_log.string
5327 (
5328 fnd_log.level_statement,
5329 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5330 'P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS : ' || P_prd_Mtltxn_criteria_rec.CONCATENATED_SEGMENTS
5331 );
5332 fnd_log.string
5333 (
5334 fnd_log.level_statement,
5335 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5336 'P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME : ' || P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME
5337 );
5338 fnd_log.string
5339 (
5340 fnd_log.level_statement,
5341 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5342 'P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER : ' || P_prd_Mtltxn_criteria_rec.INCIDENT_NUMBER
5343 );
5344
5345 END IF;
5346 -- Standard start of API savepoint
5347 SAVEPOINT GET_MTL_TRANS_RETURNS_PVT;
5348
5349 -- Standard call to check for call compatibility
5350 IF NOT FND_API.Compatible_API_Call
5351 (l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
5352 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5353 END IF;
5354 -- Initialize message list if p_init_msg_list is set to TRUE
5355 IF FND_API.To_Boolean(p_init_msg_list) THEN
5356 FND_MSG_PUB.Initialize;
5357 END IF;
5358
5359 -- Initialize API return status to success
5360 x_return_status := FND_API.G_RET_STS_SUCCESS;
5361 IF(P_prd_Mtltxn_criteria_rec.DISPOSITION_NAME IS NULL)THEN
5362 getMtlTxnsReturns
5363 (
5364 p_x_ahl_prd_mtl_txn_tbl => x_ahl_mtltxn_tbl,
5365 P_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
5366 );
5367
5368 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5369 fnd_log.string
5370 (
5371 fnd_log.level_statement,
5372 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS', 'After getMtlTxnsReturns x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
5373 );
5374 END IF;
5375
5376 getDispositionReturn
5377 (
5378 p_x_ahl_prd_mtl_txn_tbl => x_ahl_mtltxn_tbl,
5379 P_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
5380 );
5381
5382 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5383 fnd_log.string
5384 (
5385 fnd_log.level_statement,
5386 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS', 'After getDispositionReturn x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
5387 );
5388 END IF;
5389
5390 ELSE
5391 getDispositionReturn
5392 (
5393 p_x_ahl_prd_mtl_txn_tbl => x_ahl_mtltxn_tbl,
5394 P_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
5395 );
5396
5397 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5398 fnd_log.string
5399 (
5400 fnd_log.level_statement,
5401 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS', 'After getDispositionReturn x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
5402 );
5403 END IF;
5404 END IF;
5405
5406 -- get trackable items that have not been issued and not in the diposition
5407 -- list. Added for FP Bug# 5925805. It is possible to have tracked items in
5408 -- a job without a disposition and a material issue.
5409 -- bug fix# 6594140.
5410
5411 getMtlNotIssued
5412 (
5413 p_x_ahl_prd_mtl_txn_tbl => x_ahl_mtltxn_tbl,
5414 p_prd_Mtltxn_criteria_rec => p_Prd_Mtltxn_criteria_rec
5415 );
5416
5417 IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level)THEN
5418 fnd_log.string
5419 (
5420 fnd_log.level_statement,
5421 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURNS',
5422 'After getMtlNotIssued x_ahl_mtltxn_tbl.count : ' || x_ahl_mtltxn_tbl.count
5423 );
5424 END IF;
5425
5426 IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level)THEN
5427 fnd_log.string
5428 (
5429 fnd_log.level_procedure,
5430 'ahl.plsql.AHL_PRD_MTLTXN_PVT.GET_MTL_TRANS_RETURN.end',
5431 'At the end of PLSQL procedure'
5432 );
5433 END IF;
5434
5435 --
5436 EXCEPTION
5437 WHEN FND_API.G_EXC_ERROR THEN
5438 x_return_status := FND_API.G_RET_STS_ERROR;
5439 Rollback to GET_MTL_TRANS_RETURNS_PVT;
5440 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5441 p_data => x_msg_data,
5442 p_encoded => fnd_api.g_false);
5443
5444
5445 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5446 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5447 Rollback to GET_MTL_TRANS_RETURNS_PVT;
5448 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5449 p_data => x_msg_data,
5450 p_encoded => fnd_api.g_false);
5451
5452 WHEN OTHERS THEN
5453 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5454 Rollback to GET_MTL_TRANS_RETURNS_PVT;
5455 fnd_msg_pub.add_exc_msg(p_pkg_name => G_PKG_NAME,
5456 p_procedure_name => 'GET_MTL_TRANS_RETURNS',
5457 p_error_text => SQLERRM);
5458 FND_MSG_PUB.count_and_get( p_count => x_msg_count,
5459 p_data => x_msg_data,
5460 p_encoded => fnd_api.g_false);
5461
5462 END GET_MTL_TRANS_RETURNS;
5463
5464 /*
5465 PROCEDURE SHOW_MTX_ERRORS
5466 AS
5467 x_row MTL_TRANSACTIONS_INTERFACE%rowtype;
5468 CURSOR CL
5469 IS
5470 select * into x_row
5471 from MTL_TRANSACTIONS_INTERFACE;
5472 begin
5473 return;
5474 FOR CLREC IN CL
5475 LOOP
5476 IF CLREC.error_code IS NOT NULL
5477 THEN
5478 FND_MESSAGE.Set_Name('AHL','AHL_COM_GENERIC_ERROR');
5479 FND_MESSAGE.Set_Token('MESSAGE',CLREC.error_code);
5480 FND_MSG_PUB.ADD;
5481 END IF;
5482 END LOOP;
5483 end;
5484 */
5485
5486
5487 -- R12: Serial Reservation enhancements.
5488 -- Added procedure to relieve reservation when user is issuing a reserved serial
5489 -- number against a different workorder.
5490 PROCEDURE Relieve_Serial_Reservation(p_ahl_mtl_txn_rec IN AHL_MTLTXN_REC_TYPE,
5491 x_reservation_flag IN OUT NOCOPY VARCHAR2,
5492 x_return_status IN OUT NOCOPY VARCHAR2
5493 )
5494 IS
5495 -- get the demand_source_header_id and demand_source_line_id for the serial number.
5496 CURSOR get_scheduled_mater_csr (p_serial_number IN VARCHAR2,
5497 p_inventory_item_id IN NUMBER,
5498 p_organization_id IN NUMBER) IS
5499 SELECT rsv.DEMAND_SOURCE_LINE_DETAIL schedule_material_id, rsv.demand_source_header_id,
5500 rsv.demand_source_line_id, rsv.demand_source_type_id
5501 FROM mtl_serial_numbers msn, mtl_reservations rsv
5502 WHERE msn.reservation_id = rsv.reservation_id
5503 AND msn.serial_number = p_serial_number
5504 AND msn.current_organization_id = p_organization_id
5505 AND msn.inventory_item_id = p_inventory_item_id;
5506
5507 l_schedule_material_id NUMBER;
5508 l_demand_source_header_id NUMBER;
5509 l_demand_source_line_id NUMBER;
5510 l_demand_source_type_id NUMBER;
5511 l_msg_count NUMBER;
5512 l_msg_data VARCHAR2(2000);
5513
5514 BEGIN
5515
5516 -- initialize out parameters.
5517 x_return_status := FND_API.G_RET_STS_SUCCESS;
5518 x_reservation_flag := 'N';
5519
5520 -- check if serial reservation exists against a different workorder.
5521 OPEN get_scheduled_mater_csr (p_ahl_mtl_txn_rec.serial_number,
5522 p_ahl_mtl_txn_rec.inventory_item_id,
5523 p_ahl_mtl_txn_rec.organization_id);
5524 FETCH get_scheduled_mater_csr INTO l_schedule_material_id,
5525 l_demand_source_header_id,
5526 l_demand_source_line_id,
5527 l_demand_source_type_id;
5528 IF (get_scheduled_mater_csr%FOUND) THEN
5529 -- match l_demand_source_header_id and l_demand_source_line_id.
5530 IF (l_demand_source_header_id = p_ahl_mtl_txn_rec.wip_entity_id
5531 AND l_demand_source_line_id = p_ahl_mtl_txn_rec.operation_seq_num
5532 AND l_demand_source_type_id = INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_WIP) THEN
5533
5534 -- valid reservation for the workorder.
5535 x_reservation_flag := 'Y';
5536
5537 ELSE
5538 -- relieve reservation against l_demand_source_header_id.
5539
5540 AHL_RSV_RESERVATIONS_PVT.RELIEVE_RESERVATION(
5541 p_api_version => 1.0,
5542 p_init_msg_list => FND_API.G_FALSE,
5543 p_commit => FND_API.G_FALSE,
5544 p_validation_level => FND_API.G_VALID_LEVEL_FULL,
5545 p_module_type => NULL,
5546 x_return_status => x_return_status,
5547 x_msg_count => l_msg_count,
5548 x_msg_data => l_msg_data,
5549 p_scheduled_material_id => l_schedule_material_id,
5550 p_serial_number => p_ahl_mtl_txn_rec.serial_number
5551 );
5552
5553 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5554 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5555 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
5556 RAISE FND_API.G_EXC_ERROR;
5557 END IF;
5558
5559 END IF; -- l_demand_source_header_id <>
5560
5561 END IF; -- get_scheduled_mater_csr%FOUND
5562 CLOSE get_scheduled_mater_csr;
5563
5564 END Relieve_Serial_Reservation;
5565
5566 -- Added for pre processing(FP bug# 5903207).
5567 PROCEDURE Perform_MtlTxn_Pre( p_x_ahl_mtltxn_tbl IN OUT NOCOPY AHL_MTLTXN_TBL_TYPE,
5568 x_msg_count IN OUT NOCOPY NUMBER,
5569 x_msg_data IN OUT NOCOPY VARCHAR2,
5570 x_return_status IN OUT NOCOPY VARCHAR2) IS
5571
5572 l_x_material_txn_tbl AHL_PRD_MATERIAL_TXN_PUB.Ahl_Material_Txn_Tbl_Type;
5573
5574 BEGIN
5575 -- copy to l_x_material_txn_tbl record structure.
5576 IF (p_x_ahl_mtltxn_tbl.COUNT > 0) THEN
5577 FOR i IN p_x_ahl_mtltxn_tbl.FIRST..p_x_ahl_mtltxn_tbl.LAST LOOP
5578
5579 l_x_material_txn_tbl(i).Workorder_Id := p_x_ahl_mtltxn_tbl(i).Workorder_Id;
5580 l_x_material_txn_tbl(i).Workorder_Name := p_x_ahl_mtltxn_tbl(i).Workorder_Name;
5581 l_x_material_txn_tbl(i).Operation_Seq_Num := p_x_ahl_mtltxn_tbl(i).Operation_Seq_Num;
5582 l_x_material_txn_tbl(i).Transaction_Type_Id := p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id;
5583 l_x_material_txn_tbl(i).Transaction_Type_Name := p_x_ahl_mtltxn_tbl(i).Transaction_Type_Name;
5584
5585 l_x_material_txn_tbl(i).Inventory_Item_Id := p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id;
5586 l_x_material_txn_tbl(i).Inventory_Item_Segments := p_x_ahl_mtltxn_tbl(i).Inventory_Item_Segments;
5587 l_x_material_txn_tbl(i).Item_Instance_Number := p_x_ahl_mtltxn_tbl(i).Item_Instance_Number;
5588 l_x_material_txn_tbl(i).Item_Instance_ID := p_x_ahl_mtltxn_tbl(i).Item_Instance_ID;
5589 l_x_material_txn_tbl(i).Revision := p_x_ahl_mtltxn_tbl(i).Revision;
5590 l_x_material_txn_tbl(i).Condition := p_x_ahl_mtltxn_tbl(i).Condition;
5591 l_x_material_txn_tbl(i).Condition_desc := p_x_ahl_mtltxn_tbl(i).Condition_desc;
5592 l_x_material_txn_tbl(i).Subinventory_Name := p_x_ahl_mtltxn_tbl(i).Subinventory_Name;
5593 l_x_material_txn_tbl(i).Locator_Id := p_x_ahl_mtltxn_tbl(i).Locator_Id;
5594 l_x_material_txn_tbl(i).Locator_Segments := p_x_ahl_mtltxn_tbl(i).Locator_Segments;
5595 l_x_material_txn_tbl(i).Quantity := p_x_ahl_mtltxn_tbl(i).Quantity;
5596 l_x_material_txn_tbl(i).Uom_Code := p_x_ahl_mtltxn_tbl(i).Uom;
5597 l_x_material_txn_tbl(i).Unit_Of_Measure := p_x_ahl_mtltxn_tbl(i).Uom_Desc;
5598 l_x_material_txn_tbl(i).Serial_Number := p_x_ahl_mtltxn_tbl(i).Serial_Number;
5599 l_x_material_txn_tbl(i).Lot_Number := p_x_ahl_mtltxn_tbl(i).Lot_Number;
5600 l_x_material_txn_tbl(i).Transaction_Date := p_x_ahl_mtltxn_tbl(i).Transaction_Date;
5601 l_x_material_txn_tbl(i).Transaction_Reference := p_x_ahl_mtltxn_tbl(i).Transaction_Reference;
5602 l_x_material_txn_tbl(i).recepient_id := p_x_ahl_mtltxn_tbl(i).recepient_id;
5603 l_x_material_txn_tbl(i).recepient_name := p_x_ahl_mtltxn_tbl(i).recepient_name;
5604 l_x_material_txn_tbl(i).disposition_id := p_x_ahl_mtltxn_tbl(i).disposition_id;
5605
5606 -- Target visit is currently not used.
5607 --p_x_material_txn_tbl(i).Target_Visit_Id := p_x_ahl_mtltxn_tbl(i).Target_Visit_Id;
5608 --p_x_material_txn_tbl(i).Target_Visit_Num := p_x_ahl_mtltxn_tbl(i).Target_Visit_Num;
5609
5610 l_x_material_txn_tbl(i).Reason_Id := p_x_ahl_mtltxn_tbl(i).Reason_Id;
5611 l_x_material_txn_tbl(i).Reason_Name := p_x_ahl_mtltxn_tbl(i).Reason_Name;
5612 l_x_material_txn_tbl(i).Problem_Code := p_x_ahl_mtltxn_tbl(i).Problem_Code;
5613 l_x_material_txn_tbl(i).Problem_Code_Meaning := p_x_ahl_mtltxn_tbl(i).Problem_Code_Meaning;
5614 l_x_material_txn_tbl(i).Sr_Summary := p_x_ahl_mtltxn_tbl(i).Sr_Summary;
5615 l_x_material_txn_tbl(i).Qa_Collection_Id := p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id;
5616
5617 l_x_material_txn_tbl(i).ATTRIBUTE_CATEGORY := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY;
5618 l_x_material_txn_tbl(i).ATTRIBUTE1 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE1;
5619 l_x_material_txn_tbl(i).ATTRIBUTE2 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE2;
5620 l_x_material_txn_tbl(i).ATTRIBUTE3 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE3;
5621 l_x_material_txn_tbl(i).ATTRIBUTE4 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE4;
5622 l_x_material_txn_tbl(i).ATTRIBUTE5 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE5;
5623 l_x_material_txn_tbl(i).ATTRIBUTE6 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE6;
5624 l_x_material_txn_tbl(i).ATTRIBUTE7 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE7;
5625 l_x_material_txn_tbl(i).ATTRIBUTE8 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE8;
5626 l_x_material_txn_tbl(i).ATTRIBUTE9 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE9;
5627 l_x_material_txn_tbl(i).ATTRIBUTE10 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE10;
5628 l_x_material_txn_tbl(i).ATTRIBUTE11 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE11;
5629 l_x_material_txn_tbl(i).ATTRIBUTE12 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE12;
5630 l_x_material_txn_tbl(i).ATTRIBUTE13 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE13;
5631 l_x_material_txn_tbl(i).ATTRIBUTE14 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE14;
5632 l_x_material_txn_tbl(i).ATTRIBUTE15 := p_x_ahl_mtltxn_tbl(i).ATTRIBUTE15;
5633 END LOOP;
5634
5635 -- call user hook api.
5636 AHL_PRD_MATERIAL_TXN_CUHK.Perform_MtlTxn_Pre(
5637 p_x_material_txn_tbl => l_x_material_txn_tbl,
5638 x_msg_count => x_msg_count,
5639 x_msg_data => x_msg_data,
5640 x_return_status => x_return_status);
5641
5642 IF (x_return_status = FND_API.G_RET_STS_SUCCESS AND l_x_material_txn_tbl.count > 0) THEN
5643 FOR i IN l_x_material_txn_tbl.FIRST..l_x_material_txn_tbl.LAST LOOP
5644
5645 p_x_ahl_mtltxn_tbl(i).Workorder_Id := l_x_material_txn_tbl(i).Workorder_Id;
5646 p_x_ahl_mtltxn_tbl(i).Workorder_Name := l_x_material_txn_tbl(i).Workorder_Name;
5647 p_x_ahl_mtltxn_tbl(i).Operation_Seq_Num := l_x_material_txn_tbl(i).Operation_Seq_Num;
5648 p_x_ahl_mtltxn_tbl(i).Transaction_Type_Id := l_x_material_txn_tbl(i).Transaction_Type_Id;
5649 p_x_ahl_mtltxn_tbl(i).Transaction_Type_Name := l_x_material_txn_tbl(i).Transaction_Type_Name;
5650
5651 p_x_ahl_mtltxn_tbl(i).Inventory_Item_Id := l_x_material_txn_tbl(i).Inventory_Item_Id;
5652 p_x_ahl_mtltxn_tbl(i).Inventory_Item_Segments := l_x_material_txn_tbl(i).Inventory_Item_Segments;
5653 p_x_ahl_mtltxn_tbl(i).Item_Instance_Number := l_x_material_txn_tbl(i).Item_Instance_Number;
5654 p_x_ahl_mtltxn_tbl(i).Item_Instance_ID := l_x_material_txn_tbl(i).Item_Instance_ID;
5655 p_x_ahl_mtltxn_tbl(i).Revision := l_x_material_txn_tbl(i).Revision;
5656 p_x_ahl_mtltxn_tbl(i).Condition := l_x_material_txn_tbl(i).Condition;
5657 p_x_ahl_mtltxn_tbl(i).Condition_desc := l_x_material_txn_tbl(i).Condition_desc;
5658 p_x_ahl_mtltxn_tbl(i).Subinventory_Name := l_x_material_txn_tbl(i).Subinventory_Name;
5659 p_x_ahl_mtltxn_tbl(i).Locator_Id := l_x_material_txn_tbl(i).Locator_Id;
5660 p_x_ahl_mtltxn_tbl(i).Locator_Segments := l_x_material_txn_tbl(i).Locator_Segments;
5661 p_x_ahl_mtltxn_tbl(i).Quantity := l_x_material_txn_tbl(i).Quantity;
5662 p_x_ahl_mtltxn_tbl(i).Uom := l_x_material_txn_tbl(i).Uom_code;
5663 p_x_ahl_mtltxn_tbl(i).Uom_Desc := l_x_material_txn_tbl(i).Unit_of_measure;
5664 p_x_ahl_mtltxn_tbl(i).Serial_Number := l_x_material_txn_tbl(i).Serial_Number;
5665 p_x_ahl_mtltxn_tbl(i).Lot_Number := l_x_material_txn_tbl(i).Lot_Number;
5666 p_x_ahl_mtltxn_tbl(i).Transaction_Date := l_x_material_txn_tbl(i).Transaction_Date;
5667 p_x_ahl_mtltxn_tbl(i).Transaction_Reference := l_x_material_txn_tbl(i).Transaction_Reference;
5668 p_x_ahl_mtltxn_tbl(i).recepient_id := l_x_material_txn_tbl(i).recepient_id;
5669 p_x_ahl_mtltxn_tbl(i).recepient_name := l_x_material_txn_tbl(i).recepient_name;
5670 p_x_ahl_mtltxn_tbl(i).disposition_id := l_x_material_txn_tbl(i).disposition_id;
5671
5672 -- Target visit is currently not used.
5673 --p_x_ahl_mtltxn_tbl(i).Target_Visit_Id := l_x_material_txn_tbl(i).Target_Visit_Id;
5674 --p_x_ahl_mtltxn_tbl(i).Target_Visit_Num := l_x_material_txn_tbl(i).Target_Visit_Num;
5675
5676 p_x_ahl_mtltxn_tbl(i).Reason_Id := l_x_material_txn_tbl(i).Reason_Id;
5677 p_x_ahl_mtltxn_tbl(i).Reason_Name := l_x_material_txn_tbl(i).Reason_Name;
5678 p_x_ahl_mtltxn_tbl(i).Problem_Code := l_x_material_txn_tbl(i).Problem_Code;
5679 p_x_ahl_mtltxn_tbl(i).Problem_Code_Meaning := l_x_material_txn_tbl(i).Problem_Code_Meaning;
5680 p_x_ahl_mtltxn_tbl(i).Sr_Summary := l_x_material_txn_tbl(i).Sr_Summary;
5681 p_x_ahl_mtltxn_tbl(i).Qa_Collection_Id := l_x_material_txn_tbl(i).Qa_Collection_Id;
5682
5683 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY := l_x_material_txn_tbl(i).ATTRIBUTE_CATEGORY;
5684 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE1 := l_x_material_txn_tbl(i).ATTRIBUTE1;
5685 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE2 := l_x_material_txn_tbl(i).ATTRIBUTE2;
5686 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE3 := l_x_material_txn_tbl(i).ATTRIBUTE3;
5687 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE4 := l_x_material_txn_tbl(i).ATTRIBUTE4;
5688 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE5 := l_x_material_txn_tbl(i).ATTRIBUTE5;
5689 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE6 := l_x_material_txn_tbl(i).ATTRIBUTE6;
5690 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE7 := l_x_material_txn_tbl(i).ATTRIBUTE7;
5691 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE8 := l_x_material_txn_tbl(i).ATTRIBUTE8;
5692 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE9 := l_x_material_txn_tbl(i).ATTRIBUTE9;
5693 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE10 := l_x_material_txn_tbl(i).ATTRIBUTE10;
5694 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE11 := l_x_material_txn_tbl(i).ATTRIBUTE11;
5695 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE12 := l_x_material_txn_tbl(i).ATTRIBUTE12;
5696 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE13 := l_x_material_txn_tbl(i).ATTRIBUTE13;
5697 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE14 := l_x_material_txn_tbl(i).ATTRIBUTE14;
5698 p_x_ahl_mtltxn_tbl(i).ATTRIBUTE15 := l_x_material_txn_tbl(i).ATTRIBUTE15;
5699 END LOOP; -- l_x_material_txn_tbl.FIRST
5700 END IF; -- x_return_status.
5701 END IF;
5702 END Perform_MtlTxn_Pre;
5703
5704
5705 -- Added for post processing (FP bug# 5903207).
5706 PROCEDURE Perform_MtlTxn_Post( p_ahl_mtltxn_tbl IN AHL_MTLTXN_TBL_TYPE,
5707 x_msg_count IN OUT NOCOPY NUMBER,
5708 x_msg_data IN OUT NOCOPY VARCHAR2,
5709 x_return_status IN OUT NOCOPY VARCHAR2) IS
5710
5711 l_material_txn_tbl AHL_PRD_MATERIAL_TXN_PUB.Ahl_Material_Txn_Tbl_Type;
5712
5713 BEGIN
5714
5715 -- copy to l_x_material_txn_tbl record structure.
5716 IF (p_ahl_mtltxn_tbl.COUNT > 0) THEN
5717 FOR i IN p_ahl_mtltxn_tbl.FIRST..p_ahl_mtltxn_tbl.LAST LOOP
5718
5719 l_material_txn_tbl(i).Workorder_Id := p_ahl_mtltxn_tbl(i).Workorder_Id;
5720 l_material_txn_tbl(i).Workorder_Name := p_ahl_mtltxn_tbl(i).Workorder_Name;
5721 l_material_txn_tbl(i).Operation_Seq_Num := p_ahl_mtltxn_tbl(i).Operation_Seq_Num;
5722 l_material_txn_tbl(i).Transaction_Type_Id := p_ahl_mtltxn_tbl(i).Transaction_Type_Id;
5723 l_material_txn_tbl(i).Transaction_Type_Name := p_ahl_mtltxn_tbl(i).Transaction_Type_Name;
5724
5725 l_material_txn_tbl(i).Inventory_Item_Id := p_ahl_mtltxn_tbl(i).Inventory_Item_Id;
5726 l_material_txn_tbl(i).Inventory_Item_Segments := p_ahl_mtltxn_tbl(i).Inventory_Item_Segments;
5727 l_material_txn_tbl(i).Item_Instance_Number := p_ahl_mtltxn_tbl(i).Item_Instance_Number;
5728 l_material_txn_tbl(i).Item_Instance_ID := p_ahl_mtltxn_tbl(i).Item_Instance_ID;
5729 l_material_txn_tbl(i).Revision := p_ahl_mtltxn_tbl(i).Revision;
5730 l_material_txn_tbl(i).Condition := p_ahl_mtltxn_tbl(i).Condition;
5731 l_material_txn_tbl(i).Condition_desc := p_ahl_mtltxn_tbl(i).Condition_desc;
5732 l_material_txn_tbl(i).Subinventory_Name := p_ahl_mtltxn_tbl(i).Subinventory_Name;
5733 l_material_txn_tbl(i).Locator_Id := p_ahl_mtltxn_tbl(i).Locator_Id;
5734 l_material_txn_tbl(i).Locator_Segments := p_ahl_mtltxn_tbl(i).Locator_Segments;
5735 l_material_txn_tbl(i).Quantity := p_ahl_mtltxn_tbl(i).Quantity;
5736 l_material_txn_tbl(i).Uom_Code := p_ahl_mtltxn_tbl(i).Uom;
5737 l_material_txn_tbl(i).Unit_Of_Measure := p_ahl_mtltxn_tbl(i).Uom_Desc;
5738 l_material_txn_tbl(i).Serial_Number := p_ahl_mtltxn_tbl(i).Serial_Number;
5739 l_material_txn_tbl(i).Lot_Number := p_ahl_mtltxn_tbl(i).Lot_Number;
5740 l_material_txn_tbl(i).Transaction_Date := p_ahl_mtltxn_tbl(i).Transaction_Date;
5741 l_material_txn_tbl(i).Transaction_Reference := p_ahl_mtltxn_tbl(i).Transaction_Reference;
5742 l_material_txn_tbl(i).recepient_id := p_ahl_mtltxn_tbl(i).recepient_id;
5743 l_material_txn_tbl(i).recepient_name := p_ahl_mtltxn_tbl(i).recepient_name;
5744 l_material_txn_tbl(i).disposition_id := p_ahl_mtltxn_tbl(i).disposition_id;
5745
5746 -- Target visit is currently not used.
5747 --p_material_txn_tbl(i).Target_Visit_Id := p_ahl_mtltxn_tbl(i).Target_Visit_Id;
5748 --p_material_txn_tbl(i).Target_Visit_Num := p_ahl_mtltxn_tbl(i).Target_Visit_Num;
5749
5750 l_material_txn_tbl(i).Reason_Id := p_ahl_mtltxn_tbl(i).Reason_Id;
5751 l_material_txn_tbl(i).Reason_Name := p_ahl_mtltxn_tbl(i).Reason_Name;
5752 l_material_txn_tbl(i).Problem_Code := p_ahl_mtltxn_tbl(i).Problem_Code;
5753 l_material_txn_tbl(i).Problem_Code_Meaning := p_ahl_mtltxn_tbl(i).Problem_Code_Meaning;
5754 l_material_txn_tbl(i).Sr_Summary := p_ahl_mtltxn_tbl(i).Sr_Summary;
5755 l_material_txn_tbl(i).Qa_Collection_Id := p_ahl_mtltxn_tbl(i).Qa_Collection_Id;
5756
5757 l_material_txn_tbl(i).ATTRIBUTE_CATEGORY := p_ahl_mtltxn_tbl(i).ATTRIBUTE_CATEGORY;
5758 l_material_txn_tbl(i).ATTRIBUTE1 := p_ahl_mtltxn_tbl(i).ATTRIBUTE1;
5759 l_material_txn_tbl(i).ATTRIBUTE2 := p_ahl_mtltxn_tbl(i).ATTRIBUTE2;
5760 l_material_txn_tbl(i).ATTRIBUTE3 := p_ahl_mtltxn_tbl(i).ATTRIBUTE3;
5761 l_material_txn_tbl(i).ATTRIBUTE4 := p_ahl_mtltxn_tbl(i).ATTRIBUTE4;
5762 l_material_txn_tbl(i).ATTRIBUTE5 := p_ahl_mtltxn_tbl(i).ATTRIBUTE5;
5763 l_material_txn_tbl(i).ATTRIBUTE6 := p_ahl_mtltxn_tbl(i).ATTRIBUTE6;
5764 l_material_txn_tbl(i).ATTRIBUTE7 := p_ahl_mtltxn_tbl(i).ATTRIBUTE7;
5765 l_material_txn_tbl(i).ATTRIBUTE8 := p_ahl_mtltxn_tbl(i).ATTRIBUTE8;
5766 l_material_txn_tbl(i).ATTRIBUTE9 := p_ahl_mtltxn_tbl(i).ATTRIBUTE9;
5767 l_material_txn_tbl(i).ATTRIBUTE10 := p_ahl_mtltxn_tbl(i).ATTRIBUTE10;
5768 l_material_txn_tbl(i).ATTRIBUTE11 := p_ahl_mtltxn_tbl(i).ATTRIBUTE11;
5769 l_material_txn_tbl(i).ATTRIBUTE12 := p_ahl_mtltxn_tbl(i).ATTRIBUTE12;
5770 l_material_txn_tbl(i).ATTRIBUTE13 := p_ahl_mtltxn_tbl(i).ATTRIBUTE13;
5771 l_material_txn_tbl(i).ATTRIBUTE14 := p_ahl_mtltxn_tbl(i).ATTRIBUTE14;
5772 l_material_txn_tbl(i).ATTRIBUTE15 := p_ahl_mtltxn_tbl(i).ATTRIBUTE15;
5773
5774 END LOOP;
5775
5776 AHL_PRD_MATERIAL_TXN_CUHK.Perform_MtlTxn_Post( p_material_txn_tbl => l_material_txn_tbl,
5777 x_msg_count => x_msg_count,
5778 x_msg_data => x_msg_data,
5779 x_return_status => x_return_status);
5780 END IF;
5781
5782
5783 END Perform_MtlTxn_Post;
5784
5785
5786 -- Added for FP ER 6447935 - dynamic locator support.
5787 -- breakup input locator concatenated segments to populate MTI.
5788 PROCEDURE Get_MTL_LocatorSegs (p_concat_segs IN VARCHAR2,
5789 p_organization_id IN NUMBER,
5790 p_x_mti_seglist IN OUT NOCOPY fnd_flex_ext.SegmentArray,
5791 x_return_status OUT NOCOPY VARCHAR2)
5792
5793 IS
5794
5795 l_flex_nseg NUMBER;
5796 l_flex_seglist fnd_flex_key_api.segment_list;
5797 l_fftype fnd_flex_key_api.flexfield_type;
5798 l_ffstru fnd_flex_key_api.structure_type;
5799 l_segment_type fnd_flex_key_api.segment_type;
5800 l_delim VARCHAR2(1);
5801
5802 l_loc_nseg number;
5803 l_loc_seglist fnd_flex_ext.SegmentArray;
5804 l_mti_seglist fnd_flex_ext.SegmentArray;
5805 l_concat_seg_IDs VARCHAR2(4000);
5806
5807 l_valid_flag BOOLEAN;
5808
5809 BEGIN
5810
5811 IF G_DEBUG='Y' THEN
5812 AHL_DEBUG_PUB.DEBUG('Start Procedure:Splitting locator concatenated segments:' || p_concat_segs, 'Get_MTL_LocatorSegs');
5813 END IF;
5814
5815 -- initialize status to success.
5816 x_return_status := FND_API.G_RET_STS_SUCCESS;
5817
5818 -- set mfg_organization_id profile - bug# 6010795.
5819 fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id);
5820
5821 l_mti_seglist := p_x_mti_seglist;
5822
5823 fnd_flex_key_api.set_session_mode('seed_data');
5824
5825 -- find flex field type
5826 l_fftype := fnd_flex_key_api.find_flexfield('INV', 'MTLL');
5827
5828 -- find flex structure type
5829 l_ffstru := fnd_flex_key_api.find_structure(l_fftype, 101);
5830
5831 -- find segment list for the key flex field
5832 fnd_flex_key_api.get_segments(l_fftype, l_ffstru, TRUE, l_flex_nseg, l_flex_seglist);
5833
5834 -- find segment delimiter
5835 l_delim := l_ffstru.segment_separator;
5836
5837 IF G_DEBUG='Y' THEN
5838 AHL_DEBUG_PUB.DEBUG('Before Loc Seg validate:Profile mfg_organization_id:' || fnd_profile.value('MFG_ORGANIZATION_ID') );
5839 END IF;
5840
5841 -- validate locator segments.
5842 l_valid_flag := fnd_flex_keyval.validate_segs(
5843 operation => 'CHECK_COMBINATION'
5844 , appl_short_name => 'INV'
5845 , key_flex_code => 'MTLL'
5846 , structure_number => 101
5847 , concat_segments => p_concat_segs
5848 , values_or_ids => 'V'
5849 , data_set => p_organization_id
5850 );
5851
5852 IF NOT(l_valid_flag) THEN
5853 FND_MESSAGE.Set_Name('AHL','AHL_INPUT_NUM_LOC_SEGS_INVALID');
5854 FND_MESSAGE.Set_Token('LOC_SEG',p_concat_segs);
5855 FND_MSG_PUB.ADD;
5856 x_return_status := FND_API.G_RET_STS_ERROR;
5857 RETURN;
5858 END IF;
5859
5860 -- get IDs for the concatenated segments as MTI validates IDs.
5861 l_concat_seg_IDs := fnd_flex_keyval.concatenated_ids;
5862
5863 -- breakup locator concat IDs into segments.
5864 l_loc_nseg := fnd_flex_ext.breakup_segments (l_concat_seg_IDs, l_delim, l_loc_seglist);
5865
5866 /*
5867 -- validate if enabled segments equal to input locator segments.
5868 -- if not, raise error and return.
5869 IF (l_loc_nseg <> l_flex_nseg) THEN
5870 IF G_DEBUG='Y' THEN
5871 AHL_DEBUG_PUB.DEBUG('FND Enabled Segments:' || l_flex_nseg);
5872 AHL_DEBUG_PUB.DEBUG('FND Enabled Segments:' || l_loc_nseg);
5873 END IF;
5874
5875 FND_MESSAGE.Set_Name('AHL','AHL_INPUT_NUM_LOC_SEGS_INVALID');
5876 FND_MESSAGE.Set_Token('LOC_NUM',l_flex_nseg);
5877 FND_MESSAGE.Set_Token('LOC_SEG',p_concat_segs);
5878 FND_MSG_PUB.ADD;
5879 x_return_status := FND_API.G_RET_STS_ERROR;
5880 RETURN;
5881 END IF;
5882 */
5883
5884 -- get the corresponding column for all segments
5885 --
5886 -- 'To_number(Substr(l_segment_type.column_name, 8))' gives the
5887 -- number of the segment i.e. 1 - 20 which is used as index to
5888 -- populate the corresponding columns from segments array.
5889 --
5890 FOR l_loop IN 1..l_flex_nseg LOOP
5891
5892 l_segment_type := fnd_flex_key_api.find_segment(l_fftype, l_ffstru, l_flex_seglist(l_loop));
5893 --dbms_output.put_line('l_segment_type is : ' || l_segment_type.column_name);
5894
5895 l_mti_seglist(To_number(Substr(l_segment_type.column_name, 8))) := l_loc_seglist(l_loop);
5896
5897 END LOOP;
5898
5899 -- assign out parameter.
5900 p_x_mti_seglist := l_mti_seglist;
5901
5902 IF G_DEBUG='Y' THEN
5903 FOR i IN 1..20 LOOP
5904 --dbms_output.put_line('Segs final(' || i || ') : ' || l_mti_seglist(i));
5905 AHL_DEBUG_PUB.DEBUG('Segs final(' || i || ') : ' || p_x_mti_seglist(i), 'Get_MTL_LocatorSegs');
5906 END LOOP;
5907 AHL_DEBUG_PUB.DEBUG('End of procedure', 'Get_MTL_LocatorSegs');
5908 END IF;
5909
5910 END Get_MTL_LocatorSegs;
5911
5912
5913 END AHL_PRD_MTLTXN_PVT ;