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