DBA Data[Home] [Help]

PACKAGE BODY: APPS.EAM_ITEM_ACTIVITIES_PUB

Source


1 PACKAGE BODY EAM_ITEM_ACTIVITIES_PUB AS
2 /* $Header: EAMPIAAB.pls 120.5.12020000.2 2012/07/05 10:37:15 vpasupur ship $ */
3 -- Start of comments
4 --	API name 	: EAM_ITEM_ACTIVITIES_PUB
5 --	Type		: Public
6 --	Function	: INSERT_ITEM_ACTIVITIES, update_item_activities
7 --	Pre-reqs	: None.
8 --	Parameters	:
9 --	IN		:	p_api_version           	IN NUMBER	Required
10 --				p_init_msg_list		IN VARCHAR2 	Optional
11 --					Default = FND_API.G_FALSE
12 --				p_commit	    		IN VARCHAR2	Optional
13 --					Default = FND_API.G_FALSE
14 --				p_validation_level		IN NUMBER	Optional
15 --					Default = FND_API.G_VALID_LEVEL_FULL
16 --				parameter1
17 --				parameter2
18 --				.
19 --				.
20 --	OUT		:	x_return_status		OUT	VARCHAR2(1)
21 --				x_msg_count			OUT	NUMBER
22 --				x_msg_data			OUT	VARCHAR2(2000)
23 --				parameter1
24 --				parameter2
25 --				.
26 --				.
27 --	Version	: Current version	x.x
28 --				Changed....
29 --			  previous version	y.y
30 --				Changed....
31 --			  .
32 --			  .
33 --			  previous version	2.0
34 --				Changed....
35 --			  Initial version 	1.0
36 --
37 --	Notes		: Note text
38 --
39 -- End of comments
40 
41 G_PKG_NAME 	CONSTANT VARCHAR2(30):='EAM_ITEM_ACTIVITIES_PUB';
42 
43 /* for de-bugging */
44 /* g_sr_no		number ; */
45 
46 PROCEDURE print_log(info varchar2) is
47 PRAGMA  AUTONOMOUS_TRANSACTION;
48 l_dummy number;
49 BEGIN
50 /*
51 if (g_sr_no is null or g_sr_no<0) then
52 		g_sr_no := 0;
53 	end if;
54 
55 	g_sr_no := g_sr_no+1;
56 
57 	INSERT into temp_isetup_api(msg,sr_no)
58 	VALUES (info,g_sr_no);
59 
60 	commit;
61 */
62   FND_FILE.PUT_LINE(FND_FILE.LOG, info);
63 
64 END;
65 
66 FUNCTION VALIDATE_EAM_ENABLED
67 	(P_ORGANIZATION_ID NUMBER)
68 	RETURN BOOLEAN
69 IS
70 L_STATUS NUMBER;
71 BEGIN
72 	SELECT count(*) INTO L_status
73 	FROM MTL_PARAMETERS
74 	WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
75 	AND NVL(EAM_ENABLED_FLAG, 'N') = 'Y';
76 
77 	IF L_status > 0
78 	THEN
79 		RETURN TRUE;
80 	ELSE
81 		RETURN FALSE;
82 	END IF;
83 END VALIDATE_EAM_ENABLED;
84 /* function checking the item unique when both the 2 combinations are provided by the user */
85 FUNCTION check_item_unique (
86 			p_maintenance_object_type NUMBER,
87 			p_maintenance_object_id NUMBER,
88 			p_asset_group_id NUMBER,
89 			p_organization_id NUMBER,
90 			p_asset_number VARCHAR2,
91 			p_creation_organization_id NUMBER
92 		)
93 	RETURN boolean
94 IS
95 	l_count_rec NUMBER := 0;
96 BEGIN
97 	IF (p_maintenance_object_type = 3) THEN
98 		IF ( p_asset_number IS NOT NULL ) THEN
99 			SELECT count(*) INTO l_count_rec
100 			FROM csi_item_instances cii
101 			WHERE cii.serial_number = p_asset_number
102 			AND cii.instance_id = p_maintenance_object_id
103 			AND cii.inventory_item_id = p_asset_group_id;
104 		END IF;
105 
106 	ELSIF (p_maintenance_object_type = 2) THEN
107 		IF ((p_asset_number IS NULL) AND
108 		    (p_maintenance_object_id = p_asset_group_id)) THEN
109 			SELECT count(*) INTO l_count_rec
110 			FROM mtl_system_items msi, mtl_parameters mp
111 			WHERE msi.inventory_item_id = p_asset_group_id
112 			AND msi.organization_id = mp.organization_id
113 			AND mp.maint_organization_id = p_organization_id;
114 		END IF;
115 
116 	END IF;
117 
118 	IF (l_count_rec > 0) THEN
119 		RETURN true;
120 	ELSE
121 		RETURN false;
122 	END IF;
123 
124 END check_item_unique;
125 
126 /* For raising error */
127 PROCEDURE RAISE_ERROR (ERROR VARCHAR2)
128 IS
129 BEGIN
130 
131 
132 	FND_MESSAGE.SET_NAME ('EAM', ERROR);
133         FND_MSG_PUB.ADD;
134         RAISE FND_API.G_EXC_ERROR;
135 END;
136 
137 --funcation to validate if the provided lookup code is present forthe specified type.
138 PROCEDURE validate_mfg_lookups(P_LOOKUP_TYPE IN VARCHAR2, P_LOOKUP_CODE in varchar2, P_MSG in varchar2)
139 is
140    l_count number;
141 BEGIN
142         IF P_LOOKUP_CODE IS NULL OR P_LOOKUP_CODE = FND_API.G_MISS_CHAR
143           THEN
144                 RETURN ;
145           END IF ;
146 
147         SELECT count(*) INTO l_count
148 	FROM   mfg_lookups
149 	WHERE  lookup_type = P_LOOKUP_TYPE
150 	  AND  lookup_code= P_LOOKUP_CODE;
151 
152         if l_count = 0
153         then
154 	      fnd_message.set_name('EAM', P_MSG);
155               fnd_msg_pub.add;
156               RAISE fnd_api.g_exc_error;
157         end if;
158 END;
159 
160 --funciton to validate the wip entity class CLASS_TYPE = "Maintenance" <6>
161 PROCEDURE validate_acnt_class(P_WIP_ACNT_CLASS in varchar2, P_ORGANIZATION_ID IN NUMBER)
162 is
163         l_count number;
164   BEGIN
165 
166 	IF P_WIP_ACNT_CLASS IS NULL OR P_WIP_ACNT_CLASS = FND_API.G_MISS_CHAR OR P_ORGANIZATION_ID IS NULL
167           THEN
168                 RETURN ;
169           END IF ;
170 
171         SELECT count(*) INTO l_count
172         from wip_accounting_classes
173         where class_code = P_WIP_ACNT_CLASS
174         and class_type = 6
175         and organization_id = P_ORGANIZATION_ID;
176 
177         if l_count = 0
178         then
179 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_CLASS_CODE');
180               fnd_msg_pub.add;
181               RAISE fnd_api.g_exc_error;
182         end if;
183 END;
184 
185 
186 PROCEDURE validate_boolean_flag(p_flag IN VARCHAR2, p_msg IN VARCHAR2)
187 is
188 begin
189 	if(p_flag is not null and p_flag <> FND_API.G_MISS_CHAR)
190 	then
191 	if not 	EAM_COMMON_UTILITIES_PVT.validate_boolean_flag(p_flag)
192 	then
193 	      fnd_message.set_name('EAM', p_msg);
194               fnd_msg_pub.add;
195               RAISE fnd_api.g_exc_error;
196 	end if;
197 	end if;
198 end;
199 
200 
201 PROCEDURE validate_maintenance_object_id(p_organization_id in number, p_object_id in number, p_eam_item_type in NUMBER)
202 is
203 l_count number;
204 begin
205           IF p_object_id IS NULL OR p_eam_item_type IS NULL OR p_organization_id IS NULL
206           THEN
207                 RETURN ;
208           END IF ;
209 
210 	  if p_eam_item_type = 3 then
211 		select count(cii.instance_id) into l_count
212 		from csi_item_instances cii
213 		where cii.instance_id=p_object_id;
214 	  elsif p_eam_item_type = 2 then
215 		select count(msi.inventory_item_id) into l_count
216 		from mtl_system_items msi, mtl_parameters mp
217 		where msi.inventory_item_id = p_object_id
218 		  and msi.organization_id = mp.organization_id
219 		  and mp.maint_organization_id = p_organization_id
220 		--and eam_item_type = p_eam_item_type
221 		;
222 	  end if;
223 
224 	if l_count = 0 then
225 	      fnd_message.set_name('EAM', 'EAM_INVALID_MAINT_OBJ_ID');
226               fnd_msg_pub.add;
227               RAISE fnd_api.g_exc_error;
228 	end if;
229 
230 END;
231 
232 
233 -- This function validates an asset group, asset activity, or
234 -- rebuildable item. p_eam_item_type indicates the type of item being
235 -- validated. Asset group: 1; Asset activity: 2; Rebuildable item: 3.
236 PROCEDURE validate_inventory_item_id
237 (
238         p_organization_id in number,
239         p_inventory_item_id in number
240 ) is
241 l_count number:=0;
242 begin
243         IF P_ORGANIZATION_ID IS NOT NULL AND p_inventory_item_id  IS NOT NULL
244         THEN
245 
246 	select count(msi.inventory_item_id) into l_count
247 	from mtl_system_items msi, mtl_parameters mp
248 	where msi.inventory_item_id=p_inventory_item_id
249 	and msi.organization_id = mp.organization_id
250 	and mp.maint_organization_id=p_organization_id
251 	and eam_item_type IN (1, 3);
252 
253 	END IF;
254 
255 	if (l_count = 0) then
256 	      fnd_message.set_name('EAM', 'EAM_INVALID_INVENTORY_ITEM');
257               fnd_msg_pub.add;
258               RAISE fnd_api.g_exc_error;
259 	end if;
260 end validate_inventory_item_id;
261 
262 procedure validate_serial_number(p_serial_number in varchar2 ,p_tmpl_flag in varchar2 , p_organization_id in number )
263 is
264    l_count number;
265 
266   BEGIN
267 
268     if nvl(p_tmpl_flag, 'N') = 'Y' and p_serial_number is not null
269     then
270 	      fnd_message.set_name('EAM', 'EAM_IAA_SERIAL_NUMBER_NOT_NULL');
271               fnd_msg_pub.add;
272               RAISE fnd_api.g_exc_error;
273     end if;
274 
275     if nvl(p_tmpl_flag, 'N') = 'N' and p_serial_number is null
276     then
277 	      fnd_message.set_name('EAM', 'EAM_IAA_SERIAL_NUMBER_NULL');
278               fnd_msg_pub.add;
279               RAISE fnd_api.g_exc_error;
280     end if;
281 
282     if nvl(p_tmpl_flag, 'N') = 'N'
283     then
284         select count(cii.inventory_item_id) into l_count
285         from csi_item_instances cii
286 	where cii.serial_number = p_serial_number;
287 
288 	if (l_count = 0) then
289 	      fnd_message.set_name('EAM', 'EAM_EZWO_ASSET_BAD');
290               fnd_msg_pub.add;
291               RAISE fnd_api.g_exc_error;
292 	end if;
293     end if;
294 END validate_serial_number;
295 
296 
297 
298 procedure validate_dff_segments(
299 			p_ATTRIBUTE_CATEGORY    IN                	  VARCHAR2 default null,
300 			p_ATTRIBUTE1            IN                        VARCHAR2 default null,
301 			p_ATTRIBUTE2            IN                        VARCHAR2 default null,
302 			p_ATTRIBUTE3            IN                        VARCHAR2 default null,
303 			p_ATTRIBUTE4            IN                        VARCHAR2 default null,
304 			p_ATTRIBUTE5            IN                        VARCHAR2 default null,
305 			p_ATTRIBUTE6            IN                        VARCHAR2 default null,
306 			p_ATTRIBUTE7            IN                        VARCHAR2 default null,
307 			p_ATTRIBUTE8            IN                        VARCHAR2 default null,
308 			p_ATTRIBUTE9            IN                        VARCHAR2 default null,
309 			p_ATTRIBUTE10           IN                        VARCHAR2 default null,
310 			p_ATTRIBUTE11           IN                        VARCHAR2 default null,
311 			p_ATTRIBUTE12           IN                        VARCHAR2 default null,
312 			p_ATTRIBUTE13           IN                        VARCHAR2 default null,
313 			p_ATTRIBUTE14           IN                        VARCHAR2 default null,
314 			p_ATTRIBUTE15           IN                        VARCHAR2 default null
315 			)
316 is
317 l_error_segments number;
318 l_error_message varchar2(4000);
319 
320 begin
321         -- validate the desc. flex fields
322 	if not EAM_COMMON_UTILITIES_PVT.validate_desc_flex_field
323 	(
324 		p_app_short_name => 'INV',
325 		p_desc_flex_name => 'MTL_EAM_ASSET_ACTIVITIES',
326                 p_ATTRIBUTE_CATEGORY => p_ATTRIBUTE_CATEGORY,
327                 p_ATTRIBUTE1      => p_ATTRIBUTE1,
328                 p_ATTRIBUTE2      => p_ATTRIBUTE2,
329                 p_ATTRIBUTE3      => p_ATTRIBUTE3,
330                 p_ATTRIBUTE4      => p_ATTRIBUTE4,
331                 p_ATTRIBUTE5      => p_ATTRIBUTE5,
332                 p_ATTRIBUTE6      => p_ATTRIBUTE6,
333                 p_ATTRIBUTE7      => p_ATTRIBUTE7,
334                 p_ATTRIBUTE8      => p_ATTRIBUTE8,
335                 p_ATTRIBUTE9      => p_ATTRIBUTE9,
336                 p_ATTRIBUTE10     => p_ATTRIBUTE10,
337                 p_ATTRIBUTE11     => p_ATTRIBUTE11,
338                 p_ATTRIBUTE12     => p_ATTRIBUTE12,
339                 p_ATTRIBUTE13     => p_ATTRIBUTE13,
340                 p_ATTRIBUTE14     => p_ATTRIBUTE14,
341                 p_ATTRIBUTE15     => p_ATTRIBUTE15,
342         	x_error_segments  => l_error_segments,
343         	x_error_message   => l_error_message
344 	)
345         then
346                 FND_MESSAGE.SET_NAME('EAM', 'EAM_INVALID_DESC_FLEX');
347                 FND_MESSAGE.SET_TOKEN('ERROR_MSG', l_error_message);
348                 FND_MSG_PUB.Add;
349                 RAISE FND_API.G_EXC_ERROR;
350         end if;
351 
352 end validate_dff_segments;
353 
354 
355 
356 
357 
358 procedure VALIDATE_ROW_EXISTS(P_ASSET_ACTIVITY_ID IN NUMBER,
359                               P_MAINTENANCE_OBJECT_ID IN NUMBER,
360 			      P_MAINTENANCE_OBJECT_TYPE IN NUMBER,
361 			      p_tmpl_flag in varchar2,
362                               x_act_assoc_id OUT NOCOPY NUMBER)
363 is
364   BEGIN
365 
366 
367 	SELECT activity_association_id INTO x_act_assoc_id
368 	FROM mtl_eam_asset_activities
369 	WHERE maintenance_object_id = p_maintenance_object_id
370 	AND asset_activity_id = P_asset_activity_id
371 	AND maintenance_object_type = p_maintenance_object_type
372 	AND NVL(tmpl_flag, 'N') = NVL(p_tmpl_flag, 'N');
373 
374   EXCEPTION
375         WHEN NO_DATA_FOUND THEN
376 	   x_act_assoc_id := -1;
377         WHEN TOO_MANY_ROWS THEN
378               fnd_message.set_name('EAM', 'EAM_DATA_CORRUPT');
379 	      fnd_message.set_token('TABLE_NAME', 'MTL_EAM_ASSET_ACTIVITIES');
380               fnd_msg_pub.add;
381               RAISE fnd_api.g_exc_error;
382 END;
383 
384 
385 
386 PROCEDURE INSERT_ITEM_ACTIVITIES
387 (
388         p_api_version       		IN	NUMBER			,
389   	p_init_msg_list			IN	VARCHAR2:= FND_API.G_FALSE	,
390 	p_commit	    		IN  	VARCHAR2:= FND_API.G_FALSE	,
391 	p_validation_level		IN  	NUMBER  := FND_API.G_VALID_LEVEL_FULL,
392 	x_return_status			OUT NOCOPY VARCHAR2	 ,
393 	x_msg_count			OUT NOCOPY NUMBER	 ,
394 	x_msg_data	    		OUT NOCOPY VARCHAR2  ,
395 
396 	P_ASSET_ACTIVITY_ID		IN	NUMBER	,
397 	/*P_INVENTORY_ITEM_ID		IN	NUMBER	,*/
398 	P_INVENTORY_ITEM_ID		IN	NUMBER	default null,
399 	P_ORGANIZATION_ID		IN	NUMBER	,
400 	P_OWNINGDEPARTMENT_ID		IN	NUMBER	default null,
401 	P_MAINTENANCE_OBJECT_ID		IN	NUMBER default null,
402 	P_CREATION_ORGANIZATION_ID	IN	NUMBER 	default null,
403 	P_START_DATE_ACTIVE		IN	DATE default null	,
404 	P_END_DATE_ACTIVE		IN	DATE default null	,
405 	P_PRIORITY_CODE			IN	VARCHAR2 default null	,
406 	P_ACTIVITY_CAUSE_CODE		IN	VARCHAR2 default null,
407 	P_ACTIVITY_TYPE_CODE		IN	VARCHAR2 default null	,
408 	P_SHUTDOWN_TYPE_CODE		IN	VARCHAR2 default null	,
409 	P_MAINTENANCE_OBJECT_TYPE	IN	NUMBER default null	,
410 	P_TMPL_FLAG			IN	VARCHAR2 default null	,
411 	P_CLASS_CODE			IN	VARCHAR2 default null,
412 	P_ACTIVITY_SOURCE_CODE		IN	VARCHAR2 default null,
413 	P_SERIAL_NUMBER			IN	VARCHAR2 default null	,
414 	P_ATTRIBUTE_CATEGORY		IN	VARCHAR2 default null	,
415 	P_ATTRIBUTE1			IN	VARCHAR2 default null	,
416 	P_ATTRIBUTE2			IN	VARCHAR2 default null	,
417 	P_ATTRIBUTE3			IN	VARCHAR2 default null	,
418 	P_ATTRIBUTE4			IN	VARCHAR2 default null	,
419 	P_ATTRIBUTE5			IN	VARCHAR2 default null	,
420 	P_ATTRIBUTE6			IN	VARCHAR2 default null	,
421 	P_ATTRIBUTE7			IN	VARCHAR2 default null	,
422 	P_ATTRIBUTE8			IN	VARCHAR2 default null	,
423 	P_ATTRIBUTE9			IN	VARCHAR2 default null	,
424 	P_ATTRIBUTE10			IN	VARCHAR2 default null	,
425 	P_ATTRIBUTE11			IN	VARCHAR2 default null	,
426 	P_ATTRIBUTE12			IN	VARCHAR2 default null	,
427 	P_ATTRIBUTE13			IN	VARCHAR2 default null	,
428 	P_ATTRIBUTE14			IN	VARCHAR2 default null	,
429 	P_ATTRIBUTE15			IN	VARCHAR2 default null	,
430 	P_TAGGING_REQUIRED_FLAG		IN	VARCHAR2 default null	,
431 	P_LAST_SERVICE_START_DATE	IN	DATE default null	,
432 	P_LAST_SERVICE_END_DATE		IN	DATE default null	,
433 	P_PREV_SERVICE_START_DATE	IN	DATE default null	,
434 	P_PREV_SERVICE_END_DATE		IN	DATE default null	,
435 	P_LAST_SCHEDULED_START_DATE	IN	DATE default null	,
436         P_LAST_SCHEDULED_END_DATE	IN	DATE default null	,
437 	P_PREV_SCHEDULED_START_DATE	IN	DATE default null	,
438         P_PREV_SCHEDULED_END_DATE	IN	DATE default null	,
439 	P_WIP_ENTITY_ID                 IN      NUMBER default null     ,
440 	P_SOURCE_TMPL_ID		IN	NUMBER default null	,
441 	p_pm_last_service_tbl           IN      EAM_PM_LAST_SERVICE_PUB.pm_last_service_tbl
442 
443 )
444 IS
445 	l_api_name			CONSTANT VARCHAR2(30)	:= 'APIname';
446 	l_api_version           	CONSTANT NUMBER 		:= 1.0;
447 	l_boolean                       number;
448 	l_return_status	 		VARCHAR2(1);
449 	l_msg_count			NUMBER;
450 	l_msg_data		 	VARCHAR2(30);
451 	l_actv_assoc_id                 number;
452 
453 	l_object_found BOOLEAN;
454 	l_maintenance_object_type NUMBER;
455 	l_maintenance_object_id NUMBER;
456 	l_object_type NUMBER;
457 	l_object_id NUMBER;
458 	l_creation_organization_id NUMBER;
459 	l_asset_group_id NUMBER;
460 	l_org_id NUMBER;
461 	l_temp_org_id NUMBER;
462 	l_asset_number VARCHAR2(100);
463 	l_validated boolean;
464 	l_item_type number;
465 	l_item_id NUMBER;
466 	l_serial_number VARCHAR2(100);
467 	l_ser_num_ctrl_cd NUMBER;
468 	l_cur_st NUMBER;
469 
470 
471 BEGIN
472 	-- Standard Start of API savepoint
473     SAVEPOINT	INSERT_ITEM_ACTIVITIES;
474 
475     -- Standard call to check for call compatibility.
476     IF NOT FND_API.Compatible_API_Call ( 	l_api_version        	,
477         	    	    	    	 	p_api_version        	,
478    	       	    	 			l_api_name 	    	,
479 		    	    	    	    	G_PKG_NAME )
480 	THEN
481 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
482 	END IF;
483 	-- Initialize message list if p_init_msg_list is set to TRUE.
484 	IF FND_API.to_Boolean( p_init_msg_list ) THEN
485 		FND_MSG_PUB.initialize;
486 	END IF;
487 	--  Initialize API return status to success
488         x_return_status := FND_API.G_RET_STS_SUCCESS;
489 
490 	-- API body
491 
492 	/* for creation_organization_id = organization_id */
493 	l_org_id := P_ORGANIZATION_ID;
494 
495 	if (P_CREATION_ORGANIZATION_ID IS NOT NULL) then
496 		if P_CREATION_ORGANIZATION_ID <> P_ORGANIZATION_ID then
497 		      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_CR_ORG_ID');
498 		      fnd_msg_pub.add;
499 		      RAISE fnd_api.g_exc_error;
500 		else
501 			l_creation_organization_id := P_ORGANIZATION_ID;
502 		end if;
503 	else
504 		l_creation_organization_id := P_ORGANIZATION_ID;
505 	end if;
506 
507         if l_creation_organization_id is not null then
508                 /* EAM enabled check */
509         		EAM_COMMON_UTILITIES_PVT.verify_org(
510         		          p_resp_id => NULL,
511         		          p_resp_app_id => 401,
512         		          p_org_id  => l_creation_organization_id,
513         		          x_boolean => l_boolean,
514         		          x_return_status => x_return_status,
515         		          x_msg_count => x_msg_count ,
516         		          x_msg_data => x_msg_data);
517                 if l_boolean = 0
518             	  then
519             	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_ORG_ID');
520                           fnd_msg_pub.add;
521                           RAISE fnd_api.g_exc_error;
522             	end if;
523         end if;
524 
525 
526         IF ((p_class_code IS NOT NULL or p_owningdepartment_id IS NOT NULL) AND p_organization_id IS NULL) THEN
527             fnd_message.set_name('EAM', 'EAM_ABO_INVALID_ORG_ID');
528             fnd_msg_pub.add;
529             RAISE fnd_api.g_exc_error;
530         END IF;
531 
532 	-- Bug # 3441956
533 	BEGIN
534 	   select eam_item_type into l_item_type
535 	   from mtl_system_items
536 	   where inventory_item_id = p_asset_activity_id
537 	   and organization_id = nvl(p_organization_id, organization_id)
538 	   AND rownum = 1;
539 
540 	   IF (l_item_type <> 2) THEN
541 	      raise_error('EAM_ABO_INVALID_ACTIVITY_ID');
542            END IF;
543 
544         EXCEPTION
545 	   WHEN no_data_found THEN
546 	       raise_error('EAM_ABO_INVALID_ACTIVITY_ID');
547         END;
548 
549 
550 	validate_mfg_lookups('WIP_EAM_ACTIVITY_PRIORITY', p_priority_code, 'EAM_PAR_INVALID_PRIORITY_CAT');
551 
552 	validate_mfg_lookups('MTL_EAM_ACTIVITY_CAUSE',p_activity_cause_code, 'EAM_PAR_INVALID_ACTIVITY_CAUSE');
553 
554 	validate_mfg_lookups('MTL_EAM_ACTIVITY_TYPE', p_activity_type_code, 'EAM_PAR_INVALID_ACTIVITY_TYPE');
555 
556 	validate_mfg_lookups('BOM_EAM_SHUTDOWN_TYPE', P_shutdown_type_code, 'EAM_ABO_INVALID_SHUTDOWN_CODE');
557 
558 	validate_mfg_lookups('MTL_EAM_ACTIVITY_SOURCE', P_activity_source_code, 'EAM_ABO_INVALID_ACT_SRC_CODE');
559 
560 	validate_acnt_class(p_class_code , P_CREATION_ORGANIZATION_ID );
561 
562 
563 	if p_start_date_active>p_end_date_active
564 	then
565 	      fnd_message.set_name('EAM', 'EAM_IAA_INVALID_ACTIVE_DATE');
566               fnd_msg_pub.add;
567               RAISE fnd_api.g_exc_error;
568         END IF;
569 
570 	if p_last_service_start_date > p_last_service_end_date
571 	then
572 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
573               fnd_msg_pub.add;
574               RAISE fnd_api.g_exc_error;
575         END IF;
576 
577 	if p_prev_service_start_date > p_prev_service_end_date
578 	then
579 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
580               fnd_msg_pub.add;
581               RAISE fnd_api.g_exc_error;
582         END IF;
583 
584 	if p_last_scheduled_start_date > p_last_scheduled_end_date
585 	then
586 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
587               fnd_msg_pub.add;
588               RAISE fnd_api.g_exc_error;
589         END IF;
590 
591 
592 	if p_prev_scheduled_start_date > p_prev_scheduled_end_date
593 	then
594 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
595               fnd_msg_pub.add;
596               RAISE fnd_api.g_exc_error;
597         END IF;
598 
599         validate_boolean_flag(p_tagging_required_flag, 'EAM_ABO_INVALID_TAG_REQ_FLAG');
600 
601 	validate_boolean_flag(p_tmpl_flag, 'EAM_IAA_INV_TEML_FLAG');
602 
603 
604 	IF (p_owningdepartment_id is not null) THEN
605 	   l_validated := EAM_COMMON_UTILITIES_PVT.validate_department_id(p_owningdepartment_id, l_org_id);
606 	   IF NOT l_validated THEN
607 		raise_error ('EAM_ABO_INVALID_OWN_DEPT_ID');
608 	   END IF;
609         END IF;
610 
611 	validate_dff_segments(
612 				p_ATTRIBUTE_CATEGORY	,
613 				p_ATTRIBUTE1	,
614 				p_ATTRIBUTE2	,
615 				p_ATTRIBUTE3	,
616 				p_ATTRIBUTE4	,
617 				p_ATTRIBUTE5	,
618 				p_ATTRIBUTE6	,
619 				p_ATTRIBUTE7	,
620 				p_ATTRIBUTE8	,
621 				p_ATTRIBUTE9	,
622 				p_ATTRIBUTE10	,
623 				p_ATTRIBUTE11	,
624 				p_ATTRIBUTE12	,
625 				p_ATTRIBUTE13	,
626 				p_ATTRIBUTE14	,
627 				p_ATTRIBUTE15
628 			);
629 	--------------------------------------------------------------------------------------------
630 	IF ((p_maintenance_object_type is null or p_maintenance_object_id is null) and
631 	     (p_inventory_item_id is null)) THEN
632 	      fnd_message.set_name('EAM', 'EAM_NOT_ENOUGH_PARAM');
633               fnd_msg_pub.add;
634 	      RAISE FND_API.G_EXC_ERROR;
635         END IF;
636 
637 	IF (p_maintenance_object_type is not null and p_maintenance_object_type NOT in (3,2)) THEN
638 	      fnd_message.set_name('EAM', 'EAM_INVALID_MAINT_OBJ_TYPE');
639               fnd_msg_pub.add;
640 	      RAISE FND_API.G_EXC_ERROR;
641         END IF;
642 
643         l_org_id := p_organization_id;
644 	l_asset_group_id := p_inventory_item_id;
645 	l_asset_number := p_serial_number;
646         l_maintenance_object_type := p_maintenance_object_type;
647 	l_maintenance_object_id := p_maintenance_object_id;
648 
649 	/* Validations for the item combinations supplied by the user */
650 	IF ( p_inventory_item_id IS NOT NULL and p_maintenance_object_id IS NULL ) THEN
651 
652 		eam_common_utilities_pvt.translate_asset_maint_obj
653 		(
654 			P_ORGANIZATION_ID ,
655 			P_INVENTORY_ITEM_ID ,
656 			P_SERIAL_NUMBER ,
657 			l_object_found ,
658 			l_object_type ,
659 			l_object_id
660 		);
661 
662 		IF (l_object_found) THEN
663                        IF (l_maintenance_object_type is null) THEN
664 			  l_maintenance_object_type := l_object_type;
665 			END IF;
666 			IF (l_maintenance_object_id is null) THEN
667 			  l_maintenance_object_id := l_object_id;
668 			END IF;
669 		ELSE
670 			raise_error('EAM_NO_ITEM_FOUND');
671 		END IF;
672 
673 	ELSIF ( (p_inventory_item_id IS NULL OR p_serial_number IS NULL)AND
674 	         p_maintenance_object_type IS NOT NULL AND p_maintenance_object_id IS NOT NULL) THEN
675 
676 		eam_common_utilities_pvt.translate_maint_obj_asset
677 		(
678 			p_maintenance_object_type ,
679 			p_maintenance_object_id ,
680 			p_organization_id,
681 			l_object_found ,
682 			l_temp_org_id ,
683 			l_item_id ,
684 			l_serial_number
685 		);
686 
687 		IF l_object_found THEN
688 		        IF (l_asset_group_id is null) THEN
689 			  l_asset_group_id := l_item_id;
690 			END IF;
691 			IF (l_asset_number is null) THEN
692 			  l_asset_number := l_serial_number;
693 			END IF;
694 			IF (l_org_id is null) THEN
695 			  l_org_id := l_temp_org_id;
696 			END IF;
697 		ELSE
698 			raise_error('EAM_NO_ITEM_FOUND');
699 		END IF;
700         END IF;
701 
702 	/* Check both the combinations are pointing to the same item / serial_number */
703 	l_validated := check_item_unique (
704 			l_maintenance_object_type ,
705 			l_maintenance_object_id ,
706 			l_asset_group_id ,
707 			l_org_id ,
708 			l_asset_number ,
709 			l_org_id
710 		);
711 
712 	IF NOT l_validated THEN
713 		raise_error ('EAM_ABO_INVALID_INV_ITEM_ID');
714 	END IF;
715 
716 	/* Template flag validation */
717 	begin
718 		SELECT msi.eam_item_type , msi.serial_number_control_code
719 		INTO l_item_type , l_ser_num_ctrl_cd
720 		FROM mtl_system_items_b msi, mtl_parameters mp
721 		WHERE msi.organization_id = mp.organization_id
722 		  AND mp.maint_organization_id = nvl(l_org_id, mp.maint_organization_id)
723 		  AND msi.inventory_item_id = l_asset_group_id
724 		  AND rownum = 1;
725 
726 		if nvl (p_tmpl_flag , 'N') = 'Y' then
727 			if (l_maintenance_object_type = 3) then
728 				RAISE_ERROR ('EAM_IAA_INV_TEML_FLAG');
729 			end if;
730 			if (P_SOURCE_TMPL_ID is not null) then
731 				RAISE_ERROR ('EAM_SOURCE_TMPL_ID_NOT_NULL');
732 			end if;
733 			if ( l_item_type = 3 and l_ser_num_ctrl_cd = 1 )  then
734 				RAISE_ERROR ('EAM_NON_SERIAL_REBUILD_ASSOC');
735 			end if;
736 		else -- if non template record
737 			if (l_maintenance_object_type = 2) then
738 				if (NOT ( l_item_type = 3 and l_ser_num_ctrl_cd = 1 ))  then
739 					RAISE_ERROR ('EAM_IAA_INV_TEML_FLAG');
740 				end if;
741 			end if;
742 		end if;
743 	exception
744 		when no_data_found then
745 			raise_error('EAM_NO_ITEM_FOUND');
746 	end;
747 
748 
749 
750 	VALIDATE_ROW_EXISTS(p_asset_activity_id,
751 			    l_maintenance_object_id,
752 			    l_maintenance_object_type,
753       			    p_tmpl_flag,
754                             l_actv_assoc_id);
755 
756 	-- validate source_tmpl_id
757 	IF (p_source_tmpl_id is NOT NULL) THEN
758 
759 	   l_item_id := 0;
760 	   select count(*) into l_item_id
761 	   from mtl_eam_asset_activities
762 	   where activity_association_id = p_source_tmpl_id
763 	   and asset_activity_id = p_asset_activity_id
764 	   and inventory_item_id = l_asset_group_id
765 	   and tmpl_flag = 'Y';
766 
767 	   IF (l_item_id = 0) THEN
768 	      raise_error('EAM_INVALID_TMPL_ID');
769            END IF;
770 
771         END IF;
772 
773         IF (l_actv_assoc_id = -1) THEN
774 
775 	  select MTL_EAM_ASSET_ACTIVITIES_S.NEXTVAL into l_actv_assoc_id from dual;
776           INSERT INTO mtl_eam_asset_activities
777           (
778 		ACTIVITY_ASSOCIATION_ID ,
779 		ASSET_ACTIVITY_ID	,
780 		MAINTENANCE_OBJECT_ID	,
781 		START_DATE_ACTIVE	,
782 		END_DATE_ACTIVE	,
783 		PRIORITY_CODE	,
784 		MAINTENANCE_OBJECT_TYPE	,
785 		TMPL_FLAG	,
786 		ATTRIBUTE_CATEGORY	,
787 		ATTRIBUTE1	,
788 		ATTRIBUTE2	,
789 		ATTRIBUTE3	,
790 		ATTRIBUTE4	,
791 		ATTRIBUTE5	,
792 		ATTRIBUTE6	,
793 		ATTRIBUTE7	,
794 		ATTRIBUTE8	,
795 		ATTRIBUTE9	,
796 		ATTRIBUTE10	,
797 		ATTRIBUTE11	,
798 		ATTRIBUTE12	,
799 		ATTRIBUTE13	,
800 		ATTRIBUTE14	,
801 		ATTRIBUTE15	,
802 		LAST_SERVICE_START_DATE	,
803 		LAST_SERVICE_END_DATE	,
804 		PREV_SERVICE_START_DATE	,
805 		PREV_SERVICE_END_DATE	,
806 		LAST_SCHEDULED_START_DATE	,
807 		LAST_SCHEDULED_END_DATE	,
808 		PREV_SCHEDULED_START_DATE	,
809 		PREV_SCHEDULED_END_DATE	,
810 		WIP_ENTITY_ID,
811 		SOURCE_TMPL_ID		,
812 		CREATED_BY           ,
813 		CREATION_DATE       ,
814 		LAST_UPDATE_LOGIN  ,
815 		LAST_UPDATE_DATE  ,
816 		LAST_UPDATED_BY
817 	  )
818 	  VALUES
819 	  (
820 		l_actv_assoc_id,
821 		P_ASSET_ACTIVITY_ID	,
822 		l_maintenance_object_id,
823 		P_START_DATE_ACTIVE	,
824 		P_END_DATE_ACTIVE	,
825 		P_PRIORITY_CODE	,
826 		/*P_MAINTENANCE_OBJECT_TYPE	,*/
827 		l_maintenance_object_type,
828 		nvl(P_TMPL_FLAG,'N')	,
829 		P_ATTRIBUTE_CATEGORY	,
830 		P_ATTRIBUTE1	,
831 		P_ATTRIBUTE2	,
832 		P_ATTRIBUTE3	,
833 		P_ATTRIBUTE4	,
834 		P_ATTRIBUTE5	,
835 		P_ATTRIBUTE6	,
836 		P_ATTRIBUTE7	,
837 		P_ATTRIBUTE8	,
838 		P_ATTRIBUTE9	,
839 		P_ATTRIBUTE10	,
840 		P_ATTRIBUTE11	,
841 		P_ATTRIBUTE12	,
842 		P_ATTRIBUTE13	,
843 		P_ATTRIBUTE14	,
844 		P_ATTRIBUTE15	,
845 		P_LAST_SERVICE_START_DATE	,
846 		P_LAST_SERVICE_END_DATE	,
847 		P_PREV_SERVICE_START_DATE	,
848 		P_PREV_SERVICE_END_DATE	,
849 		P_LAST_SCHEDULED_START_DATE	,
850 		P_LAST_SCHEDULED_END_DATE	,
851 		P_PREV_SCHEDULED_START_DATE	,
852 		P_PREV_SCHEDULED_END_DATE	,
853 		P_WIP_ENTITY_ID,
854 		P_SOURCE_TMPL_ID	,
855 		fnd_global.user_id,
856 		sysdate,
857 		fnd_global.login_id,
858 		sysdate    ,
859 		fnd_global.user_id
860 	  );
861        END IF;
862 
863        /*IF p_maintenance_object_type = 2 THEN commented for bug 13640722*/
864        IF l_maintenance_object_type = 2 THEN -- added for bug 13640722
865           l_object_type := 40;
866        ELSE
867           l_object_type := 60;
868        END IF;
869 
870        IF (p_organization_Id IS NOT NULL) THEN
871 
872          eam_org_maint_defaults_pvt.update_insert_row
873   	 (
874 	      p_api_version           => 1.0
875              ,p_commit                => p_commit
876 	     ,p_object_type           => l_object_type
877 	     ,p_object_id             => l_actv_assoc_id
878 	     ,p_organization_id       => p_organization_Id
879 	     ,p_owning_department_id  => p_owningdepartment_id
880 	     ,p_accounting_class_code => p_class_code
881 	     ,p_activity_cause_code   => p_activity_cause_code
882 	     ,p_activity_type_code    => p_activity_type_code
883 	     ,p_activity_source_code  => p_activity_source_code
884 	     ,p_shutdown_type_code    => p_shutdown_type_code
885 	     ,p_tagging_required_flag => p_tagging_required_flag
886 	     ,x_return_status         => x_return_status
887 	     ,x_msg_count             => x_msg_count
888 	     ,x_msg_data              => x_msg_data
889 	 );
890 
891          IF x_return_status <> fnd_api.g_ret_sts_success THEN
892 	    RAISE fnd_api.g_exc_error;
893          END IF;
894        END IF;
895 
896        IF p_pm_last_service_tbl.count >0 THEN
897 
898 	     IF (p_tmpl_flag = 'Y') THEN
899 	       raise_error('EAM_INVALID_METER_READING');
900 	     END IF;
901 
902              EAM_PM_LAST_SERVICE_PUB.process_pm_last_service
903              (
904 			p_api_version      => p_api_version,
905 			p_init_msg_list    => FND_API.G_FALSE,--p_init_msg_list,
906 			p_commit	   => p_commit,
907 			p_validation_level => p_validation_level,
908 			x_return_status	   => x_return_status,
909 			x_msg_count        => x_msg_count,
910 			x_msg_data	   => x_msg_data,
911 
912 			p_pm_last_service_tbl => p_pm_last_service_tbl,
913 			p_actv_assoc_id       => l_actv_assoc_id
914 	       );
915 
916 	      x_msg_count := FND_MSG_PUB.count_msg;
917 	      IF x_msg_count > 0 THEN
918 	         RAISE FND_API.G_EXC_ERROR;
919 	      END IF;
920         END IF;
921 
922 	-- End of API body.
923 	-- Standard check of p_commit.
924 	IF FND_API.To_Boolean( p_commit ) THEN
925 		COMMIT WORK;
926 	END IF;
927 	-- Standard call to get message count and if count is 1, get message info.
928 	FND_MSG_PUB.get
929     	(  	p_msg_index_out         	=>      x_msg_count     	,
930         	p_data          	=>      x_msg_data
931     	);
932 EXCEPTION
933     WHEN FND_API.G_EXC_ERROR THEN
934 		ROLLBACK TO INSERT_ITEM_ACTIVITIES;
935 		x_return_status := FND_API.G_RET_STS_ERROR ;
936 		FND_MSG_PUB.get
937     		(  	p_msg_index_out         	=>      x_msg_count     	,
938         			p_data          	=>      x_msg_data
939     		);
940 	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
941 		ROLLBACK TO INSERT_ITEM_ACTIVITIES;
942 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
943 		FND_MSG_PUB.get
944     		(  	p_msg_index_out         	=>      x_msg_count     	,
945         			p_data          	=>      x_msg_data
946     		);
947 	WHEN OTHERS THEN
948 		ROLLBACK TO INSERT_ITEM_ACTIVITIES;
949 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
950   		IF 	FND_MSG_PUB.Check_Msg_Level
951 			(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
952 		THEN
953         		FND_MSG_PUB.Add_Exc_Msg
954     	    		(	G_PKG_NAME  	    ,
955     	    			l_api_name
956 	    		);
957 		END IF;
958 		FND_MSG_PUB.get
959     		(  	p_msg_index_out         	=>      x_msg_count     	,
960         			p_data          	=>      x_msg_data
961     		);
962 END INSERT_ITEM_ACTIVITIES;
963 
964 
965 PROCEDURE update_item_activities
966 (
967         p_api_version       		IN	NUMBER			,
968   	p_init_msg_list			IN	VARCHAR2:= FND_API.G_FALSE	,
969 	p_commit	    		IN  	VARCHAR2:= FND_API.G_FALSE	,
970 	p_validation_level		IN  	NUMBER  := FND_API.G_VALID_LEVEL_FULL,
971 	x_return_status			OUT NOCOPY VARCHAR2	 ,
972 	x_msg_count			OUT NOCOPY NUMBER	 ,
973 	x_msg_data	    		OUT NOCOPY VARCHAR2  ,
974 
975 	P_ACTIVITY_ASSOCIATION_ID	IN	NUMBER	,
976 	P_ASSET_ACTIVITY_ID		IN	NUMBER	,
977 	P_INVENTORY_ITEM_ID		IN	NUMBER	default null,
978 	P_ORGANIZATION_ID		IN	NUMBER	,
979 	P_OWNINGDEPARTMENT_ID		IN	NUMBER	default null,
980 	P_MAINTENANCE_OBJECT_ID		IN	NUMBER default null,
981 	P_CREATION_ORGANIZATION_ID	IN	NUMBER default null,
982 	P_START_DATE_ACTIVE		IN	DATE default null	,
983 	P_END_DATE_ACTIVE		IN	DATE default null	,
984 	P_PRIORITY_CODE			IN	VARCHAR2 default null	,
985 	P_ACTIVITY_CAUSE_CODE		IN	VARCHAR2 default null,
986 	P_ACTIVITY_TYPE_CODE		IN	VARCHAR2 default null	,
987 	P_SHUTDOWN_TYPE_CODE		IN	VARCHAR2 default null	,
988 	P_MAINTENANCE_OBJECT_TYPE	IN	NUMBER default null	,
989 	P_TMPL_FLAG			IN	VARCHAR2 default null	,
990 	P_CLASS_CODE			IN	VARCHAR2 default null,
991 	P_ACTIVITY_SOURCE_CODE		IN	VARCHAR2 default null,
992 	P_SERIAL_NUMBER			IN	VARCHAR2 default null	,
993 	P_ATTRIBUTE_CATEGORY		IN	VARCHAR2 default null	,
994 	P_ATTRIBUTE1			IN	VARCHAR2 default null	,
995 	P_ATTRIBUTE2			IN	VARCHAR2 default null	,
996 	P_ATTRIBUTE3			IN	VARCHAR2 default null	,
997 	P_ATTRIBUTE4			IN	VARCHAR2 default null	,
998 	P_ATTRIBUTE5			IN	VARCHAR2 default null	,
999 	P_ATTRIBUTE6			IN	VARCHAR2 default null	,
1000 	P_ATTRIBUTE7			IN	VARCHAR2 default null	,
1001 	P_ATTRIBUTE8			IN	VARCHAR2 default null	,
1002 	P_ATTRIBUTE9			IN	VARCHAR2 default null	,
1003 	P_ATTRIBUTE10			IN	VARCHAR2 default null	,
1004 	P_ATTRIBUTE11			IN	VARCHAR2 default null	,
1005 	P_ATTRIBUTE12			IN	VARCHAR2 default null	,
1006 	P_ATTRIBUTE13			IN	VARCHAR2 default null	,
1007 	P_ATTRIBUTE14			IN	VARCHAR2 default null	,
1008 	P_ATTRIBUTE15			IN	VARCHAR2 default null	,
1009 	P_TAGGING_REQUIRED_FLAG		IN	VARCHAR2 default null	,
1010 	P_LAST_SERVICE_START_DATE	IN	DATE default null	,
1011 	P_LAST_SERVICE_END_DATE		IN	DATE default null	,
1012 	P_PREV_SERVICE_START_DATE	IN	DATE default null	,
1013 	P_PREV_SERVICE_END_DATE		IN	DATE default null	,
1014 	P_LAST_SCHEDULED_START_DATE	IN	DATE default null	,
1015 	P_LAST_SCHEDULED_END_DATE		IN	DATE default null	,
1016 	P_PREV_SCHEDULED_START_DATE	IN	DATE default null	,
1017 	P_PREV_SCHEDULED_END_DATE		IN	DATE default null	,
1018 	P_WIP_ENTITY_ID                 IN      NUMBER default null,
1019 	P_SOURCE_TMPL_ID		IN	NUMBER default null	,
1020 
1021 	p_pm_last_service_tbl           IN      EAM_PM_LAST_SERVICE_PUB.pm_last_service_tbl
1022 )
1023 IS
1024 	l_api_name			CONSTANT VARCHAR2(30)	:= 'APIname';
1025 	l_api_version           	CONSTANT NUMBER 		:= 1.0;
1026 	l_boolean                       number;
1027 	l_return_status	 		VARCHAR2(1);
1028 	l_msg_count			NUMBER;
1029 	l_msg_data		 	VARCHAR2(30);
1030 
1031 	l_object_found BOOLEAN;
1032 	l_maintenance_object_type NUMBER;
1033 	l_maintenance_object_id NUMBER;
1034 	l_object_type NUMBER;
1035 	l_object_id NUMBER;
1036 	l_creation_organization_id NUMBER;
1037 	l_asset_group_id NUMBER;
1038 	l_org_id NUMBER;
1039 	l_temp_org_id NUMBER;
1040 	l_asset_number VARCHAR2(100);
1041 	l_validated boolean;
1042 	l_cnt number;
1043 	l_item_type number;
1044 	l_item_id NUMBER;
1045 	l_serial_number VARCHAR2(100);
1046 	l_ser_num_ctrl_cd NUMBER;
1047 	l_cur_st NUMBER;
1048 	l_id NUMBER;
1049 
1050 BEGIN
1051 	-- Standard Start of API savepoint
1052     SAVEPOINT UPDATE_ITEM_ACTIVITIES;
1053 
1054     -- Standard call to check for call compatibility.
1055     IF NOT FND_API.Compatible_API_Call ( 	l_api_version        	,
1056         	    	    	    	 	p_api_version        	,
1057    	       	    	 			l_api_name 	    	,
1058 		    	    	    	    	G_PKG_NAME )
1059 	THEN
1060 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1061 	END IF;
1062 	-- Initialize message list if p_init_msg_list is set to TRUE.
1063 
1064 	IF FND_API.to_Boolean( p_init_msg_list ) THEN
1065 		FND_MSG_PUB.initialize;
1066 	END IF;
1067 	--  Initialize API return status to success
1068         x_return_status := FND_API.G_RET_STS_SUCCESS;
1069 	-- API body
1070 
1071 	l_cnt := 0;
1072 
1073 	/* for creation_organization_id = organization_id */
1074 	l_org_id := P_ORGANIZATION_ID;
1075 
1076 	if (P_CREATION_ORGANIZATION_ID IS NOT NULL) then
1077 		if P_CREATION_ORGANIZATION_ID <> P_ORGANIZATION_ID then
1078 		      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_CR_ORG_ID');
1079 		      fnd_msg_pub.add;
1080 		      RAISE fnd_api.g_exc_error;
1081 		else
1082 			l_creation_organization_id := P_ORGANIZATION_ID;
1083 		end if;
1084 	else
1085 		l_creation_organization_id := P_ORGANIZATION_ID;
1086 	end if;
1087 
1088         if l_creation_organization_id is not null then
1089                 /* EAM enabled check */
1090         		EAM_COMMON_UTILITIES_PVT.verify_org(
1091         		          p_resp_id => NULL,
1092         		          p_resp_app_id => 401,
1093         		          p_org_id  => l_creation_organization_id,
1094         		          x_boolean => l_boolean,
1095         		          x_return_status => x_return_status,
1096         		          x_msg_count => x_msg_count ,
1097         		          x_msg_data => x_msg_data);
1098                 if l_boolean = 0
1099             	  then
1100             	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_ORG_ID');
1101                           fnd_msg_pub.add;
1102                           RAISE fnd_api.g_exc_error;
1103             	end if;
1104         end if;
1105 
1106 
1107 	IF ((p_class_code IS NOT NULL or p_owningdepartment_id IS NOT NULL) AND p_organization_id IS NULL) THEN
1108            fnd_message.set_name('EAM', 'EAM_ABO_INVALID_ORG_ID');
1109 	   fnd_msg_pub.add;
1110 	   RAISE fnd_api.g_exc_error;
1111 	END IF;
1112 
1113 	-- Bug # 3441956
1114 	BEGIN
1115 	   select count(*) into l_cnt
1116 	   from mtl_eam_asset_activities
1117 	   where asset_activity_id = p_asset_activity_id
1118 	   and activity_association_id = p_activity_association_id;
1119 
1120 	   IF (l_cnt = 0) THEN
1121 	      raise_error('EAM_ABO_INVALID_ACTIVITY_ID');
1122            END IF;
1123 
1124         EXCEPTION
1125 	   WHEN no_data_found THEN
1126 	       raise_error('EAM_ABO_INVALID_ACTIVITY_ID');
1127         END;
1128 
1129 	validate_mfg_lookups('WIP_EAM_ACTIVITY_PRIORITY', p_priority_code, 'EAM_PAR_INVALID_PRIORITY_CAT');
1130 
1131 	validate_mfg_lookups('MTL_EAM_ACTIVITY_CAUSE',p_activity_cause_code, 'EAM_PAR_INVALID_ACTIVITY_CAUSE');
1132 
1133 	validate_mfg_lookups('MTL_EAM_ACTIVITY_TYPE', p_activity_type_code, 'EAM_PAR_INVALID_ACTIVITY_TYPE');
1134 
1135 	validate_mfg_lookups('BOM_EAM_SHUTDOWN_TYPE', P_shutdown_type_code, 'EAM_ABO_INVALID_SHUTDOWN_CODE');
1136 
1137 	validate_mfg_lookups('MTL_EAM_ACTIVITY_SOURCE', P_activity_source_code, 'EAM_ABO_INVALID_ACT_SRC_CODE');
1138 
1139 	validate_acnt_class(p_class_code , P_CREATION_ORGANIZATION_ID );
1140 
1141 	if p_start_date_active>p_end_date_active
1142 	then
1143 	      fnd_message.set_name('EAM', 'EAM_IAA_INVALID_ACTIVE_DATE');
1144               fnd_msg_pub.add;
1145               RAISE fnd_api.g_exc_error;
1146         END IF;
1147 
1148 	if p_last_service_start_date > p_last_service_end_date
1149 	then
1150 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1151               fnd_msg_pub.add;
1152               RAISE fnd_api.g_exc_error;
1153         END IF;
1154 
1155 	if p_prev_service_start_date > p_prev_service_end_date
1156 	then
1157 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1158               fnd_msg_pub.add;
1159               RAISE fnd_api.g_exc_error;
1160         END IF;
1161 
1162 	if p_last_scheduled_start_date > p_last_scheduled_end_date
1163 	then
1164 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1165               fnd_msg_pub.add;
1166               RAISE fnd_api.g_exc_error;
1167         END IF;
1168 
1169 
1170 	if p_prev_scheduled_start_date > p_prev_scheduled_end_date
1171 	then
1172 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1173               fnd_msg_pub.add;
1174               RAISE fnd_api.g_exc_error;
1175         END IF;
1176 
1177        validate_boolean_flag(p_tagging_required_flag, 'EAM_ABO_INVALID_TAG_REQ_FLAG');
1178 
1179 	validate_boolean_flag(p_tmpl_flag, 'EAM_IAA_INV_TEML_FLAG');
1180 
1181 	IF (p_owningdepartment_id is not null AND p_owningdepartment_id <> FND_API.G_MISS_NUM) THEN
1182 	   l_validated := EAM_COMMON_UTILITIES_PVT.validate_department_id(p_owningdepartment_id, l_org_id);
1183 	   IF NOT l_validated THEN
1184 		raise_error ('EAM_ABO_INVALID_OWN_DEPT_ID');
1185 	   END IF;
1186         END IF;
1187 
1188 	validate_dff_segments(
1189 				p_ATTRIBUTE_CATEGORY	,
1190 				p_ATTRIBUTE1	,
1191 				p_ATTRIBUTE2	,
1192 				p_ATTRIBUTE3	,
1193 				p_ATTRIBUTE4	,
1194 				p_ATTRIBUTE5	,
1195 				p_ATTRIBUTE6	,
1196 				p_ATTRIBUTE7	,
1197 				p_ATTRIBUTE8	,
1198 				p_ATTRIBUTE9	,
1199 				p_ATTRIBUTE10	,
1200 				p_ATTRIBUTE11	,
1201 				p_ATTRIBUTE12	,
1202 				p_ATTRIBUTE13	,
1203 				p_ATTRIBUTE14	,
1204 				p_ATTRIBUTE15
1205 			);
1206 
1207 
1208 	--------------------------------------------------------------------------------------------
1209 	IF ((p_maintenance_object_type is null or p_maintenance_object_id is null) and
1210 	     (p_inventory_item_id is null)) THEN
1211 	      fnd_message.set_name('EAM', 'EAM_NOT_ENOUGH_PARAM');
1212               fnd_msg_pub.add;
1213 	      RAISE FND_API.G_EXC_ERROR;
1214         END IF;
1215 
1216 	IF (p_maintenance_object_type is not null and p_maintenance_object_type NOT in (3,2)) THEN
1217 	      fnd_message.set_name('EAM', 'EAM_INVALID_MAINT_OBJ_TYPE');
1218               fnd_msg_pub.add;
1219 	      RAISE FND_API.G_EXC_ERROR;
1220         END IF;
1221 
1222         l_org_id := p_organization_id;
1223 	l_asset_group_id := p_inventory_item_id;
1224 	l_asset_number := p_serial_number;
1225         l_maintenance_object_type := p_maintenance_object_type;
1226 	l_maintenance_object_id := p_maintenance_object_id;
1227 
1228 	/* Validations for the item combinations supplied by the user */
1229 	IF ( p_inventory_item_id IS NOT NULL and p_maintenance_object_id IS NULL ) THEN
1230 
1231 		eam_common_utilities_pvt.translate_asset_maint_obj
1232 		(
1233 			P_ORGANIZATION_ID ,
1234 			P_INVENTORY_ITEM_ID ,
1235 			P_SERIAL_NUMBER ,
1236 			l_object_found ,
1237 			l_object_type ,
1238 			l_object_id
1239 		);
1240 
1241 		IF (l_object_found) THEN
1242                        IF (l_maintenance_object_type is null) THEN
1243 			  l_maintenance_object_type := l_object_type;
1244 			END IF;
1245 			IF (l_maintenance_object_id is null) THEN
1246 			  l_maintenance_object_id := l_object_id;
1247 			END IF;
1248 		ELSE
1249 			raise_error('EAM_NO_ITEM_FOUND');
1250 		END IF;
1251 
1252 	ELSIF ( (p_inventory_item_id IS NULL OR p_serial_number IS NULL)AND
1253 	         p_maintenance_object_type IS NOT NULL AND p_maintenance_object_id IS NOT NULL) THEN
1254 
1255 		eam_common_utilities_pvt.translate_maint_obj_asset
1256 		(
1257 			p_maintenance_object_type ,
1258 			p_maintenance_object_id ,
1259 			p_organization_id,
1260 			l_object_found ,
1261 			l_temp_org_id ,
1262 			l_item_id ,
1263 			l_serial_number
1264 		);
1265 
1266 		IF l_object_found THEN
1267 		        IF (l_asset_group_id is null) THEN
1268 			  l_asset_group_id := l_item_id;
1269 			END IF;
1270 			IF (l_asset_number is null) THEN
1271 			  l_asset_number := l_serial_number;
1272 			END IF;
1273 			IF (l_org_id is null) THEN
1274 			  l_org_id := l_temp_org_id;
1275 			END IF;
1276 		ELSE
1277 			raise_error('EAM_NO_ITEM_FOUND');
1278 		END IF;
1279         END IF;
1280 
1281 	/* Check both the combinations are pointing to the same item / serial_number */
1282 	l_validated := check_item_unique (
1283 			l_maintenance_object_type ,
1284 			l_maintenance_object_id ,
1285 			l_asset_group_id ,
1286 			l_org_id ,
1287 			l_asset_number ,
1288 			l_org_id
1289 		);
1290 
1291 	IF NOT l_validated THEN
1292 		raise_error ('EAM_ABO_INVALID_INV_ITEM_ID');
1293 	END IF;
1294 
1295 	/* Template flag validation */
1296 	begin
1297 
1298 		SELECT msi.eam_item_type , msi.serial_number_control_code
1299 		INTO l_item_type , l_ser_num_ctrl_cd
1300 		FROM mtl_system_items_b msi, mtl_parameters mp
1301 		WHERE msi.organization_id = mp.organization_id
1302 		  AND mp.maint_organization_id = nvl(l_org_id, mp.maint_organization_id)
1303 		  AND msi.inventory_item_id = l_asset_group_id
1304 		  AND rownum = 1;
1305 
1306 		if nvl (p_tmpl_flag , 'N') = 'Y' then
1307 			if (l_maintenance_object_type = 3) then
1308 				RAISE_ERROR ('EAM_IAA_INV_TEML_FLAG');
1309 			end if;
1310 			if (P_SOURCE_TMPL_ID is not null) then
1311 				RAISE_ERROR ('EAM_SOURCE_TMPL_ID_NOT_NULL');
1312 			end if;
1313 			if ( l_item_type = 3 and l_ser_num_ctrl_cd = 1 )  then
1314 				RAISE_ERROR ('EAM_NON_SERIAL_REBUILD_ASSOC');
1315 			end if;
1316 		else -- if non template record
1317 			if (l_maintenance_object_type = 2) then
1318 				if (NOT ( l_item_type = 3 and l_ser_num_ctrl_cd = 1 ))  then
1319 					RAISE_ERROR ('EAM_IAA_INV_TEML_FLAG');
1320 				end if;
1321 			end if;
1322 		end if;
1323 	exception
1324 		when no_data_found then
1325 			raise_error('EAM_NO_ITEM_FOUND');
1326 	end;
1327 
1328 
1329 	--------------------------------------------------------------------------------------------
1330 
1331 	VALIDATE_ROW_EXISTS(p_asset_activity_id,
1332 			    l_maintenance_object_id,
1333 			    l_maintenance_object_type,
1334       			    p_tmpl_flag,
1335                             l_id);
1336 
1337 	IF (l_id = -1) THEN
1338               fnd_message.set_name('EAM', 'EAM_ITEM_ACT_REC_NOT_FOUND');
1339               fnd_msg_pub.add;
1340               RAISE fnd_api.g_exc_error;
1341 	END IF;
1342 
1343 
1344         UPDATE mtl_eam_asset_activities
1345         SET
1346 		START_DATE_ACTIVE	 =	P_START_DATE_ACTIVE	,
1347 		END_DATE_ACTIVE	  	 =	P_END_DATE_ACTIVE	,
1348 		PRIORITY_CODE	 	 =	P_PRIORITY_CODE	,
1349 		ATTRIBUTE_CATEGORY	 =	P_ATTRIBUTE_CATEGORY	,
1350 		ATTRIBUTE1	 	 =	P_ATTRIBUTE1	,
1351 		ATTRIBUTE2	  	 =	P_ATTRIBUTE2	,
1352 		ATTRIBUTE3	  	 =	P_ATTRIBUTE3	,
1353 		ATTRIBUTE4	 	 =	P_ATTRIBUTE4	,
1354 		ATTRIBUTE5	 	 =	P_ATTRIBUTE5	,
1355 		ATTRIBUTE6	 	 =	P_ATTRIBUTE6	,
1356 		ATTRIBUTE7	 	 =	P_ATTRIBUTE7	,
1357 		ATTRIBUTE8	 	 =	P_ATTRIBUTE8	,
1358 		ATTRIBUTE9	 	 =	P_ATTRIBUTE9	,
1359 		ATTRIBUTE10	 	 =	P_ATTRIBUTE10	,
1360 		ATTRIBUTE11	 	 =	P_ATTRIBUTE11	,
1361 		ATTRIBUTE12	 	 =	P_ATTRIBUTE12	,
1362 		ATTRIBUTE13	 	 =	P_ATTRIBUTE13	,
1363 		ATTRIBUTE14	 	 =	P_ATTRIBUTE14	,
1364 		ATTRIBUTE15	 	 =	P_ATTRIBUTE15	,
1365 		LAST_SERVICE_START_DATE	 =	P_LAST_SERVICE_START_DATE	,
1366 		LAST_SERVICE_END_DATE	 =	P_LAST_SERVICE_END_DATE	,
1367 		PREV_SERVICE_START_DATE	 =	P_PREV_SERVICE_START_DATE	,
1368 		PREV_SERVICE_END_DATE	 =	P_PREV_SERVICE_END_DATE	,
1369 		LAST_SCHEDULED_START_DATE	 =	P_LAST_SCHEDULED_START_DATE	,
1370 		LAST_SCHEDULED_END_DATE	 =	P_LAST_SCHEDULED_END_DATE	,
1371 		PREV_SCHEDULED_START_DATE	 =	P_PREV_SCHEDULED_START_DATE	,
1372 		PREV_SCHEDULED_END_DATE	 =	P_PREV_SCHEDULED_END_DATE	,
1373 		WIP_ENTITY_ID            =      P_WIP_ENTITY_ID,
1374 		LAST_UPDATE_LOGIN	 =	fnd_global.login_id	,
1375 		LAST_UPDATE_DATE	 =	sysdate	,
1376 		LAST_UPDATED_BY		 =	fnd_global.user_id
1377 
1378 	WHERE ACTIVITY_ASSOCIATION_ID = P_ACTIVITY_ASSOCIATION_ID;
1379 
1380 	IF (p_organization_Id IS NOT NULL) THEN
1381 
1382   	  IF p_maintenance_object_type = 2 THEN
1383 	    l_object_type := 40;
1384 	  ELSE
1385 	    l_object_type := 60;
1386 	  END IF;
1387 
1388 	  eam_org_maint_defaults_pvt.update_insert_row
1389 	    (
1390 	      p_api_version           => 1.0
1391              ,p_commit                => p_commit
1392 	     ,p_object_type           => l_object_type
1393 	     ,p_object_id             => p_activity_association_id
1394 	     ,p_organization_id       => p_organization_Id
1395 	     ,p_owning_department_id  => p_owningdepartment_id
1396 	     ,p_accounting_class_code => p_class_code
1397 	     ,p_activity_cause_code   => p_activity_cause_code
1398 	     ,p_activity_type_code    => p_activity_type_code
1399 	     ,p_activity_source_code  => p_activity_source_code
1400 	     ,p_shutdown_type_code    => p_shutdown_type_code
1401 	     ,p_tagging_required_flag => p_tagging_required_flag
1402 	     ,x_return_status         => x_return_status
1403 	     ,x_msg_count             => x_msg_count
1404 	     ,x_msg_data              => x_msg_data
1405 	    );
1406 
1407 	  IF x_return_status <> fnd_api.g_ret_sts_success THEN
1408 	     RAISE fnd_api.g_exc_error;
1409 	  END IF;
1410 
1411         END IF;
1412 
1413 	IF p_pm_last_service_tbl.count >0
1414         THEN
1415 
1416 	     IF (p_tmpl_flag = 'Y') THEN
1417 	       raise_error('EAM_INVALID_METER_READING');
1418 	     END IF;
1419 
1420              EAM_PM_LAST_SERVICE_PUB.process_pm_last_service
1421              (
1422 			p_api_version      => p_api_version,
1423 			p_init_msg_list    => FND_API.G_FALSE,--p_init_msg_list,
1424 			p_commit	   => p_commit,
1425 			p_validation_level => p_validation_level,
1426 			x_return_status	   => x_return_status,
1427 			x_msg_count        => x_msg_count,
1428 			x_msg_data	   => x_msg_data,
1429 
1430 			p_pm_last_service_tbl => p_pm_last_service_tbl,
1431 			p_actv_assoc_id       => P_ACTIVITY_ASSOCIATION_ID
1432 	       );
1433 
1434 	      x_msg_count := FND_MSG_PUB.count_msg;
1435 	      IF x_msg_count > 0 THEN
1436 	         RAISE FND_API.G_EXC_ERROR;
1437 	      END IF;
1438         END IF;
1439 
1440 	-- End of API body.
1441 	-- Standard check of p_commit.
1442 	IF FND_API.To_Boolean( p_commit ) THEN
1443 		COMMIT WORK;
1444 	END IF;
1445 	-- Standard call to get message count and if count is 1, get message info.
1446 	FND_MSG_PUB.get
1447     	(  	p_msg_index_out         	=>      x_msg_count     	,
1448         	p_data          	=>      x_msg_data
1449     	);
1450 EXCEPTION
1451     WHEN FND_API.G_EXC_ERROR THEN
1452 		ROLLBACK TO UPDATE_ITEM_ACTIVITIES;
1453 		x_return_status := FND_API.G_RET_STS_ERROR ;
1454 		FND_MSG_PUB.get
1455     		(  	p_msg_index_out         	=>      x_msg_count     	,
1456         			p_data          	=>      x_msg_data
1457     		);
1458 	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1459 		ROLLBACK TO UPDATE_ITEM_ACTIVITIES;
1460 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1461 		FND_MSG_PUB.get
1462     		(  	p_msg_index_out         	=>      x_msg_count     	,
1463         			p_data          	=>      x_msg_data
1464     		);
1465 	WHEN OTHERS THEN
1466 		ROLLBACK TO UPDATE_ITEM_ACTIVITIES;
1467 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1468   		IF 	FND_MSG_PUB.Check_Msg_Level
1469 			(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1470 		THEN
1471         		FND_MSG_PUB.Add_Exc_Msg
1472     	    		(	G_PKG_NAME  	    ,
1473     	    			l_api_name
1474 	    		);
1475 		END IF;
1476 		FND_MSG_PUB.get
1477     		(  	p_msg_index_out         	=>      x_msg_count     	,
1478         			p_data          	=>      x_msg_data
1479     		);
1480 END update_item_activities;
1481 
1482 
1483 END EAM_ITEM_ACTIVITIES_PUB;