DBA Data[Home] [Help]

PACKAGE BODY: APPS.EAM_WO_VALIDATE_PVT

Source


1 PACKAGE BODY EAM_WO_VALIDATE_PVT AS
2 /* $Header: EAMVWOVB.pls 120.33 2006/10/20 23:22:10 anjgupta ship $ */
3 /***************************************************************************
4 --
5 --  Copyright (c) 2002 Oracle Corporation, Redwood Shores, CA, USA
6 --  All rights reserved.
7 --
8 --  FILENAME
9 --
10 --      EAMVWOVB.pls
11 --
12 --  DESCRIPTION
13 --
14 --      Body of package EAM_WO_VALIDATE_PVT
15 --
16 --  NOTES
17 --
18 --  HISTORY
19 --
20 --  30-JUN-2002    Kenichi Nagumo     Initial Creation
21 --  02-May-2005    Anju Gupta         IB/Transactable project changes for R12
22 ***************************************************************************/
23 
24 G_Pkg_Name      VARCHAR2(30) := 'EAM_WO_VALIDATE_PVT';
25 
26 g_token_tbl     EAM_ERROR_MESSAGE_PVT.Token_Tbl_Type;
27 g_dummy         NUMBER;
28 g_obj_source VARCHAR2(30)		:= EAM_CONSTANTS.G_OBJ_SOURCE;
29 g_obj_type VARCHAR2(30)			:= EAM_CONSTANTS.G_OBJ_TYPE;
30 g_act_source VARCHAR2(30) 	:= EAM_CONSTANTS.G_ACT_SOURCE;
31 g_act_cause VARCHAR2(30) 		:= EAM_CONSTANTS.G_ACT_CAUSE;
32 g_act_type VARCHAR2(30) 		:= EAM_CONSTANTS.G_ACT_TYPE;
33 g_wo_type VARCHAR2(30) 			:= EAM_CONSTANTS.G_WO_TYPE;
34 g_shutdown_type VARCHAR2(30):= EAM_CONSTANTS.G_SHUTDOWN_TYPE;
35 
36     /*******************************************************************
37     * Procedure	: Check_Existence
38     * Returns	: None
39     * Parameters IN : Work Order Record
40     * Parameters OUT NOCOPY: Old Work Order Record
41     *                 Mesg Token Table
42     *                 Return Status
43     * Purpose	: Procedure will query the old EAM work order
44     *             record and return it in old record variables. If the
45     *             Transaction Type is Create and the record already
46     *             exists the return status would be error or if the
47     *             transaction type is Update and the record
48     *             does not exist then the return status would be an
49     *             error as well. Mesg_Token_Table will carry the
50     *             error messsage and the tokens associated with the
51     *             message.
52     *********************************************************************/
53 
54      PROCEDURE Check_Existence
55      ( p_eam_wo_rec             IN  EAM_PROCESS_WO_PUB.eam_wo_rec_type
56      , x_old_eam_wo_rec         OUT NOCOPY EAM_PROCESS_WO_PUB.eam_wo_rec_type
57      , x_Mesg_Token_Tbl	        OUT NOCOPY EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type
58      , x_return_status	        OUT NOCOPY VARCHAR2
59         )
60      IS
61             l_token_tbl      EAM_ERROR_MESSAGE_PVT.Token_Tbl_Type;
62             l_Mesg_Token_Tbl EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
63             l_out_Mesg_Token_Tbl EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
64             l_return_status  VARCHAR2(1);
65      BEGIN
66 
67 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Quering Work Order'); END IF;
68 
69         EAM_WO_UTILITY_PVT.Query_Row
70         ( p_wip_entity_id       => p_eam_wo_rec.wip_entity_id
71         , p_organization_id     => p_eam_wo_rec.organization_id
72         , x_eam_wo_rec          => x_old_eam_wo_rec
73         , x_Return_status       => l_return_status
74         );
75 
76 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Query Row Returned with : ' || l_return_status); END IF;
77 
78         IF l_return_status = EAM_PROCESS_WO_PVT.G_RECORD_FOUND AND
79             p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE
80         THEN
81             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
82             l_token_tbl(1).token_value := p_eam_wo_rec.wip_entity_name;
83 
84             l_out_mesg_token_tbl  := l_mesg_token_tbl;
85             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
86             (  x_Mesg_token_tbl => l_out_Mesg_Token_Tbl
87              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
88              , p_message_name   => 'EAM_WO_ALREADY_EXISTS'
89              , p_token_tbl      => l_token_tbl
90              );
91             l_mesg_token_tbl      := l_out_mesg_token_tbl;
92 
93             l_return_status := FND_API.G_RET_STS_ERROR;
94 
95         ELSIF l_return_status = EAM_PROCESS_WO_PVT.G_RECORD_NOT_FOUND AND
96              p_eam_wo_rec.transaction_type IN
97              (EAM_PROCESS_WO_PVT.G_OPR_UPDATE, EAM_PROCESS_WO_PVT.G_OPR_DELETE)
98         THEN
99             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
100             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
101 
102             l_out_mesg_token_tbl  := l_mesg_token_tbl;
103             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
104                         (  x_Mesg_token_tbl => l_out_Mesg_Token_Tbl
105                          , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
106                          , p_message_name  => 'EAM_WO_DOESNOT_EXISTS'
107                          , p_token_tbl     => l_token_tbl
108                          );
109             l_mesg_token_tbl      := l_out_mesg_token_tbl;
110 
111             l_return_status := FND_API.G_RET_STS_ERROR;
112 
113         ELSIF l_Return_status = FND_API.G_RET_STS_UNEXP_ERROR
114         THEN
115             l_out_mesg_token_tbl  := l_mesg_token_tbl;
116             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
117             (  x_Mesg_token_tbl     => l_out_Mesg_Token_Tbl
118              , p_Mesg_Token_Tbl     => l_Mesg_Token_Tbl
119              , p_message_name       => NULL
120              , p_message_text       => 'Unexpected error while existence verification of ' || 'EAM WO '|| p_eam_wo_rec.wip_entity_name , p_token_tbl => l_token_tbl
121              );
122             l_mesg_token_tbl      := l_out_mesg_token_tbl;
123             l_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
124 
125         ELSE /* Assign the relevant transaction type for SYNC operations */
126             IF p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_SYNC THEN
127                IF l_return_status = EAM_PROCESS_WO_PVT.G_RECORD_FOUND THEN
128                    x_old_eam_wo_rec.transaction_type := EAM_PROCESS_WO_PVT.G_OPR_UPDATE;
129                ELSE
130                    x_old_eam_wo_rec.transaction_type := EAM_PROCESS_WO_PVT.G_OPR_CREATE;
131                END IF;
132             END IF;
133             l_return_status := FND_API.G_RET_STS_SUCCESS;
134 
135         END IF;
136 
137         x_return_status := l_return_status;
138         x_mesg_token_tbl := l_mesg_token_tbl;
139     END Check_Existence;
140 
141 
142 
143     /********************************************************************
144     * Procedure     : Check_Attributes_b4_Defaulting
145     * Parameters IN : Work Order Column record
146     * Parameters OUT NOCOPY: Return Status
147     *                 Mesg Token Table
148     * Purpose       : Check_Attrbibutes_b4_Defaulting procedure will validate all item
149     *                 attributes that are required in defaulting other items
150 
151     --  Change History
152     --  02-May-2005 Anju Gupta  IB/Transactable Asset changes for R12
153     **********************************************************************/
154 
155     PROCEDURE Check_Attributes_b4_Defaulting
156         (  p_eam_wo_rec              IN EAM_PROCESS_WO_PUB.eam_wo_rec_type
157          , x_Mesg_Token_Tbl          OUT NOCOPY EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type
158          , x_return_status           OUT NOCOPY VARCHAR2
159     )
160     IS
161     l_err_text              VARCHAR2(2000) := NULL;
162     l_Mesg_Token_Tbl        EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
163     l_out_Mesg_Token_Tbl        EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
164     l_Token_Tbl             EAM_ERROR_MESSAGE_PVT.Token_Tbl_Type;
165     l_old_eam_wo_moid        NUMBER       :=  0;
166 
167     BEGIN
168 
169         x_return_status := FND_API.G_RET_STS_SUCCESS;
170 
171         IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Within WO Check Attributes b4 Defaulting . . . '); END IF;
172 
173 
174 --  organization_id
175 
176 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating organization_id . . . '); END IF;
177 
178   declare
179     l_disable_date date;
180   begin
181 
182     select 1
183       into g_dummy
184       from mtl_parameters mp
185      where mp.organization_id = p_eam_wo_rec.organization_id;
186 
187     select nvl(hou.date_to,sysdate+1)
188       into l_disable_date
189       from hr_organization_units hou
190       where organization_id =  p_eam_wo_rec.organization_id;
191 
192     if(l_disable_date < sysdate) then
193       raise fnd_api.g_exc_unexpected_error;
194     end if;
195 
196     x_return_status := FND_API.G_RET_STS_SUCCESS;
197 
198   exception
199     when others then
200 
201       l_token_tbl(1).token_name  := 'Organization Id';
202       l_token_tbl(1).token_value :=  p_eam_wo_rec.organization_id;
203 
204       l_out_mesg_token_tbl  := l_mesg_token_tbl;
205       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
206       (  p_message_name  => 'EAM_WO_ORGANIZATION_ID'
207        , p_token_tbl     => l_token_tbl
208        , p_mesg_token_tbl     => l_mesg_token_tbl
209        , x_mesg_token_tbl     => l_out_mesg_token_tbl
210       );
211       l_mesg_token_tbl      := l_out_mesg_token_tbl;
212 
213       x_return_status := FND_API.G_RET_STS_ERROR;
214       x_mesg_token_tbl := l_mesg_token_tbl ;
215       return;
216 
217   end;
218 
219 
220 --  organization_id (EAM enabled)
221 
222 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating organization_id (EAM enabled) . . . '); END IF;
223 
224   begin
225 
226     select 1
227       into g_dummy
228       from wip_eam_parameters wep, mtl_parameters mp
229      where wep.organization_id = mp.organization_id
230        and mp.eam_enabled_flag = 'Y'
231        and wep.organization_id = p_eam_wo_rec.organization_id;
232 
233     x_return_status := FND_API.G_RET_STS_SUCCESS;
234 
235   exception
236     when no_data_found then
237 
238       l_token_tbl(1).token_name  := 'Organization Id';
239       l_token_tbl(1).token_value :=  p_eam_wo_rec.organization_id;
240 
241       l_out_mesg_token_tbl  := l_mesg_token_tbl;
242       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
243       (  p_message_name  => 'EAM_WO_ORG_EAM_ENABLED'
244        , p_token_tbl     => l_token_tbl
245        , p_mesg_token_tbl     => l_mesg_token_tbl
246        , x_mesg_token_tbl     => l_out_mesg_token_tbl
247       );
248       l_mesg_token_tbl      := l_out_mesg_token_tbl;
249 
250       x_return_status := FND_API.G_RET_STS_ERROR;
251       x_mesg_token_tbl := l_mesg_token_tbl ;
252       return;
253 
254   end;
255 
256 --  maintenance_object_source
257 
258 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating maintenance_object_source . . . '); END IF;
259 
260   begin
261 
262     if p_eam_wo_rec.maintenance_object_source is null or
263        p_eam_wo_rec.maintenance_object_source = fnd_api.g_miss_num
264     then
265       raise fnd_api.g_exc_error;
266     end if;
267 
268     select 1 into g_dummy from
269       mfg_lookups where lookup_type = g_obj_source
270       and lookup_code = p_eam_wo_rec.maintenance_object_source;
271 
272     x_return_status := FND_API.G_RET_STS_SUCCESS;
273 
274   exception
275     when fnd_api.g_exc_error then
276 
277       l_token_tbl(1).token_name  := 'Object Source';
278       l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_source;
279 
280       l_out_mesg_token_tbl  := l_mesg_token_tbl;
281       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
282       (  p_message_name  => 'EAM_WO_MAINT_OBJ_SRC_REQUIRED'
283        , p_token_tbl     => l_token_tbl
284        , p_mesg_token_tbl     => l_mesg_token_tbl
285        , x_mesg_token_tbl     => l_out_mesg_token_tbl
286       );
287       l_mesg_token_tbl      := l_out_mesg_token_tbl;
288 
289       x_return_status := FND_API.G_RET_STS_ERROR;
290       x_mesg_token_tbl := l_mesg_token_tbl ;
291       return;
292 
293     when no_data_found then
294 
295       l_token_tbl(1).token_name  := 'Object Source';
296       l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_source;
297 
298       l_out_mesg_token_tbl  := l_mesg_token_tbl;
299       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
300       (  p_message_name  => 'EAM_WO_MAINT_OBJ_SOURCE'
301        , p_token_tbl     => l_token_tbl
302        , p_mesg_token_tbl     => l_mesg_token_tbl
303        , x_mesg_token_tbl     => l_out_mesg_token_tbl
304       );
305       l_mesg_token_tbl      := l_out_mesg_token_tbl;
306 
307       x_return_status := FND_API.G_RET_STS_ERROR;
308       x_mesg_token_tbl := l_mesg_token_tbl ;
309       return;
310 
311   end;
312 
313 --  maintenance_object_type
314 
315 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating maintenance_object_type . . . '); END IF;
316 
317   begin
318 
319     if p_eam_wo_rec.maintenance_object_type is null or
320        p_eam_wo_rec.maintenance_object_type = fnd_api.g_miss_num or
321        p_eam_wo_rec.maintenance_object_type = 1
322     then
323       raise fnd_api.g_exc_error;
324     end if;
325 
326     select 1 into g_dummy from
327       mfg_lookups where lookup_type = g_obj_type
328       and lookup_code = p_eam_wo_rec.maintenance_object_type;
329 
330     x_return_status := FND_API.G_RET_STS_SUCCESS;
331 
332   exception
333     when fnd_api.g_exc_error then
334 
335       l_token_tbl(1).token_name  := 'Object Type';
336       l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_type;
337 
338       l_out_mesg_token_tbl  := l_mesg_token_tbl;
339       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
340       (  p_message_name  => 'EAM_WO_MAINT_OBJ_TYPE_REQUIRED'
341        , p_token_tbl     => l_token_tbl
342        , p_mesg_token_tbl     => l_mesg_token_tbl
343        , x_mesg_token_tbl     => l_out_mesg_token_tbl
344       );
345       l_mesg_token_tbl      := l_out_mesg_token_tbl;
346 
347       x_return_status := FND_API.G_RET_STS_ERROR;
348       x_mesg_token_tbl := l_mesg_token_tbl ;
349       return;
350 
351     when no_data_found then
352 
353       l_token_tbl(1).token_name  := 'Object Type';
354       l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_type;
355 
356       l_out_mesg_token_tbl  := l_mesg_token_tbl;
357       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
358       (  p_message_name  => 'EAM_WO_MAINT_OBJ_TYPE'
359        , p_token_tbl     => l_token_tbl
360        , p_mesg_token_tbl     => l_mesg_token_tbl
361        , x_mesg_token_tbl     => l_out_mesg_token_tbl
362       );
363       l_mesg_token_tbl      := l_out_mesg_token_tbl;
364 
365       x_return_status := FND_API.G_RET_STS_ERROR;
366       x_mesg_token_tbl := l_mesg_token_tbl ;
367       return;
368 
369   end;
370 
371 --  maintenance_object_id
372 
373 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating maintenance_object_id . . . '); END IF;
374 
375   begin
376 
377     if p_eam_wo_rec.maintenance_object_id is null or
378        p_eam_wo_rec.maintenance_object_id = fnd_api.g_miss_num
379     then
380       raise fnd_api.g_exc_error;
381     end if;
382 
383     IF p_eam_wo_rec.maintenance_object_type = 3 then
384       --CMRO does not use the EAM family of maintenance orgs concept.
385       IF p_eam_wo_rec.maintenance_object_source = 1 THEN
386 
387         IF p_eam_wo_rec.transaction_type <> EAM_PROCESS_WO_PVT.G_OPR_CREATE THEN
388             select maintenance_object_id into l_old_eam_wo_moid
389     	    from wip_discrete_jobs
390        	    where wip_entity_id = p_eam_wo_rec.wip_entity_id
391             and   organization_id = p_eam_wo_rec.organization_id
392             and rownum = 1;
393         END IF;
394         IF  p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE
395             OR (p_eam_wo_rec.transaction_type <> EAM_PROCESS_WO_PVT.G_OPR_CREATE
396                 AND l_old_eam_wo_moid <>  p_eam_wo_rec.maintenance_object_id) THEN
397             -- Code for create validation
398             select 1 into g_dummy
399             from csi_item_instances cii, mtl_parameters mp
400             where cii.last_vld_organization_id = mp.organization_id
401             and mp.maint_organization_id = p_eam_wo_rec.organization_id
402             and cii.instance_id = p_eam_wo_rec.maintenance_object_id
403             and cii.inventory_item_id = nvl(p_eam_wo_rec.asset_group_id, p_eam_wo_rec.rebuild_item_id)
404             and rownum = 1;
405         END IF;
406       END IF;
407 
408     ELSIF p_eam_wo_rec.maintenance_object_type = 2 then
409       if (p_eam_wo_rec.maintenance_object_source = 1) then
410       select 1 into g_dummy from mtl_system_items msi, mtl_parameters mp where
411       msi.organization_id = mp.organization_id
412       and mp.maint_organization_id = p_eam_wo_rec.organization_id
413       and msi.inventory_item_id = p_eam_wo_rec.maintenance_object_id
414       and rownum = 1;
415       elsif (p_eam_wo_rec.maintenance_object_source = 2) then
416       	 select 1 into g_dummy from mtl_system_items where
417         organization_id = p_eam_wo_rec.organization_id
418         and inventory_item_id = p_eam_wo_rec.maintenance_object_id;
419       end if;
420     END IF;
421 
422     x_return_status := FND_API.G_RET_STS_SUCCESS;
423 
424   exception
425     when fnd_api.g_exc_error then
426 
427       l_token_tbl(1).token_name  := 'Object Id';
428       l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_id;
429 
430       l_out_mesg_token_tbl  := l_mesg_token_tbl;
431       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
432       (  p_message_name  => 'EAM_WO_MAINT_OBJ_ID_REQUIRED'
433        , p_token_tbl     => l_token_tbl
434        , p_mesg_token_tbl     => l_mesg_token_tbl
435        , x_mesg_token_tbl     => l_out_mesg_token_tbl
436       );
437       l_mesg_token_tbl      := l_out_mesg_token_tbl;
438 
439       x_return_status := FND_API.G_RET_STS_ERROR;
440       x_mesg_token_tbl := l_mesg_token_tbl ;
441       return;
442 
443     when others then
444 
445       l_token_tbl(1).token_name  := 'Object Id';
446       l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_id;
447 
448       l_out_mesg_token_tbl  := l_mesg_token_tbl;
449       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
450       (  p_message_name  => 'EAM_WO_MAINT_OBJ_ID'
451        , p_token_tbl     => l_token_tbl
452        , p_mesg_token_tbl     => l_mesg_token_tbl
453        , x_mesg_token_tbl     => l_out_mesg_token_tbl
454       );
455       l_mesg_token_tbl      := l_out_mesg_token_tbl;
456 
457       x_return_status := FND_API.G_RET_STS_ERROR;
458       x_mesg_token_tbl := l_mesg_token_tbl ;
459       return;
460 
461   end;
462 
463 --  rebuild_item_id
464 
465 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating rebuild_item_id . . . '); END IF;
466 
467   begin
468 
469     -- for CMRO work orders, the rebuild_item_id cannot be null.
470     if p_eam_wo_rec.maintenance_object_source = 2 and
471        p_eam_wo_rec.rebuild_item_id is null
472     then
473       raise fnd_api.g_exc_error;
474     end if;
475 
476     x_return_status := FND_API.G_RET_STS_SUCCESS;
477 
478   exception
479 
480     when fnd_api.g_exc_error then
481 
482       l_token_tbl(1).token_name  := 'Wip Id';
483       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_id;
484 
485       l_out_mesg_token_tbl  := l_mesg_token_tbl;
486       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
487       (  p_message_name  => 'EAM_WO_REBUILD_ITEM_REQUIRED'
488        , p_token_tbl     => l_token_tbl
489        , p_mesg_token_tbl     => l_mesg_token_tbl
490        , x_mesg_token_tbl     => l_out_mesg_token_tbl
491       );
492       l_mesg_token_tbl      := l_out_mesg_token_tbl;
493 
494       x_return_status := FND_API.G_RET_STS_ERROR;
495       x_mesg_token_tbl := l_mesg_token_tbl ;
496       return;
497 
498   end;
499 
500 --  rebuild_item_id and asset_group_id
501 
502 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating rebuild_item_id and asset_group_id. . . '); END IF;
503 
504   begin
505 
506     -- rebuild_item_id  and asset_group_id cannot both be null.
507     if p_eam_wo_rec.asset_group_id is null and
508        p_eam_wo_rec.rebuild_item_id is null
509     then
510       raise fnd_api.g_exc_error;
511     end if;
512 
513     x_return_status := FND_API.G_RET_STS_SUCCESS;
514 
515   exception
516     when fnd_api.g_exc_error then
517 
518       l_token_tbl(1).token_name  := 'Wip Id';
519       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_id;
520 
521       l_out_mesg_token_tbl  := l_mesg_token_tbl;
522       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
523       (  p_message_name  => 'EAM_WO_AG_RB_REQUIRED'
524        , p_token_tbl     => l_token_tbl
525        , p_mesg_token_tbl     => l_mesg_token_tbl
526        , x_mesg_token_tbl     => l_out_mesg_token_tbl
527       );
528       l_mesg_token_tbl      := l_out_mesg_token_tbl;
529 
530       x_return_status := FND_API.G_RET_STS_ERROR;
531       x_mesg_token_tbl := l_mesg_token_tbl ;
532       return;
533 
534   end;
535 
536 
537 --  wip_entity_id
538 
539 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating wip_entity_id . . . '); END IF;
540 
541   begin
542 
543     if p_eam_wo_rec.wip_entity_id is not null and
544        p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PUB.G_OPR_CREATE
545     then
546       raise fnd_api.g_exc_error;
547     end if;
548 
549     x_return_status := FND_API.G_RET_STS_SUCCESS;
550 
551   exception
552     when fnd_api.g_exc_error then
553 
554       l_token_tbl(1).token_name  := 'Wip Entity Id';
555       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_id;
556 
557       l_out_mesg_token_tbl  := l_mesg_token_tbl;
558       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
559       (  p_message_name  => 'EAM_WO_WIP_ENTITY_ID'
560        , p_token_tbl     => l_token_tbl
561        , p_mesg_token_tbl     => l_mesg_token_tbl
562        , x_mesg_token_tbl     => l_out_mesg_token_tbl
563       );
564       l_mesg_token_tbl      := l_out_mesg_token_tbl;
565 
566       x_return_status := FND_API.G_RET_STS_ERROR;
567       x_mesg_token_tbl := l_mesg_token_tbl ;
568       return;
569 
570   end;
571 
572 
573     EXCEPTION
574         WHEN OTHERS THEN
575 
576         l_token_tbl(1).token_name  := 'Validation (Check Attributes b4 defaulting)';
577         l_token_tbl(1).token_value :=  substrb(SQLERRM,1,200);
578 
579               l_out_mesg_token_tbl  := l_mesg_token_tbl;
580               EAM_ERROR_MESSAGE_PVT.Add_Error_Token
581               (  p_message_name   => NULL
582                , p_token_tbl      => l_token_tbl
583                , p_mesg_token_tbl => l_mesg_token_tbl
584                , x_mesg_token_tbl => l_out_mesg_token_tbl
585               ) ;
586               l_mesg_token_tbl      := l_out_mesg_token_tbl;
587 
588               -- Return the status and message table.
589               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
590               x_mesg_token_tbl := l_mesg_token_tbl ;
591 
592 END Check_Attributes_b4_Defaulting;
593 
594     /********************************************************************
595     * Procedure     : Check_Attributes
596     * Parameters IN : Work Order Column record
597     *                 Old Work Order Column record
598     * Parameters OUT NOCOPY: Return Status
599     *                 Mesg Token Table
600     * Purpose       : Check_Attrbibutes procedure will validate every
601     *                 revised item attrbiute in its entirety.
602     -- Change History
603     --  Anju Gupta  05/03/05    IB/Transactable Asset changes for R12
604     **********************************************************************/
605 
606     PROCEDURE Check_Attributes
607         (  p_eam_wo_rec              IN EAM_PROCESS_WO_PUB.eam_wo_rec_type
608          , p_old_eam_wo_rec          IN EAM_PROCESS_WO_PUB.eam_wo_rec_type
609          , x_return_status           OUT NOCOPY VARCHAR2
610          , x_Mesg_Token_Tbl          OUT NOCOPY EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type
611     )
612     IS
613     l_err_text              VARCHAR2(2000) := NULL;
614     l_Mesg_Token_Tbl        EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
615     l_out_Mesg_Token_Tbl        EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
616     l_Token_Tbl             EAM_ERROR_MESSAGE_PVT.Token_Tbl_Type;
617     l_mo_err_flag           VARCHAR2(1) ;
618     l_trans_exist           VARCHAR2(1);
619 
620     l_rebuild_status        NUMBER;
621     l_current_status        NUMBER;
622     l_enabled_flag	    VARCHAR2(1);
623 
624     l_wo_asset_activity_err     EXCEPTION;
625 
626     BEGIN
627 	l_mo_err_flag:= '';
628         x_return_status := FND_API.G_RET_STS_SUCCESS;
629 
630         IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Within WO Check Attributes . . . '); END IF;
631 
632 
633 --  organization_id
634 
635 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating organization_id . . . '); END IF;
636 
637   declare
638     l_disable_date date;
639   begin
640 
641     select 1
642       into g_dummy
643       from mtl_parameters mp
644      where mp.organization_id = p_eam_wo_rec.organization_id;
645 
646     select nvl(hou.date_to,sysdate+1)
647       into l_disable_date
648       from hr_organization_units hou
649       where organization_id =  p_eam_wo_rec.organization_id;
650 
651     if(l_disable_date < sysdate) then
652       raise fnd_api.g_exc_unexpected_error;
653     end if;
654 
655     x_return_status := FND_API.G_RET_STS_SUCCESS;
656 
657   exception
658     when fnd_api.g_exc_unexpected_error then
659 
660       l_token_tbl(1).token_name  := 'Organization Id';
661       l_token_tbl(1).token_value :=  p_eam_wo_rec.organization_id;
662 
663       l_out_mesg_token_tbl  := l_mesg_token_tbl;
664       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
665       (  p_message_name  => 'EAM_WO_ORGANIZATION_ID'
666        , p_token_tbl     => l_token_tbl
667        , p_mesg_token_tbl     => l_mesg_token_tbl
668        , x_mesg_token_tbl     => l_out_mesg_token_tbl
669       );
670       l_mesg_token_tbl      := l_out_mesg_token_tbl;
671 
672       x_return_status := FND_API.G_RET_STS_ERROR;
673       x_mesg_token_tbl := l_mesg_token_tbl ;
674       return;
675 
676     when no_data_found then
677 
678       l_token_tbl(1).token_name  := 'Organization Id';
679       l_token_tbl(1).token_value :=  p_eam_wo_rec.organization_id;
680 
681       l_out_mesg_token_tbl  := l_mesg_token_tbl;
682       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
683       (  p_message_name  => 'EAM_WO_ORGANIZATION_ID'
684        , p_token_tbl     => l_token_tbl
685        , p_mesg_token_tbl     => l_mesg_token_tbl
686        , x_mesg_token_tbl     => l_out_mesg_token_tbl
687       );
688       l_mesg_token_tbl      := l_out_mesg_token_tbl;
689 
690       x_return_status := FND_API.G_RET_STS_ERROR;
691       x_mesg_token_tbl := l_mesg_token_tbl ;
692       return;
693 
694 
695 
696   end;
697 
698    /* PJM MOAC Changes */
699    fnd_profile.put('MFG_ORGANIZATION_ID', p_eam_wo_rec.organization_id);
700 
701 
702 --  organization_id (EAM enabled)
703 
704 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating organization_id (EAM enabled) . . . '); END IF;
705 
706   begin
707 
708     select 1
709       into g_dummy
710       from wip_eam_parameters wep, mtl_parameters mp
711      where wep.organization_id = mp.organization_id
712        and mp.eam_enabled_flag = 'Y'
713        and wep.organization_id = p_eam_wo_rec.organization_id;
714 
715     x_return_status := FND_API.G_RET_STS_SUCCESS;
716 
717   exception
718     when no_data_found then
719 
720       l_token_tbl(1).token_name  := 'Organization Id';
721       l_token_tbl(1).token_value :=  p_eam_wo_rec.organization_id;
722 
723       l_out_mesg_token_tbl  := l_mesg_token_tbl;
724       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
725       (  p_message_name  => 'EAM_WO_ORG_EAM_ENABLED'
726        , p_token_tbl     => l_token_tbl
727        , p_mesg_token_tbl     => l_mesg_token_tbl
728        , x_mesg_token_tbl     => l_out_mesg_token_tbl
729       );
730       l_mesg_token_tbl      := l_out_mesg_token_tbl;
731 
732       x_return_status := FND_API.G_RET_STS_ERROR;
733       x_mesg_token_tbl := l_mesg_token_tbl ;
734       return;
735 
736   end;
737 
738 
739 --  maintenance_object_type
740 
741 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating maintenance_object_type . . . '); END IF;
742 
743   begin
744 
745    if (p_eam_wo_rec.maintenance_object_type is not null) then
746 
747          select 1
748            into g_dummy
749            from mfg_lookups
750           where lookup_type = g_obj_type
751             and lookup_code = p_eam_wo_rec.maintenance_object_type;
752 
753           x_return_status := FND_API.G_RET_STS_SUCCESS;
754 
755     end if;
756 
757     exception
758       when no_data_found then
759         l_token_tbl(1).token_name  := 'Maintenance Object Type';
760         l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_type;
761 
762       l_out_mesg_token_tbl  := l_mesg_token_tbl;
763       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
764       (  p_message_name       => 'EAM_WO_MAINT_OBJECT_TYPE'
765        , p_token_tbl          => l_token_tbl
766        , p_mesg_token_tbl     => l_mesg_token_tbl
767        , x_mesg_token_tbl     => l_out_mesg_token_tbl
768       );
769       l_mesg_token_tbl      := l_out_mesg_token_tbl;
770 
771       x_return_status := FND_API.G_RET_STS_ERROR;
772       x_mesg_token_tbl := l_mesg_token_tbl ;
773       return;
774 
775     end;
776 
777 
778 -- object_source_id
779 
780 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating maintenance_object_id . . . '); END IF;
781 
782   begin
783 
784    if (p_eam_wo_rec.maintenance_object_type is not null) then
785 
786      if (p_eam_wo_rec.maintenance_object_type = 3 and p_eam_wo_rec.maintenance_object_source = 1) then
787 
788         IF  p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE
789             OR (p_eam_wo_rec.transaction_type <> EAM_PROCESS_WO_PVT.G_OPR_CREATE
790                 AND p_eam_wo_rec.maintenance_object_id <> p_old_eam_wo_rec.maintenance_object_id) THEN
791             -- Code for creation
792             select 1 into g_dummy
793             from csi_item_instances cii, mtl_parameters mp
794             where cii.last_vld_organization_id = mp.organization_id
795             and mp.maint_organization_id = p_eam_wo_rec.organization_id
796             and cii.instance_id = p_eam_wo_rec.maintenance_object_id;
797         END IF;
798 
799           x_return_status := FND_API.G_RET_STS_SUCCESS;
800 
801      elsif (p_eam_wo_rec.maintenance_object_type = 2) then
802 	  if (p_eam_wo_rec.maintenance_object_source = 1) then
803          select 1
804            into g_dummy
805            from mtl_system_items msi, mtl_parameters mp
806           where msi.organization_id = mp.organization_id
807           and mp.maint_organization_id = p_eam_wo_rec.organization_id
808           and inventory_item_id = p_eam_wo_rec.maintenance_object_id
809           and rownum = 1;
810       elsif (p_eam_wo_rec.maintenance_object_source = 2) then
811       	  select 1
812            into g_dummy
813            from mtl_system_items
814           where organization_id = p_eam_wo_rec.organization_id
815             and inventory_item_id = p_eam_wo_rec.maintenance_object_id;
816       end if;
817 
818           x_return_status := FND_API.G_RET_STS_SUCCESS;
819 
820     end if;
821 
822     end if;
823 
824     exception
825       when others then
826         l_token_tbl(1).token_name  := 'Maintenance Object Id';
827         l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_id;
828 
829       l_out_mesg_token_tbl  := l_mesg_token_tbl;
830       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
831       (  p_message_name       => 'EAM_WO_MAINT_OBJECT_ID'
832        , p_token_tbl          => l_token_tbl
833        , p_mesg_token_tbl     => l_mesg_token_tbl
834        , x_mesg_token_tbl     => l_out_mesg_token_tbl
835       );
836       l_mesg_token_tbl      := l_out_mesg_token_tbl;
837 
838       x_return_status := FND_API.G_RET_STS_ERROR;
839       x_mesg_token_tbl := l_mesg_token_tbl ;
840       return;
841 
842     end;
843 
844 
845 
846 --  maintenance object
847 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating maintenance object . . . '); END IF;
848 
849   begin
850 
851         if (p_eam_wo_rec.asset_group_id is not null) and (p_eam_wo_rec.rebuild_item_id is not null) then
852 
853           raise fnd_api.g_exc_unexpected_error;
854 
855         end if;
856 
857         x_return_status := FND_API.G_RET_STS_SUCCESS;
858 
859   exception
860     when fnd_api.g_exc_unexpected_error then
861 
862       l_token_tbl(1).token_name  := 'Asset Group';
863       l_token_tbl(1).token_value :=  p_eam_wo_rec.asset_group_id;
864 
865       l_out_mesg_token_tbl  := l_mesg_token_tbl;
866       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
867       (  p_message_name  => 'EAM_WO_AG_RB_DUPLICATE'
868        , p_token_tbl     => l_token_tbl
869        , p_mesg_token_tbl     => l_mesg_token_tbl
870        , x_mesg_token_tbl     => l_out_mesg_token_tbl
871       );
872       l_mesg_token_tbl      := l_out_mesg_token_tbl;
873 
874       x_return_status := FND_API.G_RET_STS_ERROR;
875       x_mesg_token_tbl := l_mesg_token_tbl ;
876       return;
877 
878   end;
879 
880 --  asset_group_id
881 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating asset_group_id . . . '); END IF;
882 
883   begin
884 
885     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE and p_eam_wo_rec.asset_group_id is not null) then
886 
887       if(p_eam_wo_rec.asset_number is null)
888       then
889         raise fnd_api.g_exc_unexpected_error;
890       end if;
891 
892       select 1
893         into g_dummy
894         from mtl_system_items msi, csi_item_instances cii, mtl_parameters mp
895         where cii.inventory_item_id = p_eam_wo_rec.asset_group_id
896         and cii.inventory_item_id = msi.inventory_item_id
897         and cii.last_vld_organization_id = mp.organization_id
898         and msi.organization_id = mp.organization_id
899         and mp.maint_organization_id = p_eam_wo_rec.organization_id
900 	and cii.serial_number = p_eam_wo_rec.asset_number
901         and msi.eam_item_type = 1
902 	and ROWNUM =1 ;
903     end if;
904 
905     x_return_status := FND_API.G_RET_STS_SUCCESS;
906 
907   exception
908     when others then
909 
910       l_token_tbl(1).token_name  := 'Asset Group';
911       l_token_tbl(1).token_value :=  p_eam_wo_rec.asset_group_id;
912 
913       l_out_mesg_token_tbl  := l_mesg_token_tbl;
914       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
915       (  p_message_name  => 'EAM_WO_ASSET_GROUP'
916        , p_token_tbl     => l_token_tbl
917        , p_mesg_token_tbl     => l_mesg_token_tbl
918        , x_mesg_token_tbl     => l_out_mesg_token_tbl
919       );
920       l_mesg_token_tbl      := l_out_mesg_token_tbl;
921 
922       x_return_status := FND_API.G_RET_STS_ERROR;
923       x_mesg_token_tbl := l_mesg_token_tbl ;
924       return;
925 
926   end;
927 
928 --  asset_number
929 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating asset_number . . . '); END IF;
930 
931   begin
932 
933     if (p_eam_wo_rec.transaction_type in (EAM_PROCESS_WO_PVT.G_OPR_CREATE,EAM_PROCESS_WO_PVT.G_OPR_UPDATE) and p_eam_wo_rec.asset_number is not null) then
934 
935 /* In update mode do not check the current maintenance organization*/
936        select 1
937        into g_dummy
938        from csi_item_instances cii
939        where cii.inventory_item_id = p_eam_wo_rec.asset_group_id
940        and cii.serial_number = p_eam_wo_rec.asset_number
941        and nvl(cii.maintainable_flag, 'Y') = 'Y'
942        and nvl(cii.active_start_date, sysdate-1) <= sysdate
943        and nvl(cii.active_end_date, sysdate+1) >= sysdate ;
944 
945     end if;
946 
947     x_return_status := FND_API.G_RET_STS_SUCCESS;
948 
949   exception
950     when no_data_found then
951 
952       l_token_tbl(1).token_name  := 'Asset Number';
953       l_token_tbl(1).token_value :=  p_eam_wo_rec.asset_number;
954 
955       l_out_mesg_token_tbl  := l_mesg_token_tbl;
956       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
957       (  p_message_name  => 'EAM_WO_ASSET_NUMBER'
958        , p_token_tbl     => l_token_tbl
959        , p_mesg_token_tbl     => l_mesg_token_tbl
960        , x_mesg_token_tbl     => l_out_mesg_token_tbl
961       );
962       l_mesg_token_tbl      := l_out_mesg_token_tbl;
963 
964       x_return_status := FND_API.G_RET_STS_ERROR;
965       x_mesg_token_tbl := l_mesg_token_tbl ;
966       return;
967 
968   end;
969 
970 
971 
972 --  eam_linear_location_id
973 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating eam_linear_location_id . . . '); END IF;
974 
975   begin
976 
977     if (p_eam_wo_rec.transaction_type in (EAM_PROCESS_WO_PVT.G_OPR_CREATE,
978                                           EAM_PROCESS_WO_PVT.G_OPR_UPDATE)
979     and p_eam_wo_rec.eam_linear_location_id is not null) then
980 
981       select 1
982         into g_dummy
983         from eam_linear_locations
984        where eam_linear_id = p_eam_wo_rec.eam_linear_location_id;
985 
986     end if;
987 
988     x_return_status := FND_API.G_RET_STS_SUCCESS;
989 
990   exception
991     when no_data_found then
992 
993       l_token_tbl(1).token_name  := 'LIN_LOC';
994       l_token_tbl(1).token_value :=  p_eam_wo_rec.eam_linear_location_id;
995 
996       l_out_mesg_token_tbl  := l_mesg_token_tbl;
997       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
998       (  p_message_name  => 'EAM_WO_LINEAR_LOCATION'
999        , p_token_tbl     => l_token_tbl
1000        , p_mesg_token_tbl     => l_mesg_token_tbl
1001        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1002       );
1003       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1004 
1005       x_return_status := FND_API.G_RET_STS_ERROR;
1006       x_mesg_token_tbl := l_mesg_token_tbl ;
1007       return;
1008 
1009   end;
1010 
1011 
1012 --  rebuild_item_id
1013 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating rebuild_item_id . . . '); END IF;
1014 
1015   begin
1016 
1017     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE and p_eam_wo_rec.rebuild_item_id is not null) then
1018       select 1
1019         into g_dummy
1020         from mtl_system_items msi, mtl_parameters mp
1021         where msi.inventory_item_id = p_eam_wo_rec.rebuild_item_id
1022         and msi.organization_id = mp.organization_id
1023         and mp.maint_organization_id = p_eam_wo_rec.organization_id
1024         and msi.eam_item_type = 3
1025         and rownum = 1;
1026     end if;
1027 
1028     x_return_status := FND_API.G_RET_STS_SUCCESS;
1029 
1030   exception
1031     when no_data_found then
1032 
1033       l_token_tbl(1).token_name  := 'Rebuild Item Id';
1034       l_token_tbl(1).token_value :=  p_eam_wo_rec.rebuild_item_id;
1035 
1036       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1037       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1038       (  p_message_name  => 'EAM_WO_REBUILD_ITEM_ID'
1039        , p_token_tbl     => l_token_tbl
1040        , p_mesg_token_tbl     => l_mesg_token_tbl
1041        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1042       );
1043       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1044 
1045       x_return_status := FND_API.G_RET_STS_ERROR;
1046       x_mesg_token_tbl := l_mesg_token_tbl ;
1047       return;
1048 
1049   end;
1050 
1051 --  rebuild_serial_number
1052 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating rebuild_serial_number . . . '); END IF;
1053 
1054   begin
1055     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE) then
1056 
1057       if(p_eam_wo_rec.rebuild_item_id is null and
1058          p_eam_wo_rec.rebuild_serial_number is not null) then
1059         raise fnd_api.g_exc_unexpected_error;
1060       end if;
1061 
1062       if(p_eam_wo_rec.rebuild_item_id is not null and
1063          p_eam_wo_rec.rebuild_serial_number is not null) then
1064 
1065         select 1
1066         into g_dummy
1067         from csi_item_instances cii, mtl_parameters mp
1068         where cii.inventory_item_id = p_eam_wo_rec.rebuild_item_id
1069         and cii.last_vld_organization_id = mp.organization_id
1070         and mp.maint_organization_id = p_eam_wo_rec.organization_id
1071         and cii.serial_number = p_eam_wo_rec.rebuild_serial_number
1072         and nvl(cii.maintainable_flag, 'Y') = 'Y'
1073         and nvl(cii.active_start_date, sysdate-1) <= sysdate
1074         and nvl(cii.active_end_date, sysdate+1) >= sysdate;
1075         end if;
1076 
1077     /* Since serial numbers can be dynamically generated at SO issue and the
1078        condition was actually commented out, we dont have to perform this query
1079        at all*/
1080 
1081     end if;
1082 
1083 
1084 
1085      /* Validation added so that rebuild serial number is not
1086 	     updateable if the WO is in status Released   */
1087     /*****  Enahancement No. : 2943473   ******/
1088 
1089        IF  (  p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_UPDATE
1090               and p_eam_wo_rec.rebuild_item_id is not null
1091               and p_eam_wo_rec.rebuild_serial_number is not null
1092               and nvl(p_old_eam_wo_rec.rebuild_serial_number,'null_old_serial_number') <>
1093                             nvl(p_eam_wo_rec.rebuild_serial_number,'null_old_serial_number')  )
1094        THEN
1095 
1096            IF ( p_eam_wo_rec.status_type = WIP_CONSTANTS.RELEASED
1097                   and p_old_eam_wo_rec.status_type = WIP_CONSTANTS.RELEASED )
1098            THEN
1099                  EAM_WORKORDER_UTIL_PKG.CK_MATERIAL_ALLOC_ON_HOLD(X_Org_Id => p_eam_wo_rec.organization_id,
1100                              X_Wip_Id => p_eam_wo_rec.wip_entity_id,
1101                              X_Rep_Id => -1,
1102                              X_Line_Id => -1,
1103                              X_Ent_Type=> 6,
1104 			     X_Return_Status=>l_trans_exist);
1105 
1106 	         IF(l_trans_exist='F') THEN
1107 		    raise fnd_api.g_exc_unexpected_error;
1108 		 END IF;
1109            END IF;
1110        END IF;
1111 
1112 
1113 
1114 	 x_return_status := FND_API.G_RET_STS_SUCCESS;
1115 
1116   exception
1117     when others then
1118 
1119       l_token_tbl(1).token_name  := 'Rebuild Serial Number';
1120       l_token_tbl(1).token_value :=  p_eam_wo_rec.rebuild_serial_Number;
1121 
1122       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1123       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1124       (  p_message_name  => 'EAM_WO_REBUILD_SERIAL_NUMBER'
1125        , p_token_tbl     => l_token_tbl
1126        , p_mesg_token_tbl     => l_mesg_token_tbl
1127        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1128       );
1129       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1130 
1131       x_return_status := FND_API.G_RET_STS_ERROR;
1132       x_mesg_token_tbl := l_mesg_token_tbl ;
1133       return;
1134 
1135   end;
1136 
1137 -- end if;
1138 
1139 -- Serial rebuild number not instantiated status =1
1140 -- When a work order created on non instantiated rebuild serial number is released ,its must have an parent work order
1141 -- 3659469
1142 
1143 -- Serial rebuild number is required while releasing the work order if Rebuild number is serial controlled
1144 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating if rebuild_serial_number is mandatory . . . '); END IF;
1145 	BEGIN
1146              IF p_eam_wo_rec.status_type = 3
1147 		   and p_eam_wo_rec.rebuild_item_id IS NOT NULL
1148 		   and p_eam_wo_rec.rebuild_serial_number IS NULL
1149                    and p_eam_wo_rec.maintenance_object_source = 1 THEN -- SKIP FOR CMRO
1150 
1151 			   select serial_number_control_code
1152 				  into g_dummy
1153 				  from mtl_system_items msi, mtl_parameters mp
1154 				  where msi.inventory_item_id = p_eam_wo_rec.rebuild_item_id
1155 				  and msi.organization_id = mp.organization_id
1156 				  and mp.maint_organization_id = p_eam_wo_rec.organization_id and rownum = 1;
1157 
1158 				if g_dummy <> 1 then
1159 						raise fnd_api.g_exc_unexpected_error;
1160 				end if ;
1161 
1162 	END IF;
1163 
1164 	 x_return_status := FND_API.G_RET_STS_SUCCESS;
1165 
1166   exception
1167     when others then
1168 
1169       l_token_tbl(1).token_name  := 'Work_Order_Id';
1170       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_id;
1171 
1172       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1173       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1174       (  p_message_name  => 'EAM_REBUILD_SER_REQD'
1175        , p_token_tbl     => l_token_tbl
1176        , p_mesg_token_tbl     => l_mesg_token_tbl
1177        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1178       );
1179       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1180 
1181       x_return_status := FND_API.G_RET_STS_ERROR;
1182       x_mesg_token_tbl := l_mesg_token_tbl ;
1183       return;
1184 
1185 end ;
1186 
1187 --  parent_wip_entity_id
1188 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating parent_wip_entity_id . . . '); END IF;
1189 
1190   begin
1191 /* Following validation ensures that only WO of parents of serialized
1192     rebuildables can become parent work orders of rebuild WO and any
1193 	WO on asset and rebuildables can become Parent WO for non-serialized rebuilds */
1194 
1195     l_rebuild_status := 0;
1196 /*Currently parent_wip_entity can only be specified for a rebuildable work order */
1197     if p_eam_wo_rec.parent_wip_entity_id is not null then
1198      IF p_eam_wo_rec.manual_rebuild_flag='Y' THEN /* Added if condition for bug no 3336489 */
1199 
1200      IF ( p_eam_wo_rec.maintenance_object_type = 3 and p_eam_wo_rec.maintenance_object_source = 1)
1201       THEN
1202 
1203       IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating parent_wip_entity_id . rebuild status=' || l_rebuild_status); END IF;
1204 
1205           SELECT 1
1206           INTO g_dummy
1207           FROM mtl_object_genealogy mog, mtl_serial_numbers msn, wip_discrete_jobs wdj,
1208                mtl_serial_numbers msn1, csi_item_instances cii, mtl_parameters mp, csi_item_instances cii1
1209           WHERE p_eam_wo_rec.rebuild_item_id is not null
1210             and cii.instance_id = p_eam_wo_rec.maintenance_object_id
1211             and cii.last_vld_organization_id = mp.organization_id
1212             and mp.maint_organization_id = p_eam_wo_rec.organization_id
1213             and nvl(cii.network_asset_flag,'N') = 'N'
1214             and msn.current_organization_id = cii.last_vld_organization_id
1215             and msn.serial_number = cii.serial_number
1216             and msn.inventory_item_id = cii.inventory_item_id
1217             and mog.object_id = msn.gen_object_id
1218             and mog.parent_object_id = msn1.gen_object_id
1219 	    and msn1.current_organization_id = mp.organization_id
1220             and cii1.serial_number = msn1.serial_number
1221             and cii1.inventory_item_id = msn1.inventory_item_id
1222             and cii1.last_vld_organization_id = msn1.current_organization_id
1223             and cii1.instance_id = wdj.maintenance_object_id
1224 	    and wdj.maintenance_object_type=3
1225     	    and wdj.status_type not in (5,12,14)
1226 	    and wdj.wip_entity_id = p_eam_wo_rec.parent_wip_entity_id
1227 	    and wdj.organization_id = p_eam_wo_rec.organization_id
1228             and mog.genealogy_type = 5
1229             and nvl(mog.start_date_active,sysdate) <= sysdate
1230 	    and nvl(mog.end_date_active,sysdate+1) > sysdate ;
1231 
1232       ELSE
1233             SELECT 1 INTO
1234                   g_dummy
1235 		    FROM wip_discrete_jobs
1236 		    WHERE
1237               p_eam_wo_rec.rebuild_item_id is not null
1238               and organization_id = p_eam_wo_rec.organization_id
1239               and wip_entity_id = p_eam_wo_rec.parent_wip_entity_id
1240               and status_type not in (5,12,14);
1241       END IF;
1242      END IF;
1243     end if;
1244 
1245     x_return_status := FND_API.G_RET_STS_SUCCESS;
1246 
1247   exception
1248     when others then
1249 
1250       l_token_tbl(1).token_name  := 'Parent Wip Entity Id';
1251       l_token_tbl(1).token_value :=  p_eam_wo_rec.parent_wip_entity_id;
1252 
1253       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1254       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1255       (  p_message_name  => 'EAM_WO_PARENT_WIP_ENTITY_ID'
1256        , p_token_tbl     => l_token_tbl
1257        , p_mesg_token_tbl     => l_mesg_token_tbl
1258        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1259       );
1260       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1261 
1262       x_return_status := FND_API.G_RET_STS_ERROR;
1263       x_mesg_token_tbl := l_mesg_token_tbl ;
1264       return;
1265 
1266   end;
1267 
1268 
1269   /* While updating parent_wip_entity_id check for any transactions posted on the work order */
1270 
1271    begin
1272 
1273       IF (   p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_UPDATE
1274               AND p_old_eam_wo_rec.parent_wip_entity_id <> p_eam_wo_rec.parent_wip_entity_id )
1275       THEN
1276            EAM_WORKORDER_UTIL_PKG.CK_MATERIAL_ALLOC_ON_HOLD(X_Org_Id => p_eam_wo_rec.organization_id,
1277                              X_Wip_Id => p_eam_wo_rec.wip_entity_id,
1278                              X_Rep_Id => -1,
1279                              X_Line_Id => -1,
1280                              X_Ent_Type=> 6,
1281 			     X_Return_Status=>l_trans_exist);
1282 
1283 	         IF(l_trans_exist='F') THEN
1284 		    raise fnd_api.g_exc_unexpected_error;
1285 		 END IF;
1286        END IF;
1287 
1288        x_return_status := FND_API.G_RET_STS_SUCCESS;
1289 
1290    exception
1291       when others then
1292 
1293         l_token_tbl(1).token_name  := 'Wip Entity Id';
1294         l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_id;
1295 
1296         l_out_mesg_token_tbl  := l_mesg_token_tbl;
1297         EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1298         (  p_message_name  => 'EAM_WO_TRANSACTIONS_EXIST'
1299          , p_token_tbl     => l_token_tbl
1300          , p_mesg_token_tbl     => l_mesg_token_tbl
1301          , x_mesg_token_tbl     => l_out_mesg_token_tbl
1302         );
1303         l_mesg_token_tbl      := l_out_mesg_token_tbl;
1304 
1305         x_return_status := FND_API.G_RET_STS_ERROR;
1306         x_mesg_token_tbl := l_mesg_token_tbl ;
1307         return;
1308 
1309    end;
1310 
1311 
1312 
1313 
1314 --  job_name
1315 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating wip_entity_name . . . '); END IF;
1316 
1317   declare
1318     l_count NUMBER;
1319   begin
1320 
1321     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE) then
1322 
1323       select count(*)
1324         into l_count
1325         from wip_entities
1326        where wip_entity_name = p_eam_wo_rec.wip_entity_name
1327          and organization_id = p_eam_wo_rec.organization_id;
1328 
1329       if(l_count > 0) then
1330         raise fnd_api.g_exc_unexpected_error;
1331       end if;
1332 
1333     end if;
1334 
1335     x_return_status := FND_API.G_RET_STS_SUCCESS;
1336 
1337   exception
1338     when fnd_api.g_exc_unexpected_error then
1339 
1340       l_token_tbl(1).token_name  := 'Wip Entity Name';
1341       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
1342 
1343       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1344       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1345       (  p_message_name  => 'EAM_WO_WIP_ENTITY_NAME'
1346        , p_token_tbl     => l_token_tbl
1347        , p_mesg_token_tbl     => l_mesg_token_tbl
1348        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1349       );
1350       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1351 
1352       x_return_status := FND_API.G_RET_STS_ERROR;
1353       x_mesg_token_tbl := l_mesg_token_tbl ;
1354       return;
1355 
1356   end;
1357 
1358 
1359 --  job_id
1360 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating wip_entity_id . . . '); END IF;
1361 
1362   declare
1363     l_count NUMBER;
1364   begin
1365 
1366     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE) then
1367 
1368       select count(*)
1369         into l_count
1370         from wip_entities
1371        where wip_entity_id = p_eam_wo_rec.wip_entity_id;
1372 
1373       if(l_count > 0) then
1374         raise fnd_api.g_exc_unexpected_error;
1375       end if;
1376     end if;
1377 
1378     x_return_status := FND_API.G_RET_STS_SUCCESS;
1379 
1380   exception
1381     when fnd_api.g_exc_unexpected_error then
1382 
1383       l_token_tbl(1).token_name  := 'Wip Entity Id';
1384       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_id;
1385 
1386       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1387       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1388       (  p_message_name  => 'EAM_WO_WIP_ENTITY_ID'
1389        , p_token_tbl     => l_token_tbl
1390        , p_mesg_token_tbl     => l_mesg_token_tbl
1391        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1392       );
1393       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1394 
1395       x_return_status := FND_API.G_RET_STS_ERROR;
1396       x_mesg_token_tbl := l_mesg_token_tbl ;
1397       return;
1398 
1399   end;
1400 
1401 
1402 --  firm_planned_flag
1403 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating firm_planned_flag . . . '); END IF;
1404 
1405  begin
1406 
1407     if p_eam_wo_rec.firm_planned_flag not in (wip_constants.yes, wip_constants.no) then
1408 
1409         raise fnd_api.g_exc_unexpected_error;
1410 
1411     end if;
1412 
1413     x_return_status := FND_API.G_RET_STS_SUCCESS;
1414 
1415   exception
1416     when fnd_api.g_exc_unexpected_error then
1417 
1418       l_token_tbl(1).token_name  := 'Firm Planned Flag';
1419       l_token_tbl(1).token_value :=  p_eam_wo_rec.firm_planned_flag;
1420 
1421       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1422       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1423       (  p_message_name  => 'EAM_WO_FIRM_PLANNED_FLAG'
1424        , p_token_tbl     => l_token_tbl
1425        , p_mesg_token_tbl     => l_mesg_token_tbl
1426        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1427       );
1428       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1429 
1430       x_return_status := FND_API.G_RET_STS_ERROR;
1431       x_mesg_token_tbl := l_mesg_token_tbl ;
1432       return;
1433 
1434   end;
1435 
1436 
1437 
1438 --  issue_zero_cost_flag
1439 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating wip_entity_name . . . '); END IF;
1440 
1441   declare
1442     l_count NUMBER;
1443   begin
1444 
1445     if upper(p_eam_wo_rec.issue_zero_cost_flag) not in ('Y','N') then
1446 
1447         raise fnd_api.g_exc_unexpected_error;
1448 
1449     end if;
1450 
1451     x_return_status := FND_API.G_RET_STS_SUCCESS;
1452 
1453   exception
1454     when fnd_api.g_exc_unexpected_error then
1455 
1456       l_token_tbl(1).token_name  := 'ISSUE_ZERO_FLAG';
1457       l_token_tbl(1).token_value :=  p_eam_wo_rec.issue_zero_cost_flag;
1458 
1459       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1460       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1461       (  p_message_name  => 'EAM_WO_ISSUE_ZERO_COST_FLAG'
1462        , p_token_tbl     => l_token_tbl
1463        , p_mesg_token_tbl     => l_mesg_token_tbl
1464        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1465       );
1466       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1467 
1468       x_return_status := FND_API.G_RET_STS_ERROR;
1469       x_mesg_token_tbl := l_mesg_token_tbl ;
1470       return;
1471 
1472   end;
1473 
1474 
1475 
1476 --  schedule_group_id
1477 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating schedule_group_id . . . '); END IF;
1478   begin
1479 
1480     if p_eam_wo_rec.schedule_group_id is not null then
1481 
1482       select 1
1483         into g_dummy
1484         from wip_schedule_groups_val_v
1485        where schedule_group_id = p_eam_wo_rec.schedule_group_id
1486          and organization_id = p_eam_wo_rec.organization_id;
1487     end if;
1488 
1489     x_return_status := FND_API.G_RET_STS_SUCCESS;
1490 
1491     exception
1492     when no_data_found then
1493 
1494       l_token_tbl(1).token_name  := 'Schedule Group Id';
1495       l_token_tbl(1).token_value :=  p_eam_wo_rec.schedule_group_id;
1496 
1497       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1498       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1499       (  p_message_name  => 'EAM_WO_SCHEDULE_GROUP'
1500        , p_token_tbl     => l_token_tbl
1501        , p_mesg_token_tbl     => l_mesg_token_tbl
1502        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1503       );
1504       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1505 
1506       x_return_status := FND_API.G_RET_STS_ERROR;
1507       x_mesg_token_tbl := l_mesg_token_tbl ;
1508       return;
1509 
1510   end;
1511 
1512 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('p_eam_wo_rec.status_type ' || p_eam_wo_rec.status_type); END IF;
1513 --attribute change not allowed for comp_no_chrg,closed,pending-close,failed-close and cancelled
1514 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating attribute change for complete_no_chrg,cancelled,closed,pending-cl,failed-close statuses');END IF;
1515 --start of fix for 3389850
1516 
1517 begin
1518    IF ( p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_UPDATE )
1519       AND (p_eam_wo_rec.status_type IN (5,7,12,14,15))    --if status is complete-no-chrg,cancelled,closed,pending-close and failed-close
1520       AND (p_eam_wo_rec.status_type=p_old_eam_wo_rec.status_type) --status is same
1521       AND (  p_eam_wo_rec.description<>p_old_eam_wo_rec.description
1522             OR p_eam_wo_rec.asset_number<>p_old_eam_wo_rec.asset_number
1523 	    OR p_eam_wo_rec.asset_group_id<>p_old_eam_wo_rec.asset_group_id
1524 	    OR p_eam_wo_rec.rebuild_item_id<>p_old_eam_wo_rec.rebuild_item_id
1525 	    OR p_eam_wo_rec.rebuild_serial_number<>p_old_eam_wo_rec.rebuild_serial_number
1526 	    OR p_eam_wo_rec.maintenance_object_id<>p_old_eam_wo_rec.maintenance_object_id
1527             OR p_eam_wo_rec.maintenance_object_type<>p_old_eam_wo_rec.maintenance_object_type
1528             OR p_eam_wo_rec.maintenance_object_source<>p_old_eam_wo_rec.maintenance_object_source
1529             OR p_eam_wo_rec.eam_linear_location_id<>p_old_eam_wo_rec.eam_linear_location_id
1530             OR p_eam_wo_rec.notification_required<>p_old_eam_wo_rec.notification_required
1531 	    OR p_eam_wo_rec.class_code<>p_old_eam_wo_rec.class_code
1532 	    OR p_eam_wo_rec.asset_activity_id<>p_old_eam_wo_rec.asset_activity_id
1533 	    OR p_eam_wo_rec.activity_type<>p_old_eam_wo_rec.activity_type
1534 	    OR p_eam_wo_rec.activity_source<>p_old_eam_wo_rec.activity_source
1535 	    OR p_eam_wo_rec.activity_cause<>p_old_eam_wo_rec.activity_cause
1536 	    OR p_eam_wo_rec.work_order_type<>p_old_eam_wo_rec.work_order_type
1537 	    OR p_eam_wo_rec.status_type<>p_old_eam_wo_rec.status_type
1538    	    OR p_eam_wo_rec.job_quantity<>p_old_eam_wo_rec.job_quantity
1539 	    OR p_eam_wo_rec.date_released<>p_old_eam_wo_rec.date_released
1540 	    OR p_eam_wo_rec.owning_department<>p_old_eam_wo_rec.owning_department
1541 	    OR p_eam_wo_rec.priority<>p_old_eam_wo_rec.priority
1542 	    OR p_eam_wo_rec.requested_start_date<>p_old_eam_wo_rec.requested_start_date
1543 	    OR p_eam_wo_rec.due_date<>p_old_eam_wo_rec.due_date
1544 	    OR p_eam_wo_rec.shutdown_type<>p_old_eam_wo_rec.shutdown_type
1545 	    OR p_eam_wo_rec.firm_planned_flag<>p_old_eam_wo_rec.firm_planned_flag
1546 	    OR p_eam_wo_rec.tagout_required<>p_old_eam_wo_rec.tagout_required
1547 	    OR p_eam_wo_rec.plan_maintenance<>p_old_eam_wo_rec.plan_maintenance
1548 	    OR p_eam_wo_rec.project_id<>p_old_eam_wo_rec.project_id
1549 	    OR p_eam_wo_rec.task_id<>p_old_eam_wo_rec.task_id
1550 	    OR p_eam_wo_rec.end_item_unit_number<>p_old_eam_wo_rec.end_item_unit_number
1551 	    OR p_eam_wo_rec.schedule_group_id<>p_old_eam_wo_rec.schedule_group_id
1552 	    OR p_eam_wo_rec.bom_revision_date<>p_old_eam_wo_rec.bom_revision_date
1553 	    OR p_eam_wo_rec.routing_revision_date<>p_old_eam_wo_rec.routing_revision_date
1554 	    OR p_eam_wo_rec.alternate_bom_designator<>p_old_eam_wo_rec.alternate_bom_designator
1555 	    OR p_eam_wo_rec.alternate_routing_designator<>p_old_eam_wo_rec.alternate_routing_designator
1556 	    OR p_eam_wo_rec.bom_revision<>p_old_eam_wo_rec.bom_revision
1557 	    OR p_eam_wo_rec.routing_revision<>p_old_eam_wo_rec.routing_revision
1558 	    OR p_eam_wo_rec.parent_wip_entity_id<>p_old_eam_wo_rec.parent_wip_entity_id
1559 	    OR p_eam_wo_rec.manual_rebuild_flag<>p_old_eam_wo_rec.manual_rebuild_flag
1560 	    OR p_eam_wo_rec.pm_schedule_id<>p_old_eam_wo_rec.pm_schedule_id
1561 	    OR p_eam_wo_rec.wip_supply_type<>p_old_eam_wo_rec.wip_supply_type
1562 	    OR p_eam_wo_rec.material_account<>p_old_eam_wo_rec.material_account
1563 	    OR p_eam_wo_rec.material_overhead_account<>p_old_eam_wo_rec.material_overhead_account
1564 	    OR p_eam_wo_rec.resource_account<>p_old_eam_wo_rec.resource_account
1565 	    OR p_eam_wo_rec.outside_processing_account<>p_old_eam_wo_rec.outside_processing_account
1566 	    OR p_eam_wo_rec.material_variance_account<>p_old_eam_wo_rec.material_variance_account
1567 	    OR p_eam_wo_rec.resource_variance_account<>p_old_eam_wo_rec.resource_variance_account
1568 	    OR p_eam_wo_rec.outside_proc_variance_account<>p_old_eam_wo_rec.outside_proc_variance_account
1569 	    OR p_eam_wo_rec.std_cost_adjustment_account<>p_old_eam_wo_rec.std_cost_adjustment_account
1570 	    OR p_eam_wo_rec.overhead_account<>p_old_eam_wo_rec.overhead_account
1571 	    OR p_eam_wo_rec.overhead_variance_account<>p_old_eam_wo_rec.overhead_variance_account
1572 	    OR p_eam_wo_rec.scheduled_start_date<>p_old_eam_wo_rec.scheduled_start_date
1573 	    OR p_eam_wo_rec.scheduled_completion_date<>p_old_eam_wo_rec.scheduled_completion_date
1574     	    OR p_eam_wo_rec.common_bom_sequence_id<>p_old_eam_wo_rec.common_bom_sequence_id
1575 	    OR p_eam_wo_rec.common_routing_sequence_id<>p_old_eam_wo_rec.common_routing_sequence_id
1576 	    OR p_eam_wo_rec.po_creation_time<>p_old_eam_wo_rec.po_creation_time
1577 	    OR p_eam_wo_rec.gen_object_id<>p_old_eam_wo_rec.gen_object_id
1578 	    OR p_eam_wo_rec.attribute_category<>p_old_eam_wo_rec.attribute_category
1579 	    OR p_eam_wo_rec.attribute1<>p_old_eam_wo_rec.attribute1
1580 	    OR p_eam_wo_rec.attribute2<>p_old_eam_wo_rec.attribute2
1581 	    OR p_eam_wo_rec.attribute3<>p_old_eam_wo_rec.attribute3
1582 	    OR p_eam_wo_rec.attribute4<>p_old_eam_wo_rec.attribute4
1583 	    OR p_eam_wo_rec.attribute5<>p_old_eam_wo_rec.attribute5
1584 	    OR p_eam_wo_rec.attribute6<>p_old_eam_wo_rec.attribute6
1585 	    OR p_eam_wo_rec.attribute7<>p_old_eam_wo_rec.attribute7
1586 	    OR p_eam_wo_rec.attribute8<>p_old_eam_wo_rec.attribute8
1587 	    OR p_eam_wo_rec.attribute9<>p_old_eam_wo_rec.attribute9
1588 	    OR p_eam_wo_rec.attribute10<>p_old_eam_wo_rec.attribute10
1589 	    OR p_eam_wo_rec.attribute11<>p_old_eam_wo_rec.attribute11
1590 	    OR p_eam_wo_rec.attribute12<>p_old_eam_wo_rec.attribute12
1591 	    OR p_eam_wo_rec.attribute13<>p_old_eam_wo_rec.attribute13
1592 	    OR p_eam_wo_rec.attribute14<>p_old_eam_wo_rec.attribute14
1593 	    OR p_eam_wo_rec.attribute15<>p_old_eam_wo_rec.attribute15
1594 	    OR p_eam_wo_rec.material_issue_by_mo<>p_old_eam_wo_rec.material_issue_by_mo
1595 	    OR p_eam_wo_rec.issue_zero_cost_flag<>p_old_eam_wo_rec.issue_zero_cost_flag
1596 	    ) THEN
1597         raise fnd_api.g_exc_unexpected_error;
1598    END IF;
1599 exception
1600   when fnd_api.g_exc_unexpected_error then
1601       l_token_tbl(1).token_name  := 'STATUS_TYPE';
1602       l_token_tbl(1).token_value :=  p_eam_wo_rec.status_type;
1603 
1604       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1605       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1606       (  p_message_name  => 'EAM_WO_CH_ATTR_DISALLOWED'
1607        , p_token_tbl     => l_token_tbl
1608        , p_mesg_token_tbl     => l_mesg_token_tbl
1609        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1610       );
1611       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1612 
1613       x_return_status := FND_API.G_RET_STS_ERROR;
1614       x_mesg_token_tbl := l_mesg_token_tbl ;
1615       return;
1616 end;
1617 
1618 
1619 --end of fix for 3389850
1620 
1621 --  status_type
1622 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating status_type . . . '); END IF;
1623 
1624   declare
1625 
1626     l_count             number;
1627     l_parent_status     number;
1628 
1629     parent_not_released exception;
1630     child_released      exception;
1631     ch_rel_par_canc     exception;
1632 
1633   begin
1634 
1635     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE and
1636         p_eam_wo_rec.status_type not in (wip_constants.unreleased, wip_constants.released, wip_constants.hold, wip_constants.draft)) then
1637 
1638        raise fnd_api.g_exc_unexpected_error;
1639 
1640     elsif (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_UPDATE) then
1641       if(p_eam_wo_rec.status_type not in (wip_constants.unreleased, wip_constants.released, wip_constants.comp_chrg,wip_constants.comp_nochrg, wip_constants.closed,
1642                                       wip_constants.hold, wip_constants.cancelled, wip_constants.pend_sched, wip_constants.draft)
1643           OR ( p_eam_wo_rec.status_type in (wip_constants.draft) and p_old_eam_wo_rec.status_type not in (wip_constants.draft))
1644 		  /* Added the check so that status will not be updated to status Draft */
1645 --fix for 3389850.cannot change status from complete_no_charges to any status other than complete,closed.cannot change to complete_no_charges from status other than
1646 --complete
1647           OR  (p_old_eam_wo_rec.status_type=wip_constants.comp_nochrg AND  p_eam_wo_rec.status_type NOT IN (wip_constants.comp_chrg,wip_constants.closed,wip_constants.comp_nochrg) )
1648 /* Bug 3431204 - Should be able to link a Complete No charges WO to another
1649    Complete NO Charges WO */
1650 OR   (p_eam_wo_rec.status_type=wip_constants.comp_nochrg
1651            AND p_old_eam_wo_rec.status_type NOT IN
1652 	        (wip_constants.comp_chrg, wip_constants.comp_nochrg,wip_constants.closed,wip_constants.fail_close))) then
1653 
1654         raise fnd_api.g_exc_unexpected_error;
1655 
1656       end if;
1657 
1658     end if;
1659 
1660 
1661     x_return_status := FND_API.G_RET_STS_SUCCESS;
1662 
1663   exception
1664 
1665      when fnd_api.g_exc_unexpected_error then
1666 
1667       l_token_tbl(1).token_name  := 'Status type';
1668       l_token_tbl(1).token_value :=  p_eam_wo_rec.status_type;
1669 
1670       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1671       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1672       (  p_message_name  => 'EAM_WO_STATUS_TYPE'
1673        , p_token_tbl     => l_token_tbl
1674        , p_mesg_token_tbl     => l_mesg_token_tbl
1675        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1676       );
1677       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1678 
1679       x_return_status := FND_API.G_RET_STS_ERROR;
1680       x_mesg_token_tbl := l_mesg_token_tbl ;
1681       return;
1682 
1683   end;
1684 
1685 
1686 --  job_quantity
1687 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating job_quantity . . . '); END IF;
1688 
1689   begin
1690 
1691       if(p_eam_wo_rec.job_quantity <> 1) then
1692         raise fnd_api.g_exc_unexpected_error;
1693       end if;
1694 
1695     x_return_status := FND_API.G_RET_STS_SUCCESS;
1696 
1697   exception
1698     when fnd_api.g_exc_unexpected_error then
1699 
1700       l_token_tbl(1).token_name  := 'Job Quantity';
1701       l_token_tbl(1).token_value :=  p_eam_wo_rec.job_quantity;
1702 
1703       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1704       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1705       (  p_message_name  => 'EAM_WO_JOB_QUANTITY'
1706        , p_token_tbl     => l_token_tbl
1707        , p_mesg_token_tbl     => l_mesg_token_tbl
1708        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1709       );
1710       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1711 
1712       x_return_status := FND_API.G_RET_STS_ERROR;
1713       x_mesg_token_tbl := l_mesg_token_tbl ;
1714       return;
1715 
1716   end;
1717 
1718 
1719 --  primary_item_id (asset activity)
1720 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating asset_activity_id . . . '); END IF;
1721 
1722   declare
1723     l_eam_op_tbl EAM_PROCESS_WO_PUB.EAM_OP_TBL_TYPE;
1724     l_mat_req_exists number;
1725     l_serial_number_control  NUMBER := 0;
1726     l_count                  NUMBER := 0;
1727 
1728     ACTIVITY_WO_EXISTS EXCEPTION;
1729   begin
1730  -- # 3436679   code added to prevent the defaulting of the asset activity if user removes it while updating work order
1731     if p_eam_wo_rec.asset_activity_id is not null and p_eam_wo_rec.asset_activity_id <> FND_API.G_MISS_NUM then
1732 
1733       select 1
1734       into   g_dummy
1735       from mtl_system_items
1736       where organization_id = p_eam_wo_rec.organization_id
1737       and   inventory_item_id = p_eam_wo_rec.asset_activity_id
1738       and   eam_item_type = 2;
1739 
1740       -- asset activity should not allowed to be updated if the wo has any ops or mat reqs.
1741       select count(*) into l_mat_req_exists from wip_requirement_operations
1742         where wip_entity_id = p_eam_wo_rec.wip_entity_id
1743         and organization_id = p_eam_wo_rec.organization_id;
1744 
1745       if nvl(p_eam_wo_rec.asset_activity_id,-99999) <> nvl(p_old_eam_wo_rec.asset_activity_id,-99999)
1746       and p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_UPDATE
1747       and (EAM_OP_UTILITY_PVT.NUM_OF_ROW(
1748             p_eam_op_tbl      => l_eam_op_tbl
1749            ,p_wip_entity_id   => p_eam_wo_rec.wip_entity_id
1750            ,p_organization_id => p_eam_wo_rec.organization_id) = false
1751            or l_mat_req_exists <> 0) then
1752         raise fnd_api.g_exc_unexpected_error;
1753       end if;
1754 
1755 
1756     end if;
1757 
1758     x_return_status := FND_API.G_RET_STS_SUCCESS;
1759 
1760   exception
1761     when fnd_api.g_exc_unexpected_error then
1762 
1763       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1764       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1765       (  p_message_name  => 'EAM_CANT_UPDATE_ACTIVITY'
1766        , p_token_tbl     => l_token_tbl
1767        , p_mesg_token_tbl     => l_mesg_token_tbl
1768        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1769       );
1770       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1771 
1772       x_return_status := FND_API.G_RET_STS_ERROR;
1773       x_mesg_token_tbl := l_mesg_token_tbl ;
1774       return;
1775 
1776     when ACTIVITY_WO_EXISTS then
1777 
1778       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1779       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1780       (  p_message_name  => 'EAM_ACTIVITY_WO_EXISTS'
1781        , p_token_tbl     => l_token_tbl
1782        , p_mesg_token_tbl     => l_mesg_token_tbl
1783        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1784       );
1785       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1786 
1787       x_return_status := FND_API.G_RET_STS_ERROR;
1788       x_mesg_token_tbl := l_mesg_token_tbl ;
1789       return;
1790 
1791     when others then
1792 
1793       l_token_tbl(1).token_name  := 'Asset Activity Id';
1794       l_token_tbl(1).token_value :=  p_eam_wo_rec.asset_activity_id;
1795 
1796       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1797       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1798       (  p_message_name  => 'EAM_WO_ASSET_ACTIVITY'
1799        , p_token_tbl     => l_token_tbl
1800        , p_mesg_token_tbl     => l_mesg_token_tbl
1801        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1802       );
1803       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1804 
1805       x_return_status := FND_API.G_RET_STS_ERROR;
1806       x_mesg_token_tbl := l_mesg_token_tbl ;
1807       return;
1808 
1809   end;
1810 
1811 
1812 
1813 --  asset activity association
1814 
1815 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating asset_activity_association . . . '); END IF;
1816 
1817   declare
1818     l_start_date DATE;
1819     l_end_date DATE;
1820 
1821   begin
1822  -- # 3436679   code added to prevent the defaulting of the asset activity if user removes it while updating work order
1823     if (p_eam_wo_rec.asset_activity_id is not null and p_eam_wo_rec.asset_activity_id <> FND_API.G_MISS_NUM and p_eam_wo_rec.maintenance_object_source = 1) then
1824 
1825       if (p_eam_wo_rec.maintenance_object_type = 3) then
1826 
1827         select meaa.start_date_active, meaa.end_date_active
1828           into l_start_date, l_end_date
1829           from mtl_eam_asset_activities meaa, mtl_system_items msi
1830          where meaa.asset_activity_id = p_eam_wo_rec.asset_activity_id
1831            and meaa.maintenance_object_type = 3
1832            and nvl(meaa.tmpl_flag, 'N') = 'N'
1833            and meaa.maintenance_object_id = p_eam_wo_rec.maintenance_object_id
1834            and msi.inventory_item_id = p_eam_wo_rec.asset_activity_id
1835            and msi.organization_id = p_eam_wo_rec.organization_id;
1836 
1837       else
1838 
1839       if (p_eam_wo_rec.maintenance_object_type = 2) then
1840 
1841                select min(meaa.start_date_active), min(meaa.end_date_active)
1842               into l_start_date, l_end_date
1843               from mtl_eam_asset_activities meaa,mtl_system_items msi
1844          where meaa.asset_activity_id = p_eam_wo_rec.asset_activity_id
1845            and meaa.maintenance_object_type = 2
1846            and meaa.maintenance_object_id = p_eam_wo_rec.maintenance_object_id
1847            and msi.organization_id = p_eam_wo_rec.organization_id
1848            and msi.inventory_item_id = p_eam_wo_rec.asset_activity_id
1849            and nvl(meaa.tmpl_flag, 'N') = 'N';
1850     end if;
1851 
1852       end if;
1853 
1854       if(l_start_date is not null and
1855          l_start_date > nvl(p_eam_wo_rec.requested_start_date, p_eam_wo_rec.due_date)) then
1856         raise l_wo_asset_activity_err;
1857       end if;
1858 
1859       if(l_end_date is not null and
1860          l_end_date < nvl(p_eam_wo_rec.due_date, p_eam_wo_rec.requested_start_date)) then
1861         raise l_wo_asset_activity_err;
1862       end if;
1863 
1864     end if;
1865 
1866     x_return_status := FND_API.G_RET_STS_SUCCESS;
1867 
1868   exception
1869     WHEN l_wo_asset_activity_err THEN
1870 
1871       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1872       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1873       (  p_message_name  => 'EAM_WO_ASSET_ACTIVITY_DATES'
1874        , p_token_tbl     => l_token_tbl
1875        , p_mesg_token_tbl     => l_mesg_token_tbl
1876        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1877       );
1878       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1879 
1880       x_return_status := FND_API.G_RET_STS_ERROR;
1881       x_mesg_token_tbl := l_mesg_token_tbl ;
1882       return;
1883 
1884     when others then
1885 
1886       l_token_tbl(1).token_name  := 'Asset Activity Id';
1887       l_token_tbl(1).token_value :=  p_eam_wo_rec.asset_activity_id;
1888 
1889       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1890       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1891       (  p_message_name  => 'EAM_WO_ASSET_ACTIVITY_ASSOC'
1892        , p_token_tbl     => l_token_tbl
1893        , p_mesg_token_tbl     => l_mesg_token_tbl
1894        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1895       );
1896       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1897 
1898       x_return_status := FND_API.G_RET_STS_ERROR;
1899       x_mesg_token_tbl := l_mesg_token_tbl ;
1900       return;
1901 
1902   end;
1903 
1904 
1905 --  wip_supply_type
1906 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating wip_supply_type . . . '); END IF;
1907 
1908   begin
1909 
1910       if(p_eam_wo_rec.wip_supply_type is not null and p_eam_wo_rec.wip_supply_type not in (wip_constants.push, wip_constants.bulk, wip_constants.based_on_bom)) then
1911         --not a valid supply type
1912 
1913         raise fnd_api.g_exc_unexpected_error;
1914 
1915       end if;
1916 
1917     x_return_status := FND_API.G_RET_STS_SUCCESS;
1918 
1919   exception
1920     when fnd_api.g_exc_unexpected_error then
1921 
1922       l_token_tbl(1).token_name  := 'Wip Supply Type';
1923       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_supply_type;
1924 
1925       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1926       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1927       (  p_message_name  => 'EAM_WO_WIP_SUPPLY_TYPE'
1928        , p_token_tbl     => l_token_tbl
1929        , p_mesg_token_tbl     => l_mesg_token_tbl
1930        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1931       );
1932       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1933 
1934       x_return_status := FND_API.G_RET_STS_ERROR;
1935       x_mesg_token_tbl := l_mesg_token_tbl ;
1936       return;
1937 
1938   end;
1939 
1940 
1941 --  alternate_routing_designator
1942 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating alternate_routing_designator . . . '); END IF;
1943 
1944   begin
1945 
1946   if p_eam_wo_rec.alternate_routing_designator is not null then
1947 
1948       select 1
1949         into g_dummy
1950         from bom_routing_alternates_v
1951        where assembly_item_id = p_eam_wo_rec.asset_activity_id
1952          and alternate_routing_designator = p_eam_wo_rec.alternate_routing_designator
1953          and organization_id = p_eam_wo_rec.organization_id
1954          and routing_type = 1;
1955 
1956   end if;
1957 
1958     x_return_status := FND_API.G_RET_STS_SUCCESS;
1959 
1960   exception
1961     when no_data_found then
1962 
1963       l_token_tbl(1).token_name  := 'Alternate Routing Designator';
1964       l_token_tbl(1).token_value :=  p_eam_wo_rec.alternate_routing_designator;
1965 
1966       l_out_mesg_token_tbl  := l_mesg_token_tbl;
1967       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
1968       (  p_message_name  => 'EAM_WO_ALTERNATE_ROUTING'
1969        , p_token_tbl     => l_token_tbl
1970        , p_mesg_token_tbl     => l_mesg_token_tbl
1971        , x_mesg_token_tbl     => l_out_mesg_token_tbl
1972       );
1973       l_mesg_token_tbl      := l_out_mesg_token_tbl;
1974 
1975       x_return_status := FND_API.G_RET_STS_ERROR;
1976       x_mesg_token_tbl := l_mesg_token_tbl ;
1977       return;
1978 
1979   end;
1980 
1981 --  alternate_bom_designator
1982 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating alternate_bom_designator . . . '); END IF;
1983 
1984   begin
1985 
1986   if p_eam_wo_rec.alternate_bom_designator is not null then
1987 
1988       select 1
1989         into g_dummy
1990         from bom_bill_alternates_v
1991        where assembly_item_id = p_eam_wo_rec.asset_activity_id
1992          and alternate_bom_designator = p_eam_wo_rec.alternate_bom_designator
1993          and organization_id = p_eam_wo_rec.organization_id
1994          and assembly_type = 1;
1995 
1996   end if;
1997 
1998     x_return_status := FND_API.G_RET_STS_SUCCESS;
1999 
2000   exception
2001     when no_data_found then
2002 
2003       l_token_tbl(1).token_name  := 'Alternate BOM Designator';
2004       l_token_tbl(1).token_value :=  p_eam_wo_rec.alternate_bom_designator;
2005 
2006       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2007       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2008       (  p_message_name  => 'EAM_WO_ALTERNATE_BOM'
2009        , p_token_tbl     => l_token_tbl
2010        , p_mesg_token_tbl     => l_mesg_token_tbl
2011        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2012       );
2013       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2014 
2015       x_return_status := FND_API.G_RET_STS_ERROR;
2016       x_mesg_token_tbl := l_mesg_token_tbl ;
2017       return;
2018 
2019   end;
2020 
2021 --  project_id
2022 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating project_id . . . '); END IF;
2023 
2024  declare
2025 
2026     l_min_date DATE;
2027 
2028   begin
2029 
2030     IF p_eam_wo_rec.scheduled_start_date >= sysdate THEN
2031        l_min_date := sysdate;
2032     ELSE
2033        l_min_date := p_eam_wo_rec.scheduled_start_date;
2034     END IF;
2035 
2036      IF ((p_eam_wo_rec.project_id IS NOT NULL AND p_old_eam_wo_rec.project_id is null) OR
2037          (p_eam_wo_rec.project_id <> p_old_eam_wo_rec.project_id) OR
2038 		 (p_eam_wo_rec.status_type = 3 and p_old_eam_wo_rec.status_type in (17,1,6)
2039 		  and p_eam_wo_rec.project_id is not null
2040 		 ))
2041      THEN
2042 		       SELECT distinct mpv.project_id --this query will return multiple rows if the project has tasks
2043 			 INTO g_dummy
2044 			 FROM mtl_project_v mpv, pjm_project_parameters_v ppp, mtl_parameters mp
2045 			WHERE mpv.project_id = ppp.project_id
2046 			  AND mpv.project_id = p_eam_wo_rec.project_id
2047 			  AND ppp.organization_id = p_eam_wo_rec.organization_id
2048 			  AND ppp.organization_id = mp.organization_id
2049 			  AND nvl(mp.project_reference_enabled, 2) = wip_constants.yes
2050                           /* Commented for bug#5346213 Start
2051                           AND (mpv.completion_date IS NULL OR mpv.completion_date >= l_min_date)
2052                           AND (ppp.end_date_active IS NULL OR ppp.end_date_active >= l_min_date);
2053                           Commented for bug#5346213 End */
2054                           /* Added for bug#5346213 Start */
2055                           AND (mpv.completion_date IS NULL OR trunc(mpv.completion_date) >= trunc(l_min_date))
2056                           AND (ppp.end_date_active IS NULL OR trunc(ppp.end_date_active) >= trunc(l_min_date));
2057                           /* Added for bug#5346213 End */
2058 
2059      END IF;
2060     x_return_status := FND_API.G_RET_STS_SUCCESS;
2061 
2062   exception
2063     when no_data_found then
2064 
2065       l_token_tbl(1).token_name  := 'Project Id';
2066       l_token_tbl(1).token_value :=  p_eam_wo_rec.project_id;
2067 
2068       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2069       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2070       (  p_message_name  => 'EAM_WO_PROJECT_ID'
2071        , p_token_tbl     => l_token_tbl
2072        , p_mesg_token_tbl     => l_mesg_token_tbl
2073        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2074       );
2075       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2076 
2077       x_return_status := FND_API.G_RET_STS_ERROR;
2078       x_mesg_token_tbl := l_mesg_token_tbl ;
2079       return;
2080 
2081   end;
2082 
2083 
2084 --  task_id
2085 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating task_id . . . '); END IF;
2086 
2087   declare
2088 
2089     l_min_date DATE;
2090 
2091   begin
2092        IF (p_eam_wo_rec.task_id IS NOT NULL) THEN
2093 	      SELECT 1
2094 		INTO g_dummy
2095 		FROM pjm_tasks_v
2096 	       WHERE project_id = p_eam_wo_rec.project_id
2097 		 AND task_id = p_eam_wo_rec.task_id;
2098 
2099           IF p_eam_wo_rec.scheduled_start_date >= sysdate THEN
2100                 l_min_date := sysdate;
2101 	      ELSE
2102 		        l_min_date := p_eam_wo_rec.scheduled_start_date;
2103 		  END IF;
2104 
2105           /* IF p_eam_wo_rec.status_type = 3 and p_old_eam_wo_rec.status_type in (17,1,6) THEN Commented for bug#5346213 */
2106           /* Added for bug#5346213 Start */
2107           IF p_eam_wo_rec.status_type = 3 and ( p_old_eam_wo_rec.status_type in (17,1,6) OR p_old_eam_wo_rec.status_type IS NULL ) THEN
2108           /* Added for bug#5346213 End */
2109                       SELECT 1
2110                         INTO g_dummy
2111                         FROM pjm_tasks_v
2112                      WHERE project_id = p_eam_wo_rec.project_id
2113                          AND task_id = p_eam_wo_rec.task_id
2114                          /* AND (completion_date IS NULL OR completion_date >= l_min_date); Commented for bug#5346213 */
2115                          AND (completion_date IS NULL OR trunc(completion_date) >= trunc(l_min_date)); /* Added for bug#5346213 */
2116 
2117 		  END IF;
2118 
2119        END IF;
2120     x_return_status := FND_API.G_RET_STS_SUCCESS;
2121 
2122   exception
2123     when no_data_found then
2124 
2125       l_token_tbl(1).token_name  := 'Task Id';
2126       l_token_tbl(1).token_value :=  p_eam_wo_rec.task_id;
2127 
2128       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2129       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2130       (  p_message_name  => 'EAM_WO_TASK_ID'
2131        , p_token_tbl     => l_token_tbl
2132        , p_mesg_token_tbl     => l_mesg_token_tbl
2133        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2134       );
2135       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2136 
2137       x_return_status := FND_API.G_RET_STS_ERROR;
2138       x_mesg_token_tbl := l_mesg_token_tbl ;
2139       return;
2140 
2141   end;
2142 
2143 
2144 
2145 --  schedule_dates 0
2146 
2147 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating PM Suggested dates  . . . '); END IF;
2148 
2149   begin
2150 
2151     if p_eam_wo_rec.pm_suggested_start_date is not null and
2152        p_eam_wo_rec.pm_suggested_end_date is not null then
2153 
2154        raise fnd_api.g_exc_unexpected_error;
2155 
2156     end if;
2157 
2158     x_return_status := FND_API.G_RET_STS_SUCCESS;
2159 
2160   exception
2161     when fnd_api.g_exc_unexpected_error then
2162 
2163       l_token_tbl(1).token_name  := 'Wip Entity Name';
2164       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
2165 
2166       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2167       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2168       (  p_message_name  => 'EAM_WO_TOO_MANY_PM_DATE'
2169        , p_token_tbl     => l_token_tbl
2170        , p_mesg_token_tbl     => l_mesg_token_tbl
2171        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2172       );
2173       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2174 
2175       x_return_status := FND_API.G_RET_STS_ERROR;
2176       x_mesg_token_tbl := l_mesg_token_tbl ;
2177       return;
2178 
2179   end;
2180 
2181 
2182 --  schedule_dates 1
2183 
2184 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating due_date, requested_start_date . . . '); END IF;
2185 
2186   begin
2187 
2188     if p_eam_wo_rec.due_date is not null and
2189        p_eam_wo_rec.requested_start_date is not null then
2190 
2191        raise fnd_api.g_exc_unexpected_error;
2192 
2193     end if;
2194 
2195     x_return_status := FND_API.G_RET_STS_SUCCESS;
2196 
2197   exception
2198     when fnd_api.g_exc_unexpected_error then
2199 
2200       l_token_tbl(1).token_name  := 'Wip Entity Name';
2201       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
2202 
2203       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2204       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2205       (  p_message_name  => 'EAM_WO_TOO_MANY_DATE'
2206        , p_token_tbl     => l_token_tbl
2207        , p_mesg_token_tbl     => l_mesg_token_tbl
2208        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2209       );
2210       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2211 
2212       x_return_status := FND_API.G_RET_STS_ERROR;
2213       x_mesg_token_tbl := l_mesg_token_tbl ;
2214       return;
2215 
2216   end;
2217 
2218 
2219 --  schedule_dates 2
2220 
2221 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating due_date, requested_start_date . . . '); END IF;
2222 
2223   begin
2224 
2225        if p_eam_wo_rec.due_date is null and
2226           p_eam_wo_rec.requested_start_date is null then
2227 
2228           raise fnd_api.g_exc_unexpected_error;
2229 
2230        end if;
2231 
2232     x_return_status := FND_API.G_RET_STS_SUCCESS;
2233 
2234   exception
2235     when fnd_api.g_exc_unexpected_error then
2236 
2237       l_token_tbl(1).token_name  := 'Wip Entity Name';
2238       l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
2239 
2240       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2241       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2242       (  p_message_name  => 'EAM_WO_NEED_DATE'
2243        , p_token_tbl     => l_token_tbl
2244        , p_mesg_token_tbl     => l_mesg_token_tbl
2245        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2246       );
2247       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2248 
2249       x_return_status := FND_API.G_RET_STS_ERROR;
2250       x_mesg_token_tbl := l_mesg_token_tbl ;
2251       return;
2252 
2253   end;
2254 
2255 
2256 --  schedule_dates 3
2257 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating schedule_dates . . . '); END IF;
2258 
2259   declare
2260     l_rtg_count NUMBER;
2261     l_date_count NUMBER := 0;
2262   begin
2263 
2264     if p_eam_wo_rec.requested_start_date is not null then
2265       l_date_count := l_date_count + 1;
2266     end if;
2267 
2268     if p_eam_wo_rec.due_date is not null then
2269       l_date_count := l_date_count + 1;
2270     end if;
2271 
2272     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE and l_date_count = 0) then
2273       --all job creations must have at least one date
2274       raise fnd_api.g_exc_unexpected_error;
2275     end if;
2276 
2277     if p_eam_wo_rec.requested_start_date is not null then
2278 
2279       select 1
2280         into g_dummy
2281         from bom_calendar_dates bcd, mtl_parameters mp
2282        where mp.organization_id = p_eam_wo_rec.organization_id
2283          and mp.calendar_code = bcd.calendar_code
2284          and mp.calendar_exception_set_id = bcd.exception_set_id
2285          and bcd.calendar_date = trunc(p_eam_wo_rec.requested_start_date);
2286     end if;
2287 
2288     if p_eam_wo_rec.due_date is not null then
2289       select 1
2290         into g_dummy
2291         from bom_calendar_dates bcd, mtl_parameters mp
2292        where mp.organization_id = p_eam_wo_rec.organization_id
2293          and mp.calendar_code = bcd.calendar_code
2294          and mp.calendar_exception_set_id = bcd.exception_set_id
2295          and bcd.calendar_date = trunc(p_eam_wo_rec.due_date);
2296     end if;
2297 
2298     x_return_status := FND_API.G_RET_STS_SUCCESS;
2299 
2300   exception
2301     when others then
2302 
2303       l_token_tbl(1).token_name  := 'Scheduled Start Date';
2304       l_token_tbl(1).token_value :=  p_eam_wo_rec.scheduled_start_date;
2305 
2306       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2307       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2308       (  p_message_name  => 'EAM_WO_SCHEDULE_DATE'
2309        , p_token_tbl     => l_token_tbl
2310        , p_mesg_token_tbl     => l_mesg_token_tbl
2311        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2312       );
2313       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2314 
2315       x_return_status := FND_API.G_RET_STS_ERROR;
2316       x_mesg_token_tbl := l_mesg_token_tbl ;
2317       return;
2318 
2319   end;
2320   --start of fix for 3396136
2321 begin
2322   IF(p_eam_wo_rec.scheduled_start_date IS NOT NULL)
2323     AND (p_eam_wo_rec.scheduled_completion_date IS NOT NULL)
2324     AND (p_eam_wo_rec.scheduled_start_date > p_eam_wo_rec.scheduled_completion_date) THEN
2325        raise fnd_api.g_exc_unexpected_error;
2326   END IF;
2327 exception
2328     when fnd_api.g_exc_unexpected_error then
2329        l_out_mesg_token_tbl  := l_mesg_token_tbl;
2330       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2331       (  p_message_name  => 'EAM_WO_SCHEDULE_DATE_MORE'
2332        , p_token_tbl     => l_token_tbl
2333        , p_mesg_token_tbl     => l_mesg_token_tbl
2334        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2335       );
2336       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2337 
2338       x_return_status := FND_API.G_RET_STS_ERROR;
2339       x_mesg_token_tbl := l_mesg_token_tbl ;
2340       return;
2341 end;
2342  --end of fix for 3396136
2343 
2344 
2345 --  end_item_unit_number
2346 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating end_item_unit_number . . . '); END IF;
2347 
2348   declare
2349     is_unit_effective_item boolean;
2350     l_bom_item_id NUMBER;
2351   begin
2352 
2353     -- Unit number is required for unit effective assemblies.
2354   if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE) then
2355 
2356     if(is_unit_effective_item and p_eam_wo_rec.end_item_unit_number is null) then
2357       fnd_message.set_name('PJM', 'UEFF-UNIT NUMBER REQUIRED');
2358     end if;
2359 
2360   end if;
2361 
2362     -- If the assembly item is unit effective, validate the actual
2363     -- unit number value. The unit number must exist in the same _master_
2364     -- organization as the item. (We already validate that the item
2365     -- is in the organization identified by the ORGANIZATION_ID column.)
2366     if(is_unit_effective_item and p_eam_wo_rec.end_item_unit_number is not null) then
2367       select 1
2368         into g_dummy
2369         from pjm_unit_numbers_lov_v pun,
2370              mtl_parameters mp
2371        where pun.unit_number = p_eam_wo_rec.end_item_unit_number
2372          and mp.organization_id = p_eam_wo_rec.organization_id
2373          and mp.master_organization_id = pun.master_organization_id;
2374     end if;
2375 
2376     x_return_status := FND_API.G_RET_STS_SUCCESS;
2377 
2378   exception
2379     when too_many_rows then
2380       null; -- the query returning multiple rows is ok
2381     when others then
2382 --      fnd_message.set_name('PJM', 'UEFF-UNIT NUMBER INVALID') ;
2383 
2384       l_token_tbl(1).token_name  := 'Unit Number';
2385       l_token_tbl(1).token_value :=  p_eam_wo_rec.end_item_unit_number;
2386 
2387       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2388       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2389       (  p_message_name  => 'EAM_WO_UNIT_NUMBER'
2390        , p_token_tbl     => l_token_tbl
2391        , p_mesg_token_tbl     => l_mesg_token_tbl
2392        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2393       );
2394       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2395 
2396       x_return_status := FND_API.G_RET_STS_ERROR;
2397       x_mesg_token_tbl := l_mesg_token_tbl ;
2398       return;
2399 
2400   end;
2401 
2402 
2403 --  class_code
2404 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating class_code . . . '); END IF;
2405 
2406   declare
2407     l_disable_date date;
2408     WO_CANT_CH_WIPACCT exception;
2409   begin
2410     if (p_eam_wo_rec.class_code is null) then
2411       raise fnd_api.g_exc_unexpected_error;
2412     end if;
2413 
2414     if p_eam_wo_rec.class_code is not null then
2415 
2416       select disable_date
2417         into l_disable_date
2418         from wip_accounting_classes
2419        where class_code = p_eam_wo_rec.class_code
2420          and class_type = wip_constants.eam
2421          and organization_id = p_eam_wo_rec.organization_id;
2422 
2423       if(l_disable_date is not null and
2424          l_disable_date < nvl(p_eam_wo_rec.due_date, p_eam_wo_rec.requested_start_date)) then
2425         raise fnd_api.g_exc_unexpected_error;
2426       end if;
2427 
2428     end if;
2429 
2430     -- bug no 3905702
2431     if p_old_eam_wo_rec.class_code <> p_eam_wo_rec.class_code then
2432 
2433 	     EAM_WORKORDER_UTIL_PKG.CK_MATERIAL_ALLOC_ON_HOLD(X_Org_Id => p_eam_wo_rec.organization_id,
2434 				     X_Wip_Id => p_eam_wo_rec.wip_entity_id,
2435 				     X_Rep_Id => -1,
2436 				     X_Line_Id => -1,
2437 				     X_Ent_Type=> 6,
2438 				     X_Return_Status=>l_trans_exist);
2439 
2440 	    IF(l_trans_exist='F') THEN
2441 	       raise WO_CANT_CH_WIPACCT;
2442 	    END IF;
2443     end if;
2444 
2445     x_return_status := FND_API.G_RET_STS_SUCCESS;
2446 
2447   exception
2448 
2449     when WO_CANT_CH_WIPACCT then
2450 
2451       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2452       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2453       (  p_message_name  => 'EAM_WIPACT_CANNOT_CH'
2454        , p_token_tbl     => l_token_tbl
2455        , p_mesg_token_tbl     => l_mesg_token_tbl
2456        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2457       );
2458       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2459 
2460       x_return_status := FND_API.G_RET_STS_ERROR;
2461       x_mesg_token_tbl := l_mesg_token_tbl ;
2462       return;
2463 
2464     when others then
2465 
2466       l_token_tbl(1).token_name  := 'Class Code';
2467       l_token_tbl(1).token_value :=  p_eam_wo_rec.class_code;
2468 
2469       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2470       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2471       (  p_message_name  => 'EAM_WO_CLASS_CODE'
2472        , p_token_tbl     => l_token_tbl
2473        , p_mesg_token_tbl     => l_mesg_token_tbl
2474        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2475       );
2476       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2477 
2478       x_return_status := FND_API.G_RET_STS_ERROR;
2479       x_mesg_token_tbl := l_mesg_token_tbl ;
2480       return;
2481 
2482   end;
2483 
2484 
2485 --  bom_revision
2486 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating bom_revision . . . '); END IF;
2487 
2488   declare
2489     l_start_date DATE;
2490   begin
2491 
2492     l_start_date := greatest(p_eam_wo_rec.requested_start_date, sysdate);
2493 /*
2494       wip_revisions.bom_revision(p_organization_id => p_eam_wo_rec.organization_id,
2495                                  p_item_id => p_eam_wo_rec.asset_activity_id,
2496                                  p_revision => p_eam_wo_rec.bom_revision,
2497                                  p_revision_date => p_eam_wo_rec.bom_revision_date,
2498                                  p_start_date => l_start_date);
2499 */
2500     x_return_status := FND_API.G_RET_STS_SUCCESS;
2501 
2502   exception
2503     when others then
2504 
2505       l_token_tbl(1).token_name  := 'BOM Revision';
2506       l_token_tbl(1).token_value :=  p_eam_wo_rec.bom_revision;
2507 
2508       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2509       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2510       (  p_message_name  => 'EAM_WO_BOM_REVISION'
2511        , p_token_tbl     => l_token_tbl
2512        , p_mesg_token_tbl     => l_mesg_token_tbl
2513        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2514       );
2515       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2516 
2517       x_return_status := FND_API.G_RET_STS_ERROR;
2518 
2519       x_mesg_token_tbl := l_mesg_token_tbl ;
2520       return;
2521 
2522   end;
2523 
2524 
2525 --  routing_revision
2526 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating routing_revision . . . '); END IF;
2527 
2528   declare
2529     l_start_date DATE;
2530     l_count NUMBER;
2531   begin
2532 
2533     l_start_date := greatest(p_eam_wo_rec.requested_start_date, sysdate);
2534 
2535       select count(*)
2536         into l_count
2537         from bom_operational_routings
2538        where assembly_item_id = p_eam_wo_rec.asset_activity_id
2539          and organization_id = p_eam_wo_rec.organization_id
2540          and nvl(alternate_routing_designator, '@@') = nvl(p_eam_wo_rec.alternate_routing_designator, '@@');
2541 /*
2542       if(l_count > 0) then
2543 
2544         wip_revisions.routing_revision(p_organization_id => p_eam_wo_rec.organization_id,
2545                                        p_item_id => p_eam_wo_rec.asset_activity_id,
2546                                        p_revision => p_eam_wo_rec.routing_revision,
2547                                        p_revision_date => p_eam_wo_rec.routing_revision_date,
2548                                        p_start_date => l_start_date);
2549 
2550       end if;
2551 */
2552     x_return_status := FND_API.G_RET_STS_SUCCESS;
2553 
2554   exception
2555     when others then
2556 
2557       l_token_tbl(1).token_name  := 'Routing Revision';
2558       l_token_tbl(1).token_value :=  p_eam_wo_rec.routing_revision;
2559 
2560       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2561       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2562       (  p_message_name  => 'EAM_WO_ROUTING_REVISION'
2563        , p_token_tbl     => l_token_tbl
2564        , p_mesg_token_tbl     => l_mesg_token_tbl
2565        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2566       );
2567       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2568 
2569       x_return_status := FND_API.G_RET_STS_ERROR;
2570       x_mesg_token_tbl := l_mesg_token_tbl ;
2571       return;
2572 
2573   end;
2574 
2575 
2576 --  manual_rebuild_flag
2577 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating manual_rebuild_flag . . . '); END IF;
2578 
2579   begin
2580     if (p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_CREATE) then
2581       if(p_eam_wo_rec.manual_rebuild_flag is not null and
2582          (p_eam_wo_rec.rebuild_item_id is null or
2583          p_eam_wo_rec.manual_rebuild_flag not in ('Y', 'N'))) then
2584         raise fnd_api.g_exc_unexpected_error;
2585       end if;
2586 
2587       if(p_eam_wo_rec.manual_rebuild_flag is null and
2588          p_eam_wo_rec.rebuild_item_id is not null) then
2589         raise fnd_api.g_exc_unexpected_error;
2590       end if;
2591     end if;
2592 
2593     x_return_status := FND_API.G_RET_STS_SUCCESS;
2594 
2595   exception
2596     when fnd_api.g_exc_unexpected_error then
2597 
2598       l_token_tbl(1).token_name  := 'Manual Rebuild Flag';
2599       l_token_tbl(1).token_value :=  p_eam_wo_rec.manual_rebuild_flag;
2600 
2601       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2602       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2603       (  p_message_name  => 'EAM_WO_MANUAL_REBUILD_FLAG'
2604        , p_token_tbl     => l_token_tbl
2605        , p_mesg_token_tbl     => l_mesg_token_tbl
2606        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2607       );
2608       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2609 
2610       x_return_status := FND_API.G_RET_STS_ERROR;
2611       x_mesg_token_tbl := l_mesg_token_tbl ;
2612       return;
2613 
2614   end;
2615 
2616 --  owning_department
2617 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating owing_department_id . . . '); END IF;
2618 
2619   declare
2620     l_job_date DATE;
2621     l_disable_date DATE;
2622   begin
2623     if p_eam_wo_rec.owning_department is not null then
2624       l_job_date := nvl(p_eam_wo_rec.due_date, nvl(p_eam_wo_rec.requested_start_date, p_eam_wo_rec.scheduled_completion_date));
2625       select disable_date
2626         into l_disable_date
2627         from bom_departments
2628        where department_id = p_eam_wo_rec.owning_department
2629          and organization_id = p_eam_wo_rec.organization_id;
2630 
2631       if(l_disable_date is not null and
2632          l_disable_date < l_job_date) then
2633         raise fnd_api.g_exc_unexpected_error;
2634       end if;
2635     end if;
2636 
2637     x_return_status := FND_API.G_RET_STS_SUCCESS;
2638 
2639   exception
2640     when others then
2641 
2642       l_token_tbl(1).token_name  := 'Owning Department';
2643   --    l_token_tbl(1).token_value :=  p_eam_wo_rec.owning_department;
2644 
2645         SELECT bd.department_code into l_token_tbl(1).token_value
2646 	 FROM  bom_departments bd
2647 	 WHERE 	 bd.DEPARTMENT_ID = p_eam_wo_rec.owning_department
2648  	 AND     bd.organization_id   = p_eam_wo_rec.organization_id;
2649 
2650 
2651       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2652       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2653       (  p_message_name  => 'EAM_WO_OWNING_DEPARTMENT'
2654        , p_token_tbl     => l_token_tbl
2655        , p_mesg_token_tbl     => l_mesg_token_tbl
2656        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2657       );
2658       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2659 
2660       x_return_status := FND_API.G_RET_STS_ERROR;
2661       x_mesg_token_tbl := l_mesg_token_tbl ;
2662       return;
2663 
2664   end;
2665 
2666 --  notification_required
2667 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating notification_required . . . '); END IF;
2668 
2669   begin
2670     if (p_eam_wo_rec.notification_required is not null and
2671        p_eam_wo_rec.notification_required not in ('Y', 'N')) then
2672       raise fnd_api.g_exc_unexpected_error;
2673     end if;
2674 
2675     x_return_status := FND_API.G_RET_STS_SUCCESS;
2676 
2677   exception
2678     when fnd_api.g_exc_unexpected_error then
2679 
2680       l_token_tbl(1).token_name  := 'Notification Required';
2681       l_token_tbl(1).token_value :=  p_eam_wo_rec.notification_required;
2682 
2683       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2684       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2685       (  p_message_name  => 'EAM_WO_NOTIFICATION_REQUIRED'
2686        , p_token_tbl     => l_token_tbl
2687        , p_mesg_token_tbl     => l_mesg_token_tbl
2688        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2689       );
2690       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2691 
2692       x_return_status := FND_API.G_RET_STS_ERROR;
2693       x_mesg_token_tbl := l_mesg_token_tbl ;
2694       return;
2695 
2696   end;
2697 
2698 --  shutdown_type
2699 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating shutdown_type . . . '); END IF;
2700 
2701   begin
2702     if p_eam_wo_rec.shutdown_type is not null then
2703       select 1
2704         into g_dummy
2705         from mfg_lookups
2706        where lookup_type = g_shutdown_type
2707          and lookup_code = p_eam_wo_rec.shutdown_type
2708          and enabled_flag = 'Y';
2709     end if;
2710 
2711     x_return_status := FND_API.G_RET_STS_SUCCESS;
2712 
2713   exception
2714     when no_data_found then
2715 
2716       l_token_tbl(1).token_name  := 'Shutdown Type';
2717       l_token_tbl(1).token_value :=  p_eam_wo_rec.shutdown_type;
2718 
2719       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2720       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2721       (  p_message_name  => 'EAM_WO_SHUTDOWN_TYPE'
2722        , p_token_tbl     => l_token_tbl
2723        , p_mesg_token_tbl     => l_mesg_token_tbl
2724        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2725       );
2726       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2727 
2728       x_return_status := FND_API.G_RET_STS_ERROR;
2729       x_mesg_token_tbl := l_mesg_token_tbl ;
2730       return;
2731 
2732   end;
2733 
2734 --  tagout_required
2735 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating tagout_required . . . '); END IF;
2736 
2737   begin
2738     if (p_eam_wo_rec.tagout_required is not null and
2739        p_eam_wo_rec.tagout_required not in ('Y', 'N')) then
2740       raise fnd_api.g_exc_unexpected_error;
2741     end if;
2742 
2743     x_return_status := FND_API.G_RET_STS_SUCCESS;
2744 
2745   exception
2746     when fnd_api.g_exc_unexpected_error then
2747 
2748       l_token_tbl(1).token_name  := 'Tagout Required';
2749       l_token_tbl(1).token_value :=  p_eam_wo_rec.tagout_required;
2750 
2751       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2752       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2753       (  p_message_name  => 'EAM_WO_TAGOUT_REQUIRED'
2754        , p_token_tbl     => l_token_tbl
2755        , p_mesg_token_tbl     => l_mesg_token_tbl
2756        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2757       );
2758       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2759 
2760       x_return_status := FND_API.G_RET_STS_ERROR;
2761       x_mesg_token_tbl := l_mesg_token_tbl ;
2762       return;
2763 
2764   end;
2765 
2766 --  plan_maintenance
2767 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating plan_maintenance . . . '); END IF;
2768 
2769   begin
2770     if p_eam_wo_rec.plan_maintenance is not null and
2771        p_eam_wo_rec.plan_maintenance not in ('Y', 'N') then
2772       raise fnd_api.g_exc_unexpected_error;
2773     end if;
2774 
2775     x_return_status := FND_API.G_RET_STS_SUCCESS;
2776 
2777   exception
2778     when fnd_api.g_exc_unexpected_error then
2779 
2780       l_token_tbl(1).token_name  := 'Plan Maintenance';
2781       l_token_tbl(1).token_value :=  p_eam_wo_rec.plan_maintenance;
2782 
2783       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2784       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2785       (  p_message_name  => 'EAM_WO_PLAN_MAINTENANCE'
2786        , p_token_tbl     => l_token_tbl
2787        , p_mesg_token_tbl     => l_mesg_token_tbl
2788        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2789       );
2790       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2791 
2792       x_return_status := FND_API.G_RET_STS_ERROR;
2793       x_mesg_token_tbl := l_mesg_token_tbl ;
2794       return;
2795 
2796   end;
2797 
2798 --  work_order_type
2799 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating work_order_type . . . '); END IF;
2800 
2801   begin
2802     if p_eam_wo_rec.work_order_type is not null then
2803       select 1
2804         into g_dummy
2805         from mfg_lookups
2806        where lookup_type = g_wo_type
2807          and lookup_code = p_eam_wo_rec.work_order_type
2808          and enabled_flag = 'Y';
2809     end if;
2810 
2811     x_return_status := FND_API.G_RET_STS_SUCCESS;
2812 
2813   exception
2814     when no_data_found then
2815 
2816       l_token_tbl(1).token_name  := 'Work Order Type';
2817       l_token_tbl(1).token_value :=  p_eam_wo_rec.work_order_type;
2818 
2819       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2820       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2821       (  p_message_name  => 'EAM_WO_WORK_ORDER_TYPE'
2822        , p_token_tbl     => l_token_tbl
2823        , p_mesg_token_tbl     => l_mesg_token_tbl
2824        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2825       );
2826       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2827 
2828       x_return_status := FND_API.G_RET_STS_ERROR;
2829       x_mesg_token_tbl := l_mesg_token_tbl ;
2830       return;
2831 
2832   end;
2833 
2834 --  activity_type
2835 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating activity_type . . . '); END IF;
2836 
2837   begin
2838     if p_eam_wo_rec.activity_type is not null then
2839       select 1
2840         into g_dummy
2841         from mfg_lookups
2842        where lookup_type = g_act_type
2843          and lookup_code = p_eam_wo_rec.activity_type
2844          and enabled_flag = 'Y';
2845     end if;
2846 
2847     x_return_status := FND_API.G_RET_STS_SUCCESS;
2848 
2849   exception
2850     when no_data_found then
2851 
2852       l_token_tbl(1).token_name  := 'Activity Type';
2853       l_token_tbl(1).token_value :=  p_eam_wo_rec.activity_type;
2854 
2855       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2856       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2857       (  p_message_name  => 'EAM_WO_ACTIVITY_TYPE'
2858        , p_token_tbl     => l_token_tbl
2859        , p_mesg_token_tbl     => l_mesg_token_tbl
2860        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2861       );
2862       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2863 
2864       x_return_status := FND_API.G_RET_STS_ERROR;
2865       x_mesg_token_tbl := l_mesg_token_tbl ;
2866       return;
2867 
2868   end;
2869 
2870 --  activity_cause
2871 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating activity_cause . . . '); END IF;
2872 
2873   begin
2874     if p_eam_wo_rec.activity_cause is not null then
2875       select 1
2876         into g_dummy
2877         from mfg_lookups
2878        where lookup_type = g_act_cause
2879          and lookup_code = p_eam_wo_rec.activity_cause
2880          and enabled_flag = 'Y';
2881     end if;
2882 
2883     x_return_status := FND_API.G_RET_STS_SUCCESS;
2884 
2885   exception
2886     when no_data_found then
2887 
2888       l_token_tbl(1).token_name  := 'Activity Cause';
2889       l_token_tbl(1).token_value :=  p_eam_wo_rec.activity_cause;
2890 
2891       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2892       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2893       (  p_message_name  => 'EAM_WO_ACTIVITY_CAUSE'
2894        , p_token_tbl     => l_token_tbl
2895        , p_mesg_token_tbl     => l_mesg_token_tbl
2896        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2897       );
2898       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2899 
2900       x_return_status := FND_API.G_RET_STS_ERROR;
2901       x_mesg_token_tbl := l_mesg_token_tbl ;
2902       return;
2903 
2904   end;
2905 
2906 
2907 
2908 --  activity_source
2909 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating activity_source . . . '); END IF;
2910 
2911   begin
2912     if p_eam_wo_rec.activity_source is not null then
2913       select 1
2914         into g_dummy
2915         from mfg_lookups
2916        where lookup_type = g_act_source
2917          and lookup_code = p_eam_wo_rec.activity_source
2918          and enabled_flag = 'Y';
2919     end if;
2920 
2921     x_return_status := FND_API.G_RET_STS_SUCCESS;
2922 
2923   exception
2924     when no_data_found then
2925 
2926       l_token_tbl(1).token_name  := 'Activity Source';
2927       l_token_tbl(1).token_value :=  p_eam_wo_rec.activity_source;
2928 
2929       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2930       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
2931       (  p_message_name  => 'EAM_WO_ACTIVITY_SOURCE'
2932        , p_token_tbl     => l_token_tbl
2933        , p_mesg_token_tbl     => l_mesg_token_tbl
2934        , x_mesg_token_tbl     => l_out_mesg_token_tbl
2935       );
2936       l_mesg_token_tbl      := l_out_mesg_token_tbl;
2937 
2938       x_return_status := FND_API.G_RET_STS_ERROR;
2939       x_mesg_token_tbl := l_mesg_token_tbl ;
2940       return;
2941 
2942   end;
2943 
2944 
2945 --  date_released
2946 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating accounting_period . . . '); END IF;
2947 
2948     --bug#4425025 - need to validate period only when releasing the first time.
2949      IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Old Date_released is : '||nvl(to_char(p_old_eam_wo_rec.date_released),'NULL')); END IF;
2950 
2951   declare
2952     l_date_released_calc    DATE;
2953 	l_min_open_period_date  DATE;
2954   begin
2955 
2956    if (p_eam_wo_rec.status_type     in  (WIP_CONSTANTS.HOLD,WIP_CONSTANTS.RELEASED) and
2957           nvl(p_old_eam_wo_rec.status_type,0) not in(WIP_CONSTANTS.RELEASED, WIP_CONSTANTS.HOLD) and
2958           p_old_eam_wo_rec.date_released is null) then
2959 
2960           IF (p_eam_wo_rec.scheduled_start_date < sysdate) THEN
2961 		    select nvl(min(period_start_date),p_eam_wo_rec.scheduled_start_date)
2962 	          into l_min_open_period_date
2963 		      from org_acct_periods
2964 		      where organization_id=p_eam_wo_rec.organization_id
2965 		      and open_flag = 'Y'
2966 			  and period_close_date is null;
2967 
2968                     l_date_released_calc := greatest (l_min_open_period_date,p_eam_wo_rec.scheduled_start_date);
2969           ELSE
2970   		    l_date_released_calc := sysdate;
2971 	  END IF;
2972 
2973         --date_released will be defaulted just before change_status procedure call in EAMVWOPB.pls.
2974 	--hence if date_released is NULL, get the defaulted value but do not stamp defaulted value in work order record
2975 	-- as date_released should be populated only when there is no workflow/workflow is approved
2976 	  IF(p_eam_wo_rec.status_type = WIP_CONSTANTS.RELEASED AND p_eam_wo_rec.date_released IS NOT NULL) THEN
2977 	              l_date_released_calc :=  TRUNC(p_eam_wo_rec.date_released);
2978 	  END IF;
2979 
2980           select 1
2981           into   g_dummy
2982           from org_acct_periods
2983           where organization_id = p_eam_wo_rec.organization_id
2984           and trunc(l_date_released_calc)
2985           between period_start_date and schedule_close_date
2986           and period_close_date is NULL;
2987 
2988           x_return_status := FND_API.G_RET_STS_SUCCESS;
2989 
2990     end if;
2991 
2992 
2993     exception
2994       when no_data_found then
2995         l_token_tbl(1).token_name  := 'Date Released';
2996         l_token_tbl(1).token_value :=  trunc(l_date_released_calc);
2997 
2998       l_out_mesg_token_tbl  := l_mesg_token_tbl;
2999       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3000       (  p_message_name  => 'EAM_WO_NO_ACCT_PERIOD'
3001        , p_token_tbl     => l_token_tbl
3002        , p_mesg_token_tbl     => l_mesg_token_tbl
3003        , x_mesg_token_tbl     => l_out_mesg_token_tbl
3004       );
3005       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3006 
3007       x_return_status := FND_API.G_RET_STS_ERROR;
3008       x_mesg_token_tbl := l_mesg_token_tbl ;
3009       return;
3010 
3011     end;
3012 
3013 
3014 --  maintenance_object_source
3015 
3016 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating maintenance_object_source . . . '); END IF;
3017 
3018   begin
3019 
3020    if (p_eam_wo_rec.maintenance_object_source is not null) then
3021 
3022          select 1
3023            into g_dummy
3024            from mfg_lookups
3025           where lookup_type = g_obj_source
3026             and lookup_code = p_eam_wo_rec.maintenance_object_source;
3027 
3028           x_return_status := FND_API.G_RET_STS_SUCCESS;
3029 
3030     end if;
3031 
3032     exception
3033       when no_data_found then
3034         l_token_tbl(1).token_name  := 'Maintenance Object Source';
3035         l_token_tbl(1).token_value :=  p_eam_wo_rec.maintenance_object_source;
3036 
3037       l_out_mesg_token_tbl  := l_mesg_token_tbl;
3038       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3039       (  p_message_name  => 'EAM_WO_MAINT_OBJECT_SOURCE'
3040        , p_token_tbl     => l_token_tbl
3041        , p_mesg_token_tbl     => l_mesg_token_tbl
3042        , x_mesg_token_tbl     => l_out_mesg_token_tbl
3043       );
3044       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3045 
3046       x_return_status := FND_API.G_RET_STS_ERROR;
3047       x_mesg_token_tbl := l_mesg_token_tbl ;
3048       return;
3049 
3050     end;
3051 
3052 
3053 --  user_id
3054 
3055 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating user_id . . . '); END IF;
3056 
3057   begin
3058 
3059    if (p_eam_wo_rec.user_id is not null) then
3060 
3061          select 1
3062            into g_dummy
3063            from fnd_user
3064           where user_id = p_eam_wo_rec.user_id;
3065 
3066           x_return_status := FND_API.G_RET_STS_SUCCESS;
3067 
3068     end if;
3069 
3070     exception
3071       when no_data_found then
3072         l_token_tbl(1).token_name  := 'USER_ID';
3073         l_token_tbl(1).token_value :=  p_eam_wo_rec.user_id;
3074 
3075       l_out_mesg_token_tbl  := l_mesg_token_tbl;
3076       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3077       (  p_message_name  => 'EAM_WO_USER'
3078        , p_token_tbl     => l_token_tbl
3079        , p_mesg_token_tbl     => l_mesg_token_tbl
3080        , x_mesg_token_tbl     => l_out_mesg_token_tbl
3081       );
3082       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3083 
3084       x_return_status := FND_API.G_RET_STS_ERROR;
3085       x_mesg_token_tbl := l_mesg_token_tbl ;
3086       return;
3087 
3088     end;
3089 
3090 
3091 --  responsibility_id
3092 
3093 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating responsibility_id . . . '); END IF;
3094 
3095   begin
3096 
3097    if (p_eam_wo_rec.responsibility_id is not null) then
3098 
3099          select 1
3100            into g_dummy
3101            from fnd_responsibility
3102           where responsibility_id = p_eam_wo_rec.responsibility_id;
3103 
3104           x_return_status := FND_API.G_RET_STS_SUCCESS;
3105 
3106     end if;
3107 
3108     exception
3109       when no_data_found then
3110         l_token_tbl(1).token_name  := 'RESPONSIBILITY_ID';
3111         l_token_tbl(1).token_value :=  p_eam_wo_rec.responsibility_id;
3112 
3113       l_out_mesg_token_tbl  := l_mesg_token_tbl;
3114       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3115       (  p_message_name  => 'EAM_WO_RESPONSIBILITY'
3116        , p_token_tbl     => l_token_tbl
3117        , p_mesg_token_tbl     => l_mesg_token_tbl
3118        , x_mesg_token_tbl     => l_out_mesg_token_tbl
3119       );
3120       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3121 
3122       x_return_status := FND_API.G_RET_STS_ERROR;
3123       x_mesg_token_tbl := l_mesg_token_tbl ;
3124       return;
3125 
3126     end;
3127 
3128 --  user_defined_status_id
3129 
3130 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating user_defined_status_id . . . '); END IF;
3131 
3132   begin
3133 
3134    IF (p_eam_wo_rec.user_defined_status_id IS NOT NULL) AND
3135          (p_eam_wo_rec.user_defined_status_id <> p_old_eam_wo_rec.user_defined_status_id)THEN
3136 
3137          SELECT enabled_flag
3138            INTO l_enabled_flag
3139            FROM EAM_WO_STATUSES_B
3140           WHERE status_id = p_eam_wo_rec.user_defined_status_id;
3141 
3142           IF l_enabled_flag <> 'Y'  THEN
3143 		RAISE fnd_api.g_exc_error;
3144 	  END IF;
3145 
3146     END IF;
3147 
3148     exception
3149       when fnd_api.g_exc_error then
3150         l_token_tbl(1).token_name  := 'USER_DEFINED_STATUS_ID';
3151         l_token_tbl(1).token_value :=  p_eam_wo_rec.user_defined_status_id;
3152 
3153       l_out_mesg_token_tbl  := l_mesg_token_tbl;
3154       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3155       (  p_message_name  => 'EAM_WO_DIS_USER_DEFINED_STATUS'
3156        , p_token_tbl     => l_token_tbl
3157        , p_mesg_token_tbl     => l_mesg_token_tbl
3158        , x_mesg_token_tbl     => l_out_mesg_token_tbl
3159       );
3160       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3161 
3162       x_return_status := FND_API.G_RET_STS_ERROR;
3163       x_mesg_token_tbl := l_mesg_token_tbl ;
3164       return;
3165 
3166     end;
3167 
3168 --  material_issue_by_mo
3169 
3170 IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating material_issue_by_mo flag . . . '); END IF;
3171 
3172   begin
3173 
3174     if (p_eam_wo_rec.material_issue_by_mo is null) then
3175       raise fnd_api.g_exc_unexpected_error;
3176     else
3177       x_return_status := FND_API.G_RET_STS_SUCCESS;
3178     end if;
3179 
3180 
3181 
3182     if  p_eam_wo_rec.transaction_type = EAM_PROCESS_WO_PVT.G_OPR_UPDATE
3183       and p_eam_wo_rec.status_type not in (WIP_CONSTANTS.DRAFT,WIP_CONSTANTS.UNRELEASED)     /* Bug no 3349197 */
3184       and not(p_eam_wo_rec.status_type=WIP_CONSTANTS.RELEASED and (p_old_eam_wo_rec.status_type IN (WIP_CONSTANTS.DRAFT,WIP_CONSTANTS.UNRELEASED,WIP_CONSTANTS.CANCELLED)))    /*Bug No 3476156*/
3185       and p_eam_wo_rec.material_issue_by_mo <> p_old_eam_wo_rec.material_issue_by_mo then
3186 
3187       IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN
3188 	  	EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating material_issue_by_mo flag . .wip_entity_id' || p_eam_wo_rec.wip_entity_id);
3189 	  	EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating material_issue_by_mo flag . .org_id' || p_eam_wo_rec.organization_id);
3190 	  END IF;
3191 
3192       if ((p_eam_wo_rec.status_type = WIP_CONSTANTS.HOLD) OR (p_eam_wo_rec.status_type=WIP_CONSTANTS.RELEASED and p_old_eam_wo_rec.status_type=WIP_CONSTANTS.HOLD)) then   /*Bug no 3476156*/
3193 	      -- If material allocation has been done then raise error
3194 		EAM_WORKORDER_UTIL_PKG.CK_MATERIAL_ALLOC_ON_HOLD(X_Org_Id => p_eam_wo_rec.organization_id,
3195 				     X_Wip_Id => p_eam_wo_rec.wip_entity_id,
3196 				     X_Rep_Id => -1,
3197 				     X_Line_Id => -1,
3198 				     X_Ent_Type=> 6 ,
3199 				     x_return_status =>x_return_status);
3200 
3201 		if x_return_status<> FND_API.G_RET_STS_SUCCESS then
3202 		  l_mo_err_flag := '2';
3203 		  raise fnd_api.g_exc_error;
3204 		end if;
3205       else
3206 	      l_mo_err_flag := '1';
3207 	      raise fnd_api.g_exc_error;
3208       end if;
3209    end if;
3210     exception
3211     when fnd_api.g_exc_error then
3212       l_out_mesg_token_tbl  := l_mesg_token_tbl;
3213 
3214       If l_mo_err_flag = '1' Then
3215 	      EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3216 	      (  p_message_name  => 'EAM_WO_MTL_ISS_DISALLOWED'
3217 	       , p_token_tbl     => l_token_tbl
3218 	       , p_mesg_token_tbl     => l_mesg_token_tbl
3219 	       , x_mesg_token_tbl     => l_out_mesg_token_tbl
3220 	      );
3221       Else
3222             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3223 	      (  p_message_name  => 'EAM_WO_MTL_ALRDY_ISSUED'
3224 	       , p_token_tbl     => l_token_tbl
3225 	       , p_mesg_token_tbl     => l_mesg_token_tbl
3226 	       , x_mesg_token_tbl     => l_out_mesg_token_tbl
3227 	      );
3228       End if;
3229 
3230 
3231       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3232 
3233       x_return_status := FND_API.G_RET_STS_ERROR;
3234       x_mesg_token_tbl := l_mesg_token_tbl ;
3235       return;
3236 
3237     when others then
3238 
3239       l_out_mesg_token_tbl  := l_mesg_token_tbl;
3240       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3241       (  p_message_name  => 'EAM_WO_MTL_ISSUE_BY_MO'
3242        , p_token_tbl     => l_token_tbl
3243        , p_mesg_token_tbl     => l_mesg_token_tbl
3244        , x_mesg_token_tbl     => l_out_mesg_token_tbl
3245       );
3246       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3247 
3248       x_return_status := FND_API.G_RET_STS_ERROR;
3249       x_mesg_token_tbl := l_mesg_token_tbl ;
3250       return;
3251 
3252     end;
3253 
3254     -- Bug # 4709084 : FAILURE ANALYSIS : Check for failure_code_required..
3255     IF EAM_PROCESS_WO_PVT.GET_DEBUG = 'Y' THEN
3256        EAM_ERROR_MESSAGE_PVT.Write_Debug('Validating failure_code_required . . . ');
3257     END IF;
3258 
3259     if (p_eam_wo_rec.failure_code_required is not null and p_eam_wo_rec.failure_code_required not in ('Y', 'N')) then
3260       l_token_tbl(1).token_name  := 'failure_code_required';
3261       l_token_tbl(1).token_value :=  p_eam_wo_rec.failure_code_required;
3262       l_out_mesg_token_tbl  := l_mesg_token_tbl;
3263       EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3264       (  p_message_name  => 'EAM_WO_FAILURE_CODE_REQUIRED'
3265        , p_token_tbl     => l_token_tbl
3266        , p_mesg_token_tbl     => l_mesg_token_tbl
3267        , x_mesg_token_tbl     => l_out_mesg_token_tbl
3268       );
3269       l_mesg_token_tbl      := l_out_mesg_token_tbl;
3270       x_return_status := FND_API.G_RET_STS_ERROR;
3271       x_mesg_token_tbl := l_mesg_token_tbl ;
3272       return;
3273     else
3274        x_return_status := FND_API.G_RET_STS_SUCCESS;
3275     end if;
3276 
3277     EXCEPTION
3278         WHEN OTHERS THEN
3279 
3280         l_token_tbl(1).token_name  := 'Validation (Check Attributes)';
3281         l_token_tbl(1).token_value :=  substrb(SQLERRM,1,200);
3282 
3283               l_out_mesg_token_tbl  := l_mesg_token_tbl;
3284               EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3285               (  p_message_name   => NULL
3286                , p_token_tbl      => l_token_tbl
3287                , p_mesg_token_tbl => l_mesg_token_tbl
3288                , x_mesg_token_tbl => l_out_mesg_token_tbl
3289               ) ;
3290               l_mesg_token_tbl      := l_out_mesg_token_tbl;
3291 
3292               -- Return the status and message table.
3293               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3294               x_mesg_token_tbl := l_mesg_token_tbl ;
3295 
3296     END Check_Attributes;
3297 
3298     /*********************************************************************
3299     * Procedure     : Check_Required
3300     * Parameters IN : Work Order column record
3301     * Parameters OUT NOCOPY: Mesg Token Table
3302     *                 Return_Status
3303     * Purpose       :
3304     **********************************************************************/
3305 
3306     PROCEDURE Check_Required
3307         (  p_eam_wo_rec             IN EAM_PROCESS_WO_PUB.eam_wo_rec_type
3308          , x_return_status          OUT NOCOPY VARCHAR2
3309          , x_Mesg_Token_Tbl         OUT NOCOPY EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type
3310          )
3311     IS
3312             l_Mesg_Token_Tbl        EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
3313             l_out_Mesg_Token_Tbl        EAM_ERROR_MESSAGE_PVT.Mesg_Token_Tbl_Type;
3314             l_Token_Tbl             EAM_ERROR_MESSAGE_PVT.Token_Tbl_Type;
3315     BEGIN
3316 
3317         x_return_status := FND_API.G_RET_STS_SUCCESS;
3318 
3319         IF p_eam_wo_rec.organization_id IS NULL
3320         THEN
3321             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3322             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3323 
3324             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3325             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3326             (  p_message_name	=> 'EAM_WO_ORG_REQUIRED'
3327              , p_token_tbl		=> l_Token_tbl
3328              , p_Mesg_Token_Tbl	=> l_Mesg_Token_Tbl
3329              , x_Mesg_Token_Tbl	=> l_out_Mesg_Token_Tbl
3330              );
3331             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3332 
3333             x_return_status := FND_API.G_RET_STS_ERROR;
3334 
3335         END IF;
3336 
3337         IF (p_eam_wo_rec.asset_number IS NULL) AND
3338            (p_eam_wo_rec.rebuild_item_id IS NULL) AND
3339            (p_eam_wo_rec.maintenance_object_id IS NULL)
3340         THEN
3341             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3342             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3343 
3344             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3345             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3346             (  p_message_name	=> 'EAM_WO_MAINT_ASSET_REQUIRED'
3347              , p_token_tbl		=> l_Token_tbl
3348              , p_Mesg_Token_Tbl	=> l_Mesg_Token_Tbl
3349              , x_Mesg_Token_Tbl	=> l_out_Mesg_Token_Tbl
3350              );
3351             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3352 
3353             x_return_status := FND_API.G_RET_STS_ERROR;
3354 
3355         END IF;
3356 
3357 
3358         IF p_eam_wo_rec.class_code IS NULL AND p_eam_wo_rec.class_code = FND_API.G_MISS_CHAR
3359         THEN
3360             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3361             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3362 
3363             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3364             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3365             (  p_message_name   => 'EAM_WO_WAC_REQUIRED'
3366              , p_token_tbl      => l_Token_tbl
3367              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3368              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3369              );
3370             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3371 
3372             x_return_status := FND_API.G_RET_STS_ERROR;
3373 
3374         END IF;
3375 
3376 
3377 
3378 		-- agaurav - Added the check that owning_department is not mandatory
3379 		--             - in the statuses DRAFT and UNRELEASED.
3380 
3381         IF p_eam_wo_rec.status_type not in (wip_constants.draft, wip_constants.unreleased,wip_constants.cancelled, wip_constants.hold)
3382 		THEN
3383              IF p_eam_wo_rec.owning_department IS NULL
3384              THEN
3385                   l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3386                   l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3387 
3388                   l_out_mesg_token_tbl  := l_mesg_token_tbl;
3389                   EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3390                   (  p_message_name   => 'EAM_WO_DEPT_REQUIRED'
3391                    , p_token_tbl      => l_Token_tbl
3392                    , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3393                    , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3394                   );
3395                   l_mesg_token_tbl      := l_out_mesg_token_tbl;
3396 
3397                   x_return_status := FND_API.G_RET_STS_ERROR;
3398 
3399               END IF;
3400 		END IF;
3401 
3402 
3403         IF p_eam_wo_rec.wip_entity_id IS NULL
3404         THEN
3405             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3406             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3407 
3408             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3409             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3410             (  p_message_name   => 'EAM_WO_WIP_ENTITY_ID_REQUIRED'
3411              , p_token_tbl      => l_Token_tbl
3412              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3413              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3414              );
3415             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3416 
3417             x_return_status := FND_API.G_RET_STS_ERROR;
3418 
3419         END IF;
3420 
3421         IF p_eam_wo_rec.wip_entity_name IS NULL
3422         THEN
3423             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3424             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3425 
3426             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3427             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3428             (  p_message_name   => 'EAM_WO_WIP_NAME_REQUIRED'
3429              , p_token_tbl      => l_Token_tbl
3430              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3431              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3432              );
3433             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3434 
3435             x_return_status := FND_API.G_RET_STS_ERROR;
3436 
3437         END IF;
3438 
3439         IF p_eam_wo_rec.status_type IS NULL
3440         THEN
3441             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3442             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3443 
3444             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3445             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3446             (  p_message_name   => 'EAM_WO_STATUS_TYPE_REQUIRED'
3447              , p_token_tbl      => l_Token_tbl
3448              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3449              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3450              );
3451             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3452 
3453             x_return_status := FND_API.G_RET_STS_ERROR;
3454 
3455         END IF;
3456 
3457 
3458         IF p_eam_wo_rec.job_quantity IS NULL
3459         THEN
3460             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3461             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3462 
3463             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3464             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3465             (  p_message_name   => 'EAM_WO_JOB_QTY_REQUIRED'
3466              , p_token_tbl      => l_Token_tbl
3467              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3468              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3469              );
3470             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3471 
3472             x_return_status := FND_API.G_RET_STS_ERROR;
3473 
3474         END IF;
3475 
3476 
3477         IF p_eam_wo_rec.firm_planned_flag IS NULL
3478         THEN
3479             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3480             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3481 
3482             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3483             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3484             (  p_message_name   => 'EAM_WO_FIRM_FLAG_REQUIRED'
3485              , p_token_tbl      => l_Token_tbl
3486              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3487              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3488              );
3489             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3490 
3491             x_return_status := FND_API.G_RET_STS_ERROR;
3492 
3493         END IF;
3494 
3495         IF p_eam_wo_rec.wip_supply_type IS NULL
3496         THEN
3497             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3498             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3499 
3500             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3501             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3502             (  p_message_name   => 'EAM_WO_SUPPLY_TYPE_REQUIRED'
3503              , p_token_tbl      => l_Token_tbl
3504              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3505              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3506              );
3507             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3508 
3509             x_return_status := FND_API.G_RET_STS_ERROR;
3510 
3511         END IF;
3512 
3513         IF p_eam_wo_rec.scheduled_start_date IS NULL
3514         THEN
3515             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3516             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3517 
3518             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3519             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3520             (  p_message_name   => 'EAM_WO_START_DATE_REQUIRED'
3521              , p_token_tbl      => l_Token_tbl
3522              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3523              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3524              );
3525             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3526 
3527             x_return_status := FND_API.G_RET_STS_ERROR;
3528 
3529         END IF;
3530 
3531         IF p_eam_wo_rec.scheduled_completion_date IS NULL
3532         THEN
3533             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3534             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3535 
3536             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3537             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3538             (  p_message_name   => 'EAM_WO_COMPL_DATE_REQUIRED'
3539              , p_token_tbl      => l_Token_tbl
3540              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3541              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3542              );
3543             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3544 
3545             x_return_status := FND_API.G_RET_STS_ERROR;
3546 
3547         END IF;
3548 
3549         IF p_eam_wo_rec.due_date IS NULL AND p_eam_wo_rec.requested_start_date IS NULL
3550         THEN
3551             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3552             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3553 
3554             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3555             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3556             (  p_message_name   => 'EAM_WO_DATE_REQUIRED'
3557              , p_token_tbl      => l_Token_tbl
3558              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3559              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3560              );
3561             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3562 
3563             x_return_status := FND_API.G_RET_STS_ERROR;
3564 
3565         END IF;
3566 
3567         IF p_eam_wo_rec.maintenance_object_source IS NULL
3568         THEN
3569             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3570             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3571 
3572             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3573             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3574             (  p_message_name   => 'EAM_WO_MAINT_OBJ_SRC_REQUIRED'
3575              , p_token_tbl      => l_Token_tbl
3576              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3577              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3578              );
3579             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3580 
3581             x_return_status := FND_API.G_RET_STS_ERROR;
3582 
3583         END IF;
3584 
3585 
3586         IF p_eam_wo_rec.maintenance_object_type IS NOT NULL and
3587            p_eam_wo_rec.maintenance_object_id IS NULL
3588         THEN
3589             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3590             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3591 
3592             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3593             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3594             (  p_message_name   => 'EAM_WO_MAINT_OBJ_ID_REQUIRED'
3595              , p_token_tbl      => l_Token_tbl
3596              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3597              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3598              );
3599             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3600 
3601             x_return_status := FND_API.G_RET_STS_ERROR;
3602 
3603         END IF;
3604 
3605 
3606         IF p_eam_wo_rec.maintenance_object_type IS NULL and
3607            p_eam_wo_rec.maintenance_object_id IS NOT NULL
3608         THEN
3609             l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3610             l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3611 
3612             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3613             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3614             (  p_message_name   => 'EAM_WO_MAINT_OBJ_TYPE_REQUIRED'
3615              , p_token_tbl      => l_Token_tbl
3616              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3617              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3618              );
3619             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3620 
3621             x_return_status := FND_API.G_RET_STS_ERROR;
3622 
3623         END IF;
3624 
3625 
3626         IF (p_eam_wo_rec.user_id IS NULL and
3627            p_eam_wo_rec.responsibility_id IS NOT NULL)
3628            or (p_eam_wo_rec.user_id IS NOT NULL and
3629            p_eam_wo_rec.responsibility_id IS NULL)
3630         THEN
3631             l_token_tbl(1).token_name  := 'USER_ID';
3632             l_token_tbl(1).token_value :=  p_eam_wo_rec.user_id;
3633 
3634             l_out_mesg_token_tbl  := l_mesg_token_tbl;
3635             EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3636             (  p_message_name   => 'EAM_WO_USER_RESP_REQUIRED'
3637              , p_token_tbl      => l_Token_tbl
3638              , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3639              , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3640              );
3641             l_mesg_token_tbl      := l_out_mesg_token_tbl;
3642 
3643             x_return_status := FND_API.G_RET_STS_ERROR;
3644 
3645         END IF;
3646 
3647 /* Added the validation that rebuild serial number is mandatory in status Released */
3648        IF ( p_eam_wo_rec.status_type in ( WIP_CONSTANTS.RELEASED )
3649                and p_eam_wo_rec.rebuild_serial_number is NULL
3650                and p_eam_wo_rec.asset_group_id is NULL
3651                and p_eam_wo_rec.maintenance_object_type = 3
3652 			   and p_eam_wo_rec.maintenance_object_source = 1)
3653           THEN
3654                    l_token_tbl(1).token_name  := 'WIP_ENTITY_NAME';
3655                    l_token_tbl(1).token_value :=  p_eam_wo_rec.wip_entity_name;
3656 
3657                    l_out_mesg_token_tbl  := l_mesg_token_tbl;
3658                    EAM_ERROR_MESSAGE_PVT.Add_Error_Token
3659                    (  p_message_name   => 'EAM_WO_REB_SR_NUM_REQUIRED'
3660                     , p_token_tbl      => l_Token_tbl
3661                     , p_Mesg_Token_Tbl => l_Mesg_Token_Tbl
3662                     , x_Mesg_Token_Tbl => l_out_Mesg_Token_Tbl
3663                     );
3664                    l_mesg_token_tbl      := l_out_mesg_token_tbl;
3665 
3666                    x_return_status := FND_API.G_RET_STS_ERROR;
3667         END IF;
3668 
3669 
3670 
3671         x_Mesg_Token_Tbl := l_Mesg_Token_Tbl;
3672 
3673     END Check_Required;
3674 
3675 
3676 END EAM_WO_VALIDATE_PVT;