1 PACKAGE BODY INV_Validate_Trolin AS
2 /* $Header: INVLTRLB.pls 120.9 2007/07/24 13:45:32 hjogleka ship $ */
3 -- Global constant holding the package name
4
5 G_PKG_NAME CONSTANT VARCHAR2(30) := 'INV_Validate_Trolin';
6
7 g_organization_id NUMBER;
8 g_wms_org_flag BOOLEAN;
9
10 -- Line level Validations
11 -- ---------------------------------------------------------------------
12
13 FUNCTION Line ( p_line_id IN NUMBER ) RETURN NUMBER
14 IS
15 l_dummy VARCHAR2(10);
16 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
17 BEGIN
18 IF p_line_id IS NULL OR p_line_id = FND_API.G_MISS_NUM THEN
19 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
20 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
21 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('INV','INV_LINE_ID'),FALSE); -- ND
22 FND_MSG_PUB.Add;
23 END IF;
24 RETURN F;
25 END IF;
26 RETURN T;
27 END Line;
28
29 -- ---------------------------------------------------------------------
30 FUNCTION Line_Number ( p_line_number IN NUMBER,
31 p_header_id IN NUMBER,
32 p_org IN inv_validate_trohdr.ORG ) RETURN NUMBER
33 IS
34 l_dummy VARCHAR2(10);
35 l_return_value BOOLEAN;
36 l_request_number VARCHAR2(30);
37 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
38 BEGIN
39 IF p_line_number IS NULL OR p_line_number = FND_API.G_MISS_NUM THEN
40 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
41 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
42 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('INV','INV_LINE_NUMBER'),FALSE); -- ND
43 FND_MSG_PUB.Add;
44 END IF;
45 RETURN F;
46 END IF;
47 l_return_value :=INV_Transfer_Order_PVT.Unique_Line(
48 p_org.organization_id
49 , p_header_id
50 , p_line_number);
51 IF l_return_value then
52 RETURN T;
53 ELSE
54 --Bug #4347016
55 --If the line number is not unique display an error message
56 FND_MESSAGE.SET_NAME('INV','INV_ALREADY_EXISTS');
57 FND_MESSAGE.SET_TOKEN('ENTITY',FND_MESSAGE.GET_STRING('INV','INV_LINE_NUMBER'),FALSE);
58 FND_MSG_PUB.Add;
59 RETURN F;
60 END IF;
61
62 EXCEPTION
63 WHEN NO_DATA_FOUND THEN
64 --inv_debug.message('in when no_data_found');
65 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
66 FND_MESSAGE.SET_NAME('INV','INV_INVALID_ATTRIBUTE');
67 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('INV','LINE_NUMBER'),FALSE);
68 FND_MSG_PUB.Add;
69 END IF;
70 RETURN F;
71 WHEN OTHERS THEN
72 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
73 FND_MSG_PUB.Add_Exc_Msg
74 ( G_PKG_NAME
75 , 'Line_Number'
76 );
77 END IF;
78
79 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
80 END Line_Number;
81
82 -- ---------------------------------------------------------------------
83 FUNCTION Line_Status ( p_line_status IN NUMBER ) RETURN NUMBER
84 IS
85 l_dummy VARCHAR2(10);
86 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
87 BEGIN
88
89 IF p_line_status IS NULL OR p_line_status = FND_API.G_MISS_NUM THEN
90 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
91 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
92 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('INV','INV_LINE_STATUS'),FALSE); -- ND
93 FND_MSG_PUB.Add;
94 END IF;
95 RETURN F;
96 END IF;
97
98 SELECT 'VALID'
99 INTO l_dummy
100 FROM MFG_LOOKUPS
101 WHERE LOOKUP_TYPE = 'MTL_TXN_REQUEST_STATUS'
102 AND p_line_status IN (1,7)
103 AND LOOKUP_CODE = p_line_status;
104
105 RETURN T;
106
107 EXCEPTION
108
109 WHEN NO_DATA_FOUND THEN
110 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
111 FND_MESSAGE.SET_NAME('INV','INV_INVALID_ATTRIBUTE');
112 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('INV','INV_LINE_STATUS'),FALSE);
113 FND_MSG_PUB.Add;
114 END IF;
115 RETURN F;
116
117 WHEN OTHERS THEN
118 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
119 FND_MSG_PUB.Add_Exc_Msg
120 ( G_PKG_NAME
121 , 'Line_Status'
122 );
123 END IF;
124 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
125
126 END Line_Status;
127
128 -- ---------------------------------------------------------------------
129 FUNCTION Quantity_Delivered ( p_quantity_delivered IN NUMBER ) RETURN NUMBER
130 IS
131 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
132 BEGIN
133 RETURN T;
134 END Quantity_Delivered;
135
136 -- ---------------------------------------------------------------------
137 FUNCTION Quantity_Detailed ( p_quantity_detailed IN NUMBER ) RETURN NUMBER
138 IS
139 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
140 BEGIN
141 RETURN T;
142 END Quantity_Detailed;
143
144 -- ---------------------------------------------------------------------
145 --INVCONV
146 -- ---------------------------------------------------------------------
147 FUNCTION Secondary_Quantity_Delivered ( p_secondary_quantity_delivered IN NUMBER ) RETURN NUMBER
148 IS
149 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
150 BEGIN
151 RETURN T;
152 END Secondary_Quantity_Delivered;
153
154 -- ---------------------------------------------------------------------
155 FUNCTION Secondary_Quantity_Detailed ( p_secondary_quantity_detailed IN NUMBER ) RETURN NUMBER
156 IS
157 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
158 BEGIN
159 RETURN T;
160 END Secondary_Quantity_Detailed;
161
162 -- ---------------------------------------------------------------------
163 --INVCONV
164 -- Procedure Entity
165 PROCEDURE Entity
166 ( x_return_status OUT NOCOPY VARCHAR2
167 , p_trolin_rec IN INV_Move_Order_PUB.Trolin_Rec_Type
168 , p_old_trolin_rec IN INV_Move_Order_PUB.Trolin_Rec_Type :=
169 INV_Move_Order_PUB.G_MISS_TROLIN_REC
170 , p_move_order_type IN NUMBER DEFAULT INV_GLOBALS.G_MOVE_ORDER_REQUISITION
171 )
172 IS
173
174 CURSOR c_get_jobsch_name
175 ( p_wip_entity_id IN NUMBER
176 , p_organization_id IN NUMBER
177 ) IS
178 SELECT wip_entity_name
179 FROM wip_entities
180 WHERE wip_entity_id = p_wip_entity_id
181 AND organization_id = p_organization_id;
182
183 CURSOR c_get_item_num
184 ( p_item_id IN NUMBER
185 , p_organization_id IN NUMBER
186 ) IS
187 SELECT concatenated_segments
188 FROM mtl_system_items_kfv
189 WHERE inventory_item_id = p_item_id
190 AND organization_id = p_organization_id;
191
192 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
193 l_start_prefix VARCHAR2(30);
194 l_start_number NUMBER;
195 l_end_prefix VARCHAR2(30);
196 l_end_number NUMBER;
197 l_unit_effectivity NUMBER;
198 l_cross_unit_number NUMBER;
199 l_unit_effective_item NUMBER;
200 l_dummy NUMBER;
201 l_debug NUMBER := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
202 l_errorcode NUMBER;
203 l_temp_bool BOOLEAN;
204 l_quantity NUMBER;
205 l_return_value BOOLEAN;
206 --Bug #4777248
207 l_sub_loc_control NUMBER;
208 l_item_loc_control NUMBER;
209 l_org_loc_control NUMBER;
210 --Bug #4438410
211 l_sub_lpn_controlled NUMBER := 0;
212 l_sub_reservable NUMBER;
213 l_wip_entity_name VARCHAR2(240);
214 l_item_number VARCHAR2(40);
215
216 BEGIN
217
218 -- Check required attributes.
219 IF p_trolin_rec.line_id IS NULL THEN
220 l_return_status := FND_API.G_RET_STS_ERROR;
221 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
222 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
223 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','line_id');
224 FND_MSG_PUB.Add;
225 END IF;
226 END IF;
227
228 IF p_trolin_rec.header_id IS NULL THEN
229 l_return_status := FND_API.G_RET_STS_ERROR;
230 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
231 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
232 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Header_Id');
233 FND_MSG_PUB.Add;
234 END IF;
235 END IF;
236 --
237 -- Check rest of required attributes here.
238 -- Return Error if a required attribute is missing.
239
240 IF p_trolin_rec.inventory_item_id IS NULL THEN
241 if( p_move_order_type <> INV_GLOBALS.G_MOVE_ORDER_PUT_AWAY ) then
242 l_return_status := FND_API.G_RET_STS_ERROR;
243
244 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
245 FND_MESSAGE.SET_NAME('INV','INV_ENTER_ITEM');
246 FND_MSG_PUB.Add;
247 END IF;
248 elsif( p_move_order_type = INV_GLOBALS.G_MOVE_ORDER_PUT_AWAY AND p_trolin_rec.lpn_id is NULL) then
249 l_return_status := FND_API.G_RET_STS_ERROR;
250 if( FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)) then
251 FND_MESSAGE.SET_NAME('INV', 'INV_ENTER_ITEM_LPN');
252 FND_MSG_PUB.Add;
253 end if;
254 end if;
255 END IF;
256
257 IF p_trolin_rec.date_required IS NULL THEN
258 l_return_status := FND_API.G_RET_STS_ERROR;
259
260 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
261 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
262 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('INV','INV_DATE_REQUIRED'),FALSE);
263 FND_MSG_PUB.Add;
264 END IF;
265 END IF;
266
267 IF p_trolin_rec.quantity IS NULL THEN
268 if( p_move_order_type <> INV_GLOBALS.G_MOVE_ORDER_PUT_AWAY ) then
269 l_return_status := FND_API.G_RET_STS_ERROR;
270
271 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
272 FND_MESSAGE.SET_NAME('INV','INV_INT_QTYCODE');
273 FND_MSG_PUB.Add;
274 END IF;
275 end if;
276 END IF;
277
278 IF p_trolin_rec.uom_code IS NULL THEN
279 if( p_trolin_rec.inventory_item_id is not null and p_move_order_type <> INV_GLOBALS.G_MOVE_ORDER_PUT_AWAY ) then
280 l_return_status := FND_API.G_RET_STS_ERROR;
281 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
282 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
283 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',FND_MESSAGE.GET_STRING('INV','UOM'),FALSE);
284 FND_MSG_PUB.Add;
285 END IF;
286 end if;
287 END IF;
288
289 IF p_trolin_rec.lpn_id IS NULL THEN
290 if p_move_order_type = INV_GLOBALS.G_MOVE_ORDER_PUT_AWAY and p_trolin_rec.inventory_item_id is null then
291 if( fnd_msg_pub.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)) then
292 FND_MESSAGE.SET_NAME('INV', 'INV_ENTER_ITEM_LPN');
293 FND_MSG_PUB.Add;
294 end if;
295 end if;
296 END IF;
297
298 IF g_transaction_l.transaction_action_id = 1 THEN
299 IF p_trolin_rec.to_account_id IS NULL AND
300 p_trolin_rec.transaction_type_id <> INV_GLOBALS.G_TYPE_XFER_ORDER_WIP_ISSUE
301 AND g_item.inventory_asset_flag = 'Y' THEN
302 -- Added the last condition for bug 2519579
303 l_return_status := FND_API.G_RET_STS_ERROR;
304
305 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
306 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
307 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Account');
308 FND_MSG_PUB.Add;
309 END IF;
310 END IF;
311
312 ELSIF g_transaction_l.transaction_action_id in (2,28) THEN
313
314 IF p_trolin_rec.organization_id <> nvl(g_organization_id, -1) THEN
315 g_organization_id := p_trolin_rec.organization_id;
316 l_return_value := INV_CACHE.set_wms_installed(g_organization_id);
317 If NOT l_return_value Then
318 RAISE fnd_api.g_exc_unexpected_error;
319 End If;
320 g_wms_org_flag := INV_CACHE.wms_installed;
321 END IF;
322
323 IF p_trolin_rec.to_subinventory_code IS NULL THEN
324 --Bug #4347016
325 --For the Move Order types Putaway and Subinventory, destination subinventory
326 --is not required. Hence Bypass the validation
327 IF (p_move_order_type NOT IN
328 (INV_GLOBALS.G_MOVE_ORDER_PUT_AWAY, INV_GLOBALS.G_MOVE_ORDER_SYSTEM)) THEN
329 l_return_status := FND_API.G_RET_STS_ERROR;
330
331 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
332 FND_MESSAGE.SET_NAME('INV','INV_ATTRIBUTE_REQUIRED');
333 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','To Subinventory');
334 FND_MSG_PUB.Add;
335 END IF; --END IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
336 END IF; --END IF MO type not in Putaway, System)
337 END IF; --END IF sub code is NULL
338 END IF;
339
340 --Bug #4777248
341 --Validating source and destination subinventories
342 --Bug #6271307, skipping validations for Kanban replenishment move orders.
343
344 if ((p_trolin_rec.transaction_type_id = 64) and
345 (p_trolin_rec.from_subinventory_code IS NOT NULL) and
346 (p_trolin_rec.to_subinventory_code IS NOT NULL) and
347 (NVL(p_trolin_rec.reference_type_code,0) <> 1) and
348 (p_trolin_rec.from_subinventory_code = p_trolin_rec.to_subinventory_code)) THEN
349
350 SELECT nvl(stock_locator_control_code, 1)
351 into l_org_loc_control
352 from mtl_parameters
353 where organization_id = p_trolin_rec.organization_id;
354
355 if (l_org_loc_control = 1) then
356 l_return_status := FND_API.G_RET_STS_ERROR;
357
358 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
359 FND_MESSAGE.SET_NAME('INV','INV_SUB_RESTRICT');
360 FND_MSG_PUB.Add;
361 END IF;
362 else
363 if (l_org_loc_control = 4) then
364 select nvl(locator_type,3)
365 into l_sub_loc_control
366 from mtl_secondary_inventories
367 where organization_id = p_trolin_rec.organization_id
368 and secondary_inventory_name = p_trolin_rec.to_subinventory_code;
369
370 if (l_sub_loc_control = 1) THEN
371
372 l_return_status := FND_API.G_RET_STS_ERROR;
373
374 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
375 FND_MESSAGE.SET_NAME('INV','INV_SUB_RESTRICT');
376 FND_MSG_PUB.Add;
377 END IF;
378 elsif (l_sub_loc_control = 5) THEN
379 select nvl(location_control_code,1)
380 into l_item_loc_control
381 from mtl_system_items_b
382 where organization_id = p_trolin_rec.organization_id
383 and inventory_item_id = p_trolin_rec.inventory_item_id;
384
385 if (l_item_loc_control = 1) THEN
386 l_return_status := FND_API.G_RET_STS_ERROR;
387
388 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
389 FND_MESSAGE.SET_NAME('INV','INV_SUB_RESTRICT');
390 FND_MSG_PUB.Add;
391 END IF;
392 end if;
393 end if;
394 end if;
395 end if;
396 end if;
397 --End Bug #4777248
398
399 --Bug #4438410, adding validations for WIP component pick release.
400 IF inv_wip_picking_pvt.g_wip_patch_level >= 1159
401 THEN
402 IF p_trolin_rec.transaction_source_type_id
403 = inv_globals.g_sourcetype_inventory
404 AND p_move_order_type = inv_globals.g_move_order_mfg_pick
405 AND p_trolin_rec.to_subinventory_code is not null
406 THEN
407 SELECT NVL(lpn_controlled_flag, 0), reservable_type
408 INTO l_sub_lpn_controlled, l_sub_reservable
409 FROM mtl_secondary_inventories
410 WHERE organization_id = p_trolin_rec.organization_id
411 AND secondary_inventory_name = p_trolin_rec.to_subinventory_code;
412
413 IF l_sub_reservable = inv_globals.g_subinventory_reservable
414 THEN
415 -- Get the job or schedule number
416 OPEN c_get_jobsch_name( p_trolin_rec.txn_source_id
417 , p_trolin_rec.organization_id);
418 FETCH c_get_jobsch_name INTO l_wip_entity_name;
419 CLOSE c_get_jobsch_name;
420
421 -- Get the item number
422 OPEN c_get_item_num( p_trolin_rec.inventory_item_id
423 , p_trolin_rec.organization_id);
424 FETCH c_get_item_num INTO l_item_number;
425 CLOSE c_get_item_num;
426
427 fnd_message.set_name('INV', 'INV_SUB_RESERVABLE');
428 fnd_message.set_token('JOB', l_wip_entity_name);
429 fnd_message.set_token('SUB', p_trolin_rec.to_subinventory_code);
430 fnd_message.set_token('ITEM', l_item_number);
431 fnd_msg_pub.ADD;
432 l_return_status := FND_API.G_RET_STS_ERROR;
433 END IF;
434
435 IF g_wms_org_flag
436 AND l_sub_lpn_controlled = inv_globals.g_subinventory_lpn_controlled
437 THEN
438 -- Get the job or schedule number
439 OPEN c_get_jobsch_name( p_trolin_rec.txn_source_id
440 , p_trolin_rec.organization_id);
441 FETCH c_get_jobsch_name INTO l_wip_entity_name;
442 CLOSE c_get_jobsch_name;
443
444 -- Get the item number
445 OPEN c_get_item_num( p_trolin_rec.inventory_item_id
446 , p_trolin_rec.organization_id);
447 FETCH c_get_item_num INTO l_item_number;
448 CLOSE c_get_item_num;
449
450 fnd_message.set_name('WMS', 'WMS_SUB_LPN_CONTROLLED');
451 fnd_message.set_token('JOB', l_wip_entity_name);
452 fnd_message.set_token('SUB', p_trolin_rec.to_subinventory_code);
453 fnd_message.set_token('ITEM', l_item_number);
454
455 fnd_msg_pub.ADD;
456 l_return_status := FND_API.G_RET_STS_ERROR;
457 END IF;
458 END IF; -- end if source type is g_sourcetype_inventory
459 END IF;
460 --End Bug #4438410
461
462 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
463 RAISE FND_API.G_EXC_ERROR;
464 END IF;
465
466 --
467 -- Check conditionally required attributes here.
468 --
469 -- Validate attribute dependencies here.
470 --
471 -- inv_debug.message('TRO: dependency conditions');
472 -- validate unit number is the unit number is not null
473 IF (p_trolin_Rec.unit_number is NOT NULL) then
474 if( nvl(PJM_UNIT_EFF.ENABLED, 'N') = 'Y' ) then
475 if( PJM_UNIT_EFF.UNIT_EFFECTIVE_ITEM(p_trolin_rec.inventory_item_id,
476 p_trolin_rec.organization_id) = 'Y') then
477 begin
478 select 1
479 into l_dummy
480 from pjm_unit_numbers_lov_v
481 where unit_number = p_trolin_rec.unit_number;
482 exception
483 when no_data_found then
484 FND_MESSAGE.SET_NAME('INV', 'INV_INT_UNITNUMBER');
485 FND_MSG_PUB.ADD;
486 raise FND_API.G_EXC_ERROR;
487 end;
488 end if;
489 end if;
490 end if;
491
492 IF (p_trolin_rec.serial_number_start IS NOT NULL
493 AND p_trolin_rec.serial_number_end IS NULL)
494 OR (p_trolin_rec.serial_number_start IS NULL
495 AND p_trolin_rec.serial_number_end IS NOT NULL)
496 THEN
497 x_return_status := FND_API.G_RET_STS_ERROR;
498 return;
499 ELSIF p_trolin_rec.serial_number_start IS NOT NULL
500 THEN
501 --Bug #2659444
502 --Call the procedure mtl_serial_check.inv_serial_info for validating
503 --serial prefixes, quantity between serials. (Replaced the existing validations
504 --with this call since it was not complete)
505 l_temp_bool := mtl_serial_check.inv_serial_info(
506 p_from_serial_number => p_trolin_rec.serial_number_start,
507 p_to_serial_number => p_trolin_rec.serial_number_end,
508 x_prefix => l_start_prefix,
509 x_quantity => l_quantity,
510 x_from_number => l_start_number,
511 x_to_number => l_end_number,
512 x_errorcode => l_errorcode);
513 IF l_temp_bool = FALSE THEN
514 x_return_status := FND_API.G_RET_STS_ERROR;
515 return;
516 END IF;
517 END IF;
518
519 -- Done validating entity
520 x_return_status := l_return_status;
521
522 EXCEPTION
523 WHEN FND_API.G_EXC_ERROR THEN
524 x_return_status := FND_API.G_RET_STS_ERROR;
525
526 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
527 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
528
529 WHEN OTHERS THEN
530 -- inv_debug.message('TRO U: ' || SQLERRM);
531 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
532 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
533 FND_MSG_PUB.Add_Exc_Msg
534 ( G_PKG_NAME
535 , 'Entity'
536 );
537 END IF;
538
539 END Entity;
540
541 -- Procedure Attributes
542
543 PROCEDURE Attributes
544 ( x_return_status OUT NOCOPY VARCHAR2
545 , p_trolin_rec IN OUT NOCOPY INV_Move_Order_PUB.Trolin_Rec_Type
546 , p_trolin_val_rec IN INV_Move_Order_PUB.Trolin_Val_Rec_Type
547 , p_old_trolin_rec IN INV_Move_Order_PUB.Trolin_Rec_Type :=
548 INV_Move_Order_PUB.G_MISS_TROLIN_REC
549 )
550 IS
551 v_locator_control NUMBER;
552 l_return_status VARCHAR2(10);
553 l_temp VARCHAR2(10);
554 l_msg_count NUMBER;
555 l_msg_data VARCHAR2(240);
556 l_keystat_val BOOLEAN;
557 l_combination_id NUMBER;
558 l_project_id VARCHAR2(15);
559 l_task_id VARCHAR2(15);
560 l_chart_of_accounts_id NUMBER;
561 l_acct_txn NUMBER;
562 l_found VARCHAR2(1);
563 l_project_id_mil VARCHAR2(15);
564 l_mov_order_type NUMBER;
565 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
566 l_pjm NUMBER;--Bug#5036174
567 BEGIN
568
569
570 x_return_status := FND_API.G_RET_STS_SUCCESS;
571
572
573 --inv_debug.message('ssia', 'TRO: validating attributes');
574 -- Validate trolin attributes
575
576 IF p_trolin_rec.organization_id <> INV_Validate_Trohdr.g_org.organization_id
577 THEN
578 x_return_status := FND_API.G_RET_STS_ERROR;
579 return;
580 END IF;
581 --inv_debug.message('ssia', 'TRO: organization: ' || x_return_status);
582 --inv_debug.message('ssia', 'TRO: inventoryItem: '|| p_trolin_val_rec.inventory_item || x_return_status);
583
584 IF p_trolin_rec.inventory_item_id IS NULL
585 AND p_trolin_val_rec.inventory_item IS NOT NULL
586 THEN
587 p_trolin_rec.inventory_item_id := INV_Value_To_Id.Inventory_Item(p_trolin_rec.organization_id,
588 p_trolin_val_rec.inventory_item);
589 END IF;
590
591 IF p_trolin_rec.inventory_item_id IS NOT NULL AND
592 ( p_trolin_rec.inventory_item_id <>
593 p_old_trolin_rec.inventory_item_id OR
594 p_old_trolin_rec.inventory_item_id IS NULL )
595 THEN
596
597 g_item.inventory_item_id := p_trolin_rec.inventory_item_id;
598 inv_validate_trohdr.g_org.organization_id := p_trolin_rec.organization_id;
599
600 IF INV_Validate.Inventory_Item(g_item,inv_validate_trohdr.g_org) =
601 INV_Validate.F
602 THEN
603 x_return_status := FND_API.G_RET_STS_ERROR;
604 return;
605 END IF;
606 END IF;
607 --inv_debug.message('ssia', 'TRO: item: ' || x_return_status);
608
609 IF p_trolin_rec.transaction_type_id IS NOT NULL and
610 ( p_trolin_rec.transaction_type_id <> p_old_trolin_rec.transaction_type_id OR
611 p_old_trolin_rec.transaction_type_id IS NULL )
612 THEN
613 g_transaction_l.transaction_type_id := p_trolin_rec.transaction_type_id;
614 IF INV_Validate.Transaction_Type(g_transaction_l) = inv_validate.F THEN
615 x_return_status := FND_API.G_RET_STS_ERROR;
616 END IF;
617 END IF;
618
619 --inv_debug.message('ssia', 'TRO: created_by: ' || to_char(p_trolin_rec.created_by));
620 IF p_trolin_rec.created_by IS NOT NULL AND
621 ( p_trolin_rec.created_by <>
622 p_old_trolin_rec.created_by OR
623 p_old_trolin_rec.created_by IS NULL )
624 THEN
625 IF INV_Validate.Created_By(p_trolin_rec.created_by) = inv_validate.F
626 THEN
627 x_return_status := FND_API.G_RET_STS_ERROR;
628 return;
629 END IF;
630 END IF;
631 --inv_debug.message('ssia', 'TRO: created_by: ' || x_return_status);
632
633 IF p_trolin_rec.creation_date IS NULL THEN
634 p_trolin_rec.creation_date := SYSDATE;
635 END IF;
636 IF p_trolin_rec.creation_date IS NOT NULL AND
637 ( p_trolin_rec.creation_date <>
638 p_old_trolin_rec.creation_date OR
639 p_old_trolin_rec.creation_date IS NULL )
640 THEN
641 IF INV_Validate.Creation_Date(p_trolin_rec.creation_date) =
642 INV_Validate.F
643 THEN
644 x_return_status := FND_API.G_RET_STS_ERROR;
645 return;
646 END IF;
647 END IF;
648
649 --inv_debug.message('ssia', 'TRO: creation_date: ' || x_return_status);
650 IF p_trolin_rec.date_required IS NOT NULL AND
651 ( p_trolin_rec.date_required <>
652 p_old_trolin_rec.date_required OR
653 p_old_trolin_rec.date_required IS NULL )
654 THEN
655 IF INV_Validate_Trohdr.Date_Required(p_trolin_rec.date_required) =
656 INV_Validate.F
657 THEN
658 x_return_status := FND_API.G_RET_STS_ERROR;
659 return;
660 END IF;
661 END IF;
662
663 --inv_debug.message('ssia', 'TRO: date_required: ' || x_return_status);
664
665 IF p_trolin_rec.from_subinventory_code IS NOT NULL AND
666 ( p_trolin_rec.from_subinventory_code <>
667 p_old_trolin_rec.from_subinventory_code OR
668 p_old_trolin_rec.from_subinventory_code IS NULL )
669 THEN
670 g_from_sub.secondary_inventory_name :=
671 p_trolin_rec.from_subinventory_code;
672 IF inv_validate_trolin.g_transaction_l.transaction_action_id = 2 THEN
673 l_acct_txn := 0;
674 ELSE
675 l_acct_txn := 1;
676 END IF;
677 IF INV_Validate.From_Subinventory(g_from_sub,
678 inv_validate_trohdr.g_org,
679 g_item,l_acct_txn ) = INV_Validate.F
680 THEN
681 --inv_Debug.message('ssia', 'error from inv_validate.from_subinventory');
682 x_return_status := FND_API.G_RET_STS_ERROR;
683 return;
684 END IF;
685
686 if( g_item.restrict_subinventories_code = 1 ) then
687 --inv_debug.message('ssia', 'g_item.restrict_subinventories_code is 1');
688 BEGIN
689 SELECT 'Y' INTO l_found
690 FROM mtl_item_sub_trk_all_v
691 WHERE inventory_item_id = p_trolin_Rec.inventory_item_id
692 AND organization_id = p_trolin_rec.organization_id
693 AND secondary_inventory_name = p_trolin_rec.from_subinventory_code;
694 --
695 EXCEPTION
696 WHEN NO_DATA_FOUND THEN
697 --inv_debug.message('ssia', 'invalid from sub');
698 fnd_message.set_name('INV','INVALID_SUB');
699 fnd_msg_pub.add;
700 RAISE fnd_api.g_exc_error;
701 END ;
702 ELSIF g_item.restrict_subinventories_code = 2 THEN
703 -- item is not restricted to specific subs
704 --inv_debug.message('ssia', 'g_item.restrict_subinventories_code is 2');
705 BEGIN
706 SELECT 'Y' INTO l_found
707 FROM mtl_subinventories_trk_val_v
708 WHERE organization_id = p_trolin_rec.organization_id
709 AND secondary_inventory_name = p_trolin_rec.from_subinventory_code ;
710 --
711 EXCEPTION
712 WHEN NO_DATA_FOUND THEN
713 --inv_debug.message('ssia', 'invalid from sub');
714 fnd_message.SET_NAME('INV','INVALID_SUB');
715 fnd_msg_pub.add;
716 RAISE fnd_api.g_exc_error;
717 END ;
718 END IF;
719 --inv_debug.message('ssia', 'TRO: from_subinventory_code: ' || x_return_status);
720 end if;
721
722 IF p_trolin_rec.project_id IS NOT NULL AND
723 ( p_trolin_rec.project_id <>
724 p_old_trolin_rec.project_id OR
725 p_old_trolin_rec.project_id IS NULL )
726 THEN
727 IF INV_Validate.Project(p_trolin_rec.project_id) = inv_validate.F THEN
728 x_return_status := FND_API.G_RET_STS_ERROR;
729 return;
730 END IF;
731 END IF;
732
733 -- inv_debug.message('TRO: project_id: ' || x_return_status);
734
735 IF p_trolin_rec.task_id IS NOT NULL AND
736 ( p_trolin_rec.task_id <>
737 p_old_trolin_rec.task_id OR
738 p_old_trolin_rec.task_id IS NULL )
739 THEN
740 IF INV_Validate.Task(p_trolin_rec.task_id, p_trolin_rec.project_id)
741 = INV_Validate.F THEN
742 x_return_status := FND_API.G_RET_STS_ERROR;
743 return;
744 END IF;
745 END IF;
746
747 -- inv_debug.message('TRO: task_id: ' || x_return_status);
748
749 IF p_trolin_rec.from_locator_id IS NULL
750 AND p_trolin_val_rec.from_locator IS NOT NULL
751 THEN
752 p_trolin_rec.from_locator_id := INV_Value_To_Id.from_locator(p_trolin_rec.organization_id,
753 p_trolin_val_rec.from_locator);
754 END IF;
755
756 IF p_trolin_rec.from_locator_id IS NOT NULL AND
757 ( p_trolin_rec.from_locator_id <>
758 p_old_trolin_rec.from_locator_id OR
759 p_old_trolin_rec.from_locator_id IS NULL )
760 THEN
761 g_from_locator.inventory_location_id := p_trolin_rec.from_locator_id;
762 /*Bug#5036174. If the org is non-PJM enbled, then the 'from locator' should not be specific to any project. So the values of both project_id and task_id
763 passed to 'INV_VALIDATE.FROM_LOCATOR' should be null when the org is non-PJM
764 enabled.*/
765
766 IF (inv_cache.set_org_rec(p_trolin_rec.organization_id)) THEN
767 l_pjm := inv_cache.org_rec.project_reference_enabled;
768 END IF;
769 IF (l_pjm = 2) THEN
770 IF INV_Validate.From_Locator(
771 g_from_locator
772 ,inv_validate_trohdr.g_org
773 ,g_item
774 ,g_from_sub
775 ,NULL
776 ,NULL
777 ,inv_validate_trolin.g_transaction_l.transaction_action_id) = INV_Validate.F
778 THEN
779 x_return_status := FND_API.G_RET_STS_ERROR;
780 return;
781 END IF;
782 ELSE
783 IF INV_Validate.From_Locator(g_from_locator,
784 inv_validate_trohdr.g_org,
785 g_item, g_from_sub,
786 p_trolin_rec.project_id,
787 p_trolin_rec.task_id,
788 inv_validate_trolin.g_transaction_l.transaction_action_id) =
789 INV_Validate.F
790 THEN
791 x_return_status := FND_API.G_RET_STS_ERROR;
792 return;
793 END IF;
794 END IF;
795 END IF;
796
797
798 -- inv_debug.message('TRO: from_locator_id: ' || x_return_status);
799
800 IF p_trolin_rec.header_id IS NOT NULL AND
801 ( p_trolin_rec.header_id <>
802 p_old_trolin_rec.header_id OR
803 p_old_trolin_rec.header_id IS NULL )
804 THEN
805 IF INV_Validate_Trohdr.Header(p_trolin_rec.header_id) =
806 INV_Validate.F THEN
807 x_return_status := FND_API.G_RET_STS_ERROR;
808 return;
809 END IF;
810 END IF;
811
812 -- inv_debug.message('TRO: header id: ' || x_return_status);
813
814 IF p_trolin_rec.last_updated_by IS NOT NULL AND
815 ( p_trolin_rec.last_updated_by <>
816 p_old_trolin_rec.last_updated_by OR
817 p_old_trolin_rec.last_updated_by IS NULL )
818 THEN
819 IF INV_Validate.Last_Updated_By(p_trolin_rec.last_updated_by) =
820 INV_Validate.F
821 THEN
822 x_return_status := FND_API.G_RET_STS_ERROR;
823 return;
824 END IF;
825 END IF;
826
827 -- inv_debug.message('TRO: last_updated_by: ' || x_return_status);
828
829 IF p_trolin_rec.last_update_date IS NULL THEN
830 p_trolin_rec.last_update_date := SYSDATE;
831 END IF;
832 IF p_trolin_rec.last_update_date IS NOT NULL AND
833 ( p_trolin_rec.last_update_date <>
834 p_old_trolin_rec.last_update_date OR
835 p_old_trolin_rec.last_update_date IS NULL )
836 THEN
837 IF INV_Validate.Last_Update_Date(p_trolin_rec.last_update_date) =
838 inv_validate.f
839 THEN
840 x_return_status := FND_API.G_RET_STS_ERROR;
841 return;
842 END IF;
843 END IF;
844
845 -- inv_debug.message('TRO: last_update_date: ' || x_return_status);
846
847 IF p_trolin_rec.last_update_login IS NOT NULL AND
848 ( p_trolin_rec.last_update_login <>
849 p_old_trolin_rec.last_update_login OR
850 p_old_trolin_rec.last_update_login IS NULL )
851 THEN
852 IF INV_Validate.Last_Update_Login(p_trolin_rec.last_update_login) =
853 INV_Validate.f
854 THEN
855 x_return_status := FND_API.G_RET_STS_ERROR;
856 return;
857 END IF;
858 END IF;
859
860 -- inv_debug.message('TRO: last_update_login: ' || x_return_status);
861
862 IF p_trolin_rec.line_id IS NOT NULL AND
863 ( p_trolin_rec.line_id <>
864 p_old_trolin_rec.line_id OR
865 p_old_trolin_rec.line_id IS NULL )
866 THEN
867 IF Line(p_trolin_rec.line_id) = F THEN
868 x_return_status := FND_API.G_RET_STS_ERROR;
869 return;
870 END IF;
871 END IF;
872
873 -- inv_debug.message('TRO: line_id: ' || x_return_status);
874
875
876 IF p_trolin_rec.line_number IS NOT NULL AND
877 ( p_trolin_rec.line_number <>
878 p_old_trolin_rec.line_number OR
879 p_old_trolin_rec.line_number IS NULL )
880 THEN
881 IF Line_Number(p_trolin_rec.line_number,p_trolin_rec.header_id,
882 inv_validate_trohdr.g_org) = F
883 THEN
884 x_return_status := FND_API.G_RET_STS_ERROR;
885 RETURN;
886 END IF;
887 END IF;
888
889 -- inv_debug.message('TRO: line_number: ' || x_return_status);
890
891
892 IF p_trolin_rec.line_status IS NOT NULL AND
893 (
894 --p_trolin_rec.line_status <>
895 --p_old_trolin_rec.line_status OR
896 p_old_trolin_rec.line_status IS NULL )
897 THEN
898 IF Line_Status(p_trolin_rec.line_status) = F THEN
899 x_return_status := FND_API.G_RET_STS_ERROR;
900 return;
901 END IF;
902 END IF;
903
904 -- inv_debug.message('TRO: line_status: ' || x_return_status);
905
906 IF p_trolin_rec.program_application_id IS NOT NULL AND
907 ( p_trolin_rec.program_application_id <>
908 p_old_trolin_rec.program_application_id OR
909 p_old_trolin_rec.program_application_id IS NULL )
910 THEN
911 IF
912 INV_Validate.Program_Application(p_trolin_rec.program_application_id)
913 = INV_Validate.F
914 THEN
915 x_return_status := FND_API.G_RET_STS_ERROR;
916 return;
917 END IF;
918 END IF;
919
920 -- inv_debug.message('TRO: program_application_id: ' || x_return_status);
921
922 IF p_trolin_rec.program_id IS NOT NULL AND
923 ( p_trolin_rec.program_id <>
924 p_old_trolin_rec.program_id OR
925 p_old_trolin_rec.program_id IS NULL )
926 THEN
927 IF INV_Validate.Program(p_trolin_rec.program_id) = inv_validate.F THEN
928 x_return_status := FND_API.G_RET_STS_ERROR;
929 return;
930 END IF;
931 END IF;
932
933 -- inv_debug.message('TRO: program_id: ' || x_return_status);
934
935 IF p_trolin_rec.program_update_date IS NOT NULL AND
936 ( p_trolin_rec.program_update_date <>
937 p_old_trolin_rec.program_update_date OR
938 p_old_trolin_rec.program_update_date IS NULL )
939 THEN
940 IF
941 INV_Validate.Program_Update_Date(p_trolin_rec.program_update_date)
942 = inv_validate.F THEN
943 x_return_status := FND_API.G_RET_STS_ERROR;
944 return;
945 END IF;
946 END IF;
947
948 -- inv_debug.message('TRO: program_update_date: ' || x_return_status);
949
950 IF p_trolin_rec.quantity IS NOT NULL AND
951 ( p_trolin_rec.quantity <>
952 p_old_trolin_rec.quantity OR
953 p_old_trolin_rec.quantity IS NULL )
954 THEN
955 IF INV_Validate.Quantity(p_trolin_rec.quantity) = inv_validate.F THEN
956 x_return_status := FND_API.G_RET_STS_ERROR;
957 return;
958 END IF;
959 END IF;
960
961 -- inv_debug.message('TRO: quantity: ' || x_return_status);
962
963 IF p_trolin_rec.quantity_delivered IS NOT NULL AND
964 ( p_trolin_rec.quantity_delivered <>
965 p_old_trolin_rec.quantity_delivered OR
966 p_old_trolin_rec.quantity_delivered IS NULL )
967 THEN
968 IF Quantity_Delivered(p_trolin_rec.quantity_delivered) = F THEN
969 x_return_status := FND_API.G_RET_STS_ERROR;
970 return;
971 END IF;
972 END IF;
973
974 -- inv_debug.message('TRO: quantity_delivered: ' || x_return_status);
975
976 IF p_trolin_rec.quantity_detailed IS NOT NULL AND
977 ( p_trolin_rec.quantity_detailed <>
978 p_old_trolin_rec.quantity_detailed OR
979 p_old_trolin_rec.quantity_detailed IS NULL )
980 THEN
981 IF Quantity_Detailed(p_trolin_rec.quantity_detailed) = F THEN
982 x_return_status := FND_API.G_RET_STS_ERROR;
983 return;
984 END IF;
985 END IF;
986
987 -- inv_debug.message('TRO: quantity_detailed: ' || x_return_status);
988
989 --INVCONV
990
991 IF p_trolin_rec.secondary_quantity IS NOT NULL AND
992 ( p_trolin_rec.secondary_quantity <>
993 p_old_trolin_rec.secondary_quantity OR
994 p_old_trolin_rec.secondary_quantity IS NULL )
995 THEN
996 IF INV_Validate.Secondary_Quantity(p_trolin_rec.secondary_quantity) = inv_validate.F THEN
997 x_return_status := FND_API.G_RET_STS_ERROR;
998 return;
999 END IF;
1000 END IF;
1001
1002 -- inv_debug.message('TRO: secondary_quantity: ' || x_return_status);
1003
1004 IF p_trolin_rec.secondary_quantity_delivered IS NOT NULL AND
1005 ( p_trolin_rec.secondary_quantity_delivered <>
1006 p_old_trolin_rec.secondary_quantity_delivered OR
1007 p_old_trolin_rec.secondary_quantity_delivered IS NULL )
1008 THEN
1009 IF Secondary_Quantity_Delivered(p_trolin_rec.secondary_quantity_delivered) = F THEN
1010 x_return_status := FND_API.G_RET_STS_ERROR;
1011 return;
1012 END IF;
1013 END IF;
1014
1015 -- inv_debug.message('TRO: secondary_quantity_delivered: ' || x_return_status);
1016
1017 IF p_trolin_rec.secondary_quantity_detailed IS NOT NULL AND
1018 ( p_trolin_rec.secondary_quantity_detailed <>
1019 p_old_trolin_rec.secondary_quantity_detailed OR
1020 p_old_trolin_rec.secondary_quantity_detailed IS NULL )
1021 THEN
1022 IF Secondary_Quantity_Detailed(p_trolin_rec.secondary_quantity_detailed) = F THEN
1023 x_return_status := FND_API.G_RET_STS_ERROR;
1024 return;
1025 END IF;
1026 END IF;
1027
1028 -- inv_debug.message('TRO: secondary_quantity_detailed: ' || x_return_status);
1029 --INVCONV
1030 IF p_trolin_rec.reason_id IS NOT NULL AND
1031 ( p_trolin_rec.reason_id <>
1032 p_old_trolin_rec.reason_id OR
1033 p_old_trolin_rec.reason_id IS NULL )
1034 THEN
1035 IF INV_Validate.Reason(p_trolin_rec.reason_id) = inv_validate.F THEN
1036 x_return_status := FND_API.G_RET_STS_ERROR;
1037 return;
1038 END IF;
1039 END IF;
1040 -- inv_debug.message('TRO: reason_id: ' || x_return_status);
1041
1042 IF p_trolin_rec.reference IS NOT NULL AND
1043 ( p_trolin_rec.reference <>
1044 p_old_trolin_rec.reference OR
1045 p_old_trolin_rec.reference IS NULL )
1046 THEN
1047 IF INV_Validate.Reference(p_trolin_rec.reference) = inv_validate.F THEN
1048 x_return_status := FND_API.G_RET_STS_ERROR;
1049 return;
1050 END IF;
1051 END IF;
1052 -- inv_debug.message('TRO: reference: ' || x_return_status);
1053
1054 IF p_trolin_rec.reference_type_code IS NOT NULL AND
1055 ( p_trolin_rec.reference_type_code <>
1056 p_old_trolin_rec.reference_type_code OR
1057 p_old_trolin_rec.reference_type_code IS NULL )
1058 THEN
1059 IF INV_Validate.Reference_Type(p_trolin_rec.reference_type_code) =
1060 inv_validate.F THEN
1061 x_return_status := FND_API.G_RET_STS_ERROR;
1062 return;
1063 END IF;
1064 END IF;
1065 -- inv_debug.message('TRO: reference_type_code: ' || x_return_status);
1066
1067 IF p_trolin_rec.reference_id IS NOT NULL AND
1068 p_trolin_rec.reference_type_code IS NOT NULL AND
1069 ( p_trolin_rec.reference_id <>
1070 p_old_trolin_rec.reference_id OR
1071 p_old_trolin_rec.reference_id IS NULL )
1072 THEN
1073 IF INV_Validate.Reference(p_trolin_rec.reference_id,
1074 p_trolin_rec.reference_type_code) =
1075 inv_validate.F THEN
1076 x_return_status := FND_API.G_RET_STS_ERROR;
1077 return;
1078 END IF;
1079 END IF;
1080 -- inv_debug.message('TRO: reference_id: ' || x_return_status);
1081
1082 IF p_trolin_rec.request_id IS NOT NULL AND
1083 ( p_trolin_rec.request_id <>
1084 p_old_trolin_rec.request_id OR
1085 p_old_trolin_rec.request_id IS NULL )
1086 THEN
1087 IF INV_Validate_Trohdr.Request(p_trolin_rec.request_id) =
1088 inv_validate.F THEN
1089 x_return_status := FND_API.G_RET_STS_ERROR;
1090 return;
1091 END IF;
1092 END IF;
1093 -- inv_debug.message('TRO: request_id: ' || x_return_status);
1094
1095 IF p_trolin_rec.revision IS NOT NULL AND
1096 ( p_trolin_rec.revision <>
1097 p_old_trolin_rec.revision OR
1098 p_old_trolin_rec.revision IS NULL )
1099 THEN
1100 IF INV_Validate.Revision(p_trolin_rec.revision,
1101 inv_validate_trohdr.g_org,
1102 g_item) = inv_validate.F THEN
1103 x_return_status := FND_API.G_RET_STS_ERROR;
1104 return;
1105 END IF;
1106 END IF;
1107 -- inv_debug.message('TRO: revision: ' || x_return_status);
1108
1109 /* Bug# 3347313. Moved the code to initialise the g_lot.lot_number variable
1110 outside the condition.*/
1111 g_lot.lot_number := p_trolin_rec.lot_number;
1112
1113 IF p_trolin_rec.lot_number IS NOT NULL AND
1114 ( p_trolin_rec.lot_number <>
1115 p_old_trolin_rec.lot_number OR
1116 p_old_trolin_rec.lot_number IS NULL )
1117 THEN
1118 --g_lot.lot_number := p_trolin_rec.lot_number;
1119 --Added to call new lot number function if putaway move order
1120 -- this is because on hand might not have this lot already
1121 -- in the case of a putaway move order
1122
1123 SELECT move_order_type INTO l_mov_order_type
1124 FROM mtl_txn_request_headers
1125 WHERE header_id=p_trolin_rec.header_id;
1126
1127
1128 IF l_mov_order_type=INV_GLOBALS.g_move_order_put_away
1129 THEN
1130
1131 IF INV_Validate.Lot_Number(g_lot, inv_validate_trohdr.g_org, g_item) = inv_validate.F THEN
1132 x_return_status := FND_API.G_RET_STS_ERROR;
1133 return;
1134 END IF;
1135
1136 ELSE
1137
1138 IF INV_Validate.Lot_Number(g_lot, inv_validate_trohdr.g_org, g_item,
1139 g_from_sub, g_from_locator,
1140 p_trolin_rec.revision) = inv_validate.F THEN
1141 x_return_status := FND_API.G_RET_STS_ERROR;
1142 return;
1143 END IF;
1144
1145 END IF;
1146
1147
1148 /*
1149 IF INV_Validate.Lot_Number(g_lot, inv_validate_trohdr.g_org, g_item,
1150 g_from_sub, g_from_locator,
1151 p_trolin_rec.revision) = inv_validate.F THEN
1152 x_return_status := FND_API.G_RET_STS_ERROR;
1153 return;
1154 END IF;
1155 */
1156 END IF;
1157 -- inv_debug.message('TRO: lot_number: ' || x_return_status);
1158
1159 IF p_trolin_rec.serial_number_start IS NOT NULL AND
1160 ( p_trolin_rec.serial_number_start <>
1161 p_old_trolin_rec.serial_number_start OR
1162 p_old_trolin_rec.serial_number_start IS NULL )
1163 THEN
1164 g_serial.serial_number := p_trolin_rec.serial_number_start;
1165 IF INV_Validate.Serial_Number_Start(g_serial,
1166 inv_validate_trohdr.g_org,
1167 g_item, g_from_sub, g_lot,
1168 g_from_locator,
1169 p_trolin_rec.revision) =
1170 inv_validate.F THEN
1171 x_return_status := FND_API.G_RET_STS_ERROR;
1172 return;
1173 END IF;
1174 END IF;
1175 -- inv_debug.message('TRO: serial_number_start: ' || x_return_status);
1176
1177 IF p_trolin_rec.serial_number_end IS NOT NULL AND
1178 ( p_trolin_rec.serial_number_end <>
1179 p_old_trolin_rec.serial_number_end OR
1180 p_old_trolin_rec.serial_number_end IS NULL )
1181 THEN
1182 g_serial.serial_number := p_trolin_rec.serial_number_end;
1183 IF INV_Validate.Serial_Number_End(g_serial,
1184 inv_validate_trohdr.g_org,
1185 g_item, g_from_sub, g_lot,
1186 g_from_locator,
1187 p_trolin_rec.revision) =
1188 inv_validate.F THEN
1189 x_return_status := FND_API.G_RET_STS_ERROR;
1190 return;
1191 END IF;
1192 END IF;
1193 -- inv_debug.message('TRO: serial_number: ' || x_return_status);
1194
1195
1196 IF p_trolin_rec.status_date IS NOT NULL AND
1197 ( p_trolin_rec.status_date <>
1198 p_old_trolin_rec.status_date OR
1199 p_old_trolin_rec.status_date IS NULL )
1200 THEN
1201 IF INV_Validate_Trohdr.Status_Date(p_trolin_rec.status_date) =
1202 inv_validate.F THEN
1203 x_return_status := FND_API.G_RET_STS_ERROR;
1204 return;
1205 END IF;
1206 END IF;
1207 -- inv_debug.message('TRO: status_date: ' || x_return_status);
1208
1209
1210 IF g_transaction_l.transaction_action_id = 1 THEN
1211 IF p_trolin_rec.to_account_id IS NULL
1212 AND p_trolin_val_rec.to_account IS NOT NULL
1213 THEN
1214
1215 SELECT ORG.CHART_OF_ACCOUNTS_ID
1216 INTO l_chart_of_accounts_id
1217 FROM ORG_ORGANIZATION_DEFINITIONS ORG
1218 WHERE ORG.ORGANIZATION_ID = inv_validate_trohdr.g_org.organization_id;
1219
1220 l_keystat_val := FND_FLEX_KEYVAL.Validate_Segs(
1221 OPERATION => 'CREATE_COMBINATION',
1222 APPL_SHORT_NAME => 'SQLGL',
1223 key_flex_code => 'GL#',
1224 STRUCTURE_NUMBER => l_chart_of_accounts_id,
1225 CONCAT_SEGMENTS => p_trolin_val_rec.to_account,
1226 VALUES_OR_IDS => 'V');
1227 -- DATA_SET => INV_Validate.g_TRO_VAttributes.organization_id);
1228 if l_keystat_val then
1229 l_combination_id := FND_FLEX_KEYVAL.combination_id;
1230 p_trolin_rec.to_account_id := l_combination_id;
1231 else
1232 x_return_status := FND_API.G_RET_STS_ERROR;
1233 end if;
1234 END IF;
1235
1236
1237 IF p_trolin_rec.to_account_id IS NOT NULL AND
1238 ( p_trolin_rec.to_account_id <>
1239 p_old_trolin_rec.to_account_id OR
1240 p_old_trolin_rec.to_account_id IS NULL )
1241 THEN
1242 IF INV_Validate.To_Account(p_trolin_rec.to_account_id) =
1243 inv_validate.f THEN
1244 x_return_status := FND_API.G_RET_STS_ERROR;
1245 END IF;
1246 END IF;
1247 -- inv_debug.message('TRO: to_account_id: ' || x_return_status);
1248 END IF;
1249
1250 IF g_transaction_l.transaction_action_id in (2,28) THEN
1251 IF p_trolin_rec.to_subinventory_code IS NOT NULL AND
1252 ( p_trolin_rec.to_subinventory_code <>
1253 p_old_trolin_rec.to_subinventory_code OR
1254 p_old_trolin_rec.to_subinventory_code IS NULL )
1255 THEN
1256 --inv_debug.message('ssia', 'check to_subinventory_code');
1257 g_to_sub.secondary_inventory_name := p_trolin_rec.to_subinventory_code;
1258 IF INV_Validate.To_Subinventory(g_to_sub, inv_validate_trohdr.g_org,
1259 g_item, g_from_sub, 0) =
1260 inv_validate.F THEN
1261 --inv_debug.message('ssia', 'error to_subinventory_code');
1262 x_return_status := FND_API.G_RET_STS_ERROR;
1263 return;
1264 END IF;
1265 if( g_item.restrict_subinventories_code = 1 ) then
1266 --inv_Debug.message('ssia', 'g_item_restrict subinventory code is 1');
1267 BEGIN
1268 SELECT 'Y' INTO l_found
1269 FROM mtl_secondary_inventories sec, mtl_item_sub_inventories item
1270 WHERE item.inventory_item_id = p_trolin_rec.inventory_item_id
1271 AND sec.organization_id = p_trolin_Rec.organization_id
1272 AND sec.secondary_inventory_name = p_trolin_rec.to_subinventory_code
1273 AND sec.organization_id = item.organization_id
1274 AND sec.secondary_inventory_name = item.secondary_inventory;
1275 --
1276 EXCEPTION
1277 WHEN NO_DATA_FOUND THEN
1278 --inv_debug.message('ssia', 'invalid to sub');
1279 fnd_message.set_name('INV','INVALID_SUB');
1280 fnd_msg_pub.add;
1281 RAISE fnd_api.g_exc_error;
1282 END ;
1283 ELSIF g_item.restrict_subinventories_code = 2 THEN
1284 -- item is not restricted to specific subs
1285 --inv_Debug.message('ssia', 'g_item_restrict subinventory code is 2');
1286 BEGIN
1287 SELECT 'Y' INTO l_found
1288 FROM mtl_secondary_inventories
1289 WHERE organization_id = p_trolin_rec.organization_id
1290 AND secondary_inventory_name = p_trolin_rec.to_subinventory_code
1291 AND nvl(disable_date, SYSDATE+1) > SYSDATE;
1292 --
1293 EXCEPTION
1294 WHEN NO_DATA_FOUND THEN
1295 --inv_debug.message('ssia', 'invalid to sub');
1296 fnd_message.SET_NAME('INV','INVALID_SUB');
1297 fnd_msg_pub.add;
1298 RAISE fnd_api.g_exc_error;
1299 END ;
1300 END IF;
1301 END IF;
1302 --inv_debug.message('ssia', 'TRO: to_subinventory: ' || x_return_status);
1303
1304
1305 -- **********************************************************
1306 -- Validation
1307 -- **********************************************************
1308 IF p_trolin_rec.to_locator_id IS NULL
1309 AND p_trolin_val_rec.to_locator IS NOT NULL
1310 THEN
1311 v_locator_control :=
1312 INV_Globals.Locator_control(
1313 l_return_status,
1314 l_msg_count,
1315 l_msg_data,
1316 inv_validate_trohdr.g_org.stock_locator_control_code,
1317 nvl(g_to_sub.locator_type,1),
1318 g_item.location_control_code,
1319 g_item.restrict_locators_code,
1320 inv_validate_trohdr.g_org.negative_inv_receipt_code,
1321 inv_validate_trolin.g_transaction_l.transaction_action_id);
1322 if (NVL(v_locator_control,1) = 3) then
1323 l_keystat_val := FND_FLEX_KEYVAL.Validate_Segs(
1324 OPERATION => 'CREATE_COMB_NO_AT',
1325 APPL_SHORT_NAME => 'INV',
1326 KEY_FLEX_CODE => 'MTLL',
1327 STRUCTURE_NUMBER => 101,
1328 CONCAT_SEGMENTS => p_trolin_val_rec.to_locator,
1329 VALUES_OR_IDS => 'V',
1330 DATA_SET => inv_validate_trohdr.g_org.organization_id);
1331
1332 if l_keystat_val then
1333 l_combination_id := FND_FLEX_KEYVAL.combination_id;
1334 BEGIN
1335 SELECT 'EXISTS'
1336 INTO l_temp
1337 FROM MTL_ITEM_LOCATIONS
1338 WHERE INVENTORY_LOCATION_ID = l_combination_id
1339 AND ORGANIZATION_ID = inv_validate_trohdr.g_org.organization_id
1340 AND SUBINVENTORY_CODE = g_to_sub.secondary_inventory_name;
1341
1342 EXCEPTION
1343 WHEN NO_DATA_FOUND THEN
1344 UPDATE mtl_item_locations
1345 SET SUBINVENTORY_CODE = g_to_sub.secondary_inventory_name
1346 WHERE INVENTORY_LOCATION_ID = l_combination_id
1347 AND ORGANIZATION_ID = inv_validate_trohdr.g_org.organization_id
1348 AND SUBINVENTORY_CODE = NULL;
1349
1350 if SQL%NOTFOUND then
1351 x_return_status := FND_API.G_RET_STS_ERROR;
1352 return;
1353 else
1354 SELECT PROJECT_ID,TASK_ID
1355 INTO l_project_id, l_task_id
1356 FROM MTL_ITEM_LOCATIONS
1357 WHERE INVENTORY_LOCATION_ID = l_combination_id
1358 AND ORGANIZATION_ID =inv_validate_trohdr.g_org.organization_id;
1359
1360 if NOT INV_ProjectLocator_PUB.Check_Project_References(
1361 inv_validate_trohdr.g_org.organization_id,
1362 p_trolin_rec.to_locator_id,
1363 'ANY',
1364 'N',
1365 l_project_id,
1366 l_task_id) then
1367 x_return_status := FND_API.G_RET_STS_ERROR;
1368 end if;
1369 end if;
1370 END;
1371 end if;
1372 else
1373 x_return_status := FND_API.G_RET_STS_ERROR;
1374 return;
1375 end if;
1376 p_trolin_rec.to_locator_id := INV_Value_To_Id.To_Locator(p_trolin_rec.organization_id,
1377 p_trolin_val_rec.to_locator);
1378 END IF;
1379
1380 IF p_trolin_rec.to_locator_id IS NOT NULL AND
1381 ( p_trolin_rec.to_locator_id <>
1382 p_old_trolin_rec.to_locator_id OR
1383 p_old_trolin_rec.to_locator_id IS NULL )
1384 THEN
1385 g_to_locator.inventory_location_id := p_trolin_rec.to_locator_id;
1386
1387 /* BUG 2347421 - When locator is specified on order line this validation fails
1388 if the logical locator with the project and task does not exist.
1389 This project locator is created later on in the flow.
1390 Changing this validation to not consider the project and task.
1391
1392 BUG 3036732 - The fix in 2347421 fails when the locator is already entered with project and task
1393 If the project info is already entered on the locator then validate the locator , else
1394 do not consider the project and task
1395 */
1396 SELECT PROJECT_ID
1397 INTO l_project_id_mil
1398 FROM MTL_ITEM_LOCATIONS
1399 WHERE INVENTORY_LOCATION_ID = g_to_locator.inventory_location_id
1400 AND ORGANIZATION_ID = p_trolin_rec.organization_id;
1401
1402
1403 IF l_project_id_mil is NOT NULL THEN
1404
1405
1406 IF INV_Validate.To_Locator(g_to_locator,
1407 inv_validate_trohdr.g_org, g_item,
1408 g_to_sub, p_trolin_rec.project_id,
1409 p_trolin_rec.task_id,
1410 inv_validate_trolin.g_transaction_l.transaction_action_id) = inv_validate.F THEN
1411 x_return_status := FND_API.G_RET_STS_ERROR;
1412 return;
1413 END IF;
1414
1415 ELSE
1416
1417 IF INV_Validate.To_Locator(g_to_locator,
1418 inv_validate_trohdr.g_org, g_item,
1419 g_to_sub, null, null,
1420 inv_validate_trolin.g_transaction_l.transaction_action_id) = inv_validate.F THEN
1421 x_return_status := FND_API.G_RET_STS_ERROR;
1422 return;
1423 END IF;
1424 END IF;
1425 END IF;
1426 -- inv_debug.message('TRO: to_locator_id: ' || x_return_status);
1427 END IF;
1428
1429
1430 IF p_trolin_rec.transaction_header_id IS NOT NULL AND
1431 ( p_trolin_rec.transaction_header_id <>
1432 p_old_trolin_rec.transaction_header_id OR
1433 p_old_trolin_rec.transaction_header_id IS NULL )
1434 THEN
1435 IF
1436 INV_Validate.Transaction_Header(p_trolin_rec.transaction_header_id) =
1437 inv_validate.f THEN
1438 x_return_status := FND_API.G_RET_STS_ERROR;
1439 END IF;
1440 END IF;
1441 -- inv_debug.message('TRO: transaction_header_id: ' || x_return_status);
1442
1443 IF p_trolin_rec.ship_to_location_id IS NOT NULL AND
1444 ( p_trolin_rec.ship_to_location_id <>
1445 p_old_trolin_rec.transaction_header_id OR
1446 p_old_trolin_rec.transaction_header_id IS NULL)
1447 THEN
1448 IF INV_Validate.HR_Location(p_trolin_rec.ship_to_location_id) =
1449 INV_Validate.F
1450 THEN
1451 x_return_status := FND_API.G_RET_STS_ERROR;
1452 END IF;
1453 END IF;
1454
1455 IF p_trolin_rec.uom_code IS NOT NULL AND
1456 ( p_trolin_rec.uom_code <>
1457 p_old_trolin_rec.uom_code OR
1458 p_old_trolin_rec.uom_code IS NULL )
1459 THEN
1460 IF INV_Validate.Uom(p_trolin_rec.uom_code,
1461 inv_validate_trohdr.g_org, g_item) = inv_validate.F THEN
1462 x_return_status := FND_API.G_RET_STS_ERROR;
1463 END IF;
1464 END IF;
1465
1466 IF p_trolin_rec.from_cost_group_id IS NOT NULL AND
1467 (p_trolin_rec.from_cost_group_id <> p_old_trolin_rec.from_cost_group_id OR
1468 p_old_trolin_rec.from_cost_group_id IS NULL) then
1469 if INV_Validate.Cost_Group(p_trolin_rec.from_cost_group_id,
1470 p_trolin_rec.organization_id) = inv_validate.F then
1471 x_return_status := FND_API.G_RET_STS_ERROR;
1472 END IF;
1473 END IF;
1474
1475 IF p_trolin_rec.to_cost_group_id IS NOT NULL AND
1476 (p_trolin_rec.to_cost_group_id <> p_old_trolin_rec.to_cost_group_id OR
1477 p_old_trolin_rec.to_cost_group_id IS NULL) then
1478 if INV_Validate.Cost_Group(p_trolin_rec.to_cost_group_id,
1479 p_trolin_rec.organization_id) = inv_validate.F then
1480 x_return_status := FND_API.G_RET_STS_ERROR;
1481 END IF;
1482 END IF;
1483
1484 IF p_trolin_rec.lpn_id IS NOT NULL AND
1485 (p_trolin_rec.lpn_id <> p_old_trolin_rec.lpn_id OR
1486 p_old_trolin_rec.lpn_id IS NULL) then
1487 if INV_Validate.LPN(p_trolin_rec.lpn_id) = inv_validate.F then
1488 x_return_status := FND_API.G_RET_STS_ERROR;
1489 END IF;
1490 END IF;
1491
1492 IF p_trolin_rec.to_lpn_id IS NOT NULL AND
1493 (p_trolin_rec.to_lpn_id <> p_old_trolin_rec.to_lpn_id OR
1494 p_old_trolin_rec.to_lpn_id IS NULL) then
1495 if INV_Validate.LPN(p_trolin_rec.to_lpn_id) = inv_validate.F then
1496 x_return_status := FND_API.G_RET_STS_ERROR;
1497 END IF;
1498 END IF;
1499
1500 -- inv_debug.message('TRO: uom: ' || x_return_status);
1501
1502 IF (p_trolin_rec.attribute1 IS NOT NULL AND
1503 ( p_trolin_rec.attribute1 <>
1504 p_old_trolin_rec.attribute1 OR
1505 p_old_trolin_rec.attribute1 IS NULL ))
1506 OR (p_trolin_rec.attribute10 IS NOT NULL AND
1507 ( p_trolin_rec.attribute10 <>
1508 p_old_trolin_rec.attribute10 OR
1509 p_old_trolin_rec.attribute10 IS NULL ))
1510 OR (p_trolin_rec.attribute11 IS NOT NULL AND
1511 ( p_trolin_rec.attribute11 <>
1512 p_old_trolin_rec.attribute11 OR
1513 p_old_trolin_rec.attribute11 IS NULL ))
1514 OR (p_trolin_rec.attribute12 IS NOT NULL AND
1515 ( p_trolin_rec.attribute12 <>
1516 p_old_trolin_rec.attribute12 OR
1517 p_old_trolin_rec.attribute12 IS NULL ))
1518 OR (p_trolin_rec.attribute13 IS NOT NULL AND
1519 ( p_trolin_rec.attribute13 <>
1520 p_old_trolin_rec.attribute13 OR
1521 p_old_trolin_rec.attribute13 IS NULL ))
1522 OR (p_trolin_rec.attribute14 IS NOT NULL AND
1523 ( p_trolin_rec.attribute14 <>
1524 p_old_trolin_rec.attribute14 OR
1525 p_old_trolin_rec.attribute14 IS NULL ))
1526 OR (p_trolin_rec.attribute15 IS NOT NULL AND
1527 ( p_trolin_rec.attribute15 <>
1528 p_old_trolin_rec.attribute15 OR
1529 p_old_trolin_rec.attribute15 IS NULL ))
1530 OR (p_trolin_rec.attribute2 IS NOT NULL AND
1531 ( p_trolin_rec.attribute2 <>
1532 p_old_trolin_rec.attribute2 OR
1533 p_old_trolin_rec.attribute2 IS NULL ))
1534 OR (p_trolin_rec.attribute3 IS NOT NULL AND
1535 ( p_trolin_rec.attribute3 <>
1536 p_old_trolin_rec.attribute3 OR
1537 p_old_trolin_rec.attribute3 IS NULL ))
1538 OR (p_trolin_rec.attribute4 IS NOT NULL AND
1539 ( p_trolin_rec.attribute4 <>
1540 p_old_trolin_rec.attribute4 OR
1541 p_old_trolin_rec.attribute4 IS NULL ))
1542 OR (p_trolin_rec.attribute5 IS NOT NULL AND
1543 ( p_trolin_rec.attribute5 <>
1544 p_old_trolin_rec.attribute5 OR
1545 p_old_trolin_rec.attribute5 IS NULL ))
1546 OR (p_trolin_rec.attribute6 IS NOT NULL AND
1547 ( p_trolin_rec.attribute6 <>
1548 p_old_trolin_rec.attribute6 OR
1549 p_old_trolin_rec.attribute6 IS NULL ))
1550 OR (p_trolin_rec.attribute7 IS NOT NULL AND
1551 ( p_trolin_rec.attribute7 <>
1552 p_old_trolin_rec.attribute7 OR
1553 p_old_trolin_rec.attribute7 IS NULL ))
1554 OR (p_trolin_rec.attribute8 IS NOT NULL AND
1555 ( p_trolin_rec.attribute8 <>
1556 p_old_trolin_rec.attribute8 OR
1557 p_old_trolin_rec.attribute8 IS NULL ))
1558 OR (p_trolin_rec.attribute9 IS NOT NULL AND
1559 ( p_trolin_rec.attribute9 <>
1560 p_old_trolin_rec.attribute9 OR
1561 p_old_trolin_rec.attribute9 IS NULL ))
1562 OR (p_trolin_rec.attribute_category IS NOT NULL AND
1563 ( p_trolin_rec.attribute_category <>
1564 p_old_trolin_rec.attribute_category OR
1565 p_old_trolin_rec.attribute_category IS NULL ))
1566 THEN
1567
1568 -- These calls are temporarily commented out
1569
1570
1571 -- Validate descriptive flexfield.
1572
1573 IF INV_Validate.Desc_Flex( 'TROLIN' ) = inv_validate.F THEN
1574 x_return_status := FND_API.G_RET_STS_ERROR;
1575 END IF;
1576
1577 END IF;
1578
1579 -- Done validating attributes
1580 EXCEPTION
1581 WHEN FND_API.G_EXC_ERROR THEN
1582 x_return_status := FND_API.G_RET_STS_ERROR;
1583
1584 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1585 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1586
1587 WHEN OTHERS THEN
1588 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1589
1590 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1591 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME, 'Attributes');
1592 END IF;
1593 END Attributes;
1594
1595 -- Procedure Entity_Delete
1596
1597 PROCEDURE Entity_Delete
1598 ( x_return_status OUT NOCOPY VARCHAR2
1599 , p_trolin_rec IN INV_Move_Order_PUB.Trolin_Rec_Type
1600 )
1601 IS
1602 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
1603 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1604 BEGIN
1605
1606 -- Validate entity delete.
1607 NULL;
1608
1609 -- Done.
1610 x_return_status := l_return_status;
1611
1612 EXCEPTION
1613
1614 WHEN FND_API.G_EXC_ERROR THEN
1615 x_return_status := FND_API.G_RET_STS_ERROR;
1616
1617 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1618 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1619
1620 WHEN OTHERS THEN
1621 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1622
1623 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1624 THEN
1625 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Entity_Delete');
1626 END IF;
1627
1628 END Entity_Delete;
1629
1630 -- Bug # 1911054
1631 -- Procedure Init : used to initialized the global variable created in this package
1632 PROCEDURE Init
1633 IS
1634 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1635 BEGIN
1636 g_transaction_l.transaction_type_id := Null;
1637 g_transaction_l.transaction_action_id := Null;
1638 g_item.inventory_item_id := Null;
1639 g_from_sub.secondary_inventory_name := Null;
1640 g_to_sub.secondary_inventory_name := Null;
1641 g_from_locator.inventory_location_id := Null;
1642 g_to_locator.inventory_location_id := Null;
1643 END;
1644
1645 END INV_Validate_Trolin;