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.2.12010000.2 2008/11/06 23:50:44 mashah 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
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_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)
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
864           l_object_type := 40;
865        ELSE
866           l_object_type := 60;
867        END IF;
868 
869        IF (p_organization_Id IS NOT NULL) THEN
870 
871          eam_org_maint_defaults_pvt.update_insert_row
872   	 (
873 	      p_api_version           => 1.0
874              ,p_commit                => p_commit
875 	     ,p_object_type           => l_object_type
876 	     ,p_object_id             => l_actv_assoc_id
877 	     ,p_organization_id       => p_organization_Id
878 	     ,p_owning_department_id  => p_owningdepartment_id
879 	     ,p_accounting_class_code => p_class_code
880 	     ,p_activity_cause_code   => p_activity_cause_code
881 	     ,p_activity_type_code    => p_activity_type_code
882 	     ,p_activity_source_code  => p_activity_source_code
883 	     ,p_shutdown_type_code    => p_shutdown_type_code
884 	     ,p_tagging_required_flag => p_tagging_required_flag
885 	     ,x_return_status         => x_return_status
886 	     ,x_msg_count             => x_msg_count
887 	     ,x_msg_data              => x_msg_data
888 	 );
889 
890          IF x_return_status <> fnd_api.g_ret_sts_success THEN
891 	    RAISE fnd_api.g_exc_error;
892          END IF;
893        END IF;
894 
895        IF p_pm_last_service_tbl.count >0 THEN
896 
897 	     IF (p_tmpl_flag = 'Y') THEN
898 	       raise_error('EAM_INVALID_METER_READING');
899 	     END IF;
900 
901              EAM_PM_LAST_SERVICE_PUB.process_pm_last_service
902              (
903 			p_api_version      => p_api_version,
904 			p_init_msg_list    => FND_API.G_FALSE,--p_init_msg_list,
905 			p_commit	   => p_commit,
906 			p_validation_level => p_validation_level,
907 			x_return_status	   => x_return_status,
908 			x_msg_count        => x_msg_count,
909 			x_msg_data	   => x_msg_data,
910 
911 			p_pm_last_service_tbl => p_pm_last_service_tbl,
912 			p_actv_assoc_id       => l_actv_assoc_id
913 	       );
914 
915 	      x_msg_count := FND_MSG_PUB.count_msg;
916 	      IF x_msg_count > 0 THEN
917 	         RAISE FND_API.G_EXC_ERROR;
918 	      END IF;
919         END IF;
920 
921 	-- End of API body.
922 	-- Standard check of p_commit.
923 	IF FND_API.To_Boolean( p_commit ) THEN
924 		COMMIT WORK;
925 	END IF;
926 	-- Standard call to get message count and if count is 1, get message info.
927 	FND_MSG_PUB.get
928     	(  	p_msg_index_out         	=>      x_msg_count     	,
929         	p_data          	=>      x_msg_data
930     	);
931 EXCEPTION
932     WHEN FND_API.G_EXC_ERROR THEN
933 		ROLLBACK TO INSERT_ITEM_ACTIVITIES;
934 		x_return_status := FND_API.G_RET_STS_ERROR ;
935 		FND_MSG_PUB.get
936     		(  	p_msg_index_out         	=>      x_msg_count     	,
937         			p_data          	=>      x_msg_data
938     		);
939 	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
940 		ROLLBACK TO INSERT_ITEM_ACTIVITIES;
941 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
942 		FND_MSG_PUB.get
943     		(  	p_msg_index_out         	=>      x_msg_count     	,
944         			p_data          	=>      x_msg_data
945     		);
946 	WHEN OTHERS THEN
947 		ROLLBACK TO INSERT_ITEM_ACTIVITIES;
948 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
949   		IF 	FND_MSG_PUB.Check_Msg_Level
950 			(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
951 		THEN
952         		FND_MSG_PUB.Add_Exc_Msg
953     	    		(	G_PKG_NAME  	    ,
954     	    			l_api_name
955 	    		);
956 		END IF;
957 		FND_MSG_PUB.get
958     		(  	p_msg_index_out         	=>      x_msg_count     	,
959         			p_data          	=>      x_msg_data
960     		);
961 END INSERT_ITEM_ACTIVITIES;
962 
963 
964 PROCEDURE update_item_activities
965 (
966         p_api_version       		IN	NUMBER			,
967   	p_init_msg_list			IN	VARCHAR2:= FND_API.G_FALSE	,
968 	p_commit	    		IN  	VARCHAR2:= FND_API.G_FALSE	,
969 	p_validation_level		IN  	NUMBER  := FND_API.G_VALID_LEVEL_FULL,
970 	x_return_status			OUT NOCOPY VARCHAR2	 ,
971 	x_msg_count			OUT NOCOPY NUMBER	 ,
972 	x_msg_data	    		OUT NOCOPY VARCHAR2  ,
973 
974 	P_ACTIVITY_ASSOCIATION_ID	IN	NUMBER	,
975 	P_ASSET_ACTIVITY_ID		IN	NUMBER	,
976 	P_INVENTORY_ITEM_ID		IN	NUMBER	default null,
977 	P_ORGANIZATION_ID		IN	NUMBER	,
978 	P_OWNINGDEPARTMENT_ID		IN	NUMBER	default null,
979 	P_MAINTENANCE_OBJECT_ID		IN	NUMBER default null,
980 	P_CREATION_ORGANIZATION_ID	IN	NUMBER default null,
981 	P_START_DATE_ACTIVE		IN	DATE default null	,
982 	P_END_DATE_ACTIVE		IN	DATE default null	,
983 	P_PRIORITY_CODE			IN	VARCHAR2 default null	,
984 	P_ACTIVITY_CAUSE_CODE		IN	VARCHAR2 default null,
985 	P_ACTIVITY_TYPE_CODE		IN	VARCHAR2 default null	,
986 	P_SHUTDOWN_TYPE_CODE		IN	VARCHAR2 default null	,
987 	P_MAINTENANCE_OBJECT_TYPE	IN	NUMBER default null	,
988 	P_TMPL_FLAG			IN	VARCHAR2 default null	,
989 	P_CLASS_CODE			IN	VARCHAR2 default null,
990 	P_ACTIVITY_SOURCE_CODE		IN	VARCHAR2 default null,
991 	P_SERIAL_NUMBER			IN	VARCHAR2 default null	,
992 	P_ATTRIBUTE_CATEGORY		IN	VARCHAR2 default null	,
993 	P_ATTRIBUTE1			IN	VARCHAR2 default null	,
994 	P_ATTRIBUTE2			IN	VARCHAR2 default null	,
995 	P_ATTRIBUTE3			IN	VARCHAR2 default null	,
996 	P_ATTRIBUTE4			IN	VARCHAR2 default null	,
997 	P_ATTRIBUTE5			IN	VARCHAR2 default null	,
998 	P_ATTRIBUTE6			IN	VARCHAR2 default null	,
999 	P_ATTRIBUTE7			IN	VARCHAR2 default null	,
1000 	P_ATTRIBUTE8			IN	VARCHAR2 default null	,
1001 	P_ATTRIBUTE9			IN	VARCHAR2 default null	,
1002 	P_ATTRIBUTE10			IN	VARCHAR2 default null	,
1003 	P_ATTRIBUTE11			IN	VARCHAR2 default null	,
1004 	P_ATTRIBUTE12			IN	VARCHAR2 default null	,
1005 	P_ATTRIBUTE13			IN	VARCHAR2 default null	,
1006 	P_ATTRIBUTE14			IN	VARCHAR2 default null	,
1007 	P_ATTRIBUTE15			IN	VARCHAR2 default null	,
1008 	P_TAGGING_REQUIRED_FLAG		IN	VARCHAR2 default null	,
1009 	P_LAST_SERVICE_START_DATE	IN	DATE default null	,
1010 	P_LAST_SERVICE_END_DATE		IN	DATE default null	,
1011 	P_PREV_SERVICE_START_DATE	IN	DATE default null	,
1012 	P_PREV_SERVICE_END_DATE		IN	DATE default null	,
1013 	P_LAST_SCHEDULED_START_DATE	IN	DATE default null	,
1014 	P_LAST_SCHEDULED_END_DATE		IN	DATE default null	,
1015 	P_PREV_SCHEDULED_START_DATE	IN	DATE default null	,
1016 	P_PREV_SCHEDULED_END_DATE		IN	DATE default null	,
1017 	P_WIP_ENTITY_ID                 IN      NUMBER default null,
1018 	P_SOURCE_TMPL_ID		IN	NUMBER default null	,
1019 
1020 	p_pm_last_service_tbl           IN      EAM_PM_LAST_SERVICE_PUB.pm_last_service_tbl
1021 )
1022 IS
1023 	l_api_name			CONSTANT VARCHAR2(30)	:= 'APIname';
1024 	l_api_version           	CONSTANT NUMBER 		:= 1.0;
1025 	l_boolean                       number;
1026 	l_return_status	 		VARCHAR2(1);
1027 	l_msg_count			NUMBER;
1028 	l_msg_data		 	VARCHAR2(30);
1029 
1030 	l_object_found BOOLEAN;
1031 	l_maintenance_object_type NUMBER;
1032 	l_maintenance_object_id NUMBER;
1033 	l_object_type NUMBER;
1034 	l_object_id NUMBER;
1035 	l_creation_organization_id NUMBER;
1036 	l_asset_group_id NUMBER;
1037 	l_org_id NUMBER;
1038 	l_temp_org_id NUMBER;
1039 	l_asset_number VARCHAR2(100);
1040 	l_validated boolean;
1041 	l_cnt number;
1042 	l_item_type number;
1043 	l_item_id NUMBER;
1044 	l_serial_number VARCHAR2(100);
1045 	l_ser_num_ctrl_cd NUMBER;
1046 	l_cur_st NUMBER;
1047 	l_id NUMBER;
1048 
1049 BEGIN
1050 	-- Standard Start of API savepoint
1051     SAVEPOINT UPDATE_ITEM_ACTIVITIES;
1052 
1053     -- Standard call to check for call compatibility.
1054     IF NOT FND_API.Compatible_API_Call ( 	l_api_version        	,
1055         	    	    	    	 	p_api_version        	,
1056    	       	    	 			l_api_name 	    	,
1057 		    	    	    	    	G_PKG_NAME )
1058 	THEN
1059 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1060 	END IF;
1061 	-- Initialize message list if p_init_msg_list is set to TRUE.
1062 
1063 	IF FND_API.to_Boolean( p_init_msg_list ) THEN
1064 		FND_MSG_PUB.initialize;
1065 	END IF;
1066 	--  Initialize API return status to success
1067         x_return_status := FND_API.G_RET_STS_SUCCESS;
1068 	-- API body
1069 
1070 	l_cnt := 0;
1071 
1072 	/* for creation_organization_id = organization_id */
1073 	l_org_id := P_ORGANIZATION_ID;
1074 
1075 	if (P_CREATION_ORGANIZATION_ID IS NOT NULL) then
1076 		if P_CREATION_ORGANIZATION_ID <> P_ORGANIZATION_ID then
1077 		      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_CR_ORG_ID');
1078 		      fnd_msg_pub.add;
1079 		      RAISE fnd_api.g_exc_error;
1080 		else
1081 			l_creation_organization_id := P_ORGANIZATION_ID;
1082 		end if;
1083 	else
1084 		l_creation_organization_id := P_ORGANIZATION_ID;
1085 	end if;
1086 
1087         if l_creation_organization_id is not null then
1088                 /* EAM enabled check */
1089         		EAM_COMMON_UTILITIES_PVT.verify_org(
1090         		          p_resp_id => NULL,
1091         		          p_resp_app_id => 401,
1092         		          p_org_id  => l_creation_organization_id,
1093         		          x_boolean => l_boolean,
1094         		          x_return_status => x_return_status,
1095         		          x_msg_count => x_msg_count ,
1096         		          x_msg_data => x_msg_data);
1097                 if l_boolean = 0
1098             	  then
1099             	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_ORG_ID');
1100                           fnd_msg_pub.add;
1101                           RAISE fnd_api.g_exc_error;
1102             	end if;
1103         end if;
1104 
1105 
1106 	IF ((p_class_code IS NOT NULL or p_owningdepartment_id IS NOT NULL) AND p_organization_id IS NULL) THEN
1107            fnd_message.set_name('EAM', 'EAM_ABO_INVALID_ORG_ID');
1108 	   fnd_msg_pub.add;
1109 	   RAISE fnd_api.g_exc_error;
1110 	END IF;
1111 
1112 	-- Bug # 3441956
1113 	BEGIN
1114 	   select count(*) into l_cnt
1115 	   from mtl_eam_asset_activities
1116 	   where asset_activity_id = p_asset_activity_id
1117 	   and activity_association_id = p_activity_association_id;
1118 
1119 	   IF (l_cnt = 0) THEN
1120 	      raise_error('EAM_ABO_INVALID_ACTIVITY_ID');
1121            END IF;
1122 
1123         EXCEPTION
1124 	   WHEN no_data_found THEN
1125 	       raise_error('EAM_ABO_INVALID_ACTIVITY_ID');
1126         END;
1127 
1128 	validate_mfg_lookups('WIP_EAM_ACTIVITY_PRIORITY', p_priority_code, 'EAM_PAR_INVALID_PRIORITY_CAT');
1129 
1130 	validate_mfg_lookups('MTL_EAM_ACTIVITY_CAUSE',p_activity_cause_code, 'EAM_PAR_INVALID_ACTIVITY_CAUSE');
1131 
1132 	validate_mfg_lookups('MTL_EAM_ACTIVITY_TYPE', p_activity_type_code, 'EAM_PAR_INVALID_ACTIVITY_TYPE');
1133 
1134 	validate_mfg_lookups('BOM_EAM_SHUTDOWN_TYPE', P_shutdown_type_code, 'EAM_ABO_INVALID_SHUTDOWN_CODE');
1135 
1136 	validate_mfg_lookups('MTL_EAM_ACTIVITY_SOURCE', P_activity_source_code, 'EAM_ABO_INVALID_ACT_SRC_CODE');
1137 
1138 	validate_acnt_class(p_class_code , P_CREATION_ORGANIZATION_ID );
1139 
1140 	if p_start_date_active>p_end_date_active
1141 	then
1142 	      fnd_message.set_name('EAM', 'EAM_IAA_INVALID_ACTIVE_DATE');
1143               fnd_msg_pub.add;
1144               RAISE fnd_api.g_exc_error;
1145         END IF;
1146 
1147 	if p_last_service_start_date > p_last_service_end_date
1148 	then
1149 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1150               fnd_msg_pub.add;
1151               RAISE fnd_api.g_exc_error;
1152         END IF;
1153 
1154 	if p_prev_service_start_date > p_prev_service_end_date
1155 	then
1156 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1157               fnd_msg_pub.add;
1158               RAISE fnd_api.g_exc_error;
1159         END IF;
1160 
1161 	if p_last_scheduled_start_date > p_last_scheduled_end_date
1162 	then
1163 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1164               fnd_msg_pub.add;
1165               RAISE fnd_api.g_exc_error;
1166         END IF;
1167 
1168 
1169 	if p_prev_scheduled_start_date > p_prev_scheduled_end_date
1170 	then
1171 	      fnd_message.set_name('EAM', 'EAM_ABO_INVALID_START_END_DATE');
1172               fnd_msg_pub.add;
1173               RAISE fnd_api.g_exc_error;
1174         END IF;
1175 
1176        validate_boolean_flag(p_tagging_required_flag, 'EAM_ABO_INVALID_TAG_REQ_FLAG');
1177 
1178 	validate_boolean_flag(p_tmpl_flag, 'EAM_IAA_INV_TEML_FLAG');
1179 
1180 	IF (p_owningdepartment_id is not null) THEN
1181 	   l_validated := EAM_COMMON_UTILITIES_PVT.validate_department_id(p_owningdepartment_id, l_org_id);
1182 	   IF NOT l_validated THEN
1183 		raise_error ('EAM_ABO_INVALID_OWN_DEPT_ID');
1184 	   END IF;
1185         END IF;
1186 
1187 	validate_dff_segments(
1188 				p_ATTRIBUTE_CATEGORY	,
1189 				p_ATTRIBUTE1	,
1190 				p_ATTRIBUTE2	,
1191 				p_ATTRIBUTE3	,
1192 				p_ATTRIBUTE4	,
1193 				p_ATTRIBUTE5	,
1194 				p_ATTRIBUTE6	,
1195 				p_ATTRIBUTE7	,
1196 				p_ATTRIBUTE8	,
1197 				p_ATTRIBUTE9	,
1198 				p_ATTRIBUTE10	,
1199 				p_ATTRIBUTE11	,
1200 				p_ATTRIBUTE12	,
1201 				p_ATTRIBUTE13	,
1202 				p_ATTRIBUTE14	,
1203 				p_ATTRIBUTE15
1204 			);
1205 
1206 
1207 	--------------------------------------------------------------------------------------------
1208 	IF ((p_maintenance_object_type is null or p_maintenance_object_id is null) and
1209 	     (p_inventory_item_id is null)) THEN
1210 	      fnd_message.set_name('EAM', 'EAM_NOT_ENOUGH_PARAM');
1211               fnd_msg_pub.add;
1212 	      RAISE FND_API.G_EXC_ERROR;
1213         END IF;
1214 
1215 	IF (p_maintenance_object_type is not null and p_maintenance_object_type NOT in (3,2)) THEN
1216 	      fnd_message.set_name('EAM', 'EAM_INVALID_MAINT_OBJ_TYPE');
1217               fnd_msg_pub.add;
1218 	      RAISE FND_API.G_EXC_ERROR;
1219         END IF;
1220 
1221         l_org_id := p_organization_id;
1222 	l_asset_group_id := p_inventory_item_id;
1223 	l_asset_number := p_serial_number;
1224         l_maintenance_object_type := p_maintenance_object_type;
1225 	l_maintenance_object_id := p_maintenance_object_id;
1226 
1227 	/* Validations for the item combinations supplied by the user */
1228 	IF ( p_inventory_item_id IS NOT NULL and p_maintenance_object_id IS NULL ) THEN
1229 
1230 		eam_common_utilities_pvt.translate_asset_maint_obj
1231 		(
1232 			P_ORGANIZATION_ID ,
1233 			P_INVENTORY_ITEM_ID ,
1234 			P_SERIAL_NUMBER ,
1235 			l_object_found ,
1236 			l_object_type ,
1237 			l_object_id
1238 		);
1239 
1240 		IF (l_object_found) THEN
1241                        IF (l_maintenance_object_type is null) THEN
1242 			  l_maintenance_object_type := l_object_type;
1243 			END IF;
1244 			IF (l_maintenance_object_id is null) THEN
1245 			  l_maintenance_object_id := l_object_id;
1246 			END IF;
1247 		ELSE
1248 			raise_error('EAM_NO_ITEM_FOUND');
1249 		END IF;
1250 
1251 	ELSIF ( (p_inventory_item_id IS NULL OR p_serial_number IS NULL)AND
1252 	         p_maintenance_object_type IS NOT NULL AND p_maintenance_object_id IS NOT NULL) THEN
1253 
1254 		eam_common_utilities_pvt.translate_maint_obj_asset
1255 		(
1256 			p_maintenance_object_type ,
1257 			p_maintenance_object_id ,
1258 			p_organization_id,
1259 			l_object_found ,
1260 			l_temp_org_id ,
1261 			l_item_id ,
1262 			l_serial_number
1263 		);
1264 
1265 		IF l_object_found THEN
1266 		        IF (l_asset_group_id is null) THEN
1267 			  l_asset_group_id := l_item_id;
1268 			END IF;
1269 			IF (l_asset_number is null) THEN
1270 			  l_asset_number := l_serial_number;
1271 			END IF;
1272 			IF (l_org_id is null) THEN
1273 			  l_org_id := l_temp_org_id;
1274 			END IF;
1275 		ELSE
1276 			raise_error('EAM_NO_ITEM_FOUND');
1277 		END IF;
1278         END IF;
1279 
1280 	/* Check both the combinations are pointing to the same item / serial_number */
1281 	l_validated := check_item_unique (
1282 			l_maintenance_object_type ,
1283 			l_maintenance_object_id ,
1284 			l_asset_group_id ,
1285 			l_org_id ,
1286 			l_asset_number ,
1287 			l_org_id
1288 		);
1289 
1290 	IF NOT l_validated THEN
1291 		raise_error ('EAM_ABO_INVALID_INV_ITEM_ID');
1292 	END IF;
1293 
1294 	/* Template flag validation */
1295 	begin
1296 
1297 		SELECT msi.eam_item_type , msi.serial_number_control_code
1298 		INTO l_item_type , l_ser_num_ctrl_cd
1299 		FROM mtl_system_items_b msi, mtl_parameters mp
1300 		WHERE msi.organization_id = mp.organization_id
1301 		  AND mp.maint_organization_id = nvl(l_org_id, mp.maint_organization_id)
1302 		  AND msi.inventory_item_id = l_asset_group_id
1303 		  AND rownum = 1;
1304 
1305 		if nvl (p_tmpl_flag , 'N') = 'Y' then
1306 			if (l_maintenance_object_type = 3) then
1307 				RAISE_ERROR ('EAM_IAA_INV_TEML_FLAG');
1308 			end if;
1309 			if (P_SOURCE_TMPL_ID is not null) then
1310 				RAISE_ERROR ('EAM_SOURCE_TMPL_ID_NOT_NULL');
1311 			end if;
1312 			if ( l_item_type = 3 and l_ser_num_ctrl_cd = 1 )  then
1313 				RAISE_ERROR ('EAM_NON_SERIAL_REBUILD_ASSOC');
1314 			end if;
1315 		else -- if non template record
1316 			if (l_maintenance_object_type = 2) then
1317 				if (NOT ( l_item_type = 3 and l_ser_num_ctrl_cd = 1 ))  then
1318 					RAISE_ERROR ('EAM_IAA_INV_TEML_FLAG');
1319 				end if;
1320 			end if;
1321 		end if;
1322 	exception
1323 		when no_data_found then
1324 			raise_error('EAM_NO_ITEM_FOUND');
1325 	end;
1326 
1327 
1328 	--------------------------------------------------------------------------------------------
1329 
1330 	VALIDATE_ROW_EXISTS(p_asset_activity_id,
1331 			    l_maintenance_object_id,
1332 			    l_maintenance_object_type,
1333       			    p_tmpl_flag,
1334                             l_id);
1335 
1336 	IF (l_id = -1) THEN
1337               fnd_message.set_name('EAM', 'EAM_ITEM_ACT_REC_NOT_FOUND');
1338               fnd_msg_pub.add;
1339               RAISE fnd_api.g_exc_error;
1340 	END IF;
1341 
1342 
1343         UPDATE mtl_eam_asset_activities
1344         SET
1345 		START_DATE_ACTIVE	 =	P_START_DATE_ACTIVE	,
1346 		END_DATE_ACTIVE	  	 =	P_END_DATE_ACTIVE	,
1347 		PRIORITY_CODE	 	 =	P_PRIORITY_CODE	,
1348 		ATTRIBUTE_CATEGORY	 =	P_ATTRIBUTE_CATEGORY	,
1349 		ATTRIBUTE1	 	 =	P_ATTRIBUTE1	,
1350 		ATTRIBUTE2	  	 =	P_ATTRIBUTE2	,
1351 		ATTRIBUTE3	  	 =	P_ATTRIBUTE3	,
1352 		ATTRIBUTE4	 	 =	P_ATTRIBUTE4	,
1353 		ATTRIBUTE5	 	 =	P_ATTRIBUTE5	,
1354 		ATTRIBUTE6	 	 =	P_ATTRIBUTE6	,
1355 		ATTRIBUTE7	 	 =	P_ATTRIBUTE7	,
1356 		ATTRIBUTE8	 	 =	P_ATTRIBUTE8	,
1357 		ATTRIBUTE9	 	 =	P_ATTRIBUTE9	,
1358 		ATTRIBUTE10	 	 =	P_ATTRIBUTE10	,
1359 		ATTRIBUTE11	 	 =	P_ATTRIBUTE11	,
1360 		ATTRIBUTE12	 	 =	P_ATTRIBUTE12	,
1361 		ATTRIBUTE13	 	 =	P_ATTRIBUTE13	,
1362 		ATTRIBUTE14	 	 =	P_ATTRIBUTE14	,
1363 		ATTRIBUTE15	 	 =	P_ATTRIBUTE15	,
1364 		LAST_SERVICE_START_DATE	 =	P_LAST_SERVICE_START_DATE	,
1365 		LAST_SERVICE_END_DATE	 =	P_LAST_SERVICE_END_DATE	,
1366 		PREV_SERVICE_START_DATE	 =	P_PREV_SERVICE_START_DATE	,
1367 		PREV_SERVICE_END_DATE	 =	P_PREV_SERVICE_END_DATE	,
1368 		LAST_SCHEDULED_START_DATE	 =	P_LAST_SCHEDULED_START_DATE	,
1369 		LAST_SCHEDULED_END_DATE	 =	P_LAST_SCHEDULED_END_DATE	,
1370 		PREV_SCHEDULED_START_DATE	 =	P_PREV_SCHEDULED_START_DATE	,
1371 		PREV_SCHEDULED_END_DATE	 =	P_PREV_SCHEDULED_END_DATE	,
1372 		WIP_ENTITY_ID            =      P_WIP_ENTITY_ID,
1373 		LAST_UPDATE_LOGIN	 =	fnd_global.login_id	,
1374 		LAST_UPDATE_DATE	 =	sysdate	,
1375 		LAST_UPDATED_BY		 =	fnd_global.user_id
1376 
1377 	WHERE ACTIVITY_ASSOCIATION_ID = P_ACTIVITY_ASSOCIATION_ID;
1378 
1379 	IF (p_organization_Id IS NOT NULL) THEN
1380 
1381   	  IF p_maintenance_object_type = 2 THEN
1382 	    l_object_type := 40;
1383 	  ELSE
1384 	    l_object_type := 60;
1385 	  END IF;
1386 
1387 	  eam_org_maint_defaults_pvt.update_insert_row
1388 	    (
1389 	      p_api_version           => 1.0
1390              ,p_commit                => p_commit
1391 	     ,p_object_type           => l_object_type
1392 	     ,p_object_id             => p_activity_association_id
1393 	     ,p_organization_id       => p_organization_Id
1394 	     ,p_owning_department_id  => p_owningdepartment_id
1395 	     ,p_accounting_class_code => p_class_code
1396 	     ,p_activity_cause_code   => p_activity_cause_code
1397 	     ,p_activity_type_code    => p_activity_type_code
1398 	     ,p_activity_source_code  => p_activity_source_code
1399 	     ,p_shutdown_type_code    => p_shutdown_type_code
1400 	     ,p_tagging_required_flag => p_tagging_required_flag
1401 	     ,x_return_status         => x_return_status
1402 	     ,x_msg_count             => x_msg_count
1403 	     ,x_msg_data              => x_msg_data
1404 	    );
1405 
1406 	  IF x_return_status <> fnd_api.g_ret_sts_success THEN
1407 	     RAISE fnd_api.g_exc_error;
1408 	  END IF;
1409 
1410         END IF;
1411 
1412 	IF p_pm_last_service_tbl.count >0
1413         THEN
1414 
1415 	     IF (p_tmpl_flag = 'Y') THEN
1416 	       raise_error('EAM_INVALID_METER_READING');
1417 	     END IF;
1418 
1419              EAM_PM_LAST_SERVICE_PUB.process_pm_last_service
1420              (
1421 			p_api_version      => p_api_version,
1422 			p_init_msg_list    => FND_API.G_FALSE,--p_init_msg_list,
1423 			p_commit	   => p_commit,
1424 			p_validation_level => p_validation_level,
1425 			x_return_status	   => x_return_status,
1426 			x_msg_count        => x_msg_count,
1427 			x_msg_data	   => x_msg_data,
1428 
1429 			p_pm_last_service_tbl => p_pm_last_service_tbl,
1430 			p_actv_assoc_id       => P_ACTIVITY_ASSOCIATION_ID
1431 	       );
1432 
1433 	      x_msg_count := FND_MSG_PUB.count_msg;
1434 	      IF x_msg_count > 0 THEN
1435 	         RAISE FND_API.G_EXC_ERROR;
1436 	      END IF;
1437         END IF;
1438 
1439 	-- End of API body.
1440 	-- Standard check of p_commit.
1441 	IF FND_API.To_Boolean( p_commit ) THEN
1442 		COMMIT WORK;
1443 	END IF;
1444 	-- Standard call to get message count and if count is 1, get message info.
1445 	FND_MSG_PUB.get
1446     	(  	p_msg_index_out         	=>      x_msg_count     	,
1447         	p_data          	=>      x_msg_data
1448     	);
1449 EXCEPTION
1450     WHEN FND_API.G_EXC_ERROR THEN
1451 		ROLLBACK TO UPDATE_ITEM_ACTIVITIES;
1452 		x_return_status := FND_API.G_RET_STS_ERROR ;
1453 		FND_MSG_PUB.get
1454     		(  	p_msg_index_out         	=>      x_msg_count     	,
1455         			p_data          	=>      x_msg_data
1456     		);
1457 	WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1458 		ROLLBACK TO UPDATE_ITEM_ACTIVITIES;
1459 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1460 		FND_MSG_PUB.get
1461     		(  	p_msg_index_out         	=>      x_msg_count     	,
1462         			p_data          	=>      x_msg_data
1463     		);
1464 	WHEN OTHERS THEN
1465 		ROLLBACK TO UPDATE_ITEM_ACTIVITIES;
1466 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1467   		IF 	FND_MSG_PUB.Check_Msg_Level
1468 			(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1469 		THEN
1470         		FND_MSG_PUB.Add_Exc_Msg
1471     	    		(	G_PKG_NAME  	    ,
1472     	    			l_api_name
1473 	    		);
1474 		END IF;
1475 		FND_MSG_PUB.get
1476     		(  	p_msg_index_out         	=>      x_msg_count     	,
1477         			p_data          	=>      x_msg_data
1478     		);
1479 END update_item_activities;
1480 
1481 
1482 END EAM_ITEM_ACTIVITIES_PUB;