1 PACKAGE BODY INV_Validate_Trolin AS
2 /* $Header: INVLTRLB.pls 120.12.12020000.2 2012/11/27 06:52:00 ppulloor 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
577 --inv_debug.message('ssia', 'TRO: organization: ' || x_return_status);
578 --inv_debug.message('ssia', 'TRO: inventoryItem: '|| p_trolin_val_rec.inventory_item || x_return_status);
579
580 IF p_trolin_rec.inventory_item_id IS NULL
581 AND p_trolin_val_rec.inventory_item IS NOT NULL
582 THEN
583 p_trolin_rec.inventory_item_id := INV_Value_To_Id.Inventory_Item(p_trolin_rec.organization_id,
584 p_trolin_val_rec.inventory_item);
585 END IF;
586
587 IF p_trolin_rec.transaction_type_id IS NOT NULL and
588 ( p_trolin_rec.transaction_type_id <> p_old_trolin_rec.transaction_type_id OR
589 p_old_trolin_rec.transaction_type_id IS NULL )
590 THEN
591 g_transaction_l.transaction_type_id := p_trolin_rec.transaction_type_id;
592 IF INV_Validate.Transaction_Type(g_transaction_l) = inv_validate.F THEN
593 x_return_status := FND_API.G_RET_STS_ERROR;
594 END IF;
595 END IF;
596
597
598 /* bug9267446 moved the code after validation of transaction type id */
599 IF p_trolin_rec.inventory_item_id IS NOT NULL AND
600 ( p_trolin_rec.inventory_item_id <>
601 p_old_trolin_rec.inventory_item_id OR
602 p_old_trolin_rec.inventory_item_id IS NULL )
603 THEN
604 g_item.inventory_item_id := p_trolin_rec.inventory_item_id;
605 inv_validate_trohdr.g_org.organization_id := p_trolin_rec.organization_id;
606 /* bug9267446 */
607 IF g_transaction_l.transaction_type_id IS NOT NULL THEN
608 IF INV_Validate.Inventory_Item(g_item,inv_validate_trohdr.g_org,g_transaction_l.transaction_type_id) =
609 INV_Validate.F
610 THEN
611 x_return_status := FND_API.G_RET_STS_ERROR;
612 return;
613 END IF;
614 ELSE
615 /* bug9267446 */
616 IF INV_Validate.Inventory_Item(g_item,inv_validate_trohdr.g_org) =
617 --IF INV_Validate.Inventory_Item(g_item,inv_validate_trohdr.g_org) =
618 INV_Validate.F
619 THEN
620 x_return_status := FND_API.G_RET_STS_ERROR;
621 return;
622 END IF;
623 END IF;
624 END IF;
625 --inv_debug.message('ssia', 'TRO: item: ' || x_return_status);
626 -- Bug 15841667 Org validation added after item validation
627 IF p_trolin_rec.organization_id <> INV_Validate_Trohdr.g_org.organization_id
628 THEN
629 x_return_status := FND_API.G_RET_STS_ERROR;
630 return;
631 END IF;
632 -- Bug 15841667
633 --inv_debug.message('ssia', 'TRO: created_by: ' || to_char(p_trolin_rec.created_by));
634 IF p_trolin_rec.created_by IS NOT NULL AND
635 ( p_trolin_rec.created_by <>
636 p_old_trolin_rec.created_by OR
637 p_old_trolin_rec.created_by IS NULL )
638 THEN
639 IF INV_Validate.Created_By(p_trolin_rec.created_by) = inv_validate.F
640 THEN
641 x_return_status := FND_API.G_RET_STS_ERROR;
642 return;
643 END IF;
644 END IF;
645 --inv_debug.message('ssia', 'TRO: created_by: ' || x_return_status);
646
647 IF p_trolin_rec.creation_date IS NULL THEN
648 p_trolin_rec.creation_date := SYSDATE;
649 END IF;
650 IF p_trolin_rec.creation_date IS NOT NULL AND
651 ( p_trolin_rec.creation_date <>
652 p_old_trolin_rec.creation_date OR
653 p_old_trolin_rec.creation_date IS NULL )
654 THEN
655 IF INV_Validate.Creation_Date(p_trolin_rec.creation_date) =
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: creation_date: ' || x_return_status);
664 IF p_trolin_rec.date_required IS NOT NULL AND
665 ( p_trolin_rec.date_required <>
666 p_old_trolin_rec.date_required OR
667 p_old_trolin_rec.date_required IS NULL )
668 THEN
669 IF INV_Validate_Trohdr.Date_Required(p_trolin_rec.date_required) =
670 INV_Validate.F
671 THEN
672 x_return_status := FND_API.G_RET_STS_ERROR;
673 return;
674 END IF;
675 END IF;
676
677 --inv_debug.message('ssia', 'TRO: date_required: ' || x_return_status);
678
679 IF p_trolin_rec.from_subinventory_code IS NOT NULL AND
680 ( p_trolin_rec.from_subinventory_code <>
681 p_old_trolin_rec.from_subinventory_code OR
682 p_old_trolin_rec.from_subinventory_code IS NULL )
683 THEN
684 g_from_sub.secondary_inventory_name :=
685 p_trolin_rec.from_subinventory_code;
686 IF inv_validate_trolin.g_transaction_l.transaction_action_id = 2 THEN
687 l_acct_txn := 0;
688 ELSE
689 l_acct_txn := 1;
690 END IF;
691 IF INV_Validate.From_Subinventory(g_from_sub,
692 inv_validate_trohdr.g_org,
693 g_item,l_acct_txn ) = INV_Validate.F
694 THEN
695 --inv_Debug.message('ssia', 'error from inv_validate.from_subinventory');
696 x_return_status := FND_API.G_RET_STS_ERROR;
697 return;
698 END IF;
699
700 if( g_item.restrict_subinventories_code = 1 ) then
701 --inv_debug.message('ssia', 'g_item.restrict_subinventories_code is 1');
702 BEGIN
703 SELECT 'Y' INTO l_found
704 FROM mtl_item_sub_trk_all_v
705 WHERE inventory_item_id = p_trolin_Rec.inventory_item_id
706 AND organization_id = p_trolin_rec.organization_id
707 AND secondary_inventory_name = p_trolin_rec.from_subinventory_code;
708 --
709 EXCEPTION
710 WHEN NO_DATA_FOUND THEN
711 --inv_debug.message('ssia', 'invalid from sub');
712 fnd_message.set_name('INV','INVALID_SUB');
713 fnd_msg_pub.add;
714 RAISE fnd_api.g_exc_error;
715 END ;
716 ELSIF g_item.restrict_subinventories_code = 2 THEN
717 -- item is not restricted to specific subs
718 --inv_debug.message('ssia', 'g_item.restrict_subinventories_code is 2');
719 BEGIN
720 SELECT 'Y' INTO l_found
721 FROM mtl_subinventories_trk_val_v
722 WHERE organization_id = p_trolin_rec.organization_id
723 AND secondary_inventory_name = p_trolin_rec.from_subinventory_code ;
724 --
725 EXCEPTION
726 WHEN NO_DATA_FOUND THEN
727 --inv_debug.message('ssia', 'invalid from sub');
728 fnd_message.SET_NAME('INV','INVALID_SUB');
729 fnd_msg_pub.add;
730 RAISE fnd_api.g_exc_error;
731 END ;
732 END IF;
733 --inv_debug.message('ssia', 'TRO: from_subinventory_code: ' || x_return_status);
734 end if;
735
736 IF p_trolin_rec.project_id IS NOT NULL AND
737 ( p_trolin_rec.project_id <>
738 p_old_trolin_rec.project_id OR
739 p_old_trolin_rec.project_id IS NULL )
740 THEN
741 IF INV_Validate.Project(p_trolin_rec.project_id) = 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: project_id: ' || x_return_status);
748
749 IF p_trolin_rec.task_id IS NOT NULL AND
750 ( p_trolin_rec.task_id <>
751 p_old_trolin_rec.task_id OR
752 p_old_trolin_rec.task_id IS NULL )
753 THEN
754 IF INV_Validate.Task(p_trolin_rec.task_id, p_trolin_rec.project_id)
755 = INV_Validate.F THEN
756 x_return_status := FND_API.G_RET_STS_ERROR;
757 return;
758 END IF;
759 END IF;
760
761 -- inv_debug.message('TRO: task_id: ' || x_return_status);
762
763 IF p_trolin_rec.from_locator_id IS NULL
764 AND p_trolin_val_rec.from_locator IS NOT NULL
765 THEN
766 p_trolin_rec.from_locator_id := INV_Value_To_Id.from_locator(p_trolin_rec.organization_id,
767 p_trolin_val_rec.from_locator);
768 END IF;
769
770 IF p_trolin_rec.from_locator_id IS NOT NULL AND
771 ( p_trolin_rec.from_locator_id <>
772 p_old_trolin_rec.from_locator_id OR
773 p_old_trolin_rec.from_locator_id IS NULL )
774 THEN
775 g_from_locator.inventory_location_id := p_trolin_rec.from_locator_id;
776 /*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
777 passed to 'INV_VALIDATE.FROM_LOCATOR' should be null when the org is non-PJM
778 enabled.*/
779
780 IF (inv_cache.set_org_rec(p_trolin_rec.organization_id)) THEN
781 l_pjm := inv_cache.org_rec.project_reference_enabled;
782 END IF;
783 IF (l_pjm = 2) THEN
784 IF INV_Validate.From_Locator(
785 g_from_locator
786 ,inv_validate_trohdr.g_org
787 ,g_item
788 ,g_from_sub
789 ,NULL
790 ,NULL
791 ,inv_validate_trolin.g_transaction_l.transaction_action_id) = INV_Validate.F
792 THEN
793 x_return_status := FND_API.G_RET_STS_ERROR;
794 return;
795 END IF;
796 ELSE
797 IF INV_Validate.From_Locator(g_from_locator,
798 inv_validate_trohdr.g_org,
799 g_item, g_from_sub,
800 p_trolin_rec.project_id,
801 p_trolin_rec.task_id,
802 inv_validate_trolin.g_transaction_l.transaction_action_id) =
803 INV_Validate.F
804 THEN
805 x_return_status := FND_API.G_RET_STS_ERROR;
806 return;
807 END IF;
808 END IF;
809 END IF;
810
811
812 -- inv_debug.message('TRO: from_locator_id: ' || x_return_status);
813
814 IF p_trolin_rec.header_id IS NOT NULL AND
815 ( p_trolin_rec.header_id <>
816 p_old_trolin_rec.header_id OR
817 p_old_trolin_rec.header_id IS NULL )
818 THEN
819 IF INV_Validate_Trohdr.Header(p_trolin_rec.header_id) =
820 INV_Validate.F THEN
821 x_return_status := FND_API.G_RET_STS_ERROR;
822 return;
823 END IF;
824 END IF;
825
826 -- inv_debug.message('TRO: header id: ' || x_return_status);
827
828 IF p_trolin_rec.last_updated_by IS NOT NULL AND
829 ( p_trolin_rec.last_updated_by <>
830 p_old_trolin_rec.last_updated_by OR
831 p_old_trolin_rec.last_updated_by IS NULL )
832 THEN
833 IF INV_Validate.Last_Updated_By(p_trolin_rec.last_updated_by) =
834 INV_Validate.F
835 THEN
836 x_return_status := FND_API.G_RET_STS_ERROR;
837 return;
838 END IF;
839 END IF;
840
841 -- inv_debug.message('TRO: last_updated_by: ' || x_return_status);
842
843 IF p_trolin_rec.last_update_date IS NULL THEN
844 p_trolin_rec.last_update_date := SYSDATE;
845 END IF;
846 IF p_trolin_rec.last_update_date IS NOT NULL AND
847 ( p_trolin_rec.last_update_date <>
848 p_old_trolin_rec.last_update_date OR
849 p_old_trolin_rec.last_update_date IS NULL )
850 THEN
851 IF INV_Validate.Last_Update_Date(p_trolin_rec.last_update_date) =
852 inv_validate.f
853 THEN
854 x_return_status := FND_API.G_RET_STS_ERROR;
855 return;
856 END IF;
857 END IF;
858
859 -- inv_debug.message('TRO: last_update_date: ' || x_return_status);
860
861 IF p_trolin_rec.last_update_login IS NOT NULL AND
862 ( p_trolin_rec.last_update_login <>
863 p_old_trolin_rec.last_update_login OR
864 p_old_trolin_rec.last_update_login IS NULL )
865 THEN
866 IF INV_Validate.Last_Update_Login(p_trolin_rec.last_update_login) =
867 INV_Validate.f
868 THEN
869 x_return_status := FND_API.G_RET_STS_ERROR;
870 return;
871 END IF;
872 END IF;
873
874 -- inv_debug.message('TRO: last_update_login: ' || x_return_status);
875
876 IF p_trolin_rec.line_id IS NOT NULL AND
877 ( p_trolin_rec.line_id <>
878 p_old_trolin_rec.line_id OR
879 p_old_trolin_rec.line_id IS NULL )
880 THEN
881 IF Line(p_trolin_rec.line_id) = F THEN
882 x_return_status := FND_API.G_RET_STS_ERROR;
883 return;
884 END IF;
885 END IF;
886
887 -- inv_debug.message('TRO: line_id: ' || x_return_status);
888
889
890 IF p_trolin_rec.line_number IS NOT NULL AND
891 ( p_trolin_rec.line_number <>
892 p_old_trolin_rec.line_number OR
893 p_old_trolin_rec.line_number IS NULL )
894 THEN
895 IF Line_Number(p_trolin_rec.line_number,p_trolin_rec.header_id,
896 inv_validate_trohdr.g_org) = F
897 THEN
898 x_return_status := FND_API.G_RET_STS_ERROR;
899 RETURN;
900 END IF;
901 END IF;
902
903 -- inv_debug.message('TRO: line_number: ' || x_return_status);
904
905
906 IF p_trolin_rec.line_status IS NOT NULL AND
907 (
908 --p_trolin_rec.line_status <>
909 --p_old_trolin_rec.line_status OR
910 p_old_trolin_rec.line_status IS NULL )
911 THEN
912 IF Line_Status(p_trolin_rec.line_status) = F THEN
913 x_return_status := FND_API.G_RET_STS_ERROR;
914 return;
915 END IF;
916 END IF;
917
918 -- inv_debug.message('TRO: line_status: ' || x_return_status);
919
920 IF p_trolin_rec.program_application_id IS NOT NULL AND
921 ( p_trolin_rec.program_application_id <>
922 p_old_trolin_rec.program_application_id OR
923 p_old_trolin_rec.program_application_id IS NULL )
924 THEN
925 IF
926 INV_Validate.Program_Application(p_trolin_rec.program_application_id)
927 = INV_Validate.F
928 THEN
929 x_return_status := FND_API.G_RET_STS_ERROR;
930 return;
931 END IF;
932 END IF;
933
934 -- inv_debug.message('TRO: program_application_id: ' || x_return_status);
935
936 IF p_trolin_rec.program_id IS NOT NULL AND
937 ( p_trolin_rec.program_id <>
938 p_old_trolin_rec.program_id OR
939 p_old_trolin_rec.program_id IS NULL )
940 THEN
941 IF INV_Validate.Program(p_trolin_rec.program_id) = inv_validate.F THEN
942 x_return_status := FND_API.G_RET_STS_ERROR;
943 return;
944 END IF;
945 END IF;
946
947 -- inv_debug.message('TRO: program_id: ' || x_return_status);
948
949 IF p_trolin_rec.program_update_date IS NOT NULL AND
950 ( p_trolin_rec.program_update_date <>
951 p_old_trolin_rec.program_update_date OR
952 p_old_trolin_rec.program_update_date IS NULL )
953 THEN
954 IF
955 INV_Validate.Program_Update_Date(p_trolin_rec.program_update_date)
956 = inv_validate.F THEN
957 x_return_status := FND_API.G_RET_STS_ERROR;
958 return;
959 END IF;
960 END IF;
961
962 -- inv_debug.message('TRO: program_update_date: ' || x_return_status);
963
964 IF p_trolin_rec.quantity IS NOT NULL AND
965 ( p_trolin_rec.quantity <>
966 p_old_trolin_rec.quantity OR
967 p_old_trolin_rec.quantity IS NULL )
968 THEN
969 IF INV_Validate.Quantity(p_trolin_rec.quantity) = inv_validate.F THEN
970 x_return_status := FND_API.G_RET_STS_ERROR;
971 return;
972 END IF;
973 END IF;
974
975 -- inv_debug.message('TRO: quantity: ' || x_return_status);
976
977 IF p_trolin_rec.quantity_delivered IS NOT NULL AND
978 ( p_trolin_rec.quantity_delivered <>
979 p_old_trolin_rec.quantity_delivered OR
980 p_old_trolin_rec.quantity_delivered IS NULL )
981 THEN
982 IF Quantity_Delivered(p_trolin_rec.quantity_delivered) = F THEN
983 x_return_status := FND_API.G_RET_STS_ERROR;
984 return;
985 END IF;
986 END IF;
987
988 -- inv_debug.message('TRO: quantity_delivered: ' || x_return_status);
989
990 IF p_trolin_rec.quantity_detailed IS NOT NULL AND
991 ( p_trolin_rec.quantity_detailed <>
992 p_old_trolin_rec.quantity_detailed OR
993 p_old_trolin_rec.quantity_detailed IS NULL )
994 THEN
995 IF Quantity_Detailed(p_trolin_rec.quantity_detailed) = F THEN
996 x_return_status := FND_API.G_RET_STS_ERROR;
997 return;
998 END IF;
999 END IF;
1000
1001 -- inv_debug.message('TRO: quantity_detailed: ' || x_return_status);
1002
1003 --INVCONV
1004
1005 IF p_trolin_rec.secondary_quantity IS NOT NULL AND
1006 ( p_trolin_rec.secondary_quantity <>
1007 p_old_trolin_rec.secondary_quantity OR
1008 p_old_trolin_rec.secondary_quantity IS NULL )
1009 THEN
1010 IF INV_Validate.Secondary_Quantity(p_trolin_rec.secondary_quantity) = inv_validate.F THEN
1011 x_return_status := FND_API.G_RET_STS_ERROR;
1012 return;
1013 END IF;
1014 END IF;
1015
1016 -- inv_debug.message('TRO: secondary_quantity: ' || x_return_status);
1017
1018 IF p_trolin_rec.secondary_quantity_delivered IS NOT NULL AND
1019 ( p_trolin_rec.secondary_quantity_delivered <>
1020 p_old_trolin_rec.secondary_quantity_delivered OR
1021 p_old_trolin_rec.secondary_quantity_delivered IS NULL )
1022 THEN
1023 IF Secondary_Quantity_Delivered(p_trolin_rec.secondary_quantity_delivered) = F THEN
1024 x_return_status := FND_API.G_RET_STS_ERROR;
1025 return;
1026 END IF;
1027 END IF;
1028
1029 -- inv_debug.message('TRO: secondary_quantity_delivered: ' || x_return_status);
1030
1031 IF p_trolin_rec.secondary_quantity_detailed IS NOT NULL AND
1032 ( p_trolin_rec.secondary_quantity_detailed <>
1033 p_old_trolin_rec.secondary_quantity_detailed OR
1034 p_old_trolin_rec.secondary_quantity_detailed IS NULL )
1035 THEN
1036 IF Secondary_Quantity_Detailed(p_trolin_rec.secondary_quantity_detailed) = F THEN
1037 x_return_status := FND_API.G_RET_STS_ERROR;
1038 return;
1039 END IF;
1040 END IF;
1041
1042 -- inv_debug.message('TRO: secondary_quantity_detailed: ' || x_return_status);
1043 --INVCONV
1044 IF p_trolin_rec.reason_id IS NOT NULL AND
1045 ( p_trolin_rec.reason_id <>
1046 p_old_trolin_rec.reason_id OR
1047 p_old_trolin_rec.reason_id IS NULL )
1048 THEN
1049 IF INV_Validate.Reason(p_trolin_rec.reason_id) = inv_validate.F THEN
1050 x_return_status := FND_API.G_RET_STS_ERROR;
1051 return;
1052 END IF;
1053 END IF;
1054 -- inv_debug.message('TRO: reason_id: ' || x_return_status);
1055
1056 IF p_trolin_rec.reference IS NOT NULL AND
1057 ( p_trolin_rec.reference <>
1058 p_old_trolin_rec.reference OR
1059 p_old_trolin_rec.reference IS NULL )
1060 THEN
1061 IF INV_Validate.Reference(p_trolin_rec.reference) = inv_validate.F THEN
1062 x_return_status := FND_API.G_RET_STS_ERROR;
1063 return;
1064 END IF;
1065 END IF;
1066 -- inv_debug.message('TRO: reference: ' || x_return_status);
1067
1068 IF p_trolin_rec.reference_type_code IS NOT NULL AND
1069 ( p_trolin_rec.reference_type_code <>
1070 p_old_trolin_rec.reference_type_code OR
1071 p_old_trolin_rec.reference_type_code IS NULL )
1072 THEN
1073 IF INV_Validate.Reference_Type(p_trolin_rec.reference_type_code) =
1074 inv_validate.F THEN
1075 x_return_status := FND_API.G_RET_STS_ERROR;
1076 return;
1077 END IF;
1078 END IF;
1079 -- inv_debug.message('TRO: reference_type_code: ' || x_return_status);
1080
1081 IF p_trolin_rec.reference_id IS NOT NULL AND
1082 p_trolin_rec.reference_type_code IS NOT NULL AND
1083 ( p_trolin_rec.reference_id <>
1084 p_old_trolin_rec.reference_id OR
1085 p_old_trolin_rec.reference_id IS NULL )
1086 THEN
1087 IF INV_Validate.Reference(p_trolin_rec.reference_id,
1088 p_trolin_rec.reference_type_code) =
1089 inv_validate.F THEN
1090 x_return_status := FND_API.G_RET_STS_ERROR;
1091 return;
1092 END IF;
1093 END IF;
1094 -- inv_debug.message('TRO: reference_id: ' || x_return_status);
1095
1096 IF p_trolin_rec.request_id IS NOT NULL AND
1097 ( p_trolin_rec.request_id <>
1098 p_old_trolin_rec.request_id OR
1099 p_old_trolin_rec.request_id IS NULL )
1100 THEN
1101 IF INV_Validate_Trohdr.Request(p_trolin_rec.request_id) =
1102 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: request_id: ' || x_return_status);
1108
1109 IF p_trolin_rec.revision IS NOT NULL AND
1110 ( p_trolin_rec.revision <>
1111 p_old_trolin_rec.revision OR
1112 p_old_trolin_rec.revision IS NULL )
1113 THEN
1114 IF INV_Validate.Revision(p_trolin_rec.revision,
1115 inv_validate_trohdr.g_org,
1116 g_item) = inv_validate.F THEN
1117 x_return_status := FND_API.G_RET_STS_ERROR;
1118 return;
1119 END IF;
1120 END IF;
1121 -- inv_debug.message('TRO: revision: ' || x_return_status);
1122
1123 /* Bug# 3347313. Moved the code to initialise the g_lot.lot_number variable
1124 outside the condition.*/
1125 g_lot.lot_number := p_trolin_rec.lot_number;
1126
1127 IF p_trolin_rec.lot_number IS NOT NULL AND
1128 ( p_trolin_rec.lot_number <>
1129 p_old_trolin_rec.lot_number OR
1130 p_old_trolin_rec.lot_number IS NULL )
1131 THEN
1132 --g_lot.lot_number := p_trolin_rec.lot_number;
1133 --Added to call new lot number function if putaway move order
1134 -- this is because on hand might not have this lot already
1135 -- in the case of a putaway move order
1136
1137 SELECT move_order_type INTO l_mov_order_type
1138 FROM mtl_txn_request_headers
1139 WHERE header_id=p_trolin_rec.header_id;
1140
1141
1142 IF l_mov_order_type=INV_GLOBALS.g_move_order_put_away
1143 THEN
1144
1145 IF INV_Validate.Lot_Number(g_lot, inv_validate_trohdr.g_org, g_item) = inv_validate.F THEN
1146 x_return_status := FND_API.G_RET_STS_ERROR;
1147 return;
1148 END IF;
1149
1150 ELSE
1151
1152 IF INV_Validate.Lot_Number(g_lot, inv_validate_trohdr.g_org, g_item,
1153 g_from_sub, g_from_locator,
1154 p_trolin_rec.revision) = inv_validate.F THEN
1155 x_return_status := FND_API.G_RET_STS_ERROR;
1156 return;
1157 END IF;
1158
1159 END IF;
1160
1161
1162 /*
1163 IF INV_Validate.Lot_Number(g_lot, inv_validate_trohdr.g_org, g_item,
1164 g_from_sub, g_from_locator,
1165 p_trolin_rec.revision) = inv_validate.F THEN
1166 x_return_status := FND_API.G_RET_STS_ERROR;
1167 return;
1168 END IF;
1169 */
1170 END IF;
1171 -- inv_debug.message('TRO: lot_number: ' || x_return_status);
1172
1173 IF p_trolin_rec.serial_number_start IS NOT NULL AND
1174 ( p_trolin_rec.serial_number_start <>
1175 p_old_trolin_rec.serial_number_start OR
1176 p_old_trolin_rec.serial_number_start IS NULL )
1177 THEN
1178 g_serial.serial_number := p_trolin_rec.serial_number_start;
1179 IF INV_Validate.Serial_Number_Start(g_serial,
1180 inv_validate_trohdr.g_org,
1181 g_item, g_from_sub, g_lot,
1182 g_from_locator,
1183 p_trolin_rec.revision) =
1184 inv_validate.F THEN
1185 x_return_status := FND_API.G_RET_STS_ERROR;
1186 return;
1187 END IF;
1188 END IF;
1189 -- inv_debug.message('TRO: serial_number_start: ' || x_return_status);
1190
1191 IF p_trolin_rec.serial_number_end IS NOT NULL AND
1192 ( p_trolin_rec.serial_number_end <>
1193 p_old_trolin_rec.serial_number_end OR
1194 p_old_trolin_rec.serial_number_end IS NULL )
1195 THEN
1196 g_serial.serial_number := p_trolin_rec.serial_number_end;
1197 IF INV_Validate.Serial_Number_End(g_serial,
1198 inv_validate_trohdr.g_org,
1199 g_item, g_from_sub, g_lot,
1200 g_from_locator,
1201 p_trolin_rec.revision) =
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: serial_number: ' || x_return_status);
1208
1209
1210 IF p_trolin_rec.status_date IS NOT NULL AND
1211 ( p_trolin_rec.status_date <>
1212 p_old_trolin_rec.status_date OR
1213 p_old_trolin_rec.status_date IS NULL )
1214 THEN
1215 IF INV_Validate_Trohdr.Status_Date(p_trolin_rec.status_date) =
1216 inv_validate.F THEN
1217 x_return_status := FND_API.G_RET_STS_ERROR;
1218 return;
1219 END IF;
1220 END IF;
1221 -- inv_debug.message('TRO: status_date: ' || x_return_status);
1222
1223
1224 IF g_transaction_l.transaction_action_id = 1 THEN
1225 IF p_trolin_rec.to_account_id IS NULL
1226 AND p_trolin_val_rec.to_account IS NOT NULL
1227 THEN
1228
1229 SELECT ORG.CHART_OF_ACCOUNTS_ID
1230 INTO l_chart_of_accounts_id
1231 FROM ORG_ORGANIZATION_DEFINITIONS ORG
1232 WHERE ORG.ORGANIZATION_ID = inv_validate_trohdr.g_org.organization_id;
1233
1234 l_keystat_val := FND_FLEX_KEYVAL.Validate_Segs(
1235 OPERATION => 'CREATE_COMBINATION',
1236 APPL_SHORT_NAME => 'SQLGL',
1237 key_flex_code => 'GL#',
1238 STRUCTURE_NUMBER => l_chart_of_accounts_id,
1239 CONCAT_SEGMENTS => p_trolin_val_rec.to_account,
1240 VALUES_OR_IDS => 'V');
1241 -- DATA_SET => INV_Validate.g_TRO_VAttributes.organization_id);
1242 if l_keystat_val then
1243 l_combination_id := FND_FLEX_KEYVAL.combination_id;
1244 p_trolin_rec.to_account_id := l_combination_id;
1245 else
1246 x_return_status := FND_API.G_RET_STS_ERROR;
1247 end if;
1248 END IF;
1249
1250
1251 IF p_trolin_rec.to_account_id IS NOT NULL AND
1252 ( p_trolin_rec.to_account_id <>
1253 p_old_trolin_rec.to_account_id OR
1254 p_old_trolin_rec.to_account_id IS NULL )
1255 THEN
1256 IF INV_Validate.To_Account(p_trolin_rec.to_account_id) =
1257 inv_validate.f THEN
1258 x_return_status := FND_API.G_RET_STS_ERROR;
1259 END IF;
1260 END IF;
1261 -- inv_debug.message('TRO: to_account_id: ' || x_return_status);
1262 END IF;
1263
1264 IF g_transaction_l.transaction_action_id in (2,28) THEN
1265 IF p_trolin_rec.to_subinventory_code IS NOT NULL AND
1266 ( p_trolin_rec.to_subinventory_code <>
1267 p_old_trolin_rec.to_subinventory_code OR
1268 p_old_trolin_rec.to_subinventory_code IS NULL )
1269 THEN
1270 --inv_debug.message('ssia', 'check to_subinventory_code');
1271 g_to_sub.secondary_inventory_name := p_trolin_rec.to_subinventory_code;
1272 IF INV_Validate.To_Subinventory(g_to_sub, inv_validate_trohdr.g_org,
1273 g_item, g_from_sub, 0) =
1274 inv_validate.F THEN
1275 --inv_debug.message('ssia', 'error to_subinventory_code');
1276 x_return_status := FND_API.G_RET_STS_ERROR;
1277 return;
1278 END IF;
1279 if( g_item.restrict_subinventories_code = 1 ) then
1280 --inv_Debug.message('ssia', 'g_item_restrict subinventory code is 1');
1281 BEGIN
1282 SELECT 'Y' INTO l_found
1283 FROM mtl_secondary_inventories sec, mtl_item_sub_inventories item
1284 WHERE item.inventory_item_id = p_trolin_rec.inventory_item_id
1285 AND sec.organization_id = p_trolin_Rec.organization_id
1286 AND sec.secondary_inventory_name = p_trolin_rec.to_subinventory_code
1287 AND sec.organization_id = item.organization_id
1288 AND sec.secondary_inventory_name = item.secondary_inventory;
1289 --
1290 EXCEPTION
1291 WHEN NO_DATA_FOUND THEN
1292 --inv_debug.message('ssia', 'invalid to sub');
1293 fnd_message.set_name('INV','INVALID_SUB');
1294 fnd_msg_pub.add;
1295 RAISE fnd_api.g_exc_error;
1296 END ;
1297 ELSIF g_item.restrict_subinventories_code = 2 THEN
1298 -- item is not restricted to specific subs
1299 --inv_Debug.message('ssia', 'g_item_restrict subinventory code is 2');
1300 BEGIN
1301 SELECT 'Y' INTO l_found
1302 FROM mtl_secondary_inventories
1303 WHERE organization_id = p_trolin_rec.organization_id
1304 AND secondary_inventory_name = p_trolin_rec.to_subinventory_code
1305 AND nvl(disable_date, SYSDATE+1) > SYSDATE;
1306 --
1307 EXCEPTION
1308 WHEN NO_DATA_FOUND THEN
1309 --inv_debug.message('ssia', 'invalid to sub');
1310 fnd_message.SET_NAME('INV','INVALID_SUB');
1311 fnd_msg_pub.add;
1312 RAISE fnd_api.g_exc_error;
1313 END ;
1314 END IF;
1315 END IF;
1316 --inv_debug.message('ssia', 'TRO: to_subinventory: ' || x_return_status);
1317
1318
1319 -- **********************************************************
1320 -- Validation
1321 -- **********************************************************
1322 IF p_trolin_rec.to_locator_id IS NULL
1323 AND p_trolin_val_rec.to_locator IS NOT NULL
1324 THEN
1325 v_locator_control :=
1326 INV_Globals.Locator_control(
1327 l_return_status,
1328 l_msg_count,
1329 l_msg_data,
1330 inv_validate_trohdr.g_org.stock_locator_control_code,
1331 nvl(g_to_sub.locator_type,1),
1332 g_item.location_control_code,
1333 g_item.restrict_locators_code,
1334 inv_validate_trohdr.g_org.negative_inv_receipt_code,
1335 inv_validate_trolin.g_transaction_l.transaction_action_id);
1336 if (NVL(v_locator_control,1) = 3) then
1337 l_keystat_val := FND_FLEX_KEYVAL.Validate_Segs(
1338 OPERATION => 'CREATE_COMB_NO_AT',
1339 APPL_SHORT_NAME => 'INV',
1340 KEY_FLEX_CODE => 'MTLL',
1341 STRUCTURE_NUMBER => 101,
1342 CONCAT_SEGMENTS => p_trolin_val_rec.to_locator,
1343 VALUES_OR_IDS => 'V',
1344 DATA_SET => inv_validate_trohdr.g_org.organization_id);
1345
1346 if l_keystat_val then
1347 l_combination_id := FND_FLEX_KEYVAL.combination_id;
1348 BEGIN
1349 SELECT 'EXISTS'
1350 INTO l_temp
1351 FROM MTL_ITEM_LOCATIONS
1352 WHERE INVENTORY_LOCATION_ID = l_combination_id
1353 AND ORGANIZATION_ID = inv_validate_trohdr.g_org.organization_id
1354 AND SUBINVENTORY_CODE = g_to_sub.secondary_inventory_name;
1355
1356 EXCEPTION
1357 WHEN NO_DATA_FOUND THEN
1358 UPDATE mtl_item_locations
1359 SET SUBINVENTORY_CODE = g_to_sub.secondary_inventory_name
1360 WHERE INVENTORY_LOCATION_ID = l_combination_id
1361 AND ORGANIZATION_ID = inv_validate_trohdr.g_org.organization_id
1362 AND SUBINVENTORY_CODE = NULL;
1363
1364 if SQL%NOTFOUND then
1365 x_return_status := FND_API.G_RET_STS_ERROR;
1366 return;
1367 else
1368 SELECT PROJECT_ID,TASK_ID
1369 INTO l_project_id, l_task_id
1370 FROM MTL_ITEM_LOCATIONS
1371 WHERE INVENTORY_LOCATION_ID = l_combination_id
1372 AND ORGANIZATION_ID =inv_validate_trohdr.g_org.organization_id;
1373
1374 if NOT INV_ProjectLocator_PUB.Check_Project_References(
1375 inv_validate_trohdr.g_org.organization_id,
1376 p_trolin_rec.to_locator_id,
1377 'ANY',
1378 'N',
1379 l_project_id,
1380 l_task_id) then
1381 x_return_status := FND_API.G_RET_STS_ERROR;
1382 end if;
1383 end if;
1384 END;
1385 end if;
1386 else
1387 x_return_status := FND_API.G_RET_STS_ERROR;
1388 return;
1389 end if;
1390 p_trolin_rec.to_locator_id := INV_Value_To_Id.To_Locator(p_trolin_rec.organization_id,
1391 p_trolin_val_rec.to_locator);
1392 END IF;
1393
1394 IF p_trolin_rec.to_locator_id IS NOT NULL AND
1395 ( p_trolin_rec.to_locator_id <>
1396 p_old_trolin_rec.to_locator_id OR
1397 p_old_trolin_rec.to_locator_id IS NULL )
1398 THEN
1399 g_to_locator.inventory_location_id := p_trolin_rec.to_locator_id;
1400
1401 /* BUG 2347421 - When locator is specified on order line this validation fails
1402 if the logical locator with the project and task does not exist.
1403 This project locator is created later on in the flow.
1404 Changing this validation to not consider the project and task.
1405
1406 BUG 3036732 - The fix in 2347421 fails when the locator is already entered with project and task
1407 If the project info is already entered on the locator then validate the locator , else
1408 do not consider the project and task
1409 */
1410 SELECT PROJECT_ID
1411 INTO l_project_id_mil
1412 FROM MTL_ITEM_LOCATIONS
1413 WHERE INVENTORY_LOCATION_ID = g_to_locator.inventory_location_id
1414 AND ORGANIZATION_ID = p_trolin_rec.organization_id;
1415
1416
1417 IF l_project_id_mil is NOT NULL THEN
1418
1419
1420 IF INV_Validate.To_Locator(g_to_locator,
1421 inv_validate_trohdr.g_org, g_item,
1422 g_to_sub, p_trolin_rec.project_id,
1423 p_trolin_rec.task_id,
1424 inv_validate_trolin.g_transaction_l.transaction_action_id) = inv_validate.F THEN
1425 x_return_status := FND_API.G_RET_STS_ERROR;
1426 return;
1427 END IF;
1428
1429 ELSE
1430
1431 IF INV_Validate.To_Locator(g_to_locator,
1432 inv_validate_trohdr.g_org, g_item,
1433 g_to_sub, null, null,
1434 inv_validate_trolin.g_transaction_l.transaction_action_id) = inv_validate.F THEN
1435 x_return_status := FND_API.G_RET_STS_ERROR;
1436 return;
1437 END IF;
1438 END IF;
1439 END IF;
1440 -- inv_debug.message('TRO: to_locator_id: ' || x_return_status);
1441 END IF;
1442
1443
1444 IF p_trolin_rec.transaction_header_id IS NOT NULL AND
1445 ( p_trolin_rec.transaction_header_id <>
1446 p_old_trolin_rec.transaction_header_id OR
1447 p_old_trolin_rec.transaction_header_id IS NULL )
1448 THEN
1449 IF
1450 INV_Validate.Transaction_Header(p_trolin_rec.transaction_header_id) =
1451 inv_validate.f THEN
1452 x_return_status := FND_API.G_RET_STS_ERROR;
1453 END IF;
1454 END IF;
1455 -- inv_debug.message('TRO: transaction_header_id: ' || x_return_status);
1456
1457 IF p_trolin_rec.ship_to_location_id IS NOT NULL AND
1458 ( p_trolin_rec.ship_to_location_id <>
1459 p_old_trolin_rec.transaction_header_id OR
1460 p_old_trolin_rec.transaction_header_id IS NULL)
1461 THEN
1462 IF INV_Validate.HR_Location(p_trolin_rec.ship_to_location_id) =
1463 INV_Validate.F
1464 THEN
1465 x_return_status := FND_API.G_RET_STS_ERROR;
1466 END IF;
1467 END IF;
1468
1469 IF p_trolin_rec.uom_code IS NOT NULL AND
1470 ( p_trolin_rec.uom_code <>
1471 p_old_trolin_rec.uom_code OR
1472 p_old_trolin_rec.uom_code IS NULL )
1473 THEN
1474 IF INV_Validate.Uom(p_trolin_rec.uom_code,
1475 inv_validate_trohdr.g_org, g_item) = inv_validate.F THEN
1476 x_return_status := FND_API.G_RET_STS_ERROR;
1477 END IF;
1478 END IF;
1479
1480 IF p_trolin_rec.from_cost_group_id IS NOT NULL AND
1481 (p_trolin_rec.from_cost_group_id <> p_old_trolin_rec.from_cost_group_id OR
1482 p_old_trolin_rec.from_cost_group_id IS NULL) then
1483 if INV_Validate.Cost_Group(p_trolin_rec.from_cost_group_id,
1484 p_trolin_rec.organization_id) = inv_validate.F then
1485 x_return_status := FND_API.G_RET_STS_ERROR;
1486 END IF;
1487 END IF;
1488
1489 IF p_trolin_rec.to_cost_group_id IS NOT NULL AND
1490 (p_trolin_rec.to_cost_group_id <> p_old_trolin_rec.to_cost_group_id OR
1491 p_old_trolin_rec.to_cost_group_id IS NULL) then
1492 if INV_Validate.Cost_Group(p_trolin_rec.to_cost_group_id,
1493 p_trolin_rec.organization_id) = inv_validate.F then
1494 x_return_status := FND_API.G_RET_STS_ERROR;
1495 END IF;
1496 END IF;
1497
1498 IF p_trolin_rec.lpn_id IS NOT NULL AND
1499 (p_trolin_rec.lpn_id <> p_old_trolin_rec.lpn_id OR
1500 p_old_trolin_rec.lpn_id IS NULL) then
1501 if INV_Validate.LPN(p_trolin_rec.lpn_id) = inv_validate.F then
1502 x_return_status := FND_API.G_RET_STS_ERROR;
1503 END IF;
1504 END IF;
1505
1506 IF p_trolin_rec.to_lpn_id IS NOT NULL AND
1507 (p_trolin_rec.to_lpn_id <> p_old_trolin_rec.to_lpn_id OR
1508 p_old_trolin_rec.to_lpn_id IS NULL) then
1509 if INV_Validate.LPN(p_trolin_rec.to_lpn_id) = inv_validate.F then
1510 x_return_status := FND_API.G_RET_STS_ERROR;
1511 END IF;
1512 END IF;
1513
1514 -- inv_debug.message('TRO: uom: ' || x_return_status);
1515
1516 IF (p_trolin_rec.attribute1 IS NOT NULL AND
1517 ( p_trolin_rec.attribute1 <>
1518 p_old_trolin_rec.attribute1 OR
1519 p_old_trolin_rec.attribute1 IS NULL ))
1520 OR (p_trolin_rec.attribute10 IS NOT NULL AND
1521 ( p_trolin_rec.attribute10 <>
1522 p_old_trolin_rec.attribute10 OR
1523 p_old_trolin_rec.attribute10 IS NULL ))
1524 OR (p_trolin_rec.attribute11 IS NOT NULL AND
1525 ( p_trolin_rec.attribute11 <>
1526 p_old_trolin_rec.attribute11 OR
1527 p_old_trolin_rec.attribute11 IS NULL ))
1528 OR (p_trolin_rec.attribute12 IS NOT NULL AND
1529 ( p_trolin_rec.attribute12 <>
1530 p_old_trolin_rec.attribute12 OR
1531 p_old_trolin_rec.attribute12 IS NULL ))
1532 OR (p_trolin_rec.attribute13 IS NOT NULL AND
1533 ( p_trolin_rec.attribute13 <>
1534 p_old_trolin_rec.attribute13 OR
1535 p_old_trolin_rec.attribute13 IS NULL ))
1536 OR (p_trolin_rec.attribute14 IS NOT NULL AND
1537 ( p_trolin_rec.attribute14 <>
1538 p_old_trolin_rec.attribute14 OR
1539 p_old_trolin_rec.attribute14 IS NULL ))
1540 OR (p_trolin_rec.attribute15 IS NOT NULL AND
1541 ( p_trolin_rec.attribute15 <>
1542 p_old_trolin_rec.attribute15 OR
1543 p_old_trolin_rec.attribute15 IS NULL ))
1544 OR (p_trolin_rec.attribute2 IS NOT NULL AND
1545 ( p_trolin_rec.attribute2 <>
1546 p_old_trolin_rec.attribute2 OR
1547 p_old_trolin_rec.attribute2 IS NULL ))
1548 OR (p_trolin_rec.attribute3 IS NOT NULL AND
1549 ( p_trolin_rec.attribute3 <>
1550 p_old_trolin_rec.attribute3 OR
1551 p_old_trolin_rec.attribute3 IS NULL ))
1552 OR (p_trolin_rec.attribute4 IS NOT NULL AND
1553 ( p_trolin_rec.attribute4 <>
1554 p_old_trolin_rec.attribute4 OR
1555 p_old_trolin_rec.attribute4 IS NULL ))
1556 OR (p_trolin_rec.attribute5 IS NOT NULL AND
1557 ( p_trolin_rec.attribute5 <>
1558 p_old_trolin_rec.attribute5 OR
1559 p_old_trolin_rec.attribute5 IS NULL ))
1560 OR (p_trolin_rec.attribute6 IS NOT NULL AND
1561 ( p_trolin_rec.attribute6 <>
1562 p_old_trolin_rec.attribute6 OR
1563 p_old_trolin_rec.attribute6 IS NULL ))
1564 OR (p_trolin_rec.attribute7 IS NOT NULL AND
1565 ( p_trolin_rec.attribute7 <>
1566 p_old_trolin_rec.attribute7 OR
1567 p_old_trolin_rec.attribute7 IS NULL ))
1568 OR (p_trolin_rec.attribute8 IS NOT NULL AND
1569 ( p_trolin_rec.attribute8 <>
1570 p_old_trolin_rec.attribute8 OR
1571 p_old_trolin_rec.attribute8 IS NULL ))
1572 OR (p_trolin_rec.attribute9 IS NOT NULL AND
1573 ( p_trolin_rec.attribute9 <>
1574 p_old_trolin_rec.attribute9 OR
1575 p_old_trolin_rec.attribute9 IS NULL ))
1576 OR (p_trolin_rec.attribute_category IS NOT NULL AND
1577 ( p_trolin_rec.attribute_category <>
1578 p_old_trolin_rec.attribute_category OR
1579 p_old_trolin_rec.attribute_category IS NULL ))
1580 THEN
1581
1582 -- These calls are temporarily commented out
1583
1584
1585 -- Validate descriptive flexfield.
1586
1587 IF INV_Validate.Desc_Flex( 'TROLIN' ) = inv_validate.F THEN
1588 x_return_status := FND_API.G_RET_STS_ERROR;
1589 END IF;
1590
1591 END IF;
1592
1593 -- Done validating attributes
1594 EXCEPTION
1595 WHEN FND_API.G_EXC_ERROR THEN
1596 x_return_status := FND_API.G_RET_STS_ERROR;
1597
1598 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1599 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1600
1601 WHEN OTHERS THEN
1602 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1603
1604 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1605 FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME, 'Attributes');
1606 END IF;
1607 END Attributes;
1608
1609 -- Procedure Entity_Delete
1610
1611 PROCEDURE Entity_Delete
1612 ( x_return_status OUT NOCOPY VARCHAR2
1613 , p_trolin_rec IN INV_Move_Order_PUB.Trolin_Rec_Type
1614 )
1615 IS
1616 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
1617 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1618 BEGIN
1619
1620 -- Validate entity delete.
1621 NULL;
1622
1623 -- Done.
1624 x_return_status := l_return_status;
1625
1626 EXCEPTION
1627
1628 WHEN FND_API.G_EXC_ERROR THEN
1629 x_return_status := FND_API.G_RET_STS_ERROR;
1630
1631 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1632 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1633
1634 WHEN OTHERS THEN
1635 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1636
1637 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1638 THEN
1639 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, 'Entity_Delete');
1640 END IF;
1641
1642 END Entity_Delete;
1643
1644 -- Bug # 1911054
1645 -- Procedure Init : used to initialized the global variable created in this package
1646 PROCEDURE Init
1647 IS
1648 l_debug number := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
1649 BEGIN
1650 /*Fixed for bug#8358229
1651 Initialization should be done for complete record.
1652 Modified following initialization to initialize complete
1653 record
1654 */
1655
1656 g_transaction_l := Null;
1657 g_item := Null;
1658 g_from_sub := Null;
1659 g_to_sub := Null;
1660 g_from_locator := Null;
1661 g_to_locator := Null;
1662 END;
1663
1664 END INV_Validate_Trolin;