DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTF_IH_PUB

Source


1 PACKAGE BODY  JTF_IH_PUB AS
2 /* $Header: JTFIHPBB.pls 120.4.12010000.2 2008/11/25 10:00:00 ppillai ship $ */
3 	G_PKG_NAME CONSTANT VARCHAR2(30) := 'JTF_IH_PUB';
4 
5 
6 -- 08/26/03 mpetrosi B3102306
7 -- added cross check of source_code, source_code_id
8 PROCEDURE Validate_Source_Code(p_api_name IN VARCHAR2
9   ,x_source_code_id IN OUT NOCOPY NUMBER
10   ,x_source_code IN OUT NOCOPY VARCHAR2
11   ,x_return_status IN OUT NOCOPY VARCHAR2);
12 
13 PROCEDURE Validate_Source_Code(p_api_name IN VARCHAR2
14   ,x_source_code_id IN OUT NOCOPY NUMBER
15   ,x_source_code IN OUT NOCOPY VARCHAR2
16   ,x_return_status IN OUT NOCOPY VARCHAR2)  IS
17 BEGIN
18 
19    IF ((x_source_code_id IS NOT NULL) AND
20        (x_source_code_id <> fnd_api.g_miss_num)) AND
21        ((x_source_code IS NULL) OR
22         (x_source_code = fnd_api.g_miss_char)) THEN
23       BEGIN
24         SELECT source_code into x_source_code
25           FROM ams_source_codes
26           WHERE source_code_id = x_source_code_id;
27         IF (SQL%NOTFOUND) THEN
28           x_return_status := fnd_api.g_ret_sts_error;
29           jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(x_source_code_id), 'SOUREC_CODE');
30           RETURN ;
31         END IF;
32       END;
33    END IF;
34 
35    IF ((x_source_code IS NOT NULL) AND
36        (x_source_code <> fnd_api.g_miss_char)) AND
37       ((x_source_code_id IS NULL) OR
38        (x_source_code_id = fnd_api.g_miss_num)) THEN
39       BEGIN
40          SELECT source_code_id into x_source_code_id
41          FROM ams_source_codes
42          WHERE source_code = x_source_code;
43          IF (SQL%NOTFOUND) THEN
44             x_return_status := fnd_api.g_ret_sts_error;
45             jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, x_source_code, 'SOURCE_CODE');
46             RETURN;
47          END IF;
48       END;
49    END IF;
50 
51 END Validate_Source_Code;
52 
53 
54 -- Jean Zhu add Utility Validate_StartEnd_Date
55 PROCEDURE Validate_StartEnd_Date
56 (  p_api_name         IN     VARCHAR2,
57    p_start_date_time  IN     DATE,
58    p_end_date_time    IN     DATE,
59    x_return_status    IN OUT NOCOPY  VARCHAR2
60   );
61 
62 --  End Utilities Declaration
63 -- Begin Utilities Definition
64 --
65 --	HISTORY
66 --
67 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
68 --	------		----		--------------------------
69 --
70 --	Jean Zhu	11-JAN-2000	INITIAL VERSION
71 --	James Baldo Jr.	03-MAY-2000	Fix for bugdb 1286036
72 --  Enh# 2999069 - time portion not included in start and end date time
73 --  error messages
74 
75 PROCEDURE Validate_StartEnd_Date
76   ( p_api_name    IN     VARCHAR2,
77     p_start_date_time   IN     DATE,
78     p_end_date_time		  IN     DATE,
79     x_return_status     IN OUT NOCOPY  VARCHAR2
80   )
81   IS
82   BEGIN
83 	-- DBMS_OUTPUT.PUT_LINE('end_date =' || to_char(p_end_date_time, 'DD-MON-YYYY') || ' start_date =' ||  to_char(p_start_date_time, 'DD-MON-YYYY'));
84 	IF((p_start_date_time IS NOT NULL) AND (p_end_date_time IS NOT NULL) AND
85 		(p_start_date_time <> fnd_api.g_miss_date) AND
86 		(p_end_date_time <> fnd_api.g_miss_date) AND
87 --		(p_end_date_time - p_start_date_time < 0) )THEN
88 		(p_end_date_time < p_start_date_time) )THEN
89 			-- DBMS_OUTPUT.PUT_LINE('end_date is less than start_date in JTF_IH_PUB.Validate_StartEnd_Date');
90 			x_return_status := fnd_api.g_ret_sts_error;
91 --      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_end_date_time, 'DD-MON-YYYY'),
92 --					    'end_date_time');
93       -- Enh# 2999069
94       --jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_end_date_time, 'DD-MON-RRRR HH:MI:SS'),'end_date_time');
95       FND_MESSAGE.SET_NAME('JTF','JTF_IH_API_INVALID_END_DATE');
96       FND_MESSAGE.SET_TOKEN('END_DATE', to_char(p_end_date_time, 'DD-MON-RRRR HH:MI:SS'));
97       FND_MESSAGE.SET_TOKEN('START_DATE', to_char(p_start_date_time, 'DD-MON-RRRR HH:MI:SS'));
98       FND_MSG_PUB.Add;
99 	END IF;
100   END Validate_StartEnd_Date;
101 
102 
103   PROCEDURE Validate_Interaction_Record
104   ( p_api_name    IN     VARCHAR2,
105     p_int_val_rec       IN OUT NOCOPY interaction_rec_type,
106     p_resp_appl_id      IN     NUMBER   := NULL,
107     p_resp_id     IN     NUMBER   := NULL,
108     x_return_status     IN OUT NOCOPY  VARCHAR2
109   );
110 
111 --	HISTORY
112 --
113 --	AUTHOR		     DATE		  MODIFICATION DESCRIPTION
114 --	------		     ----		  --------------------------
115 --  Prashanth Pillai     20-MAY-2008              FIX 7028381
116 --
117   FUNCTION Is_ContactPartyEmployeeOfOrg(p_Party_id IN NUMBER
118   )RETURN BOOLEAN AS
119   s_Employee_Number VARCHAR2(30) := NULL;
120   BEGIN
121   SELECT DISTINCT PERSON_ID INTO s_Employee_Number FROM PER_WORKFORCE_CURRENT_X WHERE PARTY_ID = p_Party_id;
122   RETURN TRUE;
123   EXCEPTION
124   WHEN NO_DATA_FOUND THEN
125       RETURN FALSE;
126     END;
127 
128 --
129 --	HISTORY
130 --
131 --	AUTHOR		     DATE		  MODIFICATION DESCRIPTION
132 --	------		     ----		  --------------------------
133 --  Igor Aleshin     17-JUN-2003   Created based on Enh# 1846960
134 --
135     FUNCTION Get_Party_Type( p_Party_Id       IN      NUMBER
136     ) RETURN VARCHAR2 AS
137   s_Party_Type VARCHAR2(30) := NULL;
138     BEGIN
139   SELECT PARTY_TYPE INTO s_Party_Type FROM HZ_PARTIES WHERE PARTY_ID = p_Party_Id;
140   RETURN s_Party_Type;
141     EXCEPTION
142   WHEN NO_DATA_FOUND THEN
143       RETURN NULL;
144     END;
145 
146 --
147 --	HISTORY
148 --
149 --	AUTHOR		     DATE		  MODIFICATION DESCRIPTION
150 --	------		     ----		  --------------------------
151 --  Igor Aleshin     17-JUN-2003   Created based on Enh# 1846960
152 --
153 
154 PROCEDURE Get_Relationship(p_Party_ID IN NUMBER,
155    p_Subject_ID OUT NOCOPY NUMBER,
156    p_Subject_Type OUT NOCOPY VARCHAR2,
157    p_Object_ID OUT NOCOPY NUMBER,
158    p_Object_Type OUT NOCOPY VARCHAR2,
159    x_return_status IN OUT NOCOPY  VARCHAR2
160 ) AS
161 
162   l_direction_flag_perf VARCHAR2(1); -- Perf fix for literal Usage
163 BEGIN
164 
165    -- Get a Party relationship ids: Subject_ID and Subject_Type and
166    -- Object_Id and Object_Type
167    --
168    -- Perf fix for literal Usage
169    l_direction_flag_perf := 'F';
170 
171    SELECT
172       SUBJECT_ID,
173       SUBJECT_TYPE,
174       OBJECT_ID,
175       OBJECT_TYPE
176    INTO
177       p_Subject_ID,
178       p_Subject_Type,
179       p_Object_ID,
180       p_Object_Type
181    FROM HZ_RELATIONSHIPS WHERE PARTY_ID = p_Party_ID AND
182       DIRECTIONAL_FLAG = l_direction_flag_perf;
183    x_return_status := fnd_api.g_ret_sts_success;
184    RETURN;
185 EXCEPTION
186    WHEN NO_DATA_FOUND THEN
187      x_return_status := fnd_api.g_ret_sts_error;
188      FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_PARTY_RELATIONSHIP');
189      FND_MESSAGE.SET_TOKEN('PARTY', p_Party_ID);
190      FND_MSG_PUB.Add;
191      RETURN;
192 END;
193 
194 --
195 --	HISTORY
196 --
197 --	AUTHOR		     DATE		  MODIFICATION DESCRIPTION
198 --	------		     ----		  --------------------------
199 --  Igor Aleshin     17-JUN-2003   Created based on Enh# 1846960
200 --
201 PROCEDURE Validate_SinglePartyID(
202   p_int_val_rec       IN OUT NOCOPY  interaction_rec_type,
203   x_return_status     IN OUT NOCOPY  VARCHAR2
204 ) AS
205   s_Party_Type VARCHAR2(30);
206   n_Subject_Id NUMBER;
207   s_Subject_Type VARCHAR2(30);
208   n_Object_ID NUMBER;
209   s_Object_Type VARCHAR2(30);
210 
211 BEGIN
212   -- Get Party Type
213   --
214   s_Party_Type := Get_Party_Type(p_int_val_rec.party_id);
215 
216   -- Party Type based on required Party Id. If Party Type is null then
217   -- return an error.
218   --
219   IF s_Party_Type IS NULL THEN
220       x_return_status := fnd_api.g_ret_sts_error;
221       FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_PARTY');
222       FND_MESSAGE.SET_TOKEN('PARTY', p_int_val_rec.party_id);
223       FND_MSG_PUB.Add;
224       RETURN;
225   END IF;
226 
227   -- Case# 1 - Person as customer - Same person Contac
228   --
229   IF s_Party_Type = 'PERSON' THEN
230     p_int_val_rec.primary_party_id := p_int_val_rec.party_id;
231     p_int_val_rec.contact_rel_party_id := NULL;
232     p_int_val_rec.contact_party_id := p_int_val_rec.party_id;
233     x_return_status := fnd_api.g_ret_sts_success;
234     RETURN;
235   -- Case# 3 - Org as Customer. No Contact
236   --
237   ELSIF s_Party_Type = 'ORGANIZATION' THEN
238     p_int_val_rec.primary_party_id := p_int_val_rec.party_id;
239     p_int_val_rec.contact_rel_party_id := NULL;
240     p_int_val_rec.contact_party_id := NULL;
241     x_return_status := fnd_api.g_ret_sts_success;
242     RETURN;
243   ELSIF s_Party_Type = 'PARTY_RELATIONSHIP' THEN
244       -- Check valid relationship
245       --
246       Get_Relationship(p_int_val_rec.party_id,n_Subject_Id,s_Subject_Type,
247                        n_Object_Id,s_Object_Type, x_return_status);
248       IF x_return_status = fnd_api.g_ret_sts_error THEN
249     RETURN;
250       ELSE
251     -- Case# 2 Person as customer - Other Person Contact
252     --
253     IF(s_Object_Type = 'PERSON') and (s_Subject_Type = 'PERSON') THEN
254         p_int_val_rec.primary_party_id := p_int_val_rec.party_id;
255         p_int_val_rec.contact_rel_party_id := p_int_val_rec.party_id;
256         p_int_val_rec.contact_party_id := NULL;
257     -- Case# 4 Org. as Customer - Person Contact
258     --
259     ELSIF(s_Object_Type = 'ORGANIZATION') and (s_Subject_Type = 'PERSON') THEN
260         p_int_val_rec.primary_party_id := n_Object_Id;
261         p_int_val_rec.contact_rel_party_id := p_int_val_rec.party_id;
262         p_int_val_rec.contact_party_id := n_Subject_Id;
263     ELSIF (s_Subject_Type = 'ORGANIZATION') and (s_Object_Type = 'PERSON') THEN
264         p_int_val_rec.primary_party_id := n_Subject_Id;
265         p_int_val_rec.contact_rel_party_id := p_int_val_rec.party_id;
266         p_int_val_rec.contact_party_id := n_Object_Id;
267     ELSIF (s_Subject_Type = 'ORGANIZATION') and (s_Object_Type = 'ORGANIZATION') THEN
268         p_int_val_rec.primary_party_id := p_int_val_rec.party_id;
269         p_int_val_rec.contact_rel_party_id := NULL;
270         p_int_val_rec.contact_party_id := NULL;
271     ELSE
272         x_return_status := fnd_api.g_ret_sts_error;
273         FND_MESSAGE.SET_NAME('JTF','JTF_IH_WRONG_PARTY_REL');
274         FND_MESSAGE.SET_TOKEN('PARTY_ID', p_int_val_rec.party_id);
275         FND_MSG_PUB.Add;
276         RETURN;
277     END IF;
278       END IF;
279   END IF;
280   x_return_status := fnd_api.g_ret_sts_success;
281   RETURN;
282 END;
283 
284 --
285 --	HISTORY
286 --
287 --	AUTHOR		     DATE		  MODIFICATION DESCRIPTION
288 --	------		     ----		  --------------------------
289 --  Igor Aleshin     17-JUN-2003   Created based on Enh# 1846960
290 --
291     PROCEDURE Validate_MultiPartyID(
292     p_int_val_rec       IN interaction_rec_type,
293     x_return_status     IN OUT NOCOPY  VARCHAR2
294     ) AS
295   s_Party_Type VARCHAR2(30);
296   n_Subject_Id NUMBER;
297   s_Subject_Type VARCHAR2(30);
298   n_Object_ID NUMBER;
299   s_Object_Type VARCHAR2(30);
300     BEGIN
301     	-- Reject invalid combinations
302     	--
303   IF p_int_val_rec.primary_party_id IS NULL THEN
304       x_return_status := fnd_api.g_ret_sts_error;
305       FND_MESSAGE.SET_NAME('JTF','JTF_IH_REQ_ITEM_MSG');
306       FND_MESSAGE.SET_TOKEN('FIELDNAME', 'Primary_Party_ID');
307       FND_MSG_PUB.Add;
308       RETURN;
309   END IF;
310 
311   -- Check valid combination for Contact_Party_ID and Primary_Party_Id and Contact_Rel_Party_ID
312   --
313 		IF p_int_val_rec.Contact_Party_ID IS NULL AND
314       p_int_val_rec.Primary_Party_Id IS NOT NULL
315       AND p_int_val_rec.Contact_Rel_Party_ID IS NOT NULL THEN
316     x_return_status := fnd_api.g_ret_sts_error;
317     FND_MESSAGE.SET_NAME('JTF','JTF_IH_INVALID_PARTY_COMB');
318     FND_MSG_PUB.Add;
319     RETURN;
320   END IF;
321 
322   -- If the Party_Id is not equals to one of the other party id values them it must be validated separately - Case #5 and #6
323 		--
324   IF (p_int_val_rec.party_id <> p_int_val_rec.primary_party_id) AND
325       (p_int_val_rec.party_id <> nvl(p_int_val_rec.contact_rel_party_id,-1)) AND
326       (p_int_val_rec.party_id <> nvl(p_int_val_rec.contact_party_id,-1)) THEN
327     s_Party_Type := Get_Party_Type(p_int_val_rec.party_id);
328 
329     IF s_Party_Type IS NULL THEN
330         x_return_status := fnd_api.g_ret_sts_error;
331         FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_PARTY');
332         FND_MESSAGE.SET_TOKEN('PARTY', p_int_val_rec.party_id);
333         FND_MSG_PUB.Add;
334         RETURN;
335     END IF;
336 
337     IF s_Party_Type <> 'ORGANIZATION' THEN
338         x_return_status := fnd_api.g_ret_sts_error;
339         FND_MESSAGE.SET_NAME('JTF','JTF_IH_PARTIES_NOT_EQUAL');
340         FND_MESSAGE.SET_TOKEN('PARTY_ID', p_int_val_rec.party_id);
341         FND_MSG_PUB.Add;
342         RETURN;
343     END IF;
344   END IF;
345   -- Validate cases no contact_rel_party_id is passed Case#1, Case#3, Case#5
346   IF (p_int_val_rec.contact_rel_party_id IS NULL) THEN
347    IF ((p_int_val_rec.contact_party_id IS NOT NULL) AND (p_int_val_rec.primary_party_id IS NOT NULL)) THEN
348     IF((Is_ContactPartyEmployeeOfOrg(p_int_val_rec.contact_party_id) = FALSE)
349         AND (p_int_val_rec.primary_party_id <> p_int_val_rec.contact_party_id)) THEN
350         x_return_status := fnd_api.g_ret_sts_error;
351         FND_MESSAGE.SET_NAME('JTF','JTF_IH_INVALID_PERSON_PARTY');
352         FND_MESSAGE.SET_TOKEN('P_PARTY_ID', p_int_val_rec.party_id);
353         FND_MESSAGE.SET_TOKEN('C_PARTY_ID', p_int_val_rec.contact_party_id);
354         FND_MSG_PUB.Add;
355         RETURN;
356     END IF;
357 
358     -- Get Contact Party Type
359     --
360     s_Party_Type := Get_Party_Type(p_int_val_rec.contact_party_id);
361     IF s_Party_Type IS NULL THEN
362         x_return_status := fnd_api.g_ret_sts_error;
363         FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_PARTY');
364         FND_MESSAGE.SET_TOKEN('PARTY', p_int_val_rec.contact_party_id);
365         FND_MSG_PUB.Add;
366         RETURN;
367     END IF;
368     IF s_Party_Type <> 'PERSON' THEN
369         x_return_status := fnd_api.g_ret_sts_error;
370         FND_MESSAGE.SET_NAME('JTF','JTF_IH_NON_PERSON_CONTACT');
371         FND_MESSAGE.SET_TOKEN('C_PARTY_ID', p_int_val_rec.contact_party_id);
372         FND_MSG_PUB.Add;
373         RETURN;
374     END IF;
375     x_return_status := fnd_api.g_ret_sts_success;
376     RETURN;
377       END IF;
378 
379       IF p_int_val_rec.contact_party_id IS NULL THEN -- Case# 3, 5
380     s_Party_Type := Get_Party_Type(p_int_val_rec.primary_party_id);
381     IF s_Party_Type IS NULL THEN
382         x_return_status := fnd_api.g_ret_sts_error;
383         FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_PARTY');
384         FND_MESSAGE.SET_TOKEN('PARTY', p_int_val_rec.primary_party_id);
385         FND_MSG_PUB.Add;
386         RETURN;
387     END IF;
388     IF s_Party_Type <> 'ORGANIZATION' THEN
389         x_return_status := fnd_api.g_ret_sts_error;
390         FND_MESSAGE.SET_NAME('JTF','JTF_IH_INVALID_PERSON_PARTY');
391         FND_MESSAGE.SET_TOKEN('P_PARTY_ID', p_int_val_rec.primary_party_id);
392         FND_MESSAGE.SET_TOKEN('C_PARTY_ID', p_int_val_rec.contact_party_id);
393         FND_MSG_PUB.Add;
394         RETURN;
395     END IF;
396     x_return_status := fnd_api.g_ret_sts_success;
397     RETURN;
398       END IF;
399   END IF;
400 
401   -- Check and get valid relationship for Contact_Party_Id
402   --
403   Get_Relationship(p_int_val_rec.contact_rel_party_id,
404     n_Subject_ID,
405     s_Subject_Type,
406     n_Object_ID,
407     s_Object_Type,
408     x_return_status);
409 
410   IF x_return_status = fnd_api.g_ret_sts_error THEN
411       RETURN;
412   END IF;
413 
414   -- First validate the contact id to make sure is is part of the relationsip and is of type person
415   -- Is the contact the object?
416   --
417   IF p_int_val_rec.contact_party_id = n_Object_ID THEN
418       -- The Contact is the object in the relationship
419       IF s_Object_Type <> 'PERSON' THEN
420         x_return_status := fnd_api.g_ret_sts_error;
421         FND_MESSAGE.SET_NAME('JTF','JTF_IH_NON_PERSON_CONTACT');
422         FND_MESSAGE.SET_TOKEN('C_PARTY_ID', p_int_val_rec.contact_party_id);
423         FND_MSG_PUB.Add;
424         RETURN;
425       END IF;
426 
427       -- Validate the primary
428       --
429       IF p_int_val_rec.primary_party_id = n_Subject_Id THEN
430     IF s_Subject_Type IN ('PERSON','ORGANIZATION') THEN
431         x_return_status := fnd_api.g_ret_sts_success;
432         RETURN;
433     ELSE
434         -- The primary is not a PERSON or an ORGANIZATION
435         x_return_status := fnd_api.g_ret_sts_error;
436         FND_MESSAGE.SET_NAME('JTF','JTF_IH_INVALID_PRIMARY_ID');
437         FND_MESSAGE.SET_TOKEN('P_PARTY_ID', p_int_val_rec.primary_party_id);
438         FND_MSG_PUB.Add;
439         RETURN;
440     END IF;
441       ELSE
442         -- The primary_Id is not part of the relationship
443         x_return_status := fnd_api.g_ret_sts_error;
444         FND_MESSAGE.SET_NAME('JTF','JTF_IH_PRIMARY_IS_NOT_REL');
445         FND_MESSAGE.SET_TOKEN('P_PARTY_ID', p_int_val_rec.primary_party_id);
446         FND_MESSAGE.SET_TOKEN('R_PARTY_ID', p_int_val_rec.contact_rel_party_id);
447         FND_MSG_PUB.Add;
448         RETURN;
449       END IF;
450   ELSE
451       -- Is contact_party_id the subject?
452       IF p_int_val_rec.contact_party_id = n_Subject_Id THEN
453     -- The contact_party_id is subject in the relationship
454     IF s_Subject_Type <> 'PERSON' THEN
455         -- The contact is not a Person
456         x_return_status := fnd_api.g_ret_sts_error;
457         FND_MESSAGE.SET_NAME('JTF','JTF_IH_NON_PERSON_CONTACT');
458         FND_MESSAGE.SET_TOKEN('C_PARTY_ID', p_int_val_rec.contact_party_id);
459         FND_MSG_PUB.Add;
460         RETURN;
461     END IF;
462     IF p_int_val_rec.primary_party_id = n_Object_id THEN
463         IF s_Object_Type IN ('PERSON','ORGANIZATION') THEN
464       x_return_status := fnd_api.g_ret_sts_success;
465       RETURN;
466         ELSE
467       -- The Primary is not part of the relatioship
468       x_return_status := fnd_api.g_ret_sts_error;
469       FND_MESSAGE.SET_NAME('JTF','JTF_IH_INVALID_PRIMARY_ID');
470       FND_MESSAGE.SET_TOKEN('P_PARTY_ID', p_int_val_rec.primary_party_id);
471       FND_MSG_PUB.Add;
472       RETURN;
473         END IF;
474     ELSE
475         -- The Primary is not part of the relatioship
476         x_return_status := fnd_api.g_ret_sts_error;
477         FND_MESSAGE.SET_NAME('JTF','JTF_IH_PRIMARY_IS_NOT_REL');
478         FND_MESSAGE.SET_TOKEN('P_PARTY_ID', p_int_val_rec.primary_party_id);
479         FND_MESSAGE.SET_TOKEN('R_PARTY_ID', p_int_val_rec.contact_rel_party_id);
480         FND_MSG_PUB.Add;
481         RETURN;
482     END IF;
483       ELSE
484     -- The Contact is not part of the relationship
485     x_return_status := fnd_api.g_ret_sts_error;
486     FND_MESSAGE.SET_NAME('JTF','JTF_IH_CONTACT_IS_NOT_REL');
487     FND_MESSAGE.SET_TOKEN('C_PARTY_ID', p_int_val_rec.contact_party_id);
488     FND_MESSAGE.SET_TOKEN('R_PARTY_ID', p_int_val_rec.contact_rel_party_id);
489     FND_MSG_PUB.Add;
490     RETURN;
491       END IF;
492   END IF;
493   x_return_status := fnd_api.g_ret_sts_success;
494   RETURN;
495     END;
496 
497 --  End Utilities Declaration
498 -- Begin Utilities Definition
499 
500 
501 --
502 --	HISTORY
503 --
504 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
505 --	------		----		--------------------------
506 --
507 --	Jean Zhu	11-JAN-2000	INITIAL VERSION
508 --	James Baldo Jr.	02-MAY-2000	Modified to validate AMS campaigns
509 --	James Baldo Jr. 11-FEB-2001	Implementation fix for bugdb # 1637335 Bind Variable party_id
510 --  Igor Aleshin    20-MAY-2002 Added check for Touchpoint1_type and Touchpoint2_type
511 --  Igor Aleshin    08-NOV-2002 Added hint NOCOPY to IN/OUT, OUT parameters
512 --  Igor Aleshin    18-JUN-2003 Enh# 1846960 - REQUIRE CONTACT NAME OF ORGANISATION IN INTERACTION HISTORY
513 --
514 
515   PROCEDURE Validate_Interaction_Record
516   ( p_api_name    IN      VARCHAR2,
517     p_int_val_rec       IN OUT NOCOPY interaction_rec_type,
518     p_resp_appl_id      IN      NUMBER   := NULL,
519     p_resp_id     IN      NUMBER   := NULL,
520     x_return_status     IN OUT NOCOPY  VARCHAR2
521   )
522   IS
523     l_count 	NUMBER := 0;
524     v_party_id	NUMBER;
525   BEGIN
526     -- local variable initialization to remove GSCC warnings
527     v_party_id := p_int_val_rec.party_id;
528 
529     -- Initialize API return status to success
530     x_return_status := fnd_api.g_ret_sts_success;
531 
532   --Enh# 1846960
533   --
534   -- Party_ID is required parameter for Interaction.
535   -- Check, that Party_Id in the Interaction_Res has passed values.
536   --
537   IF p_int_val_rec.party_id IS NULL THEN
538   x_return_status := fnd_api.g_ret_sts_error;
539   FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_PARTY');
540 		FND_MESSAGE.SET_TOKEN('PARTY', p_int_val_rec.party_id);
541   FND_MSG_PUB.Add;
542   RETURN;
543   ELSE
544 
545     IF( p_int_val_rec.primary_party_id = fnd_api.g_miss_num) THEN
546       p_int_val_rec.primary_party_id := NULL;
547     END IF;
548     IF( p_int_val_rec.contact_rel_party_id = fnd_api.g_miss_num) THEN
549       p_int_val_rec.contact_rel_party_id := NULL;
550     END IF;
551     IF( p_int_val_rec.contact_party_id = fnd_api.g_miss_num) THEN
552       p_int_val_rec.contact_party_id := NULL;
553     END IF;
554 
555     --fix for bug 5006885 restoring touchpoint1_type EMPLOYEE
556     IF (p_int_val_rec.touchpoint1_type = 'PARTY') then
557       IF ((p_int_val_rec.primary_party_id IS NULL)
558         AND (p_int_val_rec.contact_rel_party_id IS NULL)
559         AND (p_int_val_rec.contact_party_id IS NULL)) THEN
560         Validate_SinglePartyID(p_int_val_rec, x_return_status);
561 
562       ELSE
563         Validate_MultiPartyID(p_int_val_rec, x_return_status);
564       END IF;
565     ELSE
566       BEGIN
567         SELECT count(resource_id) into l_count
568         FROM jtf_rs_resource_extns
569         WHERE resource_id = p_int_val_rec.party_id;
570         IF (l_count <= 0) THEN
571              x_return_status := fnd_api.g_ret_sts_error;
572              jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.resource_id),
573                               'resource_id touchpoint1_type');
574           RETURN;
575         END IF;
576       END;
577     END IF;
578 
579     --  If we have any errors in the Single or Multiple Party ID procedures,
580     --  then cancel procedure's process.
581     IF x_return_status = fnd_api.g_ret_sts_error THEN
582   RETURN;
583     END IF;
584   END IF;
585 
586 
587   IF ((p_int_val_rec.handler_id IS NOT NULL) AND (p_int_val_rec.handler_id <> fnd_api.g_miss_num)) THEN
588    	 BEGIN
589    	     SELECT count(application_id) into l_count
590        FROM fnd_application
591        WHERE application_id = p_int_val_rec.handler_id;
592        IF (l_count <= 0) THEN
593      	x_return_status := fnd_api.g_ret_sts_error;
594      	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.handler_id),
595 					    'Handler_id');
596 		RETURN;
597 	     END IF;
598    END;
599    ELSE
600    	  x_return_status := fnd_api.g_ret_sts_error;
601     jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.handler_id),
602 					    'handler_id');
603 	  RETURN;
604    END IF;
605    -- DBMS_OUTPUT.PUT_LINE('PAST Validate handler_id in JTF_IH_PUB.Validate_Interaction_Record');
606 
607    l_count := 0;
608    IF ((p_int_val_rec.resource_id IS NOT NULL) AND (p_int_val_rec.resource_id <> fnd_api.g_miss_num)) THEN
609    	IF ((p_int_val_rec.touchpoint2_type <> 'PARTY') AND (p_int_val_rec.touchpoint2_type IS NOT NULL)) then
610    	   BEGIN
611    	     SELECT count(resource_id) into l_count
612        FROM jtf_rs_resource_extns
613        WHERE resource_id = p_int_val_rec.resource_id;
614        IF (l_count <= 0) THEN
615      	x_return_status := fnd_api.g_ret_sts_error;
616      	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.resource_id),
617 					    'resource_id touchpoint2_type');
618 	     RETURN;
619 	     END IF;
620   END;
621   ELSE
622   BEGIN
623    	     SELECT count(party_id) into l_count
624        FROM hz_parties
625        WHERE party_id = p_int_val_rec.resource_id;
626        IF (l_count <= 0) THEN
627      	x_return_status := fnd_api.g_ret_sts_error;
628      	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.resource_id),
629 					    'party_id touchpoint2_type');
630 	  RETURN;
631 	     END IF;
632   END;
633   END IF;
634     ELSE
635    	   x_return_status := fnd_api.g_ret_sts_error;
636      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.resource_id),
637 					    'resource_id');
638 	   RETURN;
639    END IF;
640    -- DBMS_OUTPUT.PUT_LINE('PAST Validate resource_id in JTF_IH_PUB.Validate_Interaction_Record');
641 
642    l_count := 0;
643    IF ((p_int_val_rec.outcome_id IS NOT NULL) AND (p_int_val_rec.outcome_id <> fnd_api.g_miss_num)) THEN
644    	   BEGIN
645    	     SELECT count(outcome_id) into l_count
646        FROM jtf_ih_outcomes_B
647        WHERE outcome_id = p_int_val_rec.outcome_id;
648        IF (l_count <= 0) THEN
649      	x_return_status := fnd_api.g_ret_sts_error;
650      	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.outcome_id),
651 					    'outcome_id');
652 		RETURN;
653 	     END IF;
654    	   END;
655    END IF;
656    -- DBMS_OUTPUT.PUT_LINE('PAST Validate outcome_id in JTF_IH_PUB.Validate_Interaction_Record');
657 
658    l_count := 0;
659    IF ((p_int_val_rec.result_id IS NOT NULL) AND (p_int_val_rec.result_id <> fnd_api.g_miss_num)) THEN
660    	   BEGIN
661    	     SELECT count(result_id) into l_count
662    FROM jtf_ih_results_B
663    WHERE result_id = p_int_val_rec.result_id;
664      IF (l_count <= 0) THEN
665      x_return_status := fnd_api.g_ret_sts_error;
666      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.result_id),
667 					    'result_id');
668 					 RETURN;
669 					 END IF;
670 
671        END;
672    END IF;
673    -- DBMS_OUTPUT.PUT_LINE('PAST Validate result_id in JTF_IH_PUB.Validate_Interaction_Record');
674 
675    l_count := 0;
676    IF ((p_int_val_rec.reason_id IS NOT NULL) AND (p_int_val_rec.reason_id <> fnd_api.g_miss_num)) THEN
677    	   BEGIN
678    	     SELECT count(reason_id) into l_count
679    FROM jtf_ih_reasons_B
680    WHERE reason_id = p_int_val_rec.reason_id;
681      IF (l_count <= 0) THEN
682      x_return_status := fnd_api.g_ret_sts_error;
683      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.reason_id),
684 					    'reason_id');
685 					 RETURN;
686 					 END IF;
687        END;
688    END IF;
689    -- DBMS_OUTPUT.PUT_LINE('PAST Validate reason_id in JTF_IH_PUB.Validate_Interaction_Record');
690 
691    l_count := 0;
692    IF ((p_int_val_rec.script_id IS NOT NULL) AND (p_int_val_rec.script_id <> fnd_api.g_miss_num)) THEN
693    	   BEGIN
694    	     SELECT count(script_id) into l_count
695    FROM jtf_ih_scripts
696    WHERE script_id = p_int_val_rec.script_id;
697      IF (l_count <= 0) THEN
698      x_return_status := fnd_api.g_ret_sts_error;
699      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.script_id),
700 					    'Script_id');
701 					 RETURN;
702 					 END IF;
703        END;
704    END IF;
705 	 -- DBMS_OUTPUT.PUT_LINE('PAST Validate script_id in JTF_IH_PUB.Validate_Interaction_Record');
706 
707 -- Add by Jean Zhu to validate the source_code_id
708 -- Validate AMS_Source_Code table primary key source_code_id for the following permutation:
709 --			source_code_id does have a value
710 --			source_code    does not have a value
711 --
712 	l_count := 0;
713 	IF ((p_int_val_rec.source_code_id IS NOT NULL) AND
714 		(p_int_val_rec.source_code_id <> fnd_api.g_miss_num)) AND
715 		((p_int_val_rec.source_code IS NULL) OR
716 		(p_int_val_rec.source_code = fnd_api.g_miss_char)) THEN
717 		BEGIN
718 			SELECT
719 				count(source_code_id) into l_count
720 			FROM
721 				ams_source_codes
722 			WHERE
723 				source_code_id = p_int_val_rec.source_code_id;
724 			  IF (l_count <= 0) THEN
725 			  	x_return_status := fnd_api.g_ret_sts_error;
726 			  	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.source_code_id), 'SOURCE_CODE_ID');
727 				  RETURN;
728 			  END IF;
729  		END;
730 	END IF;
731 
732 
733 -- Validate AMS_Source_Code table primary key source_code_id for the following permutation:
734 --			source_code_id does not have a value
735 --			source_code    does  have a value
736 --
737 	l_count := 0;
738 	IF ((p_int_val_rec.source_code IS NOT NULL) AND
739 		(p_int_val_rec.source_code <> fnd_api.g_miss_char)) AND
740 		((p_int_val_rec.source_code_id IS NULL) OR
741 		(p_int_val_rec.source_code_id = fnd_api.g_miss_num)) THEN
742 		BEGIN
743 			SELECT
744 				count(source_code_id) into l_count
745 			FROM
746 				ams_source_codes
747 			WHERE
748 				source_code = p_int_val_rec.source_code;
749 			IF (l_count <= 0) THEN
750 				x_return_status := fnd_api.g_ret_sts_error;
751 				jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_int_val_rec.source_code, 'SOURCE_CODE');
752 				RETURN;
753 			END IF;
754       		END;
755 	END IF;
756 
757 -- Validate AMS_Source_Code table primary key source_code_id for the following permutation:
758 --			source_code_id does have a value
759 --			source_code    does have a value
760 --
761 	l_count := 0;
762 	IF ((p_int_val_rec.source_code IS NOT NULL) AND
763 		(p_int_val_rec.source_code <> fnd_api.g_miss_char)) AND
764 		((p_int_val_rec.source_code_id IS NOT NULL) AND
765 		(p_int_val_rec.source_code_id <> fnd_api.g_miss_num)) THEN
766 		BEGIN
767 			SELECT
768 				count(source_code_id) into l_count
769 			FROM
770 				ams_source_codes
771 			WHERE
772 				source_code    = p_int_val_rec.source_code AND
773 				source_code_id = p_int_val_rec.source_code_id;
774 			IF (l_count <= 0) THEN
775 				x_return_status := fnd_api.g_ret_sts_error;
776 				jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_int_val_rec.source_code || '  ' || to_char(p_int_val_rec.source_code_id),
777 					    		'SOURCE_CODE, SOURCE_CODE_ID');
778 				RETURN;
779 			END IF;
780       		END;
781 	END IF;
782 
783    -- DBMS_OUTPUT.PUT_LINE('PAST Validate source_code_id in JTF_IH_PUB.Validate_Interaction_Record');
784 
785    l_count := 0;
786    IF ((p_int_val_rec.parent_id IS NOT NULL) AND (p_int_val_rec.parent_id <> fnd_api.g_miss_num)) THEN
787    	   BEGIN
788    	     SELECT count(interaction_id) into l_count
789    FROM jtf_ih_interactions
790    WHERE interaction_id = p_int_val_rec.parent_id;
791      IF (l_count <= 0) THEN
792      x_return_status := fnd_api.g_ret_sts_error;
793      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_int_val_rec.parent_id),
794 					    'interaction_id');
795 					 RETURN;
796 					 END IF;
797       END;
798    END IF;
799    -- DBMS_OUTPUT.PUT_LINE('PAST Validate parent_id in JTF_IH_PUB.Validate_Interaction_Record');
800 /*
801    -- Validate descriptive flexfield values
802    ----------------------------------------
803    IF ((p_int_val_rec.attribute1 <> fnd_api.g_miss_char) OR
804        (p_int_val_rec.attribute2 <> fnd_api.g_miss_char) OR
805        (p_int_val_rec.attribute3 <> fnd_api.g_miss_char) OR
806        (p_int_val_rec.attribute4 <> fnd_api.g_miss_char) OR
807        (p_int_val_rec.attribute5 <> fnd_api.g_miss_char) OR
808        (p_int_val_rec.attribute6 <> fnd_api.g_miss_char) OR
809        (p_int_val_rec.attribute7 <> fnd_api.g_miss_char) OR
810        (p_int_val_rec.attribute8 <> fnd_api.g_miss_char) OR
811        (p_int_val_rec.attribute9 <> fnd_api.g_miss_char) OR
812        (p_int_val_rec.attribute10 <> fnd_api.g_miss_char) OR
813        (p_int_val_rec.attribute11 <> fnd_api.g_miss_char) OR
814        (p_int_val_rec.attribute12 <> fnd_api.g_miss_char) OR
815        (p_int_val_rec.attribute13 <> fnd_api.g_miss_char) OR
816        (p_int_val_rec.attribute14 <> fnd_api.g_miss_char) OR
817        (p_int_val_rec.attribute15 <> fnd_api.g_miss_char) OR
818        (p_int_val_rec.attribute_category <> fnd_api.g_miss_char)) THEN
819   jtf_ih_core_util_pvt.validate_desc_flex
820   ( p_api_name      => p_api_name,
821     p_desc_flex_name      => 'JTF_IH',
822     p_column_name1  => 'ATTRIBUTE1',
823     p_column_name2  => 'ATTRIBUTE2',
824     p_column_name3  => 'ATTRIBUTE3',
825     p_column_name4  => 'ATTRIBUTE4',
826     p_column_name5  => 'ATTRIBUTE5',
827     p_column_name6  => 'ATTRIBUTE6',
828     p_column_name7  => 'ATTRIBUTE7',
829     p_column_name8  => 'ATTRIBUTE8',
830     p_column_name9  => 'ATTRIBUTE9',
831     p_column_name10       => 'ATTRIBUTE10',
832     p_column_name11       => 'ATTRIBUTE11',
833     p_column_name12       => 'ATTRIBUTE12',
834     p_column_name13       => 'ATTRIBUTE13',
835     p_column_name14       => 'ATTRIBUTE14',
836     p_column_name15       => 'ATTRIBUTE15',
837     p_column_value1       => p_int_val_rec.attribute1,
838     p_column_value2       => p_int_val_rec.attribute2,
839     p_column_value3       => p_int_val_rec.attribute3,
840     p_column_value4       => p_int_val_rec.attribute4,
841     p_column_value5       => p_int_val_rec.attribute5,
842     p_column_value6       => p_int_val_rec.attribute6,
843     p_column_value7       => p_int_val_rec.attribute7,
844     p_column_value8       => p_int_val_rec.attribute8,
845     p_column_value9       => p_int_val_rec.attribute9,
846     p_column_value10      => p_int_val_rec.attribute10,
847     p_column_value11      => p_int_val_rec.attribute11,
848     p_column_value12      => p_int_val_rec.attribute12,
849     p_column_value13      => p_int_val_rec.attribute13,
850     p_column_value14      => p_int_val_rec.attribute14,
851     p_column_value15      => p_int_val_rec.attribute15,
852     p_context_value       => p_int_val_rec.attribute_category,
853     p_resp_appl_id  => p_resp_appl_id,
854     p_resp_id       => p_resp_id,
855     x_return_status       => x_return_status);
856       IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
857    RETURN;
858       END IF;
859    END IF;*/
860    -- DBMS_OUTPUT.PUT_LINE('PAST Validate flexfields in JTF_IH_PUB.Validate_Interaction_Record');
861   END Validate_Interaction_Record;
862 
863 
864   PROCEDURE Default_Interaction_Record  (x_interaction     IN OUT NOCOPY  interaction_rec_type);
865 
866 --  End Utilities Declaration
867 -- Begin Utilities Definition
868   PROCEDURE Default_Interaction_Record  (x_interaction     IN OUT NOCOPY  interaction_rec_type)
869   IS
870 	BEGIN
871 		if (x_interaction.handler_id = fnd_api.g_miss_num)then
872 			x_interaction.handler_id :=0;
873 		end if;
874 			if (x_interaction.script_id = fnd_api.g_miss_num)then
875 			x_interaction.script_id :=0;
876 		end if;
877 
878 		if (x_interaction.result_id = fnd_api.g_miss_num)then
879 			x_interaction.result_id :=0;
880 		end if;
881 
882 		if (x_interaction.reason_id = fnd_api.g_miss_num)then
883 			x_interaction.reason_id :=0;
884 		end if;
885 
886 		if (x_interaction.resource_id = fnd_api.g_miss_num)then
887 			x_interaction.resource_id :=0;
888 		end if;
889 
890 		if (x_interaction.party_id = fnd_api.g_miss_num)then
891 			x_interaction.party_id :=0;
892 		end if;
893 
894 		if (x_interaction.object_id = fnd_api.g_miss_num)then
895 			x_interaction.object_id :=0;
896 		end if;
897 		if (x_interaction.source_code_id = fnd_api.g_miss_num)then
898 			x_interaction.source_code_id :=0;
899 		end if;
900 	END;
901 
902   PROCEDURE Default_activity_table  (x_activities     IN OUT NOCOPY  activity_tbl_type);
903 
904 --  End Utilities Declaration
905 -- Begin Utilities Definition
906   PROCEDURE Default_activity_table  (x_activities     IN OUT NOCOPY  activity_tbl_type)
907   IS
908 	BEGIN
909 
910 		for  idx in 1 .. x_activities.count loop
911 			if (x_activities(idx).task_id = fnd_api.g_miss_num)then
912 				x_activities(idx).task_id :=0;
913 			end if;
914 			if (x_activities(idx).doc_id = fnd_api.g_miss_num)then
915 				x_activities(idx).doc_id :=0;
916 			end if;
917 
918 			if (x_activities(idx).action_item_id = fnd_api.g_miss_num)then
919 				x_activities(idx).action_item_id :=0;
920 			end if;
921 
922 			if (x_activities(idx).outcome_id = fnd_api.g_miss_num) then
923 				x_activities(idx).outcome_id :=0;
924 			end if;
925 
926 			if (x_activities(idx).result_id = fnd_api.g_miss_num)then
927 				x_activities(idx).result_id :=0;
928 			end if;
929 			if (x_activities(idx).reason_id = fnd_api.g_miss_num)then
930 				x_activities(idx).reason_id :=0;
931 			end if;
932 			if (x_activities(idx).object_id = fnd_api.g_miss_num)then
933 				x_activities(idx).object_id :=0;
934 			end if;
935 			if (x_activities(idx).source_code_id = fnd_api.g_miss_num)then
936 				x_activities(idx).source_code_id:=0;
937 			end if;
938 		end loop;
939   END;
940 
941 --
942 --	HISTORY
943 --
944 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
945 --	------		----		--------------------------
946 --
947 --	Jean Zhu	11-JAN-2000	INITIAL VERSION
948 --	James Baldo Jr.	06-MAR-2000	Implementation fix for Cust_Account_ID Bug
949 --	James Baldo Jr.	02-MAY-2000	Modified to validate AMS campaigns
950 --	James Baldo Jr.	27-JUL-2000	Implemenation fix for bugdb # 1340768
951 --  Igor Aleshin    03-JAN-2002 Implemenation fix for bugdb # 2167904
952 --
953 
954 PROCEDURE Validate_Activity_Record
955   ( p_api_name    IN      VARCHAR2,
956     p_act_val_rec       IN      activity_rec_type,
957     p_resp_appl_id      IN      NUMBER   := NULL,
958     p_resp_id     IN      NUMBER   := NULL,
959     x_return_status     IN OUT NOCOPY  VARCHAR2
960   );
961 
962 --  End Utilities Declaration
963 -- Begin Utilities Definition
964 
965   PROCEDURE Validate_Activity_Record
966   ( p_api_name    IN      VARCHAR2,
967     p_act_val_rec       IN      activity_rec_type,
968     p_resp_appl_id      IN      NUMBER   := NULL,
969     p_resp_id     IN      NUMBER   := NULL,
970     x_return_status     IN OUT NOCOPY  VARCHAR2
971   )
972   IS
973     l_count NUMBER := 0;
974   BEGIN
975     -- Initialize API return status to success
976     x_return_status := fnd_api.g_ret_sts_success;
977 
978   IF ((p_act_val_rec.interaction_id IS NOT NULL) AND (p_act_val_rec.interaction_id <> fnd_api.g_miss_num)) THEN
979    	   BEGIN
980    	     SELECT count(interaction_id) into l_count
981    FROM jtf_ih_interactions
982    WHERE interaction_id = p_act_val_rec.interaction_id;
983      IF (l_count <= 0) THEN
984      x_return_status := fnd_api.g_ret_sts_error;
985      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.interaction_id),
986 					    'interaction_id');
987 					 RETURN;
988 					 END IF;
989        END;
990    ELSE
991    	   x_return_status := fnd_api.g_ret_sts_error;
992        jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.interaction_id),
993 					    'interaction_id');
994 			 RETURN;
995    END IF;
996    -- DBMS_OUTPUT.PUT_LINE('PAST Validate interaction_id in JTF_IH_PUB.Validate_Activity_Record');
997 
998    l_count := 0;
999    IF ((p_act_val_rec.action_item_id IS NOT NULL) AND (p_act_val_rec.action_item_id <> fnd_api.g_miss_num)) THEN
1000    	   BEGIN
1001    	     SELECT count(action_item_id) into l_count
1002    FROM jtf_ih_action_items_b
1003    WHERE action_item_id = p_act_val_rec.action_item_id;
1004      IF (l_count <= 0) THEN
1005      x_return_status := fnd_api.g_ret_sts_error;
1006      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.action_item_id),
1007 					    'action_item_id');
1008 					 RETURN;
1009 					 END IF;
1010        END;
1011    END IF;
1012    -- DBMS_OUTPUT.PUT_LINE('PAST Validate action_item_id in JTF_IH_PUB.Validate_Activity_Record');
1013 
1014    l_count := 0;
1015    IF ((p_act_val_rec.outcome_id IS NOT NULL) AND (p_act_val_rec.outcome_id <> fnd_api.g_miss_num)) THEN
1016    	   BEGIN
1017    	     SELECT count(outcome_id) into l_count
1018    FROM jtf_ih_outcomes_B
1019    WHERE outcome_id = p_act_val_rec.outcome_id;
1020      IF (l_count <= 0) THEN
1021      x_return_status := fnd_api.g_ret_sts_error;
1022      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.outcome_id),
1023 					    'outcome_id');
1024 					 RETURN;
1025 					 END IF;
1026 
1027    	   END;
1028     END IF;
1029    -- DBMS_OUTPUT.PUT_LINE('PAST Validate outcome_id in JTF_IH_PUB.Validate_Activity_Record');
1030 
1031 
1032    l_count := 0;
1033    IF ((p_act_val_rec.action_id IS NOT NULL) AND (p_act_val_rec.action_id <> fnd_api.g_miss_num)) THEN
1034    	   BEGIN
1035    	     SELECT count(action_id) into l_count
1036    FROM jtf_ih_actions_b
1037    WHERE action_id = p_act_val_rec.action_id;
1038      IF (l_count <= 0) THEN
1039      x_return_status := fnd_api.g_ret_sts_error;
1040      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.action_id),
1041 					    'action_id');
1042 					 RETURN;
1043 					 END IF;
1044       END;
1045    END IF;
1046    -- DBMS_OUTPUT.PUT_LINE('PAST Validate action_id in JTF_IH_PUB.Validate_Activity_Record');
1047    l_count := 0;
1048    IF ((p_act_val_rec.result_id IS NOT NULL) AND (p_act_val_rec.result_id <> fnd_api.g_miss_num)) THEN
1049    	   BEGIN
1050    	     SELECT count(result_id) into l_count
1051    FROM jtf_ih_results_B
1052    WHERE result_id = p_act_val_rec.result_id;
1053      IF (l_count <= 0) THEN
1054      x_return_status := fnd_api.g_ret_sts_error;
1055      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.result_id),
1056 					    'result_id');
1057 					 RETURN;
1058 					 END IF;
1059 
1060        END;
1061    END IF;
1062    -- DBMS_OUTPUT.PUT_LINE('PAST Validate result_id in JTF_IH_PUB.Validate_Activity_Record');
1063 
1064    l_count := 0;
1065    IF ((p_act_val_rec.reason_id IS NOT NULL) AND (p_act_val_rec.reason_id <> fnd_api.g_miss_num)) THEN
1066    	   BEGIN
1067    	     SELECT count(reason_id) into l_count
1068    FROM jtf_ih_reasons_B
1069    WHERE reason_id = p_act_val_rec.reason_id;
1070      IF (l_count <= 0) THEN
1071      x_return_status := fnd_api.g_ret_sts_error;
1072      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.reason_id),
1073 					    'reason_id');
1074 					 RETURN;
1075 					 END IF;
1076        END;
1077    END IF;
1078    -- DBMS_OUTPUT.PUT_LINE('PAST Validate reason_id in JTF_IH_PUB.Validate_Activity_Record');
1079 
1080 
1081 
1082 -- Validate AMS_Source_Code table primary key source_code_id for the following permutation:
1083 --			source_code_id does have a value
1084 --			source_code    does not have a value
1085 --
1086 	l_count := 0;
1087 	IF ((p_act_val_rec.source_code_id IS NOT NULL) AND
1088 		(p_act_val_rec.source_code_id <> fnd_api.g_miss_num)) AND
1089 		((p_act_val_rec.source_code IS NULL) OR
1090 		(p_act_val_rec.source_code = fnd_api.g_miss_char)) THEN
1091 		BEGIN
1092 			SELECT
1093 				count(source_code_id) into l_count
1094 			FROM
1095 				ams_source_codes
1096 			WHERE
1097 				source_code_id = p_act_val_rec.source_code_id;
1098 			IF (l_count <= 0) THEN
1099 				x_return_status := fnd_api.g_ret_sts_error;
1100 				jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.source_code_id), 'SOURCE_CODE_ID');
1101 				RETURN;
1102 			END IF;
1103       		END;
1104 	END IF;
1105 
1106 
1107 -- Validate AMS_Source_Code table primary key source_code_id for the following permutation:
1108 --			source_code_id does not have a value
1109 --			source_code    does  have a value
1110 --
1111 	l_count := 0;
1112 	IF ((p_act_val_rec.source_code IS NOT NULL) AND
1113 		(p_act_val_rec.source_code <> fnd_api.g_miss_char)) AND
1114 		((p_act_val_rec.source_code_id IS NULL) OR
1115 		(p_act_val_rec.source_code_id = fnd_api.g_miss_num)) THEN
1116 		BEGIN
1117 			SELECT
1118 				count(source_code_id) into l_count
1119 			FROM
1120 				ams_source_codes
1121 			WHERE
1122 				source_code = p_act_val_rec.source_code;
1123 			IF (l_count <= 0) THEN
1124 				x_return_status := fnd_api.g_ret_sts_error;
1125 				jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_act_val_rec.source_code, 'SOURCE_CODE');
1126 				RETURN;
1127 			END IF;
1128       		END;
1129 	END IF;
1130 
1131 -- Validate AMS_Source_Code table primary key source_code_id for the following permutation:
1132 --			source_code_id does have a value
1133 --			source_code    does  have a value
1134 --
1135 	l_count := 0;
1136 	IF ((p_act_val_rec.source_code IS NOT NULL) AND
1137 		(p_act_val_rec.source_code <> fnd_api.g_miss_char)) AND
1138 		((p_act_val_rec.source_code_id IS NOT NULL) AND
1139 		(p_act_val_rec.source_code_id <> fnd_api.g_miss_num)) THEN
1140 		BEGIN
1141 			SELECT
1142 				count(source_code_id) into l_count
1143 			FROM
1144 				ams_source_codes
1145 			WHERE
1146 				source_code    = p_act_val_rec.source_code AND
1147 				source_code_id = p_act_val_rec.source_code_id;
1148 			IF (l_count <= 0) THEN
1149 				x_return_status := fnd_api.g_ret_sts_error;
1150 				jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_act_val_rec.source_code || '  ' || to_char(p_act_val_rec.source_code_id), 'SOURCE_CODE, SOURCE_CODE_ID');
1151 				RETURN;
1152 			END IF;
1153     END;
1154 	END IF;
1155 
1156 
1157    -- DBMS_OUTPUT.PUT_LINE('PAST Validate source_code_id in JTF_IH_PUB.Validate_Activity_Record');
1158 
1159    l_count := 0;
1160    IF ((p_act_val_rec.cust_account_id IS NOT NULL) AND (p_act_val_rec.cust_account_id <> fnd_api.g_miss_num)) THEN
1161    	   BEGIN
1162    	     SELECT count(cust_account_id) into l_count
1163    FROM hz_cust_accounts
1164    WHERE cust_account_id = p_act_val_rec.cust_account_id;
1165      IF (l_count <= 0) THEN
1166      x_return_status := fnd_api.g_ret_sts_error;
1167      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.cust_account_id),
1168 					    'cust_account_id');
1169 					 RETURN;
1170 					 END IF;
1171       END;
1172    END IF;
1173    -- DBMS_OUTPUT.PUT_LINE('PAST Validate cust_account_id in JTF_IH_PUB.Validate_Activity_Record');
1174 
1175    l_count := 0;
1176    IF ((p_act_val_rec.media_id IS NOT NULL) AND (p_act_val_rec.media_id <> fnd_api.g_miss_num)) THEN
1177    	   BEGIN
1178    	     SELECT count(media_id) into l_count
1179    FROM jtf_ih_media_items
1180    WHERE media_id = p_act_val_rec.media_id;
1181      IF (l_count <= 0) THEN
1182      x_return_status := fnd_api.g_ret_sts_error;
1183      jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_act_val_rec.media_id),
1184 					    'media_id');
1185 					 RETURN;
1186       END IF;
1187   END;
1188    END IF;
1189    -- DBMS_OUTPUT.PUT_LINE('PAST Validate media_id in JTF_IH_PUB.Validate_Activity_Record');
1190 
1191   END Validate_Activity_Record;
1192 
1193 
1194   PROCEDURE Validate_Activity_table
1195   ( p_api_name    IN      VARCHAR2,
1196     p_int_val_tbl       IN      activity_tbl_type,
1197     p_resp_appl_id      IN      NUMBER   := NULL,
1198     p_resp_id     IN      NUMBER   := NULL,
1199     x_return_status     IN OUT NOCOPY  VARCHAR2
1200   );
1201 
1202 --  End Utilities Declaration
1203 -- Begin Utilities Definition
1204   PROCEDURE Validate_Activity_table
1205   ( p_api_name    IN      VARCHAR2,
1206     p_int_val_tbl       IN      activity_tbl_type,
1207     p_resp_appl_id      IN      NUMBER   := NULL,
1208     p_resp_id     IN      NUMBER   := NULL,
1209     x_return_status     IN OUT NOCOPY  VARCHAR2
1210   )
1211 
1212   IS
1213   l_count NUMBER := 0;
1214 
1215   BEGIN
1216     -- Initialize API return status to success
1217    x_return_status := fnd_api.g_ret_sts_success;
1218 
1219   -- Modified to call Validate_Activity_Record
1220 	for  idx in 1 .. p_int_val_tbl.count loop
1221 		Validate_Activity_Record(p_api_name, p_int_val_tbl(idx),p_resp_appl_id,p_resp_id,x_return_status);
1222 		IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
1223       		---- DBMS_OUTPUT.PUT_LINE('Unsuccessful validation of a activity record in jtf_ih_pub.Validate_Activity_table');
1224 			RETURN;
1225 		END IF;
1226 	END loop;
1227   END Validate_Activity_table;
1228 PROCEDURE Validate_Media_Item
1229   ( p_api_name    IN      VARCHAR2,
1230     p_media_item_val    IN      media_rec_type,
1231     p_resp_appl_id      IN      NUMBER   := NULL,
1232     p_resp_id     IN      NUMBER   := NULL,
1233     x_return_status     IN OUT NOCOPY  VARCHAR2
1234   );
1235 
1236 --
1237 --	HISTORY
1238 --
1239 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
1240 --	------		----		--------------------------
1241 --
1242 --	James Baldo	11-JAN-2000	INITIAL VERSION
1243 --	James Baldo Jr.	06-MAR-2000	Fix for Source_ID Bugdb 1317098 and 1316836
1244 --
1245   PROCEDURE Validate_Media_Item
1246   ( p_api_name    IN      VARCHAR2,
1247     p_media_item_val    IN      media_rec_type,
1248     p_resp_appl_id      IN      NUMBER   := NULL,
1249     p_resp_id     IN      NUMBER   := NULL,
1250     x_return_status     IN OUT NOCOPY  VARCHAR2
1251   )
1252 
1253   IS
1254   l_count NUMBER := 0;
1255   BEGIN
1256     -- Initialize API return status to success
1257   x_return_status := fnd_api.g_ret_sts_success;
1258 
1259 
1260 --  IF ((p_media_item_val.source_id IS NOT NULL) AND (p_media_item_val.source_id <> fnd_api.g_miss_num)) THEN
1261 --   	 SELECT count(*) into l_count
1262 --   FROM jtf_ih_sources
1263 --   WHERE source_id = p_media_item_val.source_id;
1264 --     IF (l_count <= 0) THEN
1265 --   	 x_return_status := fnd_api.g_ret_sts_error;
1266 --     	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_media_item_val.source_id),
1267 --					    'Source_id');
1268 --		RETURN;
1269 --	   END IF;
1270 -- ELSE
1271 -- 	x_return_status := fnd_api.g_ret_sts_error;
1272 --  jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_media_item_val.source_id),
1273 --					    'Source_id');
1274 --	RETURN;
1275 -- END IF;
1276 
1277    IF ((p_media_item_val.media_item_type IS  NULL) OR (p_media_item_val.media_item_type = fnd_api.g_miss_char)) THEN
1278    	   x_return_status := fnd_api.g_ret_sts_error;
1279 	   jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_media_item_val.media_item_type,
1280 					    'media_item_type');
1281 	   RETURN;
1282    END IF;
1283 
1284   IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
1285       RETURN;
1286       END IF;
1287   END Validate_Media_Item;
1288 
1289   PROCEDURE Default_Media_Item_Record  (x_media     IN OUT NOCOPY  media_rec_type);
1290 
1291 --  End Utilities Declaration
1292 -- Begin Utilities Definition
1293   PROCEDURE Default_Media_Item_Record  (x_media     IN OUT NOCOPY  media_rec_type)
1294   IS
1295 	BEGIN
1296 		if (x_media.source_id = fnd_api.g_miss_num)then
1297 			x_media.source_id :=0;
1298 		end if;
1299 		if (x_media.source_item_id = fnd_api.g_miss_num)then
1300 			x_media.source_item_id :=0;
1301 		end if;
1302 	END Default_Media_Item_Record;
1303 
1304 -- Jean Zhu add Utility Validate_Mlcs_Record
1305   PROCEDURE Validate_Mlcs_Record
1306   ( p_api_name    IN      VARCHAR2,
1307     p_media_lc_rec      IN      media_lc_rec_type,
1308     p_resp_appl_id      IN      NUMBER   := NULL,
1309     p_resp_id     IN      NUMBER   := NULL,
1310     x_return_status     IN OUT NOCOPY  VARCHAR2
1311   );
1312 
1313 --  End Utilities Declaration
1314 -- Begin Utilities Definition
1315 --
1316 --	HISTORY
1317 --
1318 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
1319 --	------		----		--------------------------
1320 --
1321 --	James Baldo Jr.	11-JAN-2000	INITIAL VERSION
1322 --	James Baldo Jr.	01-JUN-2000	Fix for bugdb 1314786 - optional parameter for passing either
1323 --					milcs_type_id or milcs_code
1324 --	James Baldo Jr. 26-JUL-2000	Fix for bugdb 1314821 and 1342156
1325 --
1326   PROCEDURE Validate_Mlcs_Record
1327   ( p_api_name    IN      VARCHAR2,
1328     p_media_lc_rec      IN      media_lc_rec_type,
1329     p_resp_appl_id      IN      NUMBER   := NULL,
1330     p_resp_id     IN      NUMBER   := NULL,
1331     x_return_status     IN OUT NOCOPY  VARCHAR2
1332   )
1333 
1334   IS
1335   l_count 		NUMBER := 0;
1336 
1337   BEGIN
1338     -- Initialize API return status to success
1339 	x_return_status := fnd_api.g_ret_sts_success;
1340    l_count := 0;
1341       	-- DBMS_OUTPUT.PUT_LINE('Beginning validation of a media_lc record in jtf_ih_pub.Validate_Mlcs_Record');
1342 
1343   IF (((p_media_lc_rec.milcs_type_id IS NULL) OR (p_media_lc_rec.milcs_type_id = fnd_api.g_miss_num))
1344 	AND
1345 	((p_media_lc_rec.milcs_code IS NULL) OR (p_media_lc_rec.milcs_code = fnd_api.g_miss_char))) THEN
1346   	   x_return_status := fnd_api.g_ret_sts_error;
1347 	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, 'NULL or Missing',
1348 					    'milcs_code');
1349   jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, 'Null or Missing',
1350 					    'milcs_type_id');
1351 	RETURN;
1352   END IF;
1353   IF ((p_media_lc_rec.milcs_type_id IS NOT NULL) AND (p_media_lc_rec.milcs_type_id <> fnd_api.g_miss_num)
1354 	AND
1355 	(p_media_lc_rec.milcs_code IS NOT NULL) AND (p_media_lc_rec.milcs_code <> fnd_api.g_miss_char)) THEN
1356 	SELECT count(milcs_type_id) into l_count
1357 	FROM jtf_ih_media_itm_lc_seg_tys
1358 	WHERE milcs_type_id = p_media_lc_rec.milcs_type_id;
1359 	IF (l_count <= 0) THEN
1360 		x_return_status := fnd_api.g_ret_sts_error;
1361 		jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_media_lc_rec.milcs_type_id,
1362 							 'milcs_type_id');
1363 	END IF;
1364 	SELECT count(milcs_type_id) into l_count
1365 	FROM jtf_ih_media_itm_lc_seg_tys
1366 	WHERE milcs_code = p_media_lc_rec.milcs_code;
1367 	IF (l_count <= 0) THEN
1368 		x_return_status := fnd_api.g_ret_sts_error;
1369 	jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_media_lc_rec.milcs_code,
1370 							  'milcs_code');
1371 	END IF;
1372 	IF  x_return_status = fnd_api.g_ret_sts_error THEN
1373 		RETURN;
1374 	END IF;
1375   END IF;
1376   IF (((p_media_lc_rec.milcs_type_id IS NOT NULL) AND (p_media_lc_rec.milcs_type_id <> fnd_api.g_miss_num)) AND
1377       ((p_media_lc_rec.milcs_code IS NULL) OR (p_media_lc_rec.milcs_code = fnd_api.g_miss_char))) THEN
1378 	SELECT count(milcs_type_id) into l_count
1379 	FROM jtf_ih_media_itm_lc_seg_tys
1380 	WHERE milcs_type_id = p_media_lc_rec.milcs_type_id;
1381 		IF (l_count <= 0) THEN
1382 			x_return_status := fnd_api.g_ret_sts_error;
1383 			jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_media_lc_rec.milcs_type_id,
1384 							    'milcs_type_id');
1385 			RETURN;
1386 		END IF;
1387   END IF;
1388   IF ((p_media_lc_rec.milcs_code IS NOT NULL) AND (p_media_lc_rec.milcs_code <> fnd_api.g_miss_char)) THEN
1389 	SELECT count(milcs_type_id) into l_count
1390 	FROM jtf_ih_media_itm_lc_seg_tys
1391 	WHERE milcs_code = p_media_lc_rec.milcs_code;
1392 		IF (l_count <= 0) THEN
1393 			x_return_status := fnd_api.g_ret_sts_error;
1394 			jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_media_lc_rec.milcs_code,
1395 							    'milcs_code');
1396 			RETURN;
1397 		END IF;
1398   END IF;
1399   l_count := 0;
1400   IF ((p_media_lc_rec.handler_id IS NOT NULL) AND (p_media_lc_rec.handler_id <> fnd_api.g_miss_num)) THEN
1401 		SELECT count(application_id) into l_count
1402 		FROM fnd_application
1403 		WHERE application_id = p_media_lc_rec.handler_id;
1404 			IF (l_count <= 0) THEN
1405 			x_return_status := fnd_api.g_ret_sts_error;
1406 			jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, p_media_lc_rec.handler_id,
1407 							    'handler_id');
1408 			RETURN;
1409 			END IF;
1410    ELSE
1411    	   x_return_status := fnd_api.g_ret_sts_error;
1412        jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_media_lc_rec.handler_id),
1413 					    'handler_id');
1414 			 RETURN;
1415   END IF;
1416   l_count := 0;
1417   IF ((p_media_lc_rec.media_id IS NOT NULL) AND (p_media_lc_rec.media_id <> fnd_api.g_miss_num)) THEN
1418 		SELECT count(media_id) into l_count
1419 		FROM jtf_ih_media_items
1420 		WHERE media_id = p_media_lc_rec.media_id;
1421 			IF (l_count <= 0) THEN
1422 			x_return_status := fnd_api.g_ret_sts_error;
1423 			jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_media_lc_rec.media_id),
1424 							    'media_id');
1425 			RETURN;
1426 			END IF;
1427 /*   ELSE
1428    	   x_return_status := fnd_api.g_ret_sts_error;
1429        jtf_ih_core_util_pvt.add_invalid_argument_msg(p_api_name, to_char(p_media_lc_rec.handler_id),
1430 					    'handler_id');
1431 			 RETURN;*/
1432   END IF;
1433    IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
1434    		RETURN;
1435    END IF;
1436   END Validate_Mlcs_Record;
1437 
1438   PROCEDURE Validate_Mlcs_table
1439   ( p_api_name    IN      VARCHAR2,
1440     p_mlcs_val_tab       IN      mlcs_tbl_type,
1441     p_resp_appl_id      IN      NUMBER   := NULL,
1442     p_resp_id     IN      NUMBER   := NULL,
1443     x_return_status     IN OUT NOCOPY  VARCHAR2
1444   );
1445 
1446 --  End Utilities Declaration
1447 -- Begin Utilities Definition
1448   PROCEDURE Validate_Mlcs_table
1449   ( p_api_name    IN      VARCHAR2,
1450     p_mlcs_val_tab       IN      mlcs_tbl_type,
1451     p_resp_appl_id      IN      NUMBER   := NULL,
1452     p_resp_id     IN      NUMBER   := NULL,
1453     x_return_status     IN OUT NOCOPY  VARCHAR2
1454   )
1455 
1456   IS
1457   l_count NUMBER := 0;
1458   BEGIN
1459     -- Initialize API return status to success
1460    x_return_status := fnd_api.g_ret_sts_success;
1461    l_count := 0;
1462 
1463 	 for  idx in 1 .. p_mlcs_val_tab.count loop
1464 	 	  Validate_Mlcs_Record  ( p_api_name, p_mlcs_val_tab(idx), p_resp_appl_id, p_resp_id, x_return_status);
1465    END loop;
1466 
1467    IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
1468       	-- DBMS_OUTPUT.PUT_LINE('Unsuccessful validation of a media_lc record in jtf_ih_pub.Validate_Mlcs_table');
1469     	RETURN;
1470    END IF;
1471   END Validate_Mlcs_table;
1472 
1473   PROCEDURE Default_Mlcs_table  (x_mlcs     IN OUT NOCOPY  mlcs_tbl_type);
1474 
1475 --  End Utilities Declaration
1476 -- Begin Utilities Definition
1477   PROCEDURE Default_Mlcs_table  (x_mlcs     IN OUT NOCOPY  mlcs_tbl_type)
1478   IS
1479 	BEGIN
1480 		for  idx in 1 .. x_mlcs.count loop
1481 			if (x_mlcs(idx).type_id = fnd_api.g_miss_num)then
1482 				x_mlcs(idx).type_id :=0;
1483 			end if;
1484 			if (x_mlcs(idx).handler_id = fnd_api.g_miss_num)then
1485 				x_mlcs(idx).handler_id :=0;
1486 			end if;
1487 		end loop;
1488 	END Default_Mlcs_table;
1489 
1490 
1491 -- Bug# 2817083
1492 -- HISTORY
1493 --
1494 --	AUTHOR		     DATE		MODIFICATION DESCRIPTION
1495 --	------		     ----		--------------------------
1496 --  Igor Aleshin     02/24/2003  Created
1497 --
1498 FUNCTION Get_Activity_ID(n_activity_id NUMBER) RETURN NUMBER
1499 IS
1500     n_Return NUMBER;
1501     n_Dummy NUMBER;
1502 BEGIN
1503   -- if b_Ignore_Pass is 'Y' then always generate a new ID
1504   IF (n_activity_id IS NOT NULL) AND (n_activity_id <> fnd_api.g_miss_num) THEN
1505       -- Check activity value in the JTF_IH_ACTIVITIES table.
1506       BEGIN
1507     SELECT activity_id INTO n_Return FROM jtf_ih_activities WHERE activity_id = n_activity_id;
1508       -- If value is presend then return an error (invalid activity_id)
1509       IF n_Return IS NOT NULL THEN
1510           FND_MESSAGE.SET_NAME('JTF','JTF_IH_API_INVALID_ACTIV_ID');
1511           fnd_message.set_token('VALUE', n_activity_id);
1512           FND_MSG_PUB.Add;
1513           RETURN -1;
1514       END IF;
1515       EXCEPTION
1516       -- If value is not presend then use it for currect activity.
1517       WHEN NO_DATA_FOUND THEN
1518           RETURN n_activity_id;
1519       END;
1520   ELSIF ((n_activity_id IS NULL) OR (n_activity_id = fnd_api.g_miss_num)) THEN
1521          LOOP
1522       SELECT jtf_ih_activities_s1.NEXTVAL INTO n_Return FROM dual;
1523       BEGIN
1524           SELECT activity_id INTO n_Dummy FROM jtf_ih_activities WHERE activity_id = n_Return;
1525       EXCEPTION
1526           WHEN NO_DATA_FOUND THEN
1527         EXIT;
1528       END;
1529          END LOOP;
1530          RETURN n_Return;
1531          -- If value is not present then accept it for current record.
1532   END IF;
1533 END;
1534 
1535 
1536 -- HISTORY
1537 --
1538 --	AUTHOR		     DATE		MODIFICATION DESCRIPTION
1539 --	------		     ----		--------------------------
1540 --  Igor Aleshin     02/24/2003  Created
1541 --
1542 FUNCTION Get_Interaction_ID(n_interaction_id NUMBER) RETURN NUMBER
1543 IS
1544     n_Return NUMBER;
1545     n_Dummy NUMBER;
1546 BEGIN
1547   IF (n_interaction_id IS NOT NULL) AND (n_interaction_id <> fnd_api.g_miss_num) THEN
1548       -- Check activity value in the JTF_IH_ACTIVITIES table.
1549       BEGIN
1550     SELECT interaction_id INTO n_Return FROM jtf_ih_interactions WHERE interaction_id = n_interaction_id;
1551       -- If value is presend then return an error (invalid activity_id)
1552       IF n_Return IS NOT NULL THEN
1553           FND_MESSAGE.SET_NAME('JTF','JTF_IH_API_INVALID_INTER_ID');
1554           FND_MESSAGE.SET_TOKEN('VALUE', n_interaction_id);
1555           FND_MSG_PUB.Add;
1556           RETURN -1;
1557       END IF;
1558       EXCEPTION
1559       -- If value is not presend then use it for currect activity.
1560       WHEN NO_DATA_FOUND THEN
1561           RETURN n_interaction_id;
1562       END;
1563   ELSIF ((n_interaction_id IS NULL) OR (n_interaction_id = fnd_api.g_miss_num)) THEN
1564          LOOP
1565       SELECT jtf_ih_interactions_s1.NEXTVAL INTO n_Return FROM dual;
1566       BEGIN
1567           SELECT interaction_id INTO n_Dummy FROM jtf_ih_interactions WHERE interaction_id = n_Return;
1568       EXCEPTION
1569           WHEN NO_DATA_FOUND THEN
1570         EXIT;
1571       END;
1572          END LOOP;
1573          RETURN n_Return;
1574          -- If value is not present then accept it for current record.
1575   END IF;
1576 END;
1577 
1578 -- HISTORY
1579 --
1580 --	AUTHOR		     DATE		MODIFICATION DESCRIPTION
1581 --	------		     ----		--------------------------
1582 --  Igor Aleshin     02/24/2003  Created
1583 --
1584 FUNCTION Get_Media_ID(n_media_id NUMBER) RETURN NUMBER
1585 IS
1586     n_Return NUMBER;
1587     n_Dummy NUMBER;
1588 BEGIN
1589   IF (n_media_id IS NOT NULL) AND (n_media_id <> fnd_api.g_miss_num) THEN
1590       -- Check activity value in the JTF_IH_ACTIVITIES table.
1591       BEGIN
1592     SELECT media_id INTO n_Return FROM jtf_ih_media_items WHERE media_id = n_media_id;
1593       -- If value is presend then return an error (invalid activity_id)
1594       IF n_Return IS NOT NULL THEN
1595           FND_MESSAGE.SET_NAME('JTF','JTF_IH_API_INVALID_MEDIA_ID');
1596           FND_MESSAGE.SET_TOKEN('VALUE', n_media_id);
1597           FND_MSG_PUB.Add;
1598           RETURN -1;
1599       END IF;
1600       EXCEPTION
1601       -- If value is not presend then use it for currect activity.
1602       WHEN NO_DATA_FOUND THEN
1603           RETURN n_media_id;
1604       END;
1605   ELSIF ((n_media_id IS NULL) OR (n_media_id = fnd_api.g_miss_num)) THEN
1606          LOOP
1607       SELECT jtf_ih_media_items_s1.NEXTVAL INTO n_Return FROM dual;
1608       BEGIN
1609           SELECT n_media_id INTO n_Dummy FROM jtf_ih_media_items WHERE media_id = n_Return;
1610       EXCEPTION
1611           WHEN NO_DATA_FOUND THEN
1612         EXIT;
1613       END;
1614          END LOOP;
1615          RETURN n_Return;
1616          -- If value is not present then accept it for current record.
1617   END IF;
1618 END;
1619 
1620 
1621 -- HISTORY
1622 --
1623 --	AUTHOR		     DATE		MODIFICATION DESCRIPTION
1624 --	------		     ----		--------------------------
1625 --  Igor Aleshin     02/24/2003  Created
1626 --
1627 FUNCTION GET_MILCS_ID(n_milcs_id NUMBER) RETURN NUMBER
1628 IS
1629     n_Return NUMBER;
1630     n_Dummy NUMBER;
1631 BEGIN
1632   IF (n_milcs_id IS NOT NULL) AND (n_milcs_id <> fnd_api.g_miss_num) THEN
1633       -- Check activity value in the JTF_IH_ACTIVITIES table.
1634       BEGIN
1635     SELECT milcs_id INTO n_Return FROM jtf_ih_media_item_lc_segs WHERE milcs_id = n_milcs_id;
1636       -- If value is presend then return an error (invalid activity_id)
1637       IF n_Return IS NOT NULL THEN
1638           FND_MESSAGE.SET_NAME('JTF','JTF_IH_API_INVALID_MILCS_ID');
1639           FND_MESSAGE.SET_TOKEN('VALUE', n_milcs_id);
1640           FND_MSG_PUB.Add;
1641           RETURN -1;
1642       END IF;
1643       EXCEPTION
1644       -- If value is not presend then use it for currect activity.
1645       WHEN NO_DATA_FOUND THEN
1646           RETURN n_milcs_id;
1647       END;
1648   ELSIF ((n_milcs_id IS NULL) OR (n_milcs_id = fnd_api.g_miss_num)) THEN
1649          LOOP
1650       SELECT jtf_ih_media_item_lc_seg_s1.NEXTVAL INTO n_Return FROM dual;
1651       BEGIN
1652           SELECT n_milcs_id INTO n_Dummy FROM jtf_ih_media_item_lc_segs WHERE milcs_id = n_Return;
1653       EXCEPTION
1654           WHEN NO_DATA_FOUND THEN
1655         EXIT;
1656       END;
1657          END LOOP;
1658          RETURN n_Return;
1659          -- If value is not present then accept it for current record.
1660   END IF;
1661 END;
1662 
1663 --
1664 -- old version
1665 --
1666 --
1667 --	HISTORY
1668 --
1669 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
1670 --	------		----		--------------------------
1671 --
1672 --					INITIAL VERSION
1673 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
1674 --	James Baldo Jr. 09-JUN-2000	Modified by for bug# 1326022
1675 --  Igor Aleshin    18-APR-2001 Fix for bugdb 2323210 - 1157.6RI:API
1676 --            ERR:JTF_IH_PUB.CLOSE_INTERACTION:WHEN DISAGREE WITH OKC IN IBE
1677 --  Igor Aleshin    20-MAY-2002 Changed piece of code for duration logic
1678 --  Igor Aleshin    24-FEB-2003 Fixed bug# 2817083 - Error loggin interactions
1679 --  Igor Aleshin    29-MAY-2003 Enh# 2940473 - IH Bulk API Changes
1680 --  Igor Aleshin    18-JUN-2003 Enh# 1846960 - REQUIRE CONTACT NAME OF
1681 --                  ORGANISATION IN INTERACTION HISTORY
1682 --  Igor Aleshin    01-JUL-2003 Added to missed columns to insert statments
1683 --  Igor Aleshin    03-JUL-2003 Enh# 3022511 - Add a column to the
1684 --                              jtf_ih_media_items table
1685 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
1686 --
1687 
1688 PROCEDURE Create_MediaItem
1689 (
1690   p_api_version		IN	NUMBER,
1691   p_init_msg_list		IN	VARCHAR2, --DEFAULT FND_API.G_FALSE,
1692   p_commit			IN	VARCHAR2, --DEFAULT FND_API.G_FALSE,
1693   p_resp_appl_id		IN	NUMBER   DEFAULT NULL,
1694   p_resp_id			IN	NUMBER   DEFAULT NULL,
1695   p_user_id			IN	NUMBER,
1696   p_login_id			IN	NUMBER   DEFAULT NULL,
1697   x_return_status		OUT NOCOPY	VARCHAR2,
1698   x_msg_count			OUT NOCOPY	NUMBER,
1699   x_msg_data			OUT NOCOPY	VARCHAR2,
1700   p_media 			IN media_rec_type,
1701   p_mlcs 			IN mlcs_tbl_type
1702   ) AS
1703   l_api_name   CONSTANT VARCHAR2(30) := 'Create_MediaItem';
1704   l_api_version      CONSTANT NUMBER       := 1.0;
1705   l_api_name_full    CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
1706   l_return_status    VARCHAR2(1);
1707   l_int_val_rec      media_rec_type;
1708   l_milcs_id     NUMBER;
1709   l_mlcs mlcs_tbl_type;
1710 
1711   --Bug# 2323210
1712   l_start_date_time DATE;
1713   l_end_date_time DATE;
1714   l_duration     NUMBER;
1715 
1716   -- Perf fix for literal Usage
1717   l_duration_perf          NUMBER;
1718   l_active_perf            VARCHAR2(1);
1719   l_ao_update_pending_perf VARCHAR2(1);
1720   l_soft_closed_perf       VARCHAR2(1);
1721 
1722 BEGIN
1723 
1724    -- local variables initialization to remove GSCC warnings
1725    l_int_val_rec := p_media;
1726    l_mlcs := p_mlcs;
1727 
1728    -- Perf variables
1729    l_duration_perf := 0;
1730    l_active_perf := 'N';
1731    l_ao_update_pending_perf := 'N';
1732    l_soft_closed_perf := 'N';
1733 
1734    -- Standard start of API savepoint
1735    SAVEPOINT create_media_pub;
1736 
1737    -- Standard call to check for call compatibility
1738    IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
1739               l_api_name, g_pkg_name) THEN
1740       RAISE fnd_api.g_exc_unexpected_error;
1741    END IF;
1742 
1743    -- Initialize message list if p_init_msg_list is set to TRUE
1744    IF fnd_api.to_boolean(p_init_msg_list) THEN
1745       fnd_msg_pub.initialize;
1746    END IF;
1747 
1748    -- Initialize API return status to success
1749    x_return_status := fnd_api.g_ret_sts_success;
1750 
1751    --
1752    -- Validate user and login session IDs
1753    --
1754    IF (p_user_id IS NULL) THEN
1755       jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
1756       RAISE fnd_api.g_exc_error;
1757    ELSE
1758       jtf_ih_core_util_pvt.validate_who_info
1759       ( p_api_name        => l_api_name_full,
1760         p_parameter_name_usr    => 'p_user_id',
1761         p_parameter_name_log    => 'p_login_id',
1762         p_user_id         => p_user_id,
1763         p_login_id        => p_login_id,
1764         x_return_status   => l_return_status );
1765       IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
1766         RAISE fnd_api.g_exc_error;
1767       END IF;
1768    END IF;
1769 
1770    Validate_Media_Item
1771    ( p_api_name      => l_api_name_full,
1772      p_media_item_val      => p_media,
1773      p_resp_appl_id  => p_resp_appl_id,
1774      p_resp_id       => p_resp_id,
1775      x_return_status       => l_return_status
1776    );
1777    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
1778      RAISE fnd_api.g_exc_error;
1779    END IF;
1780    Default_Media_Item_Record(l_int_val_rec);
1781 
1782    IF (p_media.end_date_time <> fnd_api.g_miss_date) AND
1783       (p_media.end_date_time IS NOT NULL) THEN
1784       l_int_val_rec.end_date_time := p_media.end_date_time;
1785    ELSE
1786       l_int_val_rec.end_date_time := SYSDATE;
1787    END IF;
1788 
1789    IF (p_media.start_date_time <> fnd_api.g_miss_date) AND
1790       (p_media.start_date_time IS NOT NULL) THEN
1791       l_int_val_rec.start_date_time := p_media.start_date_time;
1792    ELSE
1793       l_int_val_rec.start_date_time := SYSDATE;
1794    END IF;
1795 
1796    Validate_StartEnd_Date(	p_api_name    => l_api_name_full,
1797       p_start_date_time   => l_int_val_rec.start_date_time,
1798       p_end_date_time		=> l_int_val_rec.end_date_time,
1799       x_return_status     	=> l_return_status);
1800    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
1801       RAISE fnd_api.g_exc_error;
1802    END IF;
1803 
1804     IF (p_media.source_item_create_date_time <> fnd_api.g_miss_date) AND
1805        (p_media.source_item_create_date_time IS NOT NULL) THEN
1806       l_int_val_rec.source_item_create_date_time := p_media.source_item_create_date_time;
1807     ELSE
1808       l_int_val_rec.source_item_create_date_time := NULL;
1809     END IF;
1810 
1811     IF (p_media.duration <> fnd_api.g_miss_num) AND
1812        (p_media.duration IS NOT NULL) then
1813       l_int_val_rec.duration := p_media.duration;
1814     ELSE
1815       l_int_val_rec.duration := ROUND((l_int_val_rec.end_date_time - l_int_val_rec.start_date_time)*24*60*60);
1816     END IF;
1817 
1818     IF p_media.address = fnd_api.g_miss_char THEN
1819        IF l_int_val_rec.direction = 'INBOUND' AND l_int_val_rec.media_item_type like 'TELE%' THEN
1820           l_int_val_rec.address := l_int_val_rec.ani;
1821        ELSE
1822           l_int_val_rec.address := NULL;
1823        END IF;
1824     ELSE
1825        l_int_val_rec.address := p_media.address;
1826     END IF;
1827 
1828     --IF ((p_media.media_id IS NULL) OR (p_media.media_id = fnd_api.g_miss_num)) THEN
1829     --    SELECT jtf_ih_media_items_s1.NEXTVAL INTO l_int_val_rec.media_id FROM dual;
1830     --END IF;
1831     -- Bug# 2817083
1832     l_int_val_rec.media_id := Get_Media_Id(p_media.media_id);
1833     IF l_int_val_rec.media_id = -1 THEN
1834        RAISE fnd_api.g_exc_error;
1835     END IF;
1836 
1837     -- Perf fix for literal Usage
1838     insert into jtf_ih_Media_Items
1839     (
1840         DURATION,
1841         DIRECTION,
1842         END_DATE_TIME,
1843         SOURCE_ITEM_CREATE_DATE_TIME,
1844         INTERACTION_PERFORMED,
1845         SOURCE_ITEM_ID,
1846         START_DATE_TIME,
1847         MEDIA_ID,
1848         SOURCE_ID,
1849         MEDIA_ITEM_TYPE,
1850         CREATED_BY,
1851         CREATION_DATE,
1852         LAST_UPDATED_BY,
1853         LAST_UPDATE_DATE,
1854         LAST_UPDATE_LOGIN,
1855         MEDIA_ITEM_REF,
1856         MEDIA_DATA,
1857         ACTIVE,
1858         SERVER_GROUP_ID,
1859         DNIS,
1860         ANI,
1861         CLASSIFICATION,
1862         BULK_WRITER_CODE,
1863         BULK_BATCH_TYPE,
1864         BULK_BATCH_ID,
1865         BULK_INTERACTION_ID,
1866         media_abandon_flag,
1867         media_transferred_flag,
1868         address,
1869         ao_update_pending,
1870         soft_closed
1871     ) values (
1872         decode( l_int_val_rec.duration, fnd_api.g_miss_num, l_duration_perf, l_int_val_rec.duration),
1873         decode( l_int_val_rec.direction, fnd_api.g_miss_char, null, l_int_val_rec.direction),
1874         l_int_val_rec.end_date_time,
1875         l_int_val_rec.source_item_create_date_time,
1876         decode( l_int_val_rec.interaction_performed, fnd_api.g_miss_char, null, l_int_val_rec.interaction_performed),
1877         decode( l_int_val_rec.source_item_id, fnd_api.g_miss_num, null, l_int_val_rec.source_item_id),
1878         -- Bug # 2184405
1879         l_int_val_rec.start_date_time,
1880         l_int_val_rec.media_id,
1881         decode( l_int_val_rec.source_id, fnd_api.g_miss_num, null, l_int_val_rec.source_id),
1882         decode( l_int_val_rec.media_item_type, fnd_api.g_miss_char, null, l_int_val_rec.media_item_type),
1883         p_user_id,
1884         SysDate,
1885         p_user_id,
1886         SysDate,
1887         p_login_id,
1888         decode( l_int_val_rec.media_item_ref, fnd_api.g_miss_char, null, l_int_val_rec.media_item_ref),
1889         decode( l_int_val_rec.media_data, fnd_api.g_miss_char, null, l_int_val_rec.media_data),
1890         l_active_perf,
1891         decode( l_int_val_rec.server_group_id, fnd_api.g_miss_num, null, l_int_val_rec.server_group_id),
1892         decode( l_int_val_rec.dnis, fnd_api.g_miss_char, null, l_int_val_rec.dnis),
1893         decode( l_int_val_rec.ani, fnd_api.g_miss_char, null, l_int_val_rec.ani),
1894         decode( l_int_val_rec.classification, fnd_api.g_miss_char, null, l_int_val_rec.classification),
1895         decode( l_int_val_rec.bulk_writer_code, fnd_api.g_miss_char, null, l_int_val_rec.bulk_writer_code),
1896         decode( l_int_val_rec.bulk_batch_type, fnd_api.g_miss_char, null, l_int_val_rec.bulk_batch_type),
1897         decode( l_int_val_rec.bulk_batch_id, fnd_api.g_miss_num, null, l_int_val_rec.bulk_batch_id),
1898         decode( l_int_val_rec.bulk_interaction_id, fnd_api.g_miss_num, null, l_int_val_rec.bulk_interaction_id),
1899         decode( l_int_val_rec.media_abandon_flag, fnd_api.g_miss_char, null, l_int_val_rec.media_abandon_flag),
1900         decode( l_int_val_rec.media_transferred_flag, fnd_api.g_miss_char, null, l_int_val_rec.media_transferred_flag),
1901         decode( l_int_val_rec.address, fnd_api.g_miss_char, null, l_int_val_rec.address),
1902         l_ao_update_pending_perf,
1903         l_soft_closed_perf
1904     );
1905 
1906     -- Added by IAleshin 20-MAY-2002
1907     -- Fill new Media_ID for child MediaLifeCycle
1908     for  idx in 1 .. l_mlcs.count loop
1909        l_mlcs(idx).media_id := l_int_val_rec.media_id;
1910     end loop;
1911 
1912     Validate_Mlcs_table
1913     (   p_api_name      => l_api_name_full,
1914         p_mlcs_val_tab   => l_mlcs,
1915         p_resp_appl_id  => p_resp_appl_id,
1916         p_resp_id       => p_resp_id,
1917         x_return_status       => l_return_status
1918     );
1919     IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
1920        RAISE fnd_api.g_exc_error;
1921     END IF;
1922 
1923     Default_Mlcs_table(l_mlcs);
1924 
1925     for  idx in 1 .. p_mlcs.count loop
1926         IF (p_mlcs(idx).end_date_time <> fnd_api.g_miss_date) AND
1927            (p_mlcs(idx).end_date_time IS NOT NULL) THEN
1928             l_mlcs(idx).end_date_time := p_mlcs(idx).end_date_time;
1929         ELSE
1930             l_mlcs(idx).end_date_time := SYSDATE;
1931         END IF;
1932 
1933         IF (p_mlcs(idx).start_date_time <> fnd_api.g_miss_date) AND
1934            (p_mlcs(idx).start_date_time IS NOT NULL) THEN
1935             l_mlcs(idx).start_date_time := p_mlcs(idx).start_date_time;
1936         ELSE
1937             l_mlcs(idx).start_date_time := SYSDATE;
1938         END IF;
1939 
1940         Validate_StartEnd_Date(	p_api_name    => l_api_name_full,
1941            p_start_date_time   	=> l_mlcs(idx).start_date_time,
1942            p_end_date_time		=> l_mlcs(idx).end_date_time,
1943            x_return_status     	=> l_return_status
1944         );
1945         IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
1946            RAISE fnd_api.g_exc_error;
1947         END IF;
1948 
1949         IF (p_mlcs(idx).duration <> fnd_api.g_miss_num) AND
1950            (p_mlcs(idx).duration IS NOT NULL) THEN
1951            l_mlcs(idx).duration := p_mlcs(idx).duration;
1952         ELSE
1953            l_mlcs(idx).duration := ROUND((l_mlcs(idx).end_date_time - l_mlcs(idx).start_date_time)*24*60*60);
1954         END IF;
1955 
1956         --IF ((p_mlcs(idx).milcs_id IS NULL) OR (p_mlcs(idx).milcs_id = fnd_api.g_miss_num)) THEN
1957         --    SELECT jtf_ih_media_item_lc_seg_s1.NEXTVAL INTO l_mlcs(idx).milcs_id FROM dual;
1958         --END IF;
1959 
1960         -- Bug# 2817083
1961         l_mlcs(idx).milcs_id := Get_milcs_id(p_mlcs(idx).milcs_id);
1962         IF l_mlcs(idx).milcs_id = -1 THEN
1963            RAISE fnd_api.g_exc_error;
1964         END IF;
1965 
1966         -- Perf fix for literal Usage
1967         insert into jtf_ih_media_item_lc_segs
1968         (
1969            START_DATE_TIME,
1970            TYPE_TYPE,
1971            TYPE_ID,
1972            DURATION,
1973            END_DATE_TIME,
1974            MILCS_ID,
1975            MILCS_TYPE_ID,
1976            MEDIA_ID,
1977            HANDLER_ID,
1978            CREATED_BY,
1979            CREATION_DATE,
1980            LAST_UPDATED_BY,
1981            LAST_UPDATE_DATE,
1982            LAST_UPDATE_LOGIN,
1983            ACTIVE,
1984            BULK_WRITER_CODE,
1985            BULK_BATCH_TYPE,
1986            BULK_BATCH_ID,
1987            BULK_INTERACTION_ID,
1988            RESOURCE_ID
1989         )
1990         values
1991         (
1992            l_mlcs(idx).start_date_time,
1993            decode( l_mlcs(idx).type_type, fnd_api.g_miss_char, null, l_mlcs(idx).type_type),
1994            decode( l_mlcs(idx).type_id, fnd_api.g_miss_num, null, l_mlcs(idx).type_id),
1995            decode( l_mlcs(idx).duration, fnd_api.g_miss_num, l_duration_perf, l_mlcs(idx).duration),
1996            l_mlcs(idx).end_date_time,
1997            l_mlcs(idx).milcs_id,
1998            decode( l_mlcs(idx).milcs_type_id, fnd_api.g_miss_num, null, l_mlcs(idx).milcs_type_id),
1999            l_int_val_rec.media_id,
2000            l_mlcs(idx).handler_id,
2001            p_user_id,
2002            Sysdate,
2003            p_user_id,
2004            Sysdate,
2005            p_login_id,
2006            l_active_perf,
2007            decode( l_mlcs(idx).bulk_writer_code, fnd_api.g_miss_char, null, l_mlcs(idx).bulk_writer_code),
2008            decode( l_mlcs(idx).bulk_batch_type, fnd_api.g_miss_char, null, l_mlcs(idx).bulk_batch_type),
2009            decode( l_mlcs(idx).bulk_batch_id, fnd_api.g_miss_num, null, l_mlcs(idx).bulk_batch_id),
2010            decode( l_mlcs(idx).bulk_interaction_id, fnd_api.g_miss_num, null, l_mlcs(idx).bulk_interaction_id),
2011            decode( l_mlcs(idx).resource_id, fnd_api.g_miss_num, null, l_mlcs(idx).resource_id)
2012            );
2013    END loop;
2014 
2015 
2016    -- Standard check of p_commit
2017    IF fnd_api.to_boolean(p_commit) THEN
2018       COMMIT WORK;
2019    END IF;
2020 
2021    -- Standard call to get message count and if count is 1, get message info
2022   fnd_msg_pub.count_and_get
2023      ( p_count  => x_msg_count,
2024        p_data   => x_msg_data );
2025 EXCEPTION
2026    WHEN fnd_api.g_exc_error THEN
2027       ROLLBACK TO create_media_pub;
2028       x_return_status := fnd_api.g_ret_sts_error;
2029       fnd_msg_pub.count_and_get
2030        ( p_count       => x_msg_count,
2031          p_data  => x_msg_data );
2032       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2033 
2034    WHEN fnd_api.g_exc_unexpected_error THEN
2035       ROLLBACK TO create_media_pub;
2036       x_return_status := fnd_api.g_ret_sts_unexp_error;
2037       fnd_msg_pub.count_and_get
2038        ( p_count       => x_msg_count,
2039          p_data  => x_msg_data );
2040       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2041 
2042    WHEN OTHERS THEN
2043       ROLLBACK TO create_media_pub;
2044       x_return_status := fnd_api.g_ret_sts_unexp_error;
2045       IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
2046         fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
2047       END IF;
2048       fnd_msg_pub.count_and_get
2049        ( p_count       => x_msg_count,
2050          p_data  => x_msg_data );
2051       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2052 
2053 END Create_MediaItem;
2054 
2055 --
2056 --	HISTORY
2057 --
2058 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
2059 --	------		----		--------------------------
2060 --
2061 --					INITIAL VERSION
2062 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
2063 --	James Baldo Jr. 09-JUN-2000	Modified by for bug# 1326022
2064 --	James Baldo Jr. 30-NOV-2000	Logic for two new columns, Media_Abandon_Flag and Media_Transferred_Flag.
2065 --					Enhancement Bugdb # 1501325
2066 
2067 --
2068 -- Jean Zhu split old version PROCEDURE Create_MediaItem() to
2069 -- two PROCEDUREs Create_MediaItem() and Create_MediaLifecycle()
2070 --  Igor Aleshin    18-APR-2001 Fix for bugdb 2323210 - 1157.6RI:API
2071 --            ERR:JTF_IH_PUB.CLOSE_INTERACTION:WHEN DISAGREE WITH OKC IN IBE
2072 --  Igor Aleshin    24-FEB-2003 Fixed bug# 2817083 - Error loggin interactions
2073 --  Igor Aleshin    29-MAY-2003 Enh# 2940473 - IH Bulk API Changes
2074 --  Igor Aleshin    03-JUL-2003 Enh# 3022511 - Add a column to the jtf_ih_media_items table
2075 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
2076 --
2077 --
2078 
2079 
2080 PROCEDURE Create_MediaItem
2081 (
2082 	p_api_version	IN	NUMBER,
2083 	p_init_msg_list	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
2084 	p_commit		IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
2085 	p_resp_appl_id	IN	NUMBER		DEFAULT NULL,
2086 	p_resp_id		IN	NUMBER		DEFAULT NULL,
2087 	p_user_id		IN	NUMBER,
2088 	p_login_id		IN	NUMBER		DEFAULT NULL,
2089 	x_return_status	OUT NOCOPY	VARCHAR2,
2090 	x_msg_count		OUT NOCOPY	NUMBER,
2091 	x_msg_data		OUT NOCOPY	VARCHAR2,
2092 	p_media_rec		IN	media_rec_type,
2093 	x_media_id		OUT NOCOPY 	NUMBER
2094 )AS
2095 
2096 	l_api_name   	CONSTANT VARCHAR2(30) := 'Create_MediaItem';
2097 	l_api_version      	CONSTANT NUMBER       := 1.0;
2098 	l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
2099 	l_return_status    	VARCHAR2(1);
2100 	--l_media_id   	NUMBER := NULL;
2101 	l_return_code		VARCHAR2(1);
2102 	l_data			VARCHAR2(2000);
2103 	l_count			NUMBER;
2104 	l_media_rec		MEDIA_REC_TYPE;
2105 
2106      --Bug# 2323210
2107      --l_start_date_time DATE;
2108      --l_end_date_time DATE;
2109      --l_duration     NUMBER;
2110      --l_source_item_create_date_time DATE;
2111      --l_address VARCHAR2(2000);
2112 
2113     -- Perf fix for literal Usage
2114   l_duration_perf          NUMBER;
2115   l_active_perf            VARCHAR2(1);
2116   l_ao_update_pending_perf VARCHAR2(1);
2117   l_soft_closed_perf       VARCHAR2(1);
2118 
2119 BEGIN
2120    -- Standard start of API savepoint
2121    SAVEPOINT create_media_pub;
2122 
2123    -- Perf variables
2124    l_duration_perf := 0;
2125    l_active_perf := 'N';
2126    l_ao_update_pending_perf := 'N';
2127    l_soft_closed_perf := 'N';
2128 
2129 			-- Preprocessing Call
2130 			l_media_rec := p_media_rec;
2131 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIAITEM', 'B', 'C') THEN
2132 				JTF_IH_PUB_CUHK.create_mediaitem_pre(
2133 						     p_media_rec=>l_media_rec,
2134 						     x_data=>l_data,
2135 						     x_count=>l_count,
2136 						     x_return_code=>l_return_code);
2137 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2138 					RAISE FND_API.G_EXC_ERROR;
2139 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2140 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2141 				END IF;
2142 			END IF;
2143 
2144 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIAITEM', 'B', 'V') THEN
2145 				JTF_IH_PUB_VUHK.create_mediaitem_pre(
2146 						     p_media_rec=>l_media_rec,
2147 						     x_data=>l_data,
2148 						     x_count=>l_count,
2149 						     x_return_code=>l_return_code);
2150 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2151 					RAISE FND_API.G_EXC_ERROR;
2152 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2153 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2154 				END IF;
2155 			END IF;
2156 
2157 	-- Standard call to check for call compatibility
2158 	IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
2159               l_api_name, g_pkg_name) THEN
2160       RAISE fnd_api.g_exc_unexpected_error;
2161 	END IF;
2162 	-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Create_MediaItem');
2163 
2164 	-- Initialize message list if p_init_msg_list is set to TRUE
2165 	IF fnd_api.to_boolean(p_init_msg_list) THEN
2166       fnd_msg_pub.initialize;
2167 	END IF;
2168 
2169 	-- Initialize API return status to success
2170 	x_return_status := fnd_api.g_ret_sts_success;
2171 
2172 	--
2173 	-- Validate user and login session IDs
2174 	--
2175 	IF (p_user_id IS NULL) THEN
2176 		jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
2177 		RAISE fnd_api.g_exc_error;
2178 	ELSE
2179 		jtf_ih_core_util_pvt.validate_who_info
2180 		(	p_api_name        => l_api_name_full,
2181 			p_parameter_name_usr    => 'p_user_id',
2182 			p_parameter_name_log    => 'p_login_id',
2183 			p_user_id         => p_user_id,
2184 			p_login_id        => p_login_id,
2185 			x_return_status   => l_return_status );
2186 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2187 			RAISE fnd_api.g_exc_error;
2188 		END IF;
2189 	END IF;
2190 	-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Create_MediaItem');
2191 
2192 	Validate_Media_Item
2193 	(	p_api_name      => l_api_name_full,
2194 		p_media_item_val      => p_media_rec,
2195 		p_resp_appl_id  => p_resp_appl_id,
2196 		p_resp_id       => p_resp_id,
2197 		x_return_status       => l_return_status
2198 		);
2199 	IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2200 			RAISE fnd_api.g_exc_error;
2201 	END IF;
2202 
2203 	-- DBMS_OUTPUT.PUT_LINE('PAST Validate_Media_Item in JTF_IH_PUB.Create_MediaItem');
2204 
2205     -- Added by IAleshin 21-MAY-2002
2206     IF (p_media_rec.end_date_time <> fnd_api.g_miss_date) AND (p_media_rec.end_date_time IS NOT NULL) THEN
2207       --l_end_date_time := p_media_rec.end_date_time;
2208       l_media_rec.end_date_time := p_media_rec.end_date_time;
2209     ELSE
2210       --l_end_date_time := SYSDATE;
2211       l_media_rec.end_date_time := SYSDATE;
2212     END IF;
2213 
2214     IF (p_media_rec.start_date_time <> fnd_api.g_miss_date) AND (p_media_rec.start_date_time IS NOT NULL) THEN
2215       --l_start_date_time := p_media_rec.start_date_time;
2216       l_media_rec.start_date_time := p_media_rec.start_date_time;
2217     ELSE
2218       --l_start_date_time := SYSDATE;
2219       l_media_rec.start_date_time := SYSDATE;
2220     END IF;
2221 
2222     Validate_StartEnd_Date(	p_api_name    => l_api_name_full,
2223           --p_start_date_time   => l_start_date_time,
2224           p_start_date_time     => l_media_rec.start_date_time,
2225           --p_end_date_time		=> l_end_date_time,
2226           p_end_date_time	  => l_media_rec.end_date_time,
2227           x_return_status     => l_return_status);
2228   IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2229       RAISE fnd_api.g_exc_error;
2230   END IF;
2231 
2232     IF (p_media_rec.source_item_create_date_time <> fnd_api.g_miss_date) AND (p_media_rec.source_item_create_date_time IS NOT NULL) THEN
2233       --l_source_item_create_date_time := p_media_rec.source_item_create_date_time;
2234       l_media_rec.source_item_create_date_time := p_media_rec.source_item_create_date_time;
2235     ELSE
2236       --l_source_item_create_date_time := NULL;
2237       l_media_rec.source_item_create_date_time := NULL;
2238     END IF;
2239 
2240     IF (p_media_rec.duration <> fnd_api.g_miss_num ) AND (p_media_rec.duration IS NOT NULL) THEN
2241       --l_duration := p_media_rec.duration;
2242       l_media_rec.duration := p_media_rec.duration;
2243     ELSE
2244       --l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
2245       l_media_rec.duration := ROUND((l_media_rec.end_date_time - l_media_rec.start_date_time)*24*60*60);
2246     END IF;
2247 
2248     IF p_media_rec.address = fnd_api.g_miss_char THEN
2249   IF p_media_rec.direction = 'INBOUND'
2250       AND p_media_rec.media_item_type LIKE 'TELE%'
2251       AND p_media_rec.ani <> fnd_api.g_miss_char THEN
2252     --l_address := p_media_rec.ani;
2253     l_media_rec.address := p_media_rec.ani;
2254   ELSE
2255     --l_address := NULL;
2256     l_media_rec.address := NULL;
2257   END IF;
2258  ELSE
2259   --l_address := p_media_rec.address;
2260   l_media_rec.address := p_media_rec.address;
2261  END IF;
2262 
2263 
2264     --SELECT jtf_ih_media_items_s1.NEXTVAL INTO l_media_id FROM dual;
2265     --l_media_id := Get_Media_Id(NULL);
2266     l_media_rec.media_id := Get_Media_Id(NULL);
2267 
2268 	-- DBMS_OUTPUT.PUT_LINE('PAST generate PK in JTF_IH_PUB.Create_MediaItem');
2269 	insert into jtf_ih_Media_Items
2270 		(
2271 			 DURATION,
2272 			 DIRECTION,
2273 			 END_DATE_TIME,
2274 			 SOURCE_ITEM_CREATE_DATE_TIME,
2275 			 INTERACTION_PERFORMED,
2276 			 SOURCE_ITEM_ID,
2277 			 START_DATE_TIME,
2278 			 MEDIA_ID,
2279 			 SOURCE_ID,
2280 			 MEDIA_ITEM_TYPE,
2281 			 CREATED_BY,
2282 			 CREATION_DATE,
2283 			 LAST_UPDATED_BY,
2284 			 LAST_UPDATE_DATE,
2285 			 LAST_UPDATE_LOGIN,
2286 			 MEDIA_ITEM_REF,
2287 			 MEDIA_DATA,
2288 			 MEDIA_ABANDON_FLAG,
2289 			 MEDIA_TRANSFERRED_FLAG,
2290 			 ACTIVE,
2291        		 SERVER_GROUP_ID,
2292        		 DNIS,
2293        		 ANI,
2294        		 CLASSIFICATION,
2295        		 BULK_WRITER_CODE,
2296        		 BULK_BATCH_TYPE,
2297        		 BULK_BATCH_ID,
2298        		 BULK_INTERACTION_ID,
2299        		 ADDRESS,
2300        		 AO_UPDATE_PENDING,
2301        		 SOFT_CLOSED
2302 
2303 		) values (
2304 			 --decode(l_duration,fnd_api.g_miss_num, l_duration_perf, l_duration),
2305 			 decode(l_media_rec.duration,fnd_api.g_miss_num, 0, l_media_rec.duration),
2306 			 decode( p_media_rec.direction, fnd_api.g_miss_char, null, p_media_rec.direction),
2307 			 --l_end_date_time,
2308 			 l_media_rec.end_date_time,
2309 			 --l_source_item_create_date_time,
2310 			 l_media_rec.source_item_create_date_time,
2311 			 decode( p_media_rec.interaction_performed, fnd_api.g_miss_char, null, p_media_rec.interaction_performed),
2312 			 decode( p_media_rec.source_item_id, fnd_api.g_miss_num, null, p_media_rec.source_item_id),
2313 			 --l_start_date_time,
2314 			 l_media_rec.start_date_time,
2315 			 --l_media_id,
2316 			 l_media_rec.media_id,
2317 			 decode( p_media_rec.source_id, fnd_api.g_miss_num, null, p_media_rec.source_id),
2318        -- Bug# 2309710
2319 			 decode( p_media_rec.media_item_type, fnd_api.g_miss_char, null, p_media_rec.media_item_type),
2320 			 p_user_id,
2321 			 SysDate,
2322 			 p_user_id,
2323 			 SysDate,
2324 			 p_login_id,
2325 			 decode( p_media_rec.media_item_ref, fnd_api.g_miss_char, null,p_media_rec.media_item_ref),
2326 			 decode( p_media_rec.media_data, fnd_api.g_miss_char, null,p_media_rec.media_data),
2327 			 decode( p_media_rec.media_abandon_flag, fnd_api.g_miss_char, null,p_media_rec.media_abandon_flag),
2328 			 decode( p_media_rec.media_transferred_flag, fnd_api.g_miss_char, null,p_media_rec.media_transferred_flag),
2329 			 l_active_perf,
2330        		 decode( p_media_rec.server_group_id, fnd_api.g_miss_num, null,p_media_rec.server_group_id),
2331        		 decode( p_media_rec.dnis, fnd_api.g_miss_char, null,p_media_rec.dnis),
2332        		 decode( p_media_rec.ani, fnd_api.g_miss_char, null,p_media_rec.ani),
2333        		 decode( p_media_rec.classification, fnd_api.g_miss_char, null, p_media_rec.classification),
2334 			 decode( p_media_rec.bulk_writer_code, fnd_api.g_miss_char, null, p_media_rec.bulk_writer_code),
2335 			 decode( p_media_rec.bulk_batch_type, fnd_api.g_miss_char, null, p_media_rec.bulk_batch_type),
2336 			 decode( p_media_rec.bulk_batch_id, fnd_api.g_miss_num, null, p_media_rec.bulk_batch_id),
2337 			 decode( p_media_rec.bulk_interaction_id, fnd_api.g_miss_num, null, p_media_rec.bulk_interaction_id),
2338 			 --decode( l_address, fnd_api.g_miss_char, null, l_address),
2339 			 decode( l_media_rec.address, fnd_api.g_miss_char, null, l_media_rec.address),
2340 		 l_ao_update_pending_perf,
2341 		 l_soft_closed_perf
2342 		);
2343 	-- DBMS_OUTPUT.PUT_LINE('PAST Insert data in JTF_IH_PUB.Create_MediaItem');
2344 
2345 	--
2346 	-- Output
2347 	--														   --
2348 	--x_media_id := l_media_id;
2349 	x_media_id := l_media_rec.media_id;
2350 
2351 			-- Post processing Call
2352 
2353 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIAITEM', 'A', 'V') THEN
2354 				JTF_IH_PUB_VUHK.create_mediaitem_post(
2355 						     p_media_rec=>l_media_rec,
2356 						     x_data=>l_data,
2357 						     x_count=>l_count,
2358 						     x_return_code=>l_return_code);
2359 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2360 					RAISE FND_API.G_EXC_ERROR;
2361 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2362 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2363 				END IF;
2364 			END IF;
2365 
2366 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIAITEM', 'A', 'C') THEN
2367 				JTF_IH_PUB_CUHK.create_mediaitem_post(
2368 						     p_media_rec=>l_media_rec,
2369 						     x_data=>l_data,
2370 						     x_count=>l_count,
2371 						     x_return_code=>l_return_code);
2372 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2373 					RAISE FND_API.G_EXC_ERROR;
2374 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2375 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2376 				END IF;
2377 			END IF;
2378 
2379    -- Standard check of p_commit
2380    IF fnd_api.to_boolean(p_commit) THEN
2381       COMMIT WORK;
2382    END IF;
2383 
2384    -- Standard call to get message count and if count is 1, get message info
2385   fnd_msg_pub.count_and_get
2386      ( p_count  => x_msg_count,
2387        p_data   => x_msg_data );
2388   EXCEPTION
2389    WHEN fnd_api.g_exc_error THEN
2390       ROLLBACK TO create_media_pub;
2391       x_return_status := fnd_api.g_ret_sts_error;
2392       fnd_msg_pub.count_and_get
2393   ( p_count       => x_msg_count,
2394     p_data  => x_msg_data );
2395   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2396    WHEN fnd_api.g_exc_unexpected_error THEN
2397       ROLLBACK TO create_media_pub;
2398       x_return_status := fnd_api.g_ret_sts_unexp_error;
2399       fnd_msg_pub.count_and_get
2400   ( p_count       => x_msg_count,
2401     p_data  => x_msg_data );
2402   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2403    WHEN OTHERS THEN
2404       ROLLBACK TO create_media_pub;
2405       x_return_status := fnd_api.g_ret_sts_unexp_error;
2406       IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
2407    fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
2408       END IF;
2409       fnd_msg_pub.count_and_get
2410   ( p_count       => x_msg_count,
2411     p_data  => x_msg_data );
2412   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2413   END Create_MediaItem;
2414 
2415 
2416 --
2417 --	HISTORY
2418 --
2419 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
2420 --	------		----		--------------------------
2421 --
2422 --					INITIAL VERSION
2423 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
2424 --	James Baldo Jr. 26-JUL-2000	Fix for bugdb # 1314821 and 1342156
2425 --
2426 -- Jean Zhu split old version PROCEDURE Create_MediaItem() to
2427 -- two PROCEDUREs Create_MediaItem() and Create_MediaLifecycle()
2428 --  Igor Aleshin    20-MAY-2002 Modified duration calculation
2429 --  Igor Aleshin    29-MAY-2003 Enh# 2940473 - IH Bulk API Changes
2430 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
2431 --
2432 --
2433 procedure Create_MediaLifecycle
2434 (
2435 	p_api_version	IN	NUMBER,
2436 	p_init_msg_list	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
2437 	p_commit	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
2438 	p_resp_appl_id	IN	NUMBER		DEFAULT NULL,
2439 	p_resp_id	IN	NUMBER		DEFAULT NULL,
2440 	p_user_id	IN	NUMBER,
2441 	p_login_id	IN	NUMBER		DEFAULT NULL,
2442 	x_return_status	OUT NOCOPY	VARCHAR2,
2443 	x_msg_count	OUT NOCOPY	NUMBER,
2444 	x_msg_data	OUT NOCOPY	VARCHAR2,
2445 	p_media_lc_rec	IN	media_lc_rec_type
2446 )AS
2447 
2448 	l_api_name   	CONSTANT VARCHAR2(30) := 'Create_MediaLifecycle';
2449 	l_api_version      	CONSTANT NUMBER       := 1.0;
2450 	l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
2451 	l_return_status    	VARCHAR2(1);
2452 	--l_milcs_id   	NUMBER := NULL;
2453 	l_return_code		VARCHAR2(1);
2454 	l_data			VARCHAR2(2000);
2455 	l_count			NUMBER;
2456 	l_media_lc_rec		MEDIA_LC_REC_TYPE;
2457 	--l_milcs_type_id		NUMBER := NULL;
2458 	--l_start_date_time	DATE;
2459 	--l_end_date_time		DATE;
2460 	--l_duration		NUMBER := NULL;
2461 
2462   -- Perf fix for literal Usage
2463   l_duration_perf          NUMBER;
2464   l_active_perf            VARCHAR2(1);
2465 
2466 	BEGIN
2467 	-- Standard start of API savepoint
2468 	SAVEPOINT create_media_lc_pub;
2469 
2470    -- Perf variables
2471    l_duration_perf := 0;
2472    l_active_perf := 'N';
2473 
2474 			-- Preprocessing Call
2475 			l_media_lc_rec := p_media_lc_rec;
2476 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIALIFEYCYCLE', 'B', 'C') THEN
2477 				JTF_IH_PUB_CUHK.create_medialifecycle_pre(
2478 						     p_media_lc_rec=>l_media_lc_rec,
2479 						     x_data=>l_data,
2480 						     x_count=>l_count,
2481 						     x_return_code=>l_return_code);
2482 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2483 					RAISE FND_API.G_EXC_ERROR;
2484 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2485 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2486 				END IF;
2487 			END IF;
2488 
2489 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIALIFECYCLE', 'B', 'V') THEN
2490 				JTF_IH_PUB_VUHK.create_medialifecycle_pre(
2491 						     p_media_lc_rec=>l_media_lc_rec,
2492 						     x_data=>l_data,
2493 						     x_count=>l_count,
2494 						     x_return_code=>l_return_code);
2495 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2496 					RAISE FND_API.G_EXC_ERROR;
2497 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2498 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2499 				END IF;
2500 			END IF;
2501 
2502 
2503 	-- Standard call to check for call compatibility
2504 	IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
2505               l_api_name, g_pkg_name) THEN
2506       		RAISE fnd_api.g_exc_unexpected_error;
2507 	END IF;
2508       --  DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Create_MediaLifecycle');
2509 	-- Initialize message list if p_init_msg_list is set to TRUE
2510 	IF fnd_api.to_boolean(p_init_msg_list) THEN
2511       		fnd_msg_pub.initialize;
2512 	END IF;
2513 
2514 	-- Initialize API return status to success
2515 	x_return_status := fnd_api.g_ret_sts_success;
2516 
2517 	--
2518 	-- Validate user and login session IDs
2519 	--
2520 	IF (p_user_id IS NULL) THEN
2521 		jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
2522 		RAISE fnd_api.g_exc_error;
2523 	ELSE
2524 		jtf_ih_core_util_pvt.validate_who_info
2525 		(	p_api_name        => l_api_name_full,
2526 			p_parameter_name_usr    => 'p_user_id',
2527 			p_parameter_name_log    => 'p_login_id',
2528 			p_user_id         => p_user_id,
2529 			p_login_id        => p_login_id,
2530 			x_return_status   => l_return_status );
2531 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2532 			RAISE fnd_api.g_exc_error;
2533 		END IF;
2534 	END IF;
2535 	-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Create_MediaLifecycle' || p_user_id);
2536 	-- DBMS_OUTPUT.PUT_LINE('milcs_type_id:= ' || p_media_lc_rec.milcs_type_id);
2537 	-- DBMS_OUTPUT.PUT_LINE('milcs_type_code:= ' || p_media_lc_rec.milcs_code);
2538 	Validate_Mlcs_Record
2539 	(	p_api_name      => l_api_name_full,
2540 		p_media_lc_rec	      => p_media_lc_rec,
2541 		p_resp_appl_id  => p_resp_appl_id,
2542 		p_resp_id       => p_resp_id,
2543 		x_return_status       => l_return_status
2544 		);
2545 	IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2546 			RAISE fnd_api.g_exc_error;
2547 	END IF;
2548 	-- DBMS_OUTPUT.PUT_LINE('PAST Validate_Mlcs_Record in JTF_IH_PUB.Create_MediaLifecycle');
2549 	-- assign the start_date_time
2550 
2551 	IF(p_media_lc_rec.start_date_time IS NOT NULL) AND (p_media_lc_rec.start_date_time <> fnd_api.g_miss_date) THEN
2552 		--l_start_date_time := p_media_lc_rec.start_date_time;
2553 		l_media_lc_rec.start_date_time := p_media_lc_rec.start_date_time;
2554 	ELSE
2555 		--l_start_date_time := SYSDATE;
2556 		l_media_lc_rec.start_date_time := SYSDATE;
2557 	END IF;
2558 
2559     IF(p_media_lc_rec.end_date_time <> fnd_api.g_miss_date) AND (p_media_lc_rec.end_date_time IS NOT NULL) THEN
2560 	   --l_end_date_time := p_media_lc_rec.end_date_time;
2561 	   l_media_lc_rec.end_date_time := p_media_lc_rec.end_date_time;
2562     ELSE
2563        --l_end_date_time := SYSDATE;
2564        l_media_lc_rec.end_date_time := SYSDATE;
2565     END IF;
2566 
2567     Validate_StartEnd_Date
2568 			(	p_api_name    	=> l_api_name_full,
2569 				--p_start_date_time   	=> l_start_date_time,
2570 				p_start_date_time   	=> l_media_lc_rec.start_date_time,
2571 				--p_end_date_time		=> l_end_date_time,
2572 				p_end_date_time 	=> l_media_lc_rec.end_date_time,
2573 				x_return_status     	=> l_return_status
2574 			);
2575 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2576 			RAISE fnd_api.g_exc_error;
2577 		END IF;
2578 
2579 	-- assign the duration
2580 	IF (p_media_lc_rec.duration <> fnd_api.g_miss_num) AND (p_media_lc_rec.duration IS NOT NULL) THEN
2581 		--l_duration := p_media_lc_rec.duration;
2582 		l_media_lc_rec.duration := p_media_lc_rec.duration;
2583     ELSE
2584        --l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
2585        l_media_lc_rec.duration := ROUND((l_media_lc_rec.end_date_time - l_media_lc_rec.start_date_time)*24*60*60);
2586     END IF;
2587 
2588 	--l_milcs_type_id := p_media_lc_rec.milcs_type_id;
2589 	l_media_lc_rec.milcs_type_id := p_media_lc_rec.milcs_type_id;
2590 	IF ((p_media_lc_rec.milcs_type_id IS NULL) OR (p_media_lc_rec.milcs_type_id = FND_API.G_MISS_NUM)) THEN
2591 		--select milcs_type_id into l_milcs_type_id
2592 		select milcs_type_id into l_media_lc_rec.milcs_type_id
2593 		from jtf_ih_media_itm_lc_seg_tys
2594 		where milcs_code = p_media_lc_rec.milcs_code;
2595 	END IF;
2596 
2597     -- Bug# 2817083
2598     --SELECT jtf_ih_media_item_lc_seg_s1.NEXTVAL INTO l_milcs_id FROM dual;
2599 	-- DBMS_OUTPUT.PUT_LINE('PAST generate PK in JTF_IH_PUB.Create_MediaLifecycle '|| l_milcs_id);
2600         --l_milcs_id := Get_milcs_id(NULL);
2601         l_media_lc_rec.milcs_id := Get_milcs_id(NULL);
2602 
2603         -- Perf fix for literal Usage
2604 	insert into jtf_ih_media_item_lc_segs
2605 	(
2606 			 START_DATE_TIME,
2607 			 TYPE_TYPE,
2608 			 TYPE_ID,
2609 			 DURATION,
2610 			 END_DATE_TIME,
2611 			 MILCS_ID,
2612 			 MILCS_TYPE_ID,
2613 			 MEDIA_ID,
2614 			 HANDLER_ID,
2615 			 RESOURCE_ID,
2616 			 CREATED_BY,
2617 			 CREATION_DATE,
2618 			 LAST_UPDATED_BY,
2619 			 LAST_UPDATE_DATE,
2620 			 LAST_UPDATE_LOGIN,
2621 			 ACTIVE,
2622        BULK_WRITER_CODE,
2623        BULK_BATCH_TYPE,
2624        BULK_BATCH_ID,
2625        BULK_INTERACTION_ID
2626  	)
2627 	values
2628 	(
2629 			--l_start_date_time,
2630 			l_media_lc_rec.start_date_time,
2631 			decode( p_media_lc_rec.type_type, fnd_api.g_miss_char, null,p_media_lc_rec.type_type),
2632 			decode( p_media_lc_rec.type_id, fnd_api.g_miss_num, null, p_media_lc_rec.type_id),
2633 			--decode( l_duration, fnd_api.g_miss_num, l_duration_perf, l_duration ),
2634 			decode(l_media_lc_rec.duration, fnd_api.g_miss_num, 0, l_media_lc_rec.duration ),
2635 			--l_end_date_time,
2636 			l_media_lc_rec.end_date_time,
2637 			--l_milcs_id,
2638 			l_media_lc_rec.milcs_id,
2639 			--decode( l_milcs_type_id, fnd_api.g_miss_num, null, l_milcs_type_id),
2640 			decode(l_media_lc_rec.milcs_type_id, fnd_api.g_miss_num, null, l_media_lc_rec.milcs_type_id),
2641 			p_media_lc_rec.media_id,
2642 			p_media_lc_rec.handler_id,
2643 			decode( p_media_lc_rec.resource_id, fnd_api.g_miss_num, null, p_media_lc_rec.resource_id),
2644 			p_user_id,
2645 			Sysdate,
2646 			p_user_id,
2647 			Sysdate,
2648 			p_login_id,
2649 			l_active_perf,
2650 		    decode( p_media_lc_rec.bulk_writer_code, fnd_api.g_miss_char, null, p_media_lc_rec.bulk_writer_code),
2651 			decode( p_media_lc_rec.bulk_batch_type, fnd_api.g_miss_char, null, p_media_lc_rec.bulk_batch_type),
2652 			decode( p_media_lc_rec.bulk_batch_id, fnd_api.g_miss_num, null, p_media_lc_rec.bulk_batch_id),
2653 			decode( p_media_lc_rec.bulk_interaction_id, fnd_api.g_miss_num, null, p_media_lc_rec.bulk_interaction_id)
2654 	);
2655 	-- DBMS_OUTPUT.PUT_LINE('PAST insert data in JTF_IH_PUB.Create_MediaLifecycle');
2656 
2657 			-- Post processing Call
2658 
2659 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIALIFECYCLE', 'A', 'V') THEN
2660 				JTF_IH_PUB_VUHK.create_medialifecycle_post(
2661 						     p_media_lc_rec=>l_media_lc_rec,
2662 						     x_data=>l_data,
2663 						     x_count=>l_count,
2664 						     x_return_code=>l_return_code);
2665 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2666 					RAISE FND_API.G_EXC_ERROR;
2667 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2668 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2669 				END IF;
2670 			END IF;
2671 
2672 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_MEDIALIFECYCLE', 'A', 'C') THEN
2673 				JTF_IH_PUB_CUHK.create_medialifecycle_post(
2674 						     p_media_lc_rec=>l_media_lc_rec,
2675 						     x_data=>l_data,
2676 						     x_count=>l_count,
2677 						     x_return_code=>l_return_code);
2678 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2679 					RAISE FND_API.G_EXC_ERROR;
2680 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2681 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2682 				END IF;
2683 			END IF;
2684 
2685 
2686    -- Standard check of p_commit
2687    IF fnd_api.to_boolean(p_commit) THEN
2688       COMMIT WORK;
2689    END IF;
2690 
2691    -- Standard call to get message count and if count is 1, get message info
2692   fnd_msg_pub.count_and_get
2693      ( p_count  => x_msg_count,
2694        p_data   => x_msg_data );
2695   EXCEPTION
2696    WHEN fnd_api.g_exc_error THEN
2697       ROLLBACK TO create_media_lc_pub;
2698       x_return_status := fnd_api.g_ret_sts_error;
2699       fnd_msg_pub.count_and_get
2700   ( p_encoded	=> FND_API.g_false,
2701 	  p_count       => x_msg_count,
2702     p_data  => x_msg_data );
2703   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2704    WHEN fnd_api.g_exc_unexpected_error THEN
2705       ROLLBACK TO create_media_lc_pub;
2706       x_return_status := fnd_api.g_ret_sts_unexp_error;
2707       fnd_msg_pub.count_and_get
2708   ( p_encoded	=> FND_API.g_false,
2709 	       p_count       => x_msg_count,
2710       p_data  => x_msg_data );
2711     x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2712    WHEN OTHERS THEN
2713       ROLLBACK TO create_media_lc_pub;
2714       x_return_status := fnd_api.g_ret_sts_unexp_error;
2715       IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
2716    fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
2717       END IF;
2718       fnd_msg_pub.count_and_get
2719   ( p_encoded	=> FND_API.g_false,
2720 	       p_count       => x_msg_count,
2721       p_data  => x_msg_data );
2722   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
2723   END Create_MediaLifecycle;
2724 
2725 --
2726 --	HISTORY
2727 --
2728 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
2729 --	------		----		--------------------------
2730 --
2731 --					INITIAL VERSION
2732 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
2733 --  Igor Aleshin    22-MAY-2001 - Fixed the bug# 1791550 unable to Create
2734 --            Activity by Call Create_Interaction API
2735 --  Igor Aleshin    21-DEC-2001 Fix for bugdb - 2153913 - PREVENT G_MISS_DATE VALUE FROM BEING
2736 --            WRITTEN TO THE END_DATE_TIME VALUE.
2737 --  Igor Aleshin    21-FEB-2002 Fix for bugdb - 2235155 - JTF_IH_PUB.CREATE_INTERACTION DOESN'T
2738 --            INSERT ALL VALUES TO JTF_IH_ACTIVITIES
2739 --  Igor Aleshin    04-MAR-2002 Added Attributes to Activity_Rec.
2740 --  Igor Aleshin    18-APR-2001 Fix for bugdb 2323210 - 1157.6RI:API
2741 --            ERR:JTF_IH_PUB.CLOSE_INTERACTION:WHEN DISAGREE WITH OKC IN IBE
2742 --  Igor Aleshin    10-MAY-2002 ENH# 2079963 - NEED INTERACTION HISTORY RECORD TO SUPPORT MULTIPLE AGENTS
2743 --  Igor Aleshin    05-JUN-2002 Removed from statemements Resource_ID for Activity_Rec_Type
2744 --  Igor Aleshin    24-FEB-2003 Fixed bug# 2817083 - Error loggin interactions
2745 --  Igor Aleshin    29-MAY-2003 Enh# 2940473 - IH Bulk API Changes
2746 --  Igor Aleshin    18-JUN-2003 Enh# 1846960 - REQUIRE CONTACT NAME OF ORGANISATION IN INTERACTION HISTORY
2747 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
2748 --
2749 --
2750 
2751 PROCEDURE Create_Interaction(
2752    p_api_version     IN NUMBER,
2753    p_init_msg_list   IN VARCHAR2, --DEFAULT FND_API.G_FALSE,
2754    p_commit          IN VARCHAR2, --DEFAULT FND_API.G_FALSE,
2755    p_resp_appl_id    IN NUMBER   DEFAULT NULL,
2756    p_resp_id         IN NUMBER   DEFAULT NULL,
2757    p_user_id         IN NUMBER,
2758    p_login_id        IN NUMBER   DEFAULT NULL,
2759    x_return_status   OUT NOCOPY	VARCHAR2,
2760    x_msg_count       OUT NOCOPY NUMBER,
2761    x_msg_data        OUT NOCOPY VARCHAR2,
2762    p_interaction_rec IN interaction_rec_type,
2763    p_activities      IN activity_tbl_type
2764 ) IS
2765    l_api_name   CONSTANT VARCHAR2(30) := 'Create_Interaction';
2766    l_api_version      CONSTANT NUMBER       := 1.0;
2767    l_api_name_full    CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
2768    l_return_status    VARCHAR2(1);
2769    l_int_val_rec      interaction_rec_type;
2770    l_interaction_id   NUMBER;
2771    l_activity_id      NUMBER;
2772    l_activities 	    activity_tbl_type;
2773    l_return_code			VARCHAR2(1);
2774    l_data				VARCHAR2(2000);
2775    l_count				NUMBER;
2776    l_interaction_rec		INTERACTION_REC_TYPE;
2777    --l_activities_hk			activity_tbl_type;
2778 
2779   -- Perf fix for literal Usage
2780   l_duration_perf          NUMBER;
2781   l_active_perf            VARCHAR2(1);
2782 
2783 BEGIN
2784 
2785    -- local variables initialization to remove GSCC warning
2786    l_int_val_rec := p_interaction_rec;
2787    l_activities := p_activities;
2788 
2789 
2790    -- Perf variables
2791    l_duration_perf := 0;
2792    l_active_perf := 'N';
2793 
2794    -- Standard start of API savepoint
2795    SAVEPOINT create_interaction_pub;
2796 
2797    -- Preprocessing Call
2798    --l_interaction_rec := p_interaction_rec;
2799    --l_activities_hk   := p_activities;
2800 
2801    IF l_activities.count = 0 THEN
2802       FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_ACTIVITY');
2803       FND_MSG_PUB.Add;
2804       RAISE FND_API.G_EXC_ERROR;
2805    END IF;
2806 
2807    IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_INTERACTION', 'B', 'C') THEN
2808       JTF_IH_PUB_CUHK.create_interaction_pre(
2809          --p_interaction_rec=>l_interaction_rec,
2810          p_interaction_rec=>l_int_val_rec,
2811          --p_activities=>l_activities_hk,
2812          p_activities=>l_activities,
2813          x_data=>l_data,
2814          x_count=>l_count,
2815          x_return_code=>l_return_code);
2816       IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2817          RAISE FND_API.G_EXC_ERROR;
2818       ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2819          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2820       END IF;
2821    END IF;
2822 
2823    IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_INTERACTION', 'B', 'V') THEN
2824       JTF_IH_PUB_VUHK.create_interaction_pre(
2825          --p_interaction_rec=>l_interaction_rec,
2826          p_interaction_rec=>l_int_val_rec,
2827          --p_activities=>l_activities_hk,
2828          p_activities=>l_activities,
2829          x_data=>l_data,
2830          x_count=>l_count,
2831          x_return_code=>l_return_code);
2832       IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
2833          RAISE FND_API.G_EXC_ERROR;
2834       ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
2835          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2836       END IF;
2837    END IF;
2838 
2839 
2840    -- Standard call to check for call compatibility
2841    IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
2842       l_api_name, g_pkg_name) THEN
2843       RAISE fnd_api.g_exc_unexpected_error;
2844    END IF;
2845    -- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Create_Interaction');
2846 
2847    -- Initialize message list if p_init_msg_list is set to TRUE
2848    IF fnd_api.to_boolean(p_init_msg_list) THEN
2849       fnd_msg_pub.initialize;
2850    END IF;
2851 
2852    -- Initialize API return status to success
2853    x_return_status := fnd_api.g_ret_sts_success;
2854 
2855    --
2856    -- Apply business-rule validation to all required and passed parameters
2857    --
2858    -- Validate user and login session IDs
2859    --
2860    IF (p_user_id IS NULL) THEN
2861       jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
2862       RAISE fnd_api.g_exc_error;
2863    ELSE
2864       jtf_ih_core_util_pvt.validate_who_info
2865          ( p_api_name        => l_api_name_full,
2866          p_parameter_name_usr    => 'p_user_id',
2867          p_parameter_name_log    => 'p_login_id',
2868          p_user_id         => p_user_id,
2869          p_login_id        => p_login_id,
2870          x_return_status   => l_return_status );
2871       IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2872          RAISE fnd_api.g_exc_error;
2873       END IF;
2874    END IF;
2875    -- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Create_Interaction');
2876 
2877    --
2878    -- Validate all non-missing attributes by calling the utility procedure.
2879    --
2880    Validate_Interaction_Record
2881       ( p_api_name      => l_api_name_full,
2882       --p_int_val_rec   => p_interaction_rec,
2883       p_int_val_rec   => l_int_val_rec,
2884       p_resp_appl_id  => p_resp_appl_id,
2885       p_resp_id       => p_resp_id,
2886       x_return_status       => l_return_status
2887       );
2888    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2889       RAISE fnd_api.g_exc_error;
2890    END IF;
2891 
2892    --DBMS_OUTPUT.PUT_LINE('PAST Validate_Interaction_Record in JTF_IH_PUB.Create_Interaction');
2893    -- mpetrosi 9/1/03 - should not default with zeroes
2894    -- Default_Interaction_Record(l_int_val_rec);
2895 
2896    -- Changed by IAleshin - 20-MAY-2002
2897    IF (p_interaction_rec.end_date_time <> fnd_api.g_miss_date) AND (p_interaction_rec.end_date_time IS NOT NULL) THEN
2898       l_int_val_rec.end_date_time := p_interaction_rec.end_date_time;
2899    ELSE
2900       l_int_val_rec.end_date_time := SYSDATE;
2901    END IF;
2902 
2903    IF (p_interaction_rec.start_date_time <> fnd_api.g_miss_date) AND (p_interaction_rec.start_date_time IS NOT NULL) THEN
2904       l_int_val_rec.start_date_time := p_interaction_rec.start_date_time;
2905    ELSE
2906       l_int_val_rec.start_date_time := SYSDATE;
2907    END IF;
2908 
2909    Validate_StartEnd_Date( p_api_name => l_api_name_full,
2910       p_start_date_time => l_int_val_rec.start_date_time,
2911       p_end_date_time   => l_int_val_rec.end_date_time,
2912       x_return_status   => l_return_status);
2913    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
2914       RAISE fnd_api.g_exc_error;
2915    END IF;
2916 
2917    IF (p_interaction_rec.duration IS NOT NULL) AND (p_interaction_rec.duration <> fnd_api.g_miss_num) THEN
2918       l_int_val_rec.duration := l_interaction_rec.duration;
2919    ELSE
2920       l_int_val_rec.duration := ROUND((l_int_val_rec.end_date_time - l_int_val_rec.start_date_time)*24*60*60);
2921    END IF;
2922 
2923    -- Bug# 2817083
2924    --IF ((p_interaction_rec.interaction_id IS NULL) OR (p_interaction_rec.interaction_id = fnd_api.g_miss_num)) THEN
2925    --    SELECT jtf_ih_interactions_s1.NEXTVAL INTO l_int_val_rec.interaction_id FROM dual;
2926    --END IF;
2927    l_int_val_rec.interaction_id := Get_Interaction_ID(p_interaction_rec.interaction_id);
2928    IF l_int_val_rec.interaction_id = -1 THEN
2929       RAISE fnd_api.g_exc_error;
2930    END IF;
2931 
2932    Validate_Source_Code(l_api_name_full,l_int_val_rec.source_code_id,l_int_val_rec.source_code, x_return_status);
2933    IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
2934       RAISE fnd_api.g_exc_error;
2935    END IF;
2936 
2937    -- Perf fix for literal Usage
2938    INSERT INTO jtf_ih_Interactions
2939    (
2940       CREATED_BY,
2941       REFERENCE_FORM,
2942       CREATION_DATE,
2943       LAST_UPDATED_BY,
2944       DURATION,
2945       LAST_UPDATE_DATE,
2946       LAST_UPDATE_LOGIN,
2947       END_DATE_TIME,
2948       FOLLOW_UP_ACTION,
2949       NON_PRODUCTIVE_TIME_AMOUNT,
2950       RESULT_ID,
2951       REASON_ID,
2952       START_DATE_TIME,
2953       OUTCOME_ID,
2954       PREVIEW_TIME_AMOUNT,
2955       PRODUCTIVE_TIME_AMOUNT,
2956       HANDLER_ID,
2957       INTER_INTERACTION_DURATION,
2958       INTERACTION_ID,
2959       WRAP_UP_TIME_AMOUNT,
2960       SCRIPT_ID,
2961       PARTY_ID,
2962       RESOURCE_ID,
2963       OBJECT_ID,
2964       OBJECT_TYPE,
2965       SOURCE_CODE_ID,
2966       SOURCE_CODE,
2967       ATTRIBUTE1,
2968       ATTRIBUTE2,
2969       ATTRIBUTE3,
2970       ATTRIBUTE4,
2971       ATTRIBUTE5,
2972       ATTRIBUTE6,
2973       ATTRIBUTE7,
2974       ATTRIBUTE8,
2975       ATTRIBUTE9,
2976       ATTRIBUTE10,
2977       ATTRIBUTE11,
2978       ATTRIBUTE12,
2979       ATTRIBUTE13,
2980       ATTRIBUTE14,
2981       ATTRIBUTE15,
2982       ATTRIBUTE_CATEGORY,
2983       ACTIVE,
2984       TOUCHPOINT1_TYPE,
2985       TOUCHPOINT2_TYPE,
2986       METHOD_CODE,
2987       BULK_WRITER_CODE,
2988       BULK_BATCH_TYPE,
2989       BULK_BATCH_ID,
2990       BULK_INTERACTION_ID,
2991       PRIMARY_PARTY_ID,
2992       CONTACT_REL_PARTY_ID,
2993       CONTACT_PARTY_ID
2994    )
2995    VALUES
2996    (
2997       p_user_id,
2998       decode( l_int_val_rec.reference_form, fnd_api.g_miss_char, null, l_int_val_rec.reference_form),
2999       Sysdate,
3000       p_user_id,
3001       decode( l_int_val_rec.duration, fnd_api.g_miss_num, l_duration_perf, l_int_val_rec.duration),
3002       Sysdate,
3003       p_login_id,
3004       l_int_val_rec.end_date_time,
3005       decode( l_int_val_rec.follow_up_action, fnd_api.g_miss_char, null, l_int_val_rec.follow_up_action),
3006       decode( l_int_val_rec.non_productive_time_amount, fnd_api.g_miss_num, null, l_int_val_rec.non_productive_time_amount),
3007       decode( l_int_val_rec.result_id, fnd_api.g_miss_num, null, l_int_val_rec.result_id),
3008       decode( l_int_val_rec.reason_id, fnd_api.g_miss_num, null, l_int_val_rec.reason_id),
3009       l_int_val_rec.start_date_time,
3010       decode( l_int_val_rec.outcome_id, fnd_api.g_miss_num, null, l_int_val_rec.outcome_id),
3011       decode( l_int_val_rec.preview_time_amount, fnd_api.g_miss_num, null, l_int_val_rec.preview_time_amount),
3012       decode( l_int_val_rec.productive_time_amount, fnd_api.g_miss_num, null, l_int_val_rec.productive_time_amount),
3013       l_int_val_rec.handler_id,
3014       decode( l_int_val_rec.inter_interaction_duration, fnd_api.g_miss_num, null, l_int_val_rec.inter_interaction_duration),
3015       l_int_val_rec.interaction_id,
3016       decode( l_int_val_rec.wrapup_time_amount, fnd_api.g_miss_num, null, l_int_val_rec.wrapup_time_amount),
3017       decode( l_int_val_rec.script_id, fnd_api.g_miss_num, null, l_int_val_rec.script_id),
3018       l_int_val_rec.party_id,
3019       l_int_val_rec.resource_id,
3020       decode( l_int_val_rec.object_id, fnd_api.g_miss_num, null, l_int_val_rec.object_id),
3021       decode( l_int_val_rec.object_type, fnd_api.g_miss_char, null, l_int_val_rec.object_type),
3022       decode( l_int_val_rec.source_code_id, fnd_api.g_miss_num, null, l_int_val_rec.source_code_id),
3023       decode( l_int_val_rec.source_code, fnd_api.g_miss_char, null, l_int_val_rec.source_code),
3024       decode( l_int_val_rec.attribute1, fnd_api.g_miss_char, null, l_int_val_rec.attribute1),
3025       decode( l_int_val_rec.attribute2, fnd_api.g_miss_char, null, l_int_val_rec.attribute2),
3026       decode( l_int_val_rec.attribute3, fnd_api.g_miss_char, null, l_int_val_rec.attribute3),
3027       decode( l_int_val_rec.attribute4, fnd_api.g_miss_char, null, l_int_val_rec.attribute4),
3028       decode( l_int_val_rec.attribute5, fnd_api.g_miss_char, null, l_int_val_rec.attribute5),
3029       decode( l_int_val_rec.attribute6, fnd_api.g_miss_char, null, l_int_val_rec.attribute6),
3030       decode( l_int_val_rec.attribute7, fnd_api.g_miss_char, null, l_int_val_rec.attribute7),
3031       decode( l_int_val_rec.attribute8, fnd_api.g_miss_char, null, l_int_val_rec.attribute8),
3032       decode( l_int_val_rec.attribute9, fnd_api.g_miss_char, null, l_int_val_rec.attribute9),
3033       decode( l_int_val_rec.attribute10, fnd_api.g_miss_char, null, l_int_val_rec.attribute10),
3034       decode( l_int_val_rec.attribute11, fnd_api.g_miss_char, null, l_int_val_rec.attribute11),
3035       decode( l_int_val_rec.attribute12, fnd_api.g_miss_char, null, l_int_val_rec.attribute12),
3036       decode( l_int_val_rec.attribute13, fnd_api.g_miss_char, null, l_int_val_rec.attribute13),
3037       decode( l_int_val_rec.attribute14, fnd_api.g_miss_char, null, l_int_val_rec.attribute14),
3038       decode( l_int_val_rec.attribute15, fnd_api.g_miss_char, null, l_int_val_rec.attribute15),
3039       decode( l_int_val_rec.attribute_category, fnd_api.g_miss_char, null, l_int_val_rec.attribute_category),
3040       l_active_perf,
3041       decode( l_int_val_rec.touchpoint1_type, fnd_api.g_miss_char, null, l_int_val_rec.touchpoint1_type),
3042       decode( l_int_val_rec.touchpoint2_type, fnd_api.g_miss_char, null, l_int_val_rec.touchpoint2_type),
3043       decode( l_int_val_rec.method_code, fnd_api.g_miss_char, null, l_int_val_rec.method_code),
3044       decode( l_int_val_rec.bulk_writer_code, fnd_api.g_miss_char, null, l_int_val_rec.bulk_writer_code),
3045       decode( l_int_val_rec.bulk_batch_type, fnd_api.g_miss_char, null, l_int_val_rec.bulk_batch_type),
3046       decode( l_int_val_rec.bulk_batch_id, fnd_api.g_miss_num, null, l_int_val_rec.bulk_batch_id),
3047       decode( l_int_val_rec.bulk_interaction_id, fnd_api.g_miss_num, null, l_int_val_rec.bulk_interaction_id),
3048       decode( l_int_val_rec.primary_party_id, fnd_api.g_miss_num, null, l_int_val_rec.primary_party_id),
3049       decode( l_int_val_rec.contact_rel_party_id, fnd_api.g_miss_num, null, l_int_val_rec.contact_rel_party_id),
3050       decode( l_int_val_rec.contact_party_id, fnd_api.g_miss_num, null, l_int_val_rec.contact_party_id)
3051    );
3052 
3053    -- DBMS_OUTPUT.PUT_LINE('PAST INSERT INTO jtf_ih_Interactions in JTF_IH_PUB.Create_Interaction');
3054    --1791550
3055    --
3056    for  idx in 1 .. l_activities.count loop
3057       l_activities(idx).interaction_id := l_int_val_rec.interaction_id;
3058    end loop;
3059 
3060    Validate_Activity_table
3061    (
3062       p_api_name      => l_api_name_full,
3063       --p_int_val_tbl   => p_activities,
3064       p_int_val_tbl   => l_activities,
3065       p_resp_appl_id  => p_resp_appl_id,
3066       p_resp_id       => p_resp_id,
3067       x_return_status       => l_return_status
3068    );
3069    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
3070       RAISE fnd_api.g_exc_error;
3071    END IF;
3072 
3073    -- mpetrosi 9/01/03 - should not default with zeroes
3074    -- Default_activity_table(l_activities);
3075 
3076    for  idx in 1 .. p_activities.count loop
3077       --Bug# 2817083
3078       --IF ((p_activities(idx).activity_id IS NULL) OR (p_activities(idx).activity_id = fnd_api.g_miss_num)) THEN
3079       --     SELECT jtf_ih_activities_s1.NEXTVAL INTO l_activities(idx).activity_id FROM dual;
3080       --END IF;
3081 
3082       -- Bug# 2323210
3083       if(p_activities(idx).start_date_time <> fnd_api.g_miss_date) AND (p_activities(idx).start_date_time IS NOT NULL) then
3084          l_activities(idx).start_date_time := p_activities(idx).start_date_time;
3085       else
3086          l_activities(idx).start_date_time := SYSDATE;
3087       end if;
3088 
3089       if(p_activities(idx).end_date_time <> fnd_api.g_miss_date) AND (p_activities(idx).end_date_time IS NOT NULL) then
3090          l_activities(idx).end_date_time := p_activities(idx).end_date_time;
3091       else
3092          l_activities(idx).end_date_time := SYSDATE;
3093       end if;
3094 
3095       if (p_activities(idx).duration <> fnd_api.g_miss_num) and (p_activities(idx).duration is not null) then
3096          l_activities(idx).duration := p_activities(idx).duration;
3097       else
3098          l_activities(idx).duration := ROUND((l_activities(idx).end_date_time - l_activities(idx).start_date_time)*24*60*60);
3099       end if;
3100 
3101       -- Bug 2817083
3102       l_activities(idx).activity_id := Get_Activity_ID(l_activities(idx).activity_id);
3103       IF l_activities(idx).activity_id = -1 THEN
3104          RAISE fnd_api.g_exc_error;
3105       END IF;
3106 
3107 
3108       -- Removed by IAleshin 06/04/2002
3109       -- Enh# 2079963
3110     /* IF( p_activities(idx).resource_id IS NOT NULL) AND (p_activities(idx).resource_id <> fnd_api.g_miss_num) THEN
3111    	    SELECT count(resource_id) into l_count
3112       FROM jtf_rs_resource_extns
3113       WHERE resource_id = p_activities(idx).resource_id;
3114           IF (l_count <= 0) THEN
3115      	        x_return_status := fnd_api.g_ret_sts_error;
3116      	        jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_activities(idx).resource_id),'resource_id');
3117 	         RETURN;
3118 	           END IF;
3119         l_activities(idx).resource_id := p_activities(idx).resource_id;
3120     ELSE
3121         -- If resource_id is null or g_miss_num, then get value from parent interaction
3122         l_activities(idx).resource_id := l_int_val_rec.resource_id;
3123     END IF;*/
3124 
3125       -- 08/29/03 mpetrosi B3102306
3126       -- added cross check of source_code, source_code_id
3127       Validate_Source_Code(l_api_name_full,l_activities(idx).source_code_id,l_activities(idx).source_code, x_return_status);
3128       IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
3129       RAISE fnd_api.g_exc_error;
3130       END IF;
3131 
3132       -- DBMS_OUTPUT.PUT_LINE('PAST activity id validation');
3133       insert into jtf_ih_Activities
3134       (
3135          OBJECT_ID,
3136          OBJECT_TYPE,
3137          SOURCE_CODE_ID,
3138          SOURCE_CODE,
3139          DURATION,
3140          DESCRIPTION,
3141          DOC_ID,
3142          END_DATE_TIME,
3143          ACTIVITY_ID,
3144          RESULT_ID,
3145          REASON_ID,
3146          START_DATE_TIME,
3147          INTERACTION_ACTION_TYPE,
3148          MEDIA_ID,
3149          OUTCOME_ID,
3150          ACTION_ITEM_ID,
3151          INTERACTION_ID,
3152          TASK_ID,
3153          CREATION_DATE,
3154          CREATED_BY,
3155          LAST_UPDATED_BY,
3156          LAST_UPDATE_DATE,
3157          LAST_UPDATE_LOGIN,
3158          ACTION_ID,
3159          ATTRIBUTE1,
3160          ATTRIBUTE2,
3161          ATTRIBUTE3,
3162          ATTRIBUTE4,
3163          ATTRIBUTE5,
3164          ATTRIBUTE6,
3165          ATTRIBUTE7,
3166          ATTRIBUTE8,
3167          ATTRIBUTE9,
3168          ATTRIBUTE10,
3169          ATTRIBUTE11,
3170          ATTRIBUTE12,
3171          ATTRIBUTE13,
3172          ATTRIBUTE14,
3173          ATTRIBUTE15,
3174          ATTRIBUTE_CATEGORY,
3175          ACTIVE,
3176          SCRIPT_TRANS_ID,
3177          ROLE,
3178          DOC_SOURCE_OBJECT_NAME,
3179          --, RESOURCE_ID
3180          -- Added missed columns 09/10/2002
3181          CUST_ACCOUNT_ID,
3182          CUST_ORG_ID,
3183          DOC_REF,
3184          BULK_WRITER_CODE,
3185          BULK_BATCH_TYPE,
3186          BULK_BATCH_ID,
3187          BULK_INTERACTION_ID
3188       )
3189       values
3190       (
3191          decode( l_activities(idx).object_id, fnd_api.g_miss_num, null, l_activities(idx).object_id),
3192          decode( l_activities(idx).object_type, fnd_api.g_miss_char, null, l_activities(idx).object_type),
3193          decode( l_activities(idx).source_code_id, fnd_api.g_miss_num, null, l_activities(idx).source_code_id),
3194          decode( l_activities(idx).source_code, fnd_api.g_miss_char, null, l_activities(idx).source_code),
3195          decode( l_activities(idx).duration, fnd_api.g_miss_num, l_duration_perf, l_activities(idx).duration),
3196          decode( l_activities(idx).description, fnd_api.g_miss_char, null, l_activities(idx).description),
3197          decode( l_activities(idx).doc_id, fnd_api.g_miss_num, null, l_activities(idx).doc_id),
3198          l_activities(idx).end_date_time,
3199          l_activities(idx).activity_id,
3200          decode( l_activities(idx).result_id, fnd_api.g_miss_num, null, l_activities(idx).result_id),
3201          decode( l_activities(idx).reason_id, fnd_api.g_miss_num, null, l_activities(idx).reason_id),
3202          l_activities(idx).start_date_time,
3203          decode( l_activities(idx).interaction_action_type, fnd_api.g_miss_char, null, l_activities(idx).interaction_action_type),
3204          decode( l_activities(idx).media_id, fnd_api.g_miss_num, null, l_activities(idx).media_id),
3205          decode( l_activities(idx).outcome_id, fnd_api.g_miss_num, null, l_activities(idx).outcome_id),
3206          decode( l_activities(idx).action_item_id, fnd_api.g_miss_num, null, l_activities(idx).action_item_id),
3207          l_int_val_rec.interaction_id,
3208          decode( l_activities(idx).task_id, fnd_api.g_miss_num, null, l_activities(idx).task_id),
3209          Sysdate,
3210          p_user_id,
3211          p_user_id,
3212          Sysdate,
3213          p_login_id,
3214          decode( l_activities(idx).action_id, fnd_api.g_miss_num, null, l_activities(idx).action_id),
3215          decode( l_activities(idx).attribute1, fnd_api.g_miss_char, null, l_activities(idx).attribute1),
3216          decode( l_activities(idx).attribute2, fnd_api.g_miss_char, null, l_activities(idx).attribute2),
3217          decode( l_activities(idx).attribute3, fnd_api.g_miss_char, null, l_activities(idx).attribute3),
3218          decode( l_activities(idx).attribute4, fnd_api.g_miss_char, null, l_activities(idx).attribute4),
3219          decode( l_activities(idx).attribute5, fnd_api.g_miss_char, null, l_activities(idx).attribute5),
3220          decode( l_activities(idx).attribute6, fnd_api.g_miss_char, null, l_activities(idx).attribute6),
3221          decode( l_activities(idx).attribute7, fnd_api.g_miss_char, null, l_activities(idx).attribute7),
3222          decode( l_activities(idx).attribute8, fnd_api.g_miss_char, null, l_activities(idx).attribute8),
3223          decode( l_activities(idx).attribute9, fnd_api.g_miss_char, null, l_activities(idx).attribute9),
3224          decode( l_activities(idx).attribute10, fnd_api.g_miss_char, null, l_activities(idx).attribute10),
3225          decode( l_activities(idx).attribute11, fnd_api.g_miss_char, null, l_activities(idx).attribute11),
3226          decode( l_activities(idx).attribute12, fnd_api.g_miss_char, null, l_activities(idx).attribute12),
3227          decode( l_activities(idx).attribute13, fnd_api.g_miss_char, null, l_activities(idx).attribute13),
3228          decode( l_activities(idx).attribute14, fnd_api.g_miss_char, null, l_activities(idx).attribute14),
3229          decode( l_activities(idx).attribute15, fnd_api.g_miss_char, null, l_activities(idx).attribute15),
3230          decode( l_activities(idx).attribute_category, fnd_api.g_miss_char, null, l_activities(idx).attribute_category),
3231          l_active_perf,
3232          decode( l_activities(idx).script_trans_id, fnd_api.g_miss_num, null, l_activities(idx).script_trans_id),
3233          decode( l_activities(idx).role, fnd_api.g_miss_char, null, l_activities(idx).role),
3234          decode( l_activities(idx).doc_source_object_name, fnd_api.g_miss_char, null,l_activities(idx).doc_source_object_name),
3235          --, l_activities(idx).resource_id
3236          -- Added missed columns 09/10/2002
3237          decode( l_activities(idx).cust_account_id, fnd_api.g_miss_num, null, l_activities(idx).cust_account_id),
3238          decode( l_activities(idx).cust_org_id, fnd_api.g_miss_num, null, l_activities(idx).cust_org_id),
3239          decode( l_activities(idx).doc_ref, fnd_api.g_miss_char, null, l_activities(idx).doc_ref),
3240          decode( l_activities(idx).bulk_writer_code, fnd_api.g_miss_char, null, l_activities(idx).bulk_writer_code),
3241          decode( l_activities(idx).bulk_batch_type, fnd_api.g_miss_char, null, l_activities(idx).bulk_batch_type),
3242          decode( l_activities(idx).bulk_batch_id, fnd_api.g_miss_num, null, l_activities(idx).bulk_batch_id),
3243          decode( l_activities(idx).bulk_interaction_id, fnd_api.g_miss_num, null, l_activities(idx).bulk_interaction_id)
3244       );
3245    END loop;
3246 
3247    -- DBMS_OUTPUT.PUT_LINE('PAST insert into activities');
3248    IF ((l_int_val_rec.parent_id IS NOT NULL) AND (l_int_val_rec.parent_id  <> fnd_api.g_miss_num))	THEN
3249       insert into jtf_ih_interaction_inters
3250       (
3251          INTERACT_INTERACTION_ID,
3252          INTERACT_INTERACTION_IDRELATES,
3253          CREATED_BY,
3254          CREATION_DATE,
3255          LAST_UPDATED_BY,
3256          LAST_UPDATE_DATE,
3257          LAST_UPDATE_LOGIN
3258       )
3259       values
3260       (
3261          l_int_val_rec.interaction_id,
3262          l_int_val_rec.parent_id,
3263          p_user_id,
3264          Sysdate,
3265          p_user_id,
3266          Sysdate,
3267          p_user_id
3268       );
3269    END IF;
3270 
3271    --
3272    -- Set OUT value
3273    --
3274    --x_interaction_id := l_int_val_rec.interaction_id;
3275 
3276    -- Post processing Call
3277 
3278    IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_INTERACTION', 'A', 'V') THEN
3279       JTF_IH_PUB_VUHK.create_interaction_post(
3280          --p_interaction_rec=>l_interaction_rec,
3281          p_interaction_rec=>l_int_val_rec,
3282          --p_activities=>l_activities_hk,
3283          p_activities=>l_activities,
3284          x_data=>l_data,
3285          x_count=>l_count,
3286          x_return_code=>l_return_code);
3287       IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3288          RAISE FND_API.G_EXC_ERROR;
3289       ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3290          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3291       END IF;
3292    END IF;
3293 
3294    IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CREATE_INTERACTION', 'A', 'C') THEN
3295       JTF_IH_PUB_CUHK.create_interaction_post(
3296          --p_interaction_rec=>l_interaction_rec,
3297          p_interaction_rec=>l_int_val_rec,
3298          --p_activities=>l_activities_hk,
3299          p_activities=>l_activities,
3300          x_data=>l_data,
3301          x_count=>l_count,
3302          x_return_code=>l_return_code);
3303       IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3304          RAISE FND_API.G_EXC_ERROR;
3305       ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3306          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3307       END IF;
3308    END IF;
3309 
3310 
3311    -- Standard check of p_commit
3312    IF fnd_api.to_boolean(p_commit) THEN
3313       COMMIT WORK;
3314    END IF;
3315 
3316    -- Standard call to get message count and if count is 1, get message info
3317   fnd_msg_pub.count_and_get
3318      ( p_count  => x_msg_count,
3319        p_data   => x_msg_data );
3320 
3321   EXCEPTION
3322     WHEN fnd_api.g_exc_error THEN
3323       ROLLBACK TO create_interaction_pub;
3324       x_return_status := fnd_api.g_ret_sts_error;
3325       fnd_msg_pub.count_and_get
3326        ( p_count       => x_msg_count,
3327          p_data  => x_msg_data );
3328       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3329 
3330    WHEN fnd_api.g_exc_unexpected_error THEN
3331       ROLLBACK TO create_interaction_pub;
3332       x_return_status := fnd_api.g_ret_sts_unexp_error;
3333       fnd_msg_pub.count_and_get
3334       ( p_count       => x_msg_count,
3335         p_data  => x_msg_data );
3336       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3337 
3338    WHEN OTHERS THEN
3339       ROLLBACK TO create_interaction_pub;
3340       x_return_status := fnd_api.g_ret_sts_unexp_error;
3341       IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3342         fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
3343       END IF;
3344       fnd_msg_pub.count_and_get
3345       ( p_count       => x_msg_count,
3346         p_data  => x_msg_data );
3347       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3348   END Create_Interaction;
3349 
3350 
3351 --
3352 --	HISTORY
3353 --
3354 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
3355 --	------		----		--------------------------
3356 --
3357 --					INITIAL VERSION
3358 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
3359 --	James Baldo Jr.	31-JUL-2000	Implementation fix for bugdb # 1340799
3360 --
3361 
3362 	PROCEDURE Get_InteractionActivityCount
3363 	(
3364 	p_api_version		IN	NUMBER,
3365 	p_init_msg_list		IN	VARCHAR2, --DEFAULT FND_API.G_FALSE,
3366 	p_resp_appl_id		IN	NUMBER   DEFAULT NULL,
3367 	p_resp_id		IN	NUMBER   DEFAULT NULL,
3368 	p_user_id		IN	NUMBER,
3369 	p_login_id		IN	NUMBER   DEFAULT NULL,
3370 	x_return_status		OUT NOCOPY	VARCHAR2,
3371 	x_msg_count		OUT NOCOPY	NUMBER,
3372 	x_msg_data		OUT NOCOPY	VARCHAR2,
3373 	p_outcome_id   	IN 	NUMBER,
3374 	p_result_id    	IN 	NUMBER,
3375 	p_reason_id    	IN 	NUMBER,
3376 	p_script_id    		IN 	NUMBER,
3377 	p_media_id     		IN 	NUMBER,
3378 	x_activity_count 	OUT NOCOPY	NUMBER
3379   ) AS
3380 	l_api_name   	CONSTANT VARCHAR2(30) := 'Get_InteractionActivityCount';
3381 	l_api_version      	CONSTANT NUMBER       := 1.0;
3382 	l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
3383 	l_return_status    	VARCHAR2(1);
3384 	actionCount 		NUMBER;
3385 	l_return_code		VARCHAR2(1);
3386 	l_data			VARCHAR2(2000);
3387 	l_count			NUMBER;
3388 	l_outcome_id 		NUMBER;
3389 	l_result_id 		NUMBER;
3390 	l_reason_id 		NUMBER;
3391 	l_script_id 		NUMBER;
3392 	l_media_id 		NUMBER;
3393 
3394    BEGIN
3395 	-- Preprocessing Call
3396 	l_outcome_id := p_outcome_id;
3397 	l_result_id := p_result_id;
3398 	l_reason_id := p_reason_id;
3399 	l_script_id := p_script_id;
3400 	l_media_id := p_media_id;
3401 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONACTIVITYCOUNT', 'B', 'C') THEN
3402 		JTF_IH_PUB_CUHK.get_interactionactcnt_pre(
3403 							p_outcome_id=>l_outcome_id,
3404 							p_result_id=>l_result_id,
3405 							p_reason_id=>l_reason_id,
3406 							p_script_id=>l_script_id,
3407 							p_media_id=>l_media_id,
3408 						     	x_data=>l_data,
3409 						     	x_count=>l_count,
3410 						     	x_return_code=>l_return_code);
3411 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3412 					RAISE FND_API.G_EXC_ERROR;
3413 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3414 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3415 				END IF;
3416 			END IF;
3417 
3418 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONACTIVITYCOUNT', 'B', 'V') THEN
3419 		JTF_IH_PUB_VUHK.get_interactionactcnt_pre(
3420 							p_outcome_id=>l_outcome_id,
3421 							p_result_id=>l_result_id,
3422 							p_reason_id=>l_reason_id,
3423 							p_script_id=>l_script_id,
3424 							p_media_id=>l_media_id,
3425 						     	x_data=>l_data,
3426 						     	x_count=>l_count,
3427 						     	x_return_code=>l_return_code);
3428 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3429 					RAISE FND_API.G_EXC_ERROR;
3430 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3431 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3432 				END IF;
3433 			END IF;
3434 
3435    	IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
3436               l_api_name, g_pkg_name) THEN
3437       		RAISE fnd_api.g_exc_unexpected_error;
3438 	END IF;
3439 
3440 	-- Initialize message list if p_init_msg_list is set to TRUE
3441 	IF fnd_api.to_boolean(p_init_msg_list) THEN
3442       		fnd_msg_pub.initialize;
3443 	END IF;
3444 
3445    	-- Initialize API return status to success
3446    	x_return_status := fnd_api.g_ret_sts_success;
3447 
3448    	--
3449    	-- Apply business-rule validation to all required and passed parameters
3450     --
3451     -- Validate user and login session IDs
3452     --
3453 		IF (p_user_id IS NULL) THEN
3454 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
3455 				RAISE fnd_api.g_exc_error;
3456 		ELSE
3457 			jtf_ih_core_util_pvt.validate_who_info
3458 			( p_api_name        => l_api_name_full,
3459 				p_parameter_name_usr    => 'p_user_id',
3460 				p_parameter_name_log    => 'p_login_id',
3461 				p_user_id         => p_user_id,
3462 				p_login_id        => p_login_id,
3463 				x_return_status   => l_return_status );
3464 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
3465 				RAISE fnd_api.g_exc_error;
3466 			END IF;
3467 		END IF;
3468 		--
3469 		-- There are 2**4 combinations for this search
3470 		--
3471 		-- Case one all parameters valid
3472 		--
3473 		IF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3474 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3475 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3476 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3477 
3478 			SELECT count(activity_id) into actionCount
3479 			FROM jtf_ih_Activities
3480 			where outcome_id = p_outcome_id
3481 			and  result_id = p_result_id
3482 			and reason_id = p_reason_id
3483 			and media_id = p_media_id
3484 			;
3485 			x_activity_count := actionCount;
3486 		ELSIF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3487 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3488 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3489 		    ((p_media_id IS NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3490 
3491 			SELECT count(activity_id) into actionCount
3492 			FROM jtf_ih_Activities
3493 			where outcome_id = p_outcome_id
3494 			and  result_id = p_result_id
3495 			and reason_id = p_reason_id
3496 			;
3497 			x_activity_count := actionCount;
3498 		ELSIF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3499 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3500 		    ((p_reason_id IS NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3501 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3502 
3503 			SELECT count(activity_id) into actionCount
3504 			FROM jtf_ih_Activities
3505 			where outcome_id = p_outcome_id
3506 			and  result_id = p_result_id
3507 			and media_id = p_media_id
3508 			;
3509 			x_activity_count := actionCount;
3510 		ELSIF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3511 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3512 		    ((p_reason_id IS NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3513 		    ((p_media_id IS NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3514 
3515 			SELECT count(*) into actionCount
3516 			FROM jtf_ih_Activities
3517 			where outcome_id = p_outcome_id
3518 			and  result_id = p_result_id
3519 			;
3520 			x_activity_count := actionCount;
3521 		ELSIF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3522 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3523 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3524 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3525 
3526 			SELECT count(*) into actionCount
3527 			FROM jtf_ih_Activities
3528 			where outcome_id = p_outcome_id
3529 			and reason_id = p_reason_id
3530 			and media_id = p_media_id
3531 			;
3532 			x_activity_count := actionCount;
3533 		ELSIF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3534 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3535 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3536 		    ((p_media_id IS  NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3537 
3538 			SELECT count(*) into actionCount
3539 			FROM jtf_ih_Activities
3540 			where outcome_id = p_outcome_id
3541 			and reason_id = p_reason_id
3542 			;
3543 			x_activity_count := actionCount;
3544 		ELSIF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3545 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3546 		    ((p_reason_id IS  NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3547 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3548 
3549 			SELECT count(*) into actionCount
3550 			FROM jtf_ih_Activities
3551 			where outcome_id = p_outcome_id
3552 			and media_id = p_media_id
3553 			;
3554 			x_activity_count := actionCount;
3555 		ELSIF (((p_outcome_id IS NOT NULL) OR (p_outcome_id <> fnd_api.g_miss_num)) AND
3556 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3557 		    ((p_reason_id IS  NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3558 		    ((p_media_id IS  NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3559 
3560 			SELECT count(*) into actionCount
3561 			FROM jtf_ih_Activities
3562 			where outcome_id = p_outcome_id
3563 			;
3564 			x_activity_count := actionCount;
3565 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3566 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3567 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3568 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3569 
3570 			SELECT count(*) into actionCount
3571 			FROM jtf_ih_Activities
3572 			where outcome_id = p_outcome_id
3573 			and  result_id = p_result_id
3574 			and reason_id = p_reason_id
3575 			and media_id = p_media_id
3576 			;
3577 			x_activity_count := actionCount;
3578 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3579 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3580 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3581 		    ((p_media_id IS NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3582 
3583 			SELECT count(*) into actionCount
3584 			FROM jtf_ih_Activities
3585 			where outcome_id = p_outcome_id
3586 			and  result_id = p_result_id
3587 			and reason_id = p_reason_id
3588 			;
3589 			x_activity_count := actionCount;
3590 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3591 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3592 		    ((p_reason_id IS NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3593 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3594 
3595 			SELECT count(*) into actionCount
3596 			FROM jtf_ih_Activities
3597 			where outcome_id = p_outcome_id
3598 			and  result_id = p_result_id
3599 			and media_id = p_media_id
3600 			;
3601 			x_activity_count := actionCount;
3602 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3603 		    ((p_result_id IS NOT NULL) OR (p_result_id <> fnd_api.g_miss_num)) AND
3604 		    ((p_reason_id IS NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3605 		    ((p_media_id IS NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3606 
3607 			SELECT count(*) into actionCount
3608 			FROM jtf_ih_Activities
3609 			where outcome_id = p_outcome_id
3610 			and  result_id = p_result_id
3611 			;
3612 			x_activity_count := actionCount;
3613 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3614 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3615 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3616 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3617 
3618 			SELECT count(*) into actionCount
3619 			FROM jtf_ih_Activities
3620 			where outcome_id = p_outcome_id
3621 			and reason_id = p_reason_id
3622 			and media_id = p_media_id
3623 			;
3624 			x_activity_count := actionCount;
3625 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3626 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3627 		    ((p_reason_id IS NOT NULL) OR (p_reason_id <> fnd_api.g_miss_num)) AND
3628 		    ((p_media_id IS  NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3629 
3630 			SELECT count(*) into actionCount
3631 			FROM jtf_ih_Activities
3632 			where outcome_id = p_outcome_id
3633 			and reason_id = p_reason_id
3634 			;
3635 			x_activity_count := actionCount;
3636 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3637 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3638 		    ((p_reason_id IS  NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3639 		    ((p_media_id IS NOT NULL) OR (p_media_id <> fnd_api.g_miss_num))) THEN
3640 
3641 			SELECT count(*) into actionCount
3642 			FROM jtf_ih_Activities
3643 			where outcome_id = p_outcome_id
3644 			and media_id = p_media_id
3645 			;
3646 			x_activity_count := actionCount;
3647 		ELSIF (((p_outcome_id IS  NULL) OR (p_outcome_id = fnd_api.g_miss_num)) AND
3648 		    ((p_result_id IS  NULL) OR (p_result_id = fnd_api.g_miss_num)) AND
3649 		    ((p_reason_id IS  NULL) OR (p_reason_id = fnd_api.g_miss_num)) AND
3650 		    ((p_media_id IS  NULL) OR (p_media_id = fnd_api.g_miss_num))) THEN
3651 
3652 			SELECT count(*) into actionCount
3653 			FROM jtf_ih_Activities
3654 			where outcome_id = p_outcome_id
3655 			;
3656 			x_activity_count := actionCount;
3657 		END IF;
3658 
3659 
3660 		-- Post processing Call
3661 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONACTIVITYCOUNT', 'B', 'V') THEN
3662 		JTF_IH_PUB_VUHK.get_interactionactcnt_post(
3663 							p_outcome_id=>l_outcome_id,
3664 							p_result_id=>l_result_id,
3665 							p_reason_id=>l_reason_id,
3666 							p_script_id=>l_script_id,
3667 							p_media_id=>l_media_id,
3668 						     	x_data=>l_data,
3669 						     	x_count=>l_count,
3670 						     	x_return_code=>l_return_code);
3671 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3672 					RAISE FND_API.G_EXC_ERROR;
3673 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3674 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3675 				END IF;
3676 			END IF;
3677 
3678 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONACTIVITYCOUNT', 'B', 'C') THEN
3679 		JTF_IH_PUB_CUHK.get_interactionactcnt_post(
3680 							p_outcome_id=>l_outcome_id,
3681 							p_result_id=>l_result_id,
3682 							p_reason_id=>l_reason_id,
3683 							p_script_id=>l_script_id,
3684 							p_media_id=>l_media_id,
3685 						     	x_data=>l_data,
3686 						     	x_count=>l_count,
3687 						     	x_return_code=>l_return_code);
3688 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3689 					RAISE FND_API.G_EXC_ERROR;
3690 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3691 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3692 				END IF;
3693 			END IF;
3694 
3695    -- Standard call to get message count and if count is 1, get message info
3696   fnd_msg_pub.count_and_get
3697      ( p_count  => x_msg_count,
3698        p_data   => x_msg_data );
3699   EXCEPTION
3700    WHEN fnd_api.g_exc_error THEN
3701       x_return_status := fnd_api.g_ret_sts_error;
3702       fnd_msg_pub.count_and_get
3703   ( p_count       => x_msg_count,
3704     p_data  => x_msg_data );
3705   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3706    WHEN fnd_api.g_exc_unexpected_error THEN
3707       x_return_status := fnd_api.g_ret_sts_unexp_error;
3708       fnd_msg_pub.count_and_get
3709   ( p_count       => x_msg_count,
3710     p_data  => x_msg_data );
3711   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3712    WHEN OTHERS THEN
3713       x_return_status := fnd_api.g_ret_sts_unexp_error;
3714       IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3715    fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
3716       END IF;
3717       fnd_msg_pub.count_and_get
3718   ( p_count       => x_msg_count,
3719     p_data  => x_msg_data );
3720   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3721 	END Get_InteractionActivityCount;
3722 
3723 --
3724 --	HISTORY
3725 --
3726 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
3727 --	------		----		--------------------------
3728 --
3729 --					INITIAL VERSION
3730 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
3731 --
3732 	PROCEDURE Get_InteractionCount
3733 	(
3734 	p_api_version		IN	NUMBER,
3735   p_init_msg_list		IN	VARCHAR2, --DEFAULT FND_API.G_FALSE,
3736   p_resp_appl_id		IN	NUMBER   DEFAULT NULL,
3737   p_resp_id			IN	NUMBER   DEFAULT NULL,
3738   p_user_id			IN	NUMBER,
3739   p_login_id			IN	NUMBER   DEFAULT NULL,
3740   x_return_status		OUT NOCOPY	VARCHAR2,
3741   x_msg_count			OUT NOCOPY	NUMBER,
3742   x_msg_data			OUT NOCOPY	VARCHAR2,
3743 	p_outcome_id   IN NUMBER,
3744 	p_result_id    IN NUMBER,
3745 	p_reason_id    IN NUMBER,
3746 	p_attribute1			IN	VARCHAR2 DEFAULT NULL,
3747   p_attribute2			IN	VARCHAR2 DEFAULT NULL,
3748   p_attribute3			IN	VARCHAR2 DEFAULT NULL,
3749   p_attribute4			IN	VARCHAR2 DEFAULT NULL,
3750   p_attribute5			IN	VARCHAR2 DEFAULT NULL,
3751   p_attribute6			IN	VARCHAR2 DEFAULT NULL,
3752   p_attribute7			IN	VARCHAR2 DEFAULT NULL,
3753   p_attribute8			IN	VARCHAR2 DEFAULT NULL,
3754   p_attribute9			IN	VARCHAR2 DEFAULT NULL,
3755   p_attribute10		IN	VARCHAR2 DEFAULT NULL,
3756   p_attribute11		IN	VARCHAR2 DEFAULT NULL,
3757   p_attribute12		IN	VARCHAR2 DEFAULT NULL,
3758   p_attribute13		IN	VARCHAR2 DEFAULT NULL,
3759   p_attribute14		IN	VARCHAR2 DEFAULT NULL,
3760   p_attribute15		IN	VARCHAR2 DEFAULT NULL,
3761   p_attribute_category  IN      VARCHAR2 DEFAULT NULL,
3762   x_interaction_count OUT NOCOPY NUMBER
3763 	) AS
3764 	l_api_name   	CONSTANT VARCHAR2(30) := 'Get_InteractionCount';
3765 	l_api_version      	CONSTANT NUMBER       := 1.1;
3766 	l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
3767 	l_return_status    	VARCHAR2(1);
3768 	interactionCount 	NUMBER;
3769 	l_return_code		VARCHAR2(1);
3770 	l_data			VARCHAR2(2000);
3771 	l_count			NUMBER;
3772 	l_outcome_id 		NUMBER;
3773 	l_result_id 		NUMBER;
3774 	l_reason_id 		NUMBER;
3775 
3776 	BEGIN
3777 	-- Preprocessing Call
3778 	l_outcome_id := p_outcome_id;
3779 	l_result_id := p_result_id;
3780 	l_reason_id := p_reason_id;
3781 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONCOUNT', 'B', 'C') THEN
3782 		JTF_IH_PUB_CUHK.get_interactioncount_pre(
3783 							p_outcome_id=>l_outcome_id,
3784 							p_result_id=>l_result_id,
3785 							p_reason_id=>l_reason_id,
3786 						     	x_data=>l_data,
3787 						     	x_count=>l_count,
3788 						     	x_return_code=>l_return_code);
3789 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3790 					RAISE FND_API.G_EXC_ERROR;
3791 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3792 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3793 				END IF;
3794 			END IF;
3795 
3796 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONCOUNT', 'B', 'V') THEN
3797 		JTF_IH_PUB_VUHK.get_interactioncount_pre(
3798 							p_outcome_id=>l_outcome_id,
3799 							p_result_id=>l_result_id,
3800 							p_reason_id=>l_reason_id,
3801 						     	x_data=>l_data,
3802 						     	x_count=>l_count,
3803 						     	x_return_code=>l_return_code);
3804 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3805 					RAISE FND_API.G_EXC_ERROR;
3806 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3807 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3808 				END IF;
3809 			END IF;
3810 
3811 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
3812               l_api_name, g_pkg_name) THEN
3813       RAISE fnd_api.g_exc_unexpected_error;
3814 		END IF;
3815 
3816 		-- Initialize message list if p_init_msg_list is set to TRUE
3817 		IF fnd_api.to_boolean(p_init_msg_list) THEN
3818       fnd_msg_pub.initialize;
3819 		END IF;
3820 
3821    	-- Initialize API return status to success
3822    	x_return_status := fnd_api.g_ret_sts_success;
3823 
3824    	--
3825    	-- Apply business-rule validation to all required and passed parameters
3826     --
3827     -- Validate user and login session IDs
3828     --
3829 		IF (p_user_id IS NULL) THEN
3830 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
3831 				RAISE fnd_api.g_exc_error;
3832 		ELSE
3833 			jtf_ih_core_util_pvt.validate_who_info
3834 			( p_api_name        => l_api_name_full,
3835 				p_parameter_name_usr    => 'p_user_id',
3836 				p_parameter_name_log    => 'p_login_id',
3837 				p_user_id         => p_user_id,
3838 				p_login_id        => p_login_id,
3839 				x_return_status   => l_return_status );
3840 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
3841 				RAISE fnd_api.g_exc_error;
3842 			END IF;
3843 		END IF;
3844 
3845 		SELECT count(*) into interactionCount
3846 		FROM jtf_ih_Interactions
3847 		where outcome_id = p_outcome_id
3848 		and result_id = p_result_id
3849 		and reason_id = p_reason_id
3850 	--	and (attribute1 = p_attribute1) -- or (p_attribute1 is NULL and attribute1 is NULL))
3851 	--	and (attribute2 = p_attribute2) -- or (p_attribute2 is NULL and attribute2 is NULL))
3852 	--	and (attribute3 = p_attribute3) -- or (p_attribute3 is NULL and attribute3 is NULL))
3853 	--	and (attribute4 = p_attribute4) -- or (p_attribute4 is NULL and attribute4 is NULL))
3854 	--	and (attribute5 = p_attribute5) -- or (p_attribute5 is NULL and attribute5 is NULL))
3855 	--	and (attribute6 = p_attribute6) -- or (p_attribute6 is NULL and attribute6 is NULL))
3856 --		and (attribute7 = p_attribute7) -- or (p_attribute7 is NULL and attribute7 is NULL))
3857 --		and (attribute8 = p_attribute8) -- or (p_attribute8 is NULL and attribute8 is NULL))
3858 --		and (attribute9 = p_attribute9) -- or (p_attribute9 is NULL and attribute9 is NULL))
3859 --		and (attribute10 = p_attribute10) -- or (p_attribute10 is NULL and attribute10 is NULL))
3860 --		and (attribute11 = p_attribute11) -- or (p_attribute11 is NULL and attribute11 is NULL))
3861 --		and (attribute12 = p_attribute12) -- or (p_attribute12 is NULL and attribute12 is NULL))
3862 --		and (attribute13 = p_attribute13) -- or (p_attribute13 is NULL and attribute13 is NULL))
3863 --		and (attribute14 = p_attribute14) -- or (p_attribute14 is NULL and attribute14 is NULL))
3864 --		and (attribute15 = p_attribute15) -- or (p_attribute15 is NULL and attribute15 is NULL))
3865 --		and (p_attribute_category = p_attribute_category) -- or (p_attribute_category is NULL and p_attribute_category is NULL))
3866 		;
3867 		x_interaction_count := interactionCount;
3868 	-- Post processing Call
3869 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONCOUNT', 'B', 'V') THEN
3870 		JTF_IH_PUB_VUHK.get_interactioncount_post(
3871 							p_outcome_id=>l_outcome_id,
3872 							p_result_id=>l_result_id,
3873 							p_reason_id=>l_reason_id,
3874 						     	x_data=>l_data,
3875 						     	x_count=>l_count,
3876 						     	x_return_code=>l_return_code);
3877 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3878 					RAISE FND_API.G_EXC_ERROR;
3879 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3880 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3881 				END IF;
3882 			END IF;
3883 
3884 	IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'GET_INTERACTIONCOUNT', 'B', 'C') THEN
3885 		JTF_IH_PUB_CUHK.get_interactioncount_post(
3886 							p_outcome_id=>l_outcome_id,
3887 							p_result_id=>l_result_id,
3888 							p_reason_id=>l_reason_id,
3889 						     	x_data=>l_data,
3890 						     	x_count=>l_count,
3891 						     	x_return_code=>l_return_code);
3892 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3893 					RAISE FND_API.G_EXC_ERROR;
3894 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3895 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3896 				END IF;
3897 			END IF;
3898 
3899    -- Standard call to get message count and if count is 1, get message info
3900   fnd_msg_pub.count_and_get
3901      ( p_count  => x_msg_count,
3902        p_data   => x_msg_data );
3903   EXCEPTION
3904    WHEN fnd_api.g_exc_error THEN
3905       x_return_status := fnd_api.g_ret_sts_error;
3906       fnd_msg_pub.count_and_get
3907   ( p_count       => x_msg_count,
3908     p_data  => x_msg_data );
3909   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3910    WHEN fnd_api.g_exc_unexpected_error THEN
3911       x_return_status := fnd_api.g_ret_sts_unexp_error;
3912       fnd_msg_pub.count_and_get
3913   ( p_count       => x_msg_count,
3914     p_data  => x_msg_data );
3915   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3916    WHEN OTHERS THEN
3917       x_return_status := fnd_api.g_ret_sts_unexp_error;
3918       IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3919    fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
3920       END IF;
3921       fnd_msg_pub.count_and_get
3922   ( p_count       => x_msg_count,
3923     p_data  => x_msg_data );
3924   x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
3925 	END Get_InteractionCount;
3926 --
3927 --	HISTORY
3928 --
3929 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
3930 --	------		----		--------------------------
3931 --
3932 --	Jean Zhu	11-JAN-2000	INITIAL VERSION
3933 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
3934 --	James Baldo Jr.	02-MAY-2000	Fix for Start_Date_Time and End_Date_Time bugdb # 1286036
3935 --	James Baldo Jr. 27-JUL-2000	Fix for Start_Date_Time initialization when G_MISS_DATE
3936 --					for bugdb # 1339916.
3937 --  Igor Aleshin    12-MAY-2001  Added request for the column Script_Trans_ID in the JTF_IH_ACTIVITIES.
3938 --  Igor Aleshin    21-DEC-2001 Fix for bugdb - 2153913 - PREVENT G_MISS_DATE VALUE FROM BEING
3939 --            WRITTEN TO THE END_DATE_TIME VALUE.
3940 --  Igor Aleshin    18-APR-2001 Fix for bugdb 2323210 - 1157.6RI:API
3941 --            ERR:JTF_IH_PUB.CLOSE_INTERACTION:WHEN DISAGREE WITH OKC IN IBE
3942 --  Igor Aleshin    24-FEB-2003 Fixed bug# 2817083 - Error loggin interactions
3943 --  Igor Aleshin    18-JUN-2003 Enh# 1846960 - REQUIRE CONTACT NAME OF ORGANISATION IN INTERACTION HISTORY
3944 --
3945 --
3946 
3947  PROCEDURE Open_Interaction
3948 (
3949 	p_api_version			IN	NUMBER,
3950 	p_init_msg_list			IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
3951 	p_commit			IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
3952 	p_resp_appl_id			IN	NUMBER 	 DEFAULT NULL,
3953 	p_resp_id			IN	NUMBER DEFAULT NULL,
3954 	p_user_id			IN	NUMBER,
3955 	p_login_id			IN	NUMBER DEFAULT NULL,
3956 	x_return_status			OUT NOCOPY	VARCHAR2,
3957 	x_msg_count			OUT NOCOPY	NUMBER,
3958 	x_msg_data			OUT NOCOPY	VARCHAR2,
3959 	p_interaction_rec		IN	INTERACTION_REC_TYPE,
3960 	x_interaction_id		OUT NOCOPY	NUMBER
3961 )
3962 AS
3963 		l_api_name   		CONSTANT VARCHAR2(30) := 'Open_Interaction';
3964 		l_api_version      		CONSTANT NUMBER       := 1.0;
3965 		l_api_name_full    		CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
3966 		l_return_status    		VARCHAR2(1);
3967 		--l_interaction_id		NUMBER;
3968 		--l_start_date_time		DATE;
3969   -- 20153913
3970 		--l_end_date_time		    DATE;
3971 		l_active			VARCHAR2(1);
3972 		--l_duration			NUMBER := NULL;
3973 		--l_productive_time_amount	NUMBER := NULL;
3974 		l_test_msg			VARCHAR2(1996);
3975 		l_return_code			VARCHAR2(1);
3976 		l_data				VARCHAR2(2000);
3977 		l_count				NUMBER;
3978 		l_interaction_rec		INTERACTION_REC_TYPE;
3979 		BEGIN
3980                         -- local variables initialization to remove GSCC warnings
3981                         l_active := 'Y';
3982 
3983 			-- Standard start of API savepoint
3984 			SAVEPOINT open_interaction_pub;
3985 
3986 			-- Preprocessing Call
3987 			l_interaction_rec := p_interaction_rec;
3988 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_INTERACTION', 'B', 'C') THEN
3989 				JTF_IH_PUB_CUHK.open_interaction_pre(p_interaction_rec=>l_interaction_rec,
3990 						     x_data=>l_data,
3991 						     x_count=>l_count,
3992 						     x_return_code=>l_return_code);
3993 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
3994 					RAISE FND_API.G_EXC_ERROR;
3995 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
3996 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3997 				END IF;
3998 			END IF;
3999 
4000 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_INTERACTION', 'B', 'V') THEN
4001 				JTF_IH_PUB_VUHK.open_interaction_pre(p_interaction_rec=>l_interaction_rec,
4002 						     x_data=>l_data,
4003 						     x_count=>l_count,
4004 						     x_return_code=>l_return_code);
4005 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
4006 					RAISE FND_API.G_EXC_ERROR;
4007 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4008 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4009 				END IF;
4010 			END IF;
4011 
4012 
4013 		-- Standard call to check for call compatibility
4014 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
4015               l_api_name, g_pkg_name) THEN
4016 		x_return_status := fnd_api.g_ret_sts_error;
4017 		jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full,
4018 			to_char(p_interaction_rec.interaction_id),'fnd_api.compatible_api_call');
4019 
4020 		RAISE fnd_api.g_exc_unexpected_error;
4021 		END IF;
4022 		--l_test_msg := '1';
4023 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Open_Interaction');
4024 
4025 		-- Initialize message list if p_init_msg_list is set to TRUE
4026 		IF fnd_api.to_boolean(p_init_msg_list) THEN
4027 		fnd_msg_pub.initialize;
4028 		END IF;
4029 
4030    		-- Initialize API return status to success
4031    		x_return_status := fnd_api.g_ret_sts_success;
4032 
4033    		--
4034 		-- Apply business-rule validation to all required and passed parameters
4035 		--
4036 		-- Validate user and login session IDs
4037 		--
4038 		IF (p_user_id IS NULL) THEN
4039 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
4040 				RAISE fnd_api.g_exc_error;
4041 		ELSE
4042 			jtf_ih_core_util_pvt.validate_who_info
4043 			( p_api_name        => l_api_name_full,
4044 				p_parameter_name_usr    => 'p_user_id',
4045 				p_parameter_name_log    => 'p_login_id',
4046 				p_user_id         => p_user_id,
4047 				p_login_id        => p_login_id,
4048 				x_return_status   => l_return_status );
4049 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
4050 				RAISE fnd_api.g_exc_error;
4051 			END IF;
4052 		END IF;
4053 
4054 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Open_Interaction');
4055 
4056 		--
4057 		-- Validate all non-missing attributes by calling the utility procedure.
4058 		--
4059 		Validate_Interaction_Record
4060 		(	p_api_name      => l_api_name_full,
4061 			--p_int_val_rec   => p_interaction_rec,
4062 			p_int_val_rec   => l_interaction_rec,
4063 			p_resp_appl_id  => p_resp_appl_id,
4064 			p_resp_id       => p_resp_id,
4065 			x_return_status       => l_return_status
4066 		);
4067 
4068 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
4069 			RAISE fnd_api.g_exc_error;
4070 		END IF;
4071 
4072 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_Interaction_Record in JTF_IH_PUB.Open_Interaction');
4073 		-- assign the end_date_time
4074 		IF (p_interaction_rec.end_date_time <> fnd_api.g_miss_date) AND (p_interaction_rec.end_date_time IS NOT NULL) THEN
4075 			  --l_end_date_time := p_interaction_rec.end_date_time;
4076 			  l_interaction_rec.end_date_time := p_interaction_rec.end_date_time;
4077                 ELSE
4078                           --l_end_date_time := NULL;
4079                           l_interaction_rec.end_date_time := NULL;
4080 		END IF;
4081 
4082 		-- assign the start_date_time
4083 		IF((p_interaction_rec.start_date_time IS NOT NULL) AND (p_interaction_rec.start_date_time <> fnd_api.g_miss_date))THEN
4084 			--l_start_date_time := p_interaction_rec.start_date_time;
4085 			l_interaction_rec.start_date_time := p_interaction_rec.start_date_time;
4086 		ELSE
4087 			--l_start_date_time := SYSDATE;
4088 			l_interaction_rec.start_date_time := SYSDATE;
4089 		END IF;
4090 
4091 		Validate_StartEnd_Date
4092 			(	p_api_name    => l_api_name_full,
4093 				--p_start_date_time   => l_start_date_time,
4094 				p_start_date_time   => l_interaction_rec.start_date_time,
4095 				--p_end_date_time		=> l_end_date_time,
4096 				p_end_date_time	    => l_interaction_rec.end_date_time,
4097 				x_return_status     => l_return_status
4098 			);
4099 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
4100 				RAISE fnd_api.g_exc_error;
4101 			END IF;
4102 
4103   IF (p_interaction_rec.duration <> fnd_api.g_miss_num) AND (p_interaction_rec.duration IS NOT NULL) THEN
4104 			--l_duration := p_interaction_rec.duration;
4105 			l_interaction_rec.duration := p_interaction_rec.duration;
4106   ELSIF l_interaction_rec.end_date_time IS NULL THEN
4107       --l_duration := 0;
4108       l_interaction_rec.duration := 0;
4109   ELSE
4110 			--l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
4111 			l_interaction_rec.duration := ROUND((l_interaction_rec.end_date_time - l_interaction_rec.start_date_time)*24*60*60);
4112 		END IF;
4113 
4114 		-- assign the productive_time_amount
4115 		IF(p_interaction_rec.productive_time_amount IS NOT NULL)
4116       AND (p_interaction_rec.productive_time_amount <> fnd_api.g_miss_num) THEN
4117 			--l_productive_time_amount := p_interaction_rec.productive_time_amount;
4118 			l_interaction_rec.productive_time_amount := p_interaction_rec.productive_time_amount;
4119 		ELSIF(l_interaction_rec.duration IS NOT NULL) THEN
4120 			IF(p_interaction_rec.non_productive_time_amount IS NOT NULL)
4121       -- Bug# 2153913
4122     AND (p_interaction_rec.non_productive_time_amount <> fnd_api.g_miss_num) THEN
4123 				--l_productive_time_amount := l_duration - p_interaction_rec.non_productive_time_amount;
4124 				l_interaction_rec.productive_time_amount := l_interaction_rec.duration - p_interaction_rec.non_productive_time_amount;
4125 				IF(l_interaction_rec.productive_time_amount < 0) THEN
4126 					x_return_status := fnd_api.g_ret_sts_error;
4127 					jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full,
4128 						to_char(p_interaction_rec.non_productive_time_amount),'non_productive_time_amount');
4129       -- # 1937894
4130 			       fnd_msg_pub.count_and_get
4131 				      (   p_count       => x_msg_count,
4132 				    p_data  => x_msg_data );
4133        x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
4134 					RETURN;
4135 				END IF;
4136 			ELSE
4137 				--l_productive_time_amount := l_duration;
4138 				l_interaction_rec.productive_time_amount := l_interaction_rec.duration;
4139 			END IF;
4140 		END IF;
4141 		--l_test_msg := '5';
4142 
4143 		--SELECT JTF_IH_INTERACTIONS_S1.NextVal into l_interaction_id FROM dual;
4144 		--l_test_msg := '6';
4145 
4146   -- Bug# 2817083
4147   --l_interaction_id := Get_Interaction_ID(NULL);
4148   l_interaction_rec.interaction_id := Get_Interaction_ID(NULL);
4149 
4150     -- 08/26/03 mpetrosi B3102306
4151     -- added cross check of source_code, source_code_id
4152     validate_source_code(l_api_name_full, l_interaction_rec.source_code_id,
4153                          l_interaction_rec.source_code, x_return_status);
4154 		IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
4155 			RAISE fnd_api.g_exc_error;
4156 		END IF;
4157 
4158 		INSERT INTO jtf_ih_interactions
4159 		(
4160 			 CREATED_BY,
4161 			 REFERENCE_FORM,
4162 			 CREATION_DATE,
4163 			 LAST_UPDATED_BY,
4164 			 DURATION,
4165 			 LAST_UPDATE_DATE,
4166 			 LAST_UPDATE_LOGIN,
4167 			 END_DATE_TIME,
4168 			 FOLLOW_UP_ACTION,
4169 			 NON_PRODUCTIVE_TIME_AMOUNT,
4170 			 RESULT_ID,
4171 			 REASON_ID,
4172 			 START_DATE_TIME,
4173 			 OUTCOME_ID,
4174 			 PREVIEW_TIME_AMOUNT,
4175 			 PRODUCTIVE_TIME_AMOUNT,
4176 			 HANDLER_ID,
4177 			 INTER_INTERACTION_DURATION,
4178 			 INTERACTION_ID,
4179 			 WRAP_UP_TIME_AMOUNT,
4180 			 SCRIPT_ID,
4181 			 PARTY_ID,
4182 			 RESOURCE_ID,
4183 			 OBJECT_ID,
4184        		 OBJECT_TYPE,
4185        		 SOURCE_CODE_ID,
4186        		 SOURCE_CODE,
4187 			 ATTRIBUTE1,
4188 			 ATTRIBUTE2,
4189 			 ATTRIBUTE3,
4190 			 ATTRIBUTE4,
4191 			 ATTRIBUTE5,
4192 			 ATTRIBUTE6,
4193 			 ATTRIBUTE7,
4194 			 ATTRIBUTE8,
4195 			 ATTRIBUTE9,
4196 			 ATTRIBUTE10,
4197 			 ATTRIBUTE11,
4198 			 ATTRIBUTE12,
4199 			 ATTRIBUTE13,
4200 			 ATTRIBUTE14,
4201 			 ATTRIBUTE15,
4202 			 ATTRIBUTE_CATEGORY,
4203 			 ACTIVE,
4204 			 TOUCHPOINT1_TYPE,
4205 			 TOUCHPOINT2_TYPE,
4206        METHOD_CODE,
4207        PRIMARY_PARTY_ID,
4208        CONTACT_REL_PARTY_ID,
4209        CONTACT_PARTY_ID
4210 			)
4211 			VALUES
4212 			(
4213 			 p_user_id,
4214 			 decode(p_interaction_rec.reference_form, fnd_api.g_miss_char, null, p_interaction_rec.reference_form),
4215 			 Sysdate,
4216 			 p_user_id,
4217 			 --l_duration,
4218 			 l_interaction_rec.duration,
4219 			 Sysdate,
4220 			 p_login_id,
4221 			 --l_end_date_time,
4222 			 l_interaction_rec.end_date_time,
4223 			 decode( p_interaction_rec.follow_up_action, fnd_api.g_miss_char, null, p_interaction_rec.follow_up_action),
4224 			 decode( p_interaction_rec.non_productive_time_amount, fnd_api.g_miss_num, null, p_interaction_rec.non_productive_time_amount),
4225 			 decode( p_interaction_rec.result_id, fnd_api.g_miss_num, null, p_interaction_rec.result_id),
4226 			 decode( p_interaction_rec.reason_id, fnd_api.g_miss_num, null, p_interaction_rec.reason_id),
4227 			 --l_start_date_time,
4228 			 l_interaction_rec.start_date_time,
4229 			 decode( p_interaction_rec.outcome_id, fnd_api.g_miss_num, null, p_interaction_rec.outcome_id),
4230 			 decode( p_interaction_rec.preview_time_amount, fnd_api.g_miss_num, null, p_interaction_rec.preview_time_amount),
4231 			 --decode(l_productive_time_amount, fnd_api.g_miss_num, null, l_productive_time_amount),
4232 			 decode(l_interaction_rec.productive_time_amount, fnd_api.g_miss_num, null, l_interaction_rec.productive_time_amount),
4233 			 p_interaction_rec.handler_id,
4234 			 decode( p_interaction_rec.inter_interaction_duration, fnd_api.g_miss_num, null, p_interaction_rec.inter_interaction_duration),
4235 			 --l_interaction_id,
4236 			 l_interaction_rec.interaction_id,
4237 			 decode( p_interaction_rec.wrapup_time_amount, fnd_api.g_miss_num, null, p_interaction_rec.wrapup_time_amount),
4238 			 decode( p_interaction_rec.script_id, fnd_api.g_miss_num, null, p_interaction_rec.script_id),
4239 			 p_interaction_rec.party_id,
4240 			 p_interaction_rec.resource_id,
4241 			 decode( p_interaction_rec.object_id, fnd_api.g_miss_num, null, p_interaction_rec.object_id),
4242 			 decode( p_interaction_rec.object_type, fnd_api.g_miss_char, null, p_interaction_rec.object_type),
4243 			 decode( l_interaction_rec.source_code_id, fnd_api.g_miss_num, null, l_interaction_rec.source_code_id),
4244 			 decode( l_interaction_rec.source_code, fnd_api.g_miss_char, null, l_interaction_rec.source_code),
4245 			 decode( p_interaction_rec.attribute1, fnd_api.g_miss_char, null, p_interaction_rec.attribute1),
4246 			 decode( p_interaction_rec.attribute2, fnd_api.g_miss_char, null, p_interaction_rec.attribute2),
4247 			 decode( p_interaction_rec.attribute3, fnd_api.g_miss_char, null, p_interaction_rec.attribute3),
4248 			 decode( p_interaction_rec.attribute4, fnd_api.g_miss_char, null, p_interaction_rec.attribute4),
4249 			 decode( p_interaction_rec.attribute5, fnd_api.g_miss_char, null, p_interaction_rec.attribute5),
4250 			 decode( p_interaction_rec.attribute6, fnd_api.g_miss_char, null, p_interaction_rec.attribute6),
4251 			 decode( p_interaction_rec.attribute7, fnd_api.g_miss_char, null, p_interaction_rec.attribute7),
4252 			 decode( p_interaction_rec.attribute8, fnd_api.g_miss_char, null, p_interaction_rec.attribute8),
4253 			 decode( p_interaction_rec.attribute9, fnd_api.g_miss_char, null, p_interaction_rec.attribute9),
4254 			 decode( p_interaction_rec.attribute10, fnd_api.g_miss_char, null, p_interaction_rec.attribute10),
4255 			 decode( p_interaction_rec.attribute11, fnd_api.g_miss_char, null, p_interaction_rec.attribute11),
4256 			 decode( p_interaction_rec.attribute12, fnd_api.g_miss_char, null, p_interaction_rec.attribute12),
4257 			 decode( p_interaction_rec.attribute13, fnd_api.g_miss_char, null, p_interaction_rec.attribute13),
4258 			 decode( p_interaction_rec.attribute14, fnd_api.g_miss_char, null, p_interaction_rec.attribute14),
4259 			 decode( p_interaction_rec.attribute15, fnd_api.g_miss_char, null, p_interaction_rec.attribute15),
4260 			 decode( p_interaction_rec.attribute_category, fnd_api.g_miss_char, null, p_interaction_rec.attribute_category),
4261 			 l_active,
4262        decode( p_interaction_rec.touchpoint1_type, fnd_api.g_miss_char, null, p_interaction_rec.touchpoint1_type),
4263        decode( p_interaction_rec.touchpoint2_type, fnd_api.g_miss_char, null, p_interaction_rec.touchpoint2_type),
4264        decode( p_interaction_rec.method_code, fnd_api.g_miss_char, null, p_interaction_rec.method_code),
4265        decode( l_interaction_rec.primary_party_id, fnd_api.g_miss_num, null, l_interaction_rec.primary_party_id),
4266        decode( l_interaction_rec.contact_rel_party_id, fnd_api.g_miss_num, null, l_interaction_rec.contact_rel_party_id),
4267        decode( l_interaction_rec.contact_party_id, fnd_api.g_miss_num, null, l_interaction_rec.contact_party_id)
4268 			);
4269 			--l_test_msg := '7';
4270 		-- DBMS_OUTPUT.PUT_LINE('PAST INSERT INTO jtf_ih_Interactions in JTF_IH_PUB.Open_Interaction');
4271 
4272 
4273      	IF ((p_interaction_rec.parent_id IS NOT NULL) AND (p_interaction_rec.parent_id  <> fnd_api.g_miss_num))	THEN
4274 				INSERT INTO jtf_ih_interaction_inters
4275 				(
4276 					 INTERACT_INTERACTION_ID,
4277 					 INTERACT_INTERACTION_IDRELATES,
4278 					 CREATED_BY,
4279 					 CREATION_DATE,
4280  					 LAST_UPDATED_BY,
4281 					 LAST_UPDATE_DATE,
4282 					 LAST_UPDATE_LOGIN
4283 				)
4284 				VALUES
4285 				(
4286 					--l_interaction_id,
4287 					l_interaction_rec.interaction_id,
4288 					p_interaction_rec.parent_id,
4289 					p_user_id,
4290 					Sysdate,
4291 					p_user_id,
4292 					Sysdate,
4293 					p_user_id
4294  				);
4295 		END IF;
4296 		--l_test_msg := '8';
4297 		-- DBMS_OUTPUT.PUT_LINE('PAST INSERT INTO jtf_ih_Interaction_inters in JTF_IH_PUB.Open_Interaction');
4298 		--
4299 		-- Set OUT value
4300 		--
4301 		--x_interaction_id := l_interaction_id;
4302 		x_interaction_id := l_interaction_rec.interaction_id;
4303 
4304 			-- Post processing Call
4305 
4306 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_INTERACTION', 'A', 'V') THEN
4307 				JTF_IH_PUB_VUHK.open_interaction_post(p_interaction_rec=>l_interaction_rec,
4308 						     x_data=>l_data,
4309 						     x_count=>l_count,
4310 						     x_return_code=>l_return_code);
4311 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
4312 					RAISE FND_API.G_EXC_ERROR;
4313 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4314 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4315 				END IF;
4316 			END IF;
4317 
4318 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_INTERACTION', 'A', 'C') THEN
4319 				JTF_IH_PUB_CUHK.open_interaction_post(p_interaction_rec=>l_interaction_rec,
4320 						     x_data=>l_data,
4321 						     x_count=>l_count,
4322 						     x_return_code=>l_return_code);
4323 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
4324 					RAISE FND_API.G_EXC_ERROR;
4325 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4326 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4327 				END IF;
4328 			END IF;
4329 
4330 		-- Standard check of p_commit
4331 		IF fnd_api.to_boolean(p_commit) THEN
4332 			COMMIT WORK;
4333 		END IF;
4334 
4335 		-- Standard call to get message count and if count is 1, get message info
4336 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
4337 		EXCEPTION
4338 		WHEN fnd_api.g_exc_error THEN
4339 			ROLLBACK TO open_interaction_pub;
4340 			x_return_status := fnd_api.g_ret_sts_error;
4341 			fnd_msg_pub.count_and_get
4342 				( p_count       => x_msg_count,
4343 				p_data  => x_msg_data );
4344       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
4345 		WHEN fnd_api.g_exc_unexpected_error THEN
4346 			ROLLBACK TO open_interaction_pub;
4347 			x_return_status := fnd_api.g_ret_sts_unexp_error;
4348 			fnd_msg_pub.count_and_get
4349 				( p_count       => x_msg_count,
4350 				p_data  => x_msg_data );
4351       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
4352 		WHEN OTHERS THEN
4353 			ROLLBACK TO open_interaction_pub;
4354 			x_return_status := fnd_api.g_ret_sts_unexp_error;
4355 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
4356 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
4357 			END IF;
4358 			fnd_msg_pub.count_and_get
4359 				( p_count       => x_msg_count,
4360 				p_data  => x_msg_data );
4361       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
4362 	END Open_Interaction;
4363 
4364 --
4365 --
4366 -- History
4367 -- -------
4368 --		Author			Date		Description
4369 --		------			----		-----------
4370 --		Jean Zhu		01/11/2000	Initial build
4371 --		James Baldo Jr.		04/11/2000	Fix bug for updating parameters based on G_MISS types
4372 --		James Baldo Jr.		25-APR-2000	User Hooks Customer and Vertical Industry
4373 --		James Baldo Jr.		03-MAY-2000	Fix for bugdb 1286036
4374 --		James Baldo Jr.		05-MAY-2000	Fix start_date_time = sysdate and end_date_time = null bug
4375 --		James Baldo Jr.		06-MAR-2001	Fix touchpoint2_type update issue. Based on bugdb # 1674610
4376 --		James Baldo Jr.		08-MAR-2001	Fix performance issue for multiple updates. Based on bugdb # 1676866
4377 --		and Mike Petrosino
4378 --      Igor Aleshin  18-DEC-2001 Fix for bugdb 2153913
4379 --      Igor Aleshin  20-DEC-2001 Fix for bugdb 2012159 - JTF_IH_PUB.UPDATE_INTERACTION MISSING
4380 --              CODE FOR OBJECT_VERSION_NUMBER PARAMETER.
4381 --      Igor Aleshin  20-MAY-2002 Modyfied duration calculation
4382 --      Igor Aleshin  06-17-2002  Fix for bugdb 2418028 - Close Interaction gives incorrect error
4383 --      Igor Aleshin  06-17-2002  Fix for bugdb 2418345 - Update_Interaction incorrectly
4384 --              handling updates for parent-child interactions
4385 --      Igor Aleshin  11-SEP-2002 Fixed duration overwrite issue
4386 --  	Igor Aleshin  18-JUN-2003 Enh# 1846960 - REQUIRE CONTACT NAME OF ORGANISATION IN INTERACTION HISTORY
4387 --      Igor Aleshin  29-AUG-2003 Bug#3117798 - BR1159: UPDATING SOURCE CODE IN INTERACTIONS GIVES API ERROR.
4388 --
4389 
4390 PROCEDURE Update_Interaction
4391 (
4392 	p_api_version		IN	NUMBER,
4393 	p_init_msg_list		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
4394 	p_commit		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
4395 	p_resp_appl_id		IN	NUMBER	DEFAULT NULL,
4396 	p_resp_id		IN	NUMBER	DEFAULT NULL,
4397 	p_user_id		IN	NUMBER,
4398 	p_login_id		IN	NUMBER	DEFAULT NULL,
4399 	x_return_status		OUT NOCOPY	VARCHAR2,
4400 	x_msg_count		OUT NOCOPY	NUMBER,
4401 	x_msg_data		OUT NOCOPY	VARCHAR2,
4402 	p_interaction_rec	IN	interaction_rec_type,
4403     -- Bug# 2012159
4404     p_object_version IN NUMBER DEFAULT NULL
4405 )
4406 AS
4407 		l_api_name   		CONSTANT VARCHAR2(30) := 'Update_Interaction';
4408 		l_api_version      		CONSTANT NUMBER       := 1.1;
4409 		l_api_name_full    		CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
4410 		l_return_status    		VARCHAR2(1);
4411 		l_count				NUMBER;
4412 		l_int_rec			interaction_rec_type;
4413 		l_return_code			VARCHAR2(1);
4414 		l_data				VARCHAR2(2000);
4415 		l_count_hk			NUMBER;
4416 		--l_interaction_rec_hk		INTERACTION_REC_TYPE;
4417 		l_touchpoint1_type		VARCHAR2(30);
4418 		l_touchpoint2_type		VARCHAR2(30);
4419 		l_inter_interaction_duration	NUMBER;
4420 		l_reference_form		VARCHAR2(1000);
4421 		l_follow_up_action		VARCHAR2(80);
4422 		l_non_productive_time_amount	NUMBER;
4423 		l_wrapUp_time_amount		NUMBER;
4424 		l_script_id			NUMBER;
4425 		l_result_id			NUMBER;
4426 		l_reason_id			NUMBER;
4427 		l_object_id			NUMBER;
4428 		l_object_type			VARCHAR2(30);
4429 		l_source_code_id		NUMBER;
4430 		l_source_code			VARCHAR2(100);
4431 		l_parent_id			NUMBER;
4432 		l_attribute1			VARCHAR2(150);
4433 		l_attribute2			VARCHAR2(150);
4434 		l_attribute3			VARCHAR2(150);
4435 		l_attribute4			VARCHAR2(150);
4436 		l_attribute5			VARCHAR2(150);
4437 		l_attribute6			VARCHAR2(150);
4438 		l_attribute7			VARCHAR2(150);
4439 		l_attribute8			VARCHAR2(150);
4440 		l_attribute9			VARCHAR2(150);
4441 		l_attribute10			VARCHAR2(150);
4442 		l_attribute11			VARCHAR2(150);
4443 		l_attribute12			VARCHAR2(150);
4444 		l_attribute13			VARCHAR2(150);
4445 		l_attribute14			VARCHAR2(150);
4446 		l_attribute15			VARCHAR2(150);
4447 		l_attribute_category		VARCHAR2(30);
4448 		l_method_code		   VARCHAR2(30);
4449   l_object_version NUMBER;
4450   l_recalc_duration BOOLEAN;
4451   l_primary_party_id NUMBER;
4452   l_contact_rel_party_id NUMBER;
4453   l_contact_party_id NUMBER;
4454   l_profile_id       VARCHAR2(20);  --profile option id check to update closed interaction
4455 	CURSOR c_Interaction_csr IS
4456 		SELECT *
4457 		FROM 	JTF_IH_INTERACTIONS
4458 		WHERE 	interaction_id = p_interaction_rec.interaction_id
4459 		FOR UPDATE;
4460 	l_Interaction_rec	c_Interaction_csr%ROWTYPE;
4461 
4462 	BEGIN
4463                 -- local variables initialization to remove GSCC warning
4464                 l_int_rec := p_interaction_rec;
4465 
4466 		-- Standard start of API savepoint
4467 		SAVEPOINT update_interaction_pub;
4468 
4469 			-- Preprocessing Call
4470 			--l_interaction_rec_hk := p_interaction_rec;
4471 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_INTERACTION', 'B', 'C') THEN
4472 				JTF_IH_PUB_CUHK.update_interaction_pre(
4473 				                     --p_interaction_rec=>l_interaction_rec_hk,
4474 				                     p_interaction_rec=>l_int_rec,
4475 						     x_data=>l_data,
4476 						     x_count=>l_count_hk,
4477 						     x_return_code=>l_return_code);
4478 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
4479 					RAISE FND_API.G_EXC_ERROR;
4480 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4481 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4482 				END IF;
4483 			END IF;
4484 
4485 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_INTERACTION', 'B', 'V') THEN
4486 				JTF_IH_PUB_VUHK.update_interaction_pre(
4487 				                     --p_interaction_rec=>l_interaction_rec_hk,
4488 				                     p_interaction_rec=>l_int_rec,
4489 						     x_data=>l_data,
4490 						     x_count=>l_count_hk,
4491 						     x_return_code=>l_return_code);
4492 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
4493 					RAISE FND_API.G_EXC_ERROR;
4494 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
4495 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4496 				END IF;
4497 			END IF;
4498 
4499 		-- Standard call to check for call compatibility
4500 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
4501               l_api_name, g_pkg_name) THEN
4502 		      RAISE fnd_api.g_exc_unexpected_error;
4503 		END IF;
4504 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Update_Interaction');
4505 
4506 		-- Initialize message list if p_init_msg_list is set to TRUE
4507 		IF fnd_api.to_boolean(p_init_msg_list) THEN
4508 			fnd_msg_pub.initialize;
4509 		END IF;
4510 
4511    		-- Initialize API return status to success
4512    		x_return_status := fnd_api.g_ret_sts_success;
4513 
4514    		--
4515 		-- Apply business-rule validation to all required and passed parameters
4516 		--
4517 		-- Validate user and login session IDs
4518 		--
4519 		IF (p_user_id IS NULL) THEN
4520 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
4521 			RAISE fnd_api.g_exc_error;
4522 		ELSE
4523 			jtf_ih_core_util_pvt.validate_who_info
4524 			(	p_api_name        => l_api_name_full,
4525 				p_parameter_name_usr    => 'p_user_id',
4526 				p_parameter_name_log    => 'p_login_id',
4527 				p_user_id         => p_user_id,
4528 				p_login_id        => p_login_id,
4529 				x_return_status   => l_return_status );
4530 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
4531 				RAISE fnd_api.g_exc_error;
4532 			END IF;
4533 		END IF;
4534 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Update_Interaction');
4535 
4536 		--
4537 		--	Restore existing column values if manadatory paramaters passed are
4538 		--	NULL or of FND_API.G_MISS types
4539 		--
4540 
4541 		--
4542 		--	Retrieve necessary parameters via DB Query
4543 		--	N.B., l_count is used after validation
4544 		--
4545 
4546 		-- DBMS_OUTPUT.PUT_LINE('party_id: ' || p_interaction_rec.party_id);
4547 		-- DBMS_OUTPUT.PUT_LINE('resource_id: ' || p_interaction_rec.resource_id);
4548 		-- DBMS_OUTPUT.PUT_LINE('handler_id: ' || p_interaction_rec.handler_id);
4549 		-- DBMS_OUTPUT.PUT_LINE('outcome_id: ' || p_interaction_rec.outcome_id);
4550     -- DBMS_OUTPUT.PUT_LINE('non_productive_time_amount: ' || p_interaction_rec.non_productive_time_amount);
4551   		l_count := 0;
4552 
4553 		OPEN c_Interaction_csr;
4554 		FETCH c_Interaction_csr INTO  l_Interaction_rec;
4555 		IF (c_Interaction_csr%notfound) THEN
4556 			x_return_status := fnd_api.g_ret_sts_error;
4557 			jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_Interaction_rec.interaction_id),
4558 							    'Interaction_id');
4559       -- # 1937894
4560 			       fnd_msg_pub.count_and_get
4561 				      (   p_count       => x_msg_count,
4562 				    p_data  => x_msg_data );
4563        x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
4564 			RETURN;
4565 		END IF;
4566 
4567   --
4568   -- Check if Object_Version_Number was passed
4569   -- Bug# 2012159
4570   --
4571   --IF(p_object_version is null) THEN
4572 		--	    jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(l_object_version),'The Object_Version_Number set to NULL for interaction');
4573 			    --RAISE fnd_api.g_exc_error;
4574   --END IF;
4575 
4576 		--
4577 		-- Check if Active is set to 'N'
4578 		--
4579 		IF (l_Interaction_rec.active = 'N')  then
4580 		  -- Bug# 4477761 check if profile option is turned on
4581 		  -- If yes then allow update on closed interaction
4582 		  fnd_profile.get('JTF_IH_ALLOW_INT_UPDATE_AFTER_CLOSE',l_profile_id);
4583 		  IF nvl(l_profile_id,'N') <> 'Y' THEN
4584 		    --x_return_status := fnd_api.g_ret_sts_error;
4585 		    --jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_Interaction_rec.interaction_id),'Active set to N for interaction');
4586 		    --Bug# 4477761 new error msg
4587 		    IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
4588 		       fnd_message.set_name('JTF', 'JTF_IH_INT_UPDATE_NOT_ALLOW');
4589 		       fnd_message.set_token('INT_ID', to_char(p_Interaction_rec.interaction_id));
4590 		       fnd_msg_pub.add;
4591 		    END IF;
4592 		    RAISE fnd_api.g_exc_error;
4593          	  END IF;
4594 		END IF;
4595 		--
4596 		--	Check mandatory parameters to determine if their update paramater
4597 		--	is null or of a FND_API.G_MISS type then set to existing DB record
4598 		--	column value if needed.
4599 		--
4600 
4601 		--
4602 		-- Check if party_id requies updating
4603 		--
4604 
4605 		IF (p_interaction_rec.party_id = fnd_api.g_miss_num) OR (p_interaction_rec.party_id IS NULL)  then
4606 			l_int_rec.party_id := l_interaction_rec.party_id;
4607 		ELSE
4608 			l_int_rec.party_id := p_interaction_rec.party_id;
4609 		END IF;
4610 
4611 
4612 		--
4613 		-- Check if resource_id requies updating
4614 		--
4615 
4616 		IF (p_interaction_rec.resource_id = fnd_api.g_miss_num) OR (p_interaction_rec.resource_id IS NULL)  then
4617 			l_int_rec.resource_id := l_interaction_rec.resource_id;
4618 		ELSE
4619 			l_int_rec.resource_id := p_interaction_rec.resource_id;
4620 		END IF;
4621 
4622 		--
4623 		-- Check if handler_id requies updating
4624 		--
4625 
4626 		IF (p_interaction_rec.handler_id = fnd_api.g_miss_num) OR (p_interaction_rec.handler_id IS NULL)  then
4627 			l_int_rec.handler_id := l_interaction_rec.handler_id;
4628 		ELSE
4629 			l_int_rec.handler_id := p_interaction_rec.handler_id;
4630 		END IF;
4631 
4632 		--
4633 		-- Check if outcome_id requies updating
4634 		--
4635 
4636 		--IF (p_interaction_rec.outcome_id = fnd_api.g_miss_num) OR (p_interaction_rec.outcome_id IS NULL)  then
4637 		IF (p_interaction_rec.outcome_id = fnd_api.g_miss_num) then
4638 			l_int_rec.outcome_id := l_interaction_rec.outcome_id;
4639 		ELSE
4640 			l_int_rec.outcome_id := p_interaction_rec.outcome_id;
4641 		END IF;
4642 
4643 		--
4644 		-- Check if touchpoint1_type requies updating
4645 		--
4646 
4647 		--IF (p_interaction_rec.touchpoint1_type = fnd_api.g_miss_char) OR (p_interaction_rec.touchpoint1_type IS NULL)  then
4648 		IF (p_interaction_rec.touchpoint1_type = fnd_api.g_miss_char) then
4649 			l_int_rec.touchpoint1_type := l_interaction_rec.touchpoint1_type;
4650 		ELSE
4651 			l_int_rec.touchpoint1_type := p_interaction_rec.touchpoint1_type;
4652 		END IF;
4653 
4654 		--
4655 		-- Check if touchpoint2_type requies updating
4656 		--
4657 
4658 		--IF (p_interaction_rec.touchpoint2_type = fnd_api.g_miss_char) OR (p_interaction_rec.touchpoint2_type IS NULL)  then
4659 		IF (p_interaction_rec.touchpoint2_type = fnd_api.g_miss_char) then
4660 			l_int_rec.touchpoint2_type := l_interaction_rec.touchpoint2_type;
4661 		ELSE
4662 			l_int_rec.touchpoint2_type := p_interaction_rec.touchpoint2_type;
4663 		END IF;
4664 
4665 		--
4666 		-- Check if reference_form requies updating
4667 		--
4668 
4669 		--IF (p_interaction_rec.reference_form = fnd_api.g_miss_char) OR (p_interaction_rec.reference_form IS NULL)  then
4670 		IF (p_interaction_rec.reference_form = fnd_api.g_miss_char) then
4671 			l_int_rec.reference_form := l_interaction_rec.reference_form;
4672 		ELSE
4673 			l_int_rec.reference_form := p_interaction_rec.reference_form;
4674 		END IF;
4675 
4676 		--
4677 		-- Check if follow_up_action requies updating
4678 		--
4679 
4680 		--IF (p_interaction_rec.follow_up_action = fnd_api.g_miss_char) OR (p_interaction_rec.follow_up_action IS NULL)  then
4681 		IF (p_interaction_rec.follow_up_action = fnd_api.g_miss_char) then
4682 			l_int_rec.follow_up_action := l_interaction_rec.follow_up_action;
4683 		ELSE
4684 			l_int_rec.follow_up_action := p_interaction_rec.follow_up_action;
4685 		END IF;
4686 
4687 		--
4688 		-- Check if previw_time_amount requies updating
4689 		--
4690 
4691 		--IF (p_interaction_rec.preview_time_amount = fnd_api.g_miss_num) OR (p_interaction_rec.preview_time_amount IS NULL)  then
4692 		IF (p_interaction_rec.preview_time_amount = fnd_api.g_miss_num) then
4693 			l_int_rec.preview_time_amount := l_interaction_rec.preview_time_amount;
4694 		ELSE
4695 			l_int_rec.preview_time_amount := p_interaction_rec.preview_time_amount;
4696 		END IF;
4697 
4698   -- Added by IALeshin 20-MAY-2002
4699 		l_recalc_duration := FALSE;
4700 		IF ((p_interaction_rec.end_date_time <> fnd_api.g_miss_date) AND (p_interaction_rec.end_date_time IS NOT NULL)) then
4701 			l_int_rec.end_date_time := p_interaction_rec.end_date_time;
4702 			-- duration may need to be recalculated based on the new value - RDD
4703 			l_recalc_duration := TRUE;
4704 		ELSE
4705 			l_int_rec.end_date_time := l_interaction_rec.end_date_time;
4706 		END IF;
4707 
4708   -- Added by IALeshin 20-MAY-2002
4709 		--
4710 		-- Check if start_date_time requies updating
4711 		--
4712 		IF ((p_interaction_rec.start_date_time = fnd_api.g_miss_date) OR (p_interaction_rec.start_date_time IS NULL)) then
4713 			l_int_rec.start_date_time := l_interaction_rec.start_date_time;
4714 		ELSE
4715 			l_int_rec.start_date_time := p_interaction_rec.start_date_time;
4716 			-- duration may need to be recalculated based on the new value - RDD
4717 			l_recalc_duration := TRUE;
4718 		END IF;
4719 
4720     		Validate_StartEnd_Date
4721 				(	p_api_name    	=> l_api_name_full,
4722 					p_start_date_time   	=> l_int_rec.start_date_time,
4723 					p_end_date_time		    => l_int_rec.end_date_time,
4724 					x_return_status     	=> l_return_status
4725 				);
4726 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
4727 			RAISE fnd_api.g_exc_error;
4728 		END IF;
4729 
4730 		-- Determine if duration recalc can be done.  We require start and end date. - RDD
4731 		IF l_recalc_duration = TRUE THEN
4732 			IF l_int_rec.end_date_time IS NULL THEN
4733 				l_recalc_duration := FALSE;
4734 			END IF;
4735 		END IF;
4736 
4737 
4738 		IF p_interaction_rec.duration <> fnd_api.g_miss_num AND p_interaction_rec.duration IS NOT NULL THEN
4739 			l_int_rec.duration := p_interaction_rec.duration;
4740 		ELSIF l_recalc_duration = TRUE THEN
4741 			l_int_rec.duration := ROUND((l_int_rec.end_date_time - l_int_rec.start_date_time)*24*60*60);
4742 		ELSE
4743 			l_int_rec.duration := l_interaction_rec.duration;
4744 		END IF;
4745   --
4746 
4747 		--
4748 		-- Check if inter_interaction_duration requies updating
4749 		--
4750 
4751 		--IF (p_interaction_rec.inter_interaction_duration = fnd_api.g_miss_num) OR (p_interaction_rec.inter_interaction_duration IS NULL)  then
4752 		IF (p_interaction_rec.inter_interaction_duration = fnd_api.g_miss_num) then
4753 			l_int_rec.inter_interaction_duration := l_interaction_rec.inter_interaction_duration;
4754 		ELSE
4755 			l_int_rec.inter_interaction_duration := p_interaction_rec.inter_interaction_duration;
4756 		END IF;
4757 
4758 
4759 
4760 		--
4761 		-- Check if non_productive_time_amount requies updating
4762 		--
4763 		--IF (p_interaction_rec.non_productive_time_amount = fnd_api.g_miss_num) OR (p_interaction_rec.non_productive_time_amount IS NULL)  then
4764 		IF (p_interaction_rec.non_productive_time_amount = fnd_api.g_miss_num) then
4765 			l_int_rec.non_productive_time_amount := l_interaction_rec.non_productive_time_amount;
4766 		ELSE
4767 			l_int_rec.non_productive_time_amount := p_interaction_rec.non_productive_time_amount;
4768 		END IF;
4769 
4770 		--
4771 		-- Check if productive_time_amount requies updating
4772 		--
4773 		-- IF (p_interaction_rec.productive_time_amount = fnd_api.g_miss_num) OR (p_interaction_rec.productive_time_amount IS NULL)  then
4774 		IF (p_interaction_rec.productive_time_amount = fnd_api.g_miss_num) then
4775 			l_int_rec.productive_time_amount := l_interaction_rec.productive_time_amount;
4776 		ELSE
4777 			l_int_rec.productive_time_amount := p_interaction_rec.productive_time_amount;
4778 		END IF;
4779 
4780 		--
4781 		-- Check if wrapUp_time_amount requies updating
4782 		--
4783 
4784 		--IF (p_interaction_rec.wrapUp_time_amount = fnd_api.g_miss_num) OR (p_interaction_rec.wrapUp_time_amount IS NULL)  then
4785 		IF (p_interaction_rec.wrapUp_time_amount = fnd_api.g_miss_num) then
4786 			l_int_rec.wrapUp_time_amount := l_interaction_rec.wrap_Up_time_amount;
4787 		ELSE
4788       l_int_rec.wrapUp_time_amount := p_interaction_rec.wrapUp_time_amount;
4789 		END IF;
4790 
4791 		--
4792 		-- Check if script_id requies updating
4793 		--
4794 		--IF (p_interaction_rec.script_id = fnd_api.g_miss_num) OR (p_interaction_rec.script_id IS NULL)  then
4795 		IF (p_interaction_rec.script_id = fnd_api.g_miss_num) then
4796 			l_int_rec.script_id := l_interaction_rec.script_id;
4797 		ELSE
4798 			l_int_rec.script_id := p_interaction_rec.script_id;
4799 		END IF;
4800 
4801 		--
4802 		-- Check if result_id requies updating
4803 		--
4804 		--IF (p_interaction_rec.result_id = fnd_api.g_miss_num) OR (p_interaction_rec.result_id IS NULL)  then
4805 		IF (p_interaction_rec.result_id = fnd_api.g_miss_num) then
4806 			l_int_rec.result_id := l_interaction_rec.result_id;
4807 		ELSE
4808 			l_int_rec.result_id := p_interaction_rec.result_id;
4809 		END IF;
4810 
4811 		--
4812 		-- Check if reason_id requies updating
4813 		--
4814 		--IF (p_interaction_rec.reason_id = fnd_api.g_miss_num) OR (p_interaction_rec.reason_id IS NULL)  then
4815 		IF (p_interaction_rec.reason_id = fnd_api.g_miss_num) then
4816 			l_int_rec.reason_id := l_interaction_rec.reason_id;
4817 		ELSE
4818 			l_int_rec.reason_id := p_interaction_rec.reason_id;
4819 		END IF;
4820 
4821 		--
4822 		-- Check if object_id requies updating
4823 		--
4824 		-- IF (p_interaction_rec.object_id = fnd_api.g_miss_num) OR (p_interaction_rec.object_id IS NULL)  then
4825 		IF (p_interaction_rec.object_id = fnd_api.g_miss_num) then
4826 			l_int_rec.object_id := l_interaction_rec.object_id;
4827 		ELSE
4828 			l_int_rec.object_id := p_interaction_rec.object_id;
4829 		END IF;
4830 
4831 		--
4832 		-- Check if object_type requies updating
4833 		--
4834 		-- IF (p_interaction_rec.object_type = fnd_api.g_miss_char) OR (p_interaction_rec.object_type IS NULL)  then
4835 		IF (p_interaction_rec.object_type = fnd_api.g_miss_char) then
4836 			l_int_rec.object_type := l_interaction_rec.object_type;
4837 		ELSE
4838 			l_int_rec.object_type := p_interaction_rec.object_type;
4839 		END IF;
4840 
4841 		--
4842 		-- Check if source_code_id and source_code requies updating
4843 		--
4844 
4845         IF(p_interaction_rec.source_code_id = fnd_api.g_miss_num)
4846             AND (p_interaction_rec.source_code = fnd_api.g_miss_char) THEN
4847 			l_int_rec.source_code_id := l_interaction_rec.source_code_id;
4848 			l_int_rec.source_code := l_interaction_rec.source_code;
4849         ELSE
4850 			l_int_rec.source_code_id := p_interaction_rec.source_code_id;
4851 			l_int_rec.source_code := p_interaction_rec.source_code;
4852         END IF;
4853 		--
4854 		-- Check if parent_id requies updating
4855 		--
4856     		IF ((p_interaction_rec.parent_id IS NOT NULL) AND (p_interaction_rec.parent_id  <> fnd_api.g_miss_num))	THEN
4857      			l_count := 0;
4858 			SELECT count(*) into l_count
4859 			 FROM jtf_ih_interaction_inters
4860 			     WHERE interact_interaction_id = p_interaction_rec.interaction_id;
4861 
4862        -- Bug# 2418345
4863 			 --    WHERE interact_interaction_id = p_interaction_rec.interaction_id and
4864 			 --       interact_interaction_idrelates = p_interaction_rec.parent_id;
4865 
4866       		IF (l_count = 0) THEN
4867 				  INSERT INTO jtf_ih_interaction_inters
4868 				  (
4869 					       INTERACT_INTERACTION_IDRELATES,
4870 					       INTERACT_INTERACTION_ID,
4871 					       CREATED_BY,
4872 					       CREATION_DATE,
4873  					       LAST_UPDATED_BY,
4874 					       LAST_UPDATE_DATE,
4875 					       LAST_UPDATE_LOGIN
4876 				  )
4877 				  VALUES
4878 				  (
4879 					       p_interaction_rec.parent_id,
4880 					       p_interaction_rec.interaction_id,
4881 					       p_user_id,
4882 					       Sysdate,
4883 					       p_user_id,
4884 					       Sysdate,
4885 					       p_user_id
4886  				       );
4887 				       l_int_rec.parent_id := p_interaction_rec.parent_id;
4888        -- Bug# 2418345
4889          ELSE
4890       UPDATE jtf_ih_interaction_inters SET
4891          INTERACT_INTERACTION_IDRELATES = p_interaction_rec.parent_id,
4892  					       LAST_UPDATED_BY = p_user_id ,
4893 					       LAST_UPDATE_DATE = SYSDATE,
4894 					       LAST_UPDATE_LOGIN = p_user_id
4895          WHERE interact_interaction_id = p_interaction_rec.interaction_id;
4896 			   END IF;
4897 		    END IF;
4898 
4899 		--
4900 		-- Check if attribute1 requies updating
4901 		--
4902 		--IF (p_interaction_rec.attribute1 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute1 IS NULL)  then
4903 		IF (p_interaction_rec.attribute1 = fnd_api.g_miss_char) then
4904 			l_int_rec.attribute1 := l_interaction_rec.attribute1;
4905 		ELSE
4906 			l_int_rec.attribute1 := p_interaction_rec.attribute1;
4907 		END IF;
4908 
4909 		--
4910 		-- Check if attribute2 requies updating
4911 		--
4912 
4913 		--IF (p_interaction_rec.attribute2 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute2 IS NULL)  then
4914 		IF (p_interaction_rec.attribute2 = fnd_api.g_miss_char) then
4915 			l_int_rec.attribute2 := l_interaction_rec.attribute2;
4916 		ELSE
4917 			l_int_rec.attribute2 := p_interaction_rec.attribute2;
4918 		END IF;
4919 
4920 		--
4921 		-- Check if attribute3 requies updating
4922 		--
4923 
4924 		--IF (p_interaction_rec.attribute3 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute3 IS NULL)  then
4925 		IF (p_interaction_rec.attribute3 = fnd_api.g_miss_char) then
4926 			l_int_rec.attribute3 := l_interaction_rec.attribute3;
4927 		ELSE
4928 			l_int_rec.attribute3 := p_interaction_rec.attribute3;
4929 		END IF;
4930 
4931 		--
4932 		-- Check if attribute4 requies updating
4933 		--
4934 
4935 		-- IF (p_interaction_rec.attribute4 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute4 IS NULL)  then
4936 		IF (p_interaction_rec.attribute4 = fnd_api.g_miss_char) then
4937 			l_int_rec.attribute4 := l_interaction_rec.attribute4;
4938 		ELSE
4939 			l_int_rec.attribute4 := p_interaction_rec.attribute4;
4940 		END IF;
4941 
4942 		--
4943 		-- Check if attribute5 requies updating
4944 		--
4945 		--IF (p_interaction_rec.attribute5 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute5 IS NULL)  then
4946 		IF (p_interaction_rec.attribute5 = fnd_api.g_miss_char) then
4947 			l_int_rec.attribute5 := l_interaction_rec.attribute5;
4948 		ELSE
4949 			l_int_rec.attribute5 := p_interaction_rec.attribute5;
4950 		END IF;
4951 
4952 		--
4953 		-- Check if attribute6 requies updating
4954 		--
4955 
4956 		--IF (p_interaction_rec.attribute6 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute6 IS NULL)  then
4957 		IF (p_interaction_rec.attribute6 = fnd_api.g_miss_char) then
4958 			l_int_rec.attribute6 := l_interaction_rec.attribute6;
4959 		ELSE
4960 			l_int_rec.attribute6 := p_interaction_rec.attribute6;
4961 		END IF;
4962 
4963 		--
4964 		-- Check if attribute7 requies updating
4965 		--
4966 
4967 		--IF (p_interaction_rec.attribute7 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute7 IS NULL)  then
4968 		IF (p_interaction_rec.attribute7 = fnd_api.g_miss_char) then
4969 			l_int_rec.attribute7 := l_interaction_rec.attribute7;
4970 			--l_int_rec.attribute7 := l_interaction_rec.attribute7;
4971 		ELSE
4972 			l_int_rec.attribute7 := p_interaction_rec.attribute7;
4973 		END IF;
4974 
4975 		--
4976 		-- Check if attribute8 requies updating
4977 		--
4978 
4979 		--IF (p_interaction_rec.attribute8 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute8 IS NULL)  then
4980 		IF (p_interaction_rec.attribute8 = fnd_api.g_miss_char) then
4981 			l_int_rec.attribute8 := l_interaction_rec.attribute8;
4982 			--l_int_rec.attribute8 := l_interaction_rec.attribute8;
4983 		ELSE
4984 			l_int_rec.attribute8 := p_interaction_rec.attribute8;
4985 		END IF;
4986 
4987 		--
4988 		-- Check if attribute9 requies updating
4989 		--
4990 
4991 		--IF (p_interaction_rec.attribute9 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute9 IS NULL)  then
4992 		IF (p_interaction_rec.attribute9 = fnd_api.g_miss_char) then
4993 			l_int_rec.attribute9 := l_interaction_rec.attribute1;
4994 			--l_int_rec.attribute9 := l_interaction_rec.attribute9;
4995 		ELSE
4996 			l_int_rec.attribute9 := p_interaction_rec.attribute9;
4997 		END IF;
4998 
4999 		--
5000 		-- Check if attribute10 requies updating
5001 		--
5002 
5003 		--IF (p_interaction_rec.attribute10 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute10 IS NULL)  then
5004 		IF (p_interaction_rec.attribute10 = fnd_api.g_miss_char) then
5005 			l_int_rec.attribute10 := l_interaction_rec.attribute10;
5006 			--l_int_rec.attribute10 := l_interaction_rec.attribute10;
5007 		ELSE
5008 			l_int_rec.attribute10 := p_interaction_rec.attribute10;
5009 		END IF;
5010 
5011 		--
5012 		-- Check if attribute11 requies updating
5013 		--
5014 
5015 		--IF (p_interaction_rec.attribute11 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute11 IS NULL)  then
5016 		IF (p_interaction_rec.attribute11 = fnd_api.g_miss_char) then
5017 			l_int_rec.attribute11 := l_interaction_rec.attribute11;
5018 			--l_int_rec.attribute11 := l_interaction_rec.attribute11;
5019 		ELSE
5020 			l_int_rec.attribute11 := p_interaction_rec.attribute11;
5021 		END IF;
5022 
5023 		--
5024 		-- Check if attribute12 requies updating
5025 		--
5026 
5027 		--IF (p_interaction_rec.attribute12 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute12 IS NULL)  then
5028 		IF (p_interaction_rec.attribute12 = fnd_api.g_miss_char) then
5029 			l_int_rec.attribute12 := l_interaction_rec.attribute12;
5030 			--l_int_rec.attribute12 := l_interaction_rec.attribute12;
5031 		ELSE
5032 			l_int_rec.attribute12 := p_interaction_rec.attribute12;
5033 		END IF;
5034 
5035 		--
5036 		-- Check if attribute13 requies updating
5037 		--
5038 		--IF (p_interaction_rec.attribute13 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute13 IS NULL)  then
5039 		IF (p_interaction_rec.attribute13 = fnd_api.g_miss_char) then
5040 			l_int_rec.attribute13 := l_interaction_rec.attribute13;
5041 			--l_int_rec.attribute13 := l_interaction_rec.attribute13;
5042 		ELSE
5043 			l_int_rec.attribute13 := p_interaction_rec.attribute13;
5044 		END IF;
5045 
5046 		--
5047 		-- Check if attribute14 requies updating
5048 		--
5049 
5050 		--IF (p_interaction_rec.attribute14 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute14 IS NULL)  then
5051 		IF (p_interaction_rec.attribute14 = fnd_api.g_miss_char) then
5052 			l_int_rec.attribute14 := l_interaction_rec.attribute14;
5053 			--l_int_rec.attribute14 := l_interaction_rec.attribute14;
5054 		ELSE
5055 			l_int_rec.attribute14 := p_interaction_rec.attribute14;
5056 		END IF;
5057 
5058 		--
5059 		-- Check if attribute15 requies updating
5060 		--
5061 		--IF (p_interaction_rec.attribute15 = fnd_api.g_miss_char) OR (p_interaction_rec.attribute15 IS NULL)  then
5062 		IF (p_interaction_rec.attribute15 = fnd_api.g_miss_char) then
5063 			l_int_rec.attribute15 := l_interaction_rec.attribute15;
5064 			--l_int_rec.attribute15 := l_interaction_rec.attribute15;
5065 		ELSE
5066 			l_int_rec.attribute15 := p_interaction_rec.attribute15;
5067 		END IF;
5068 
5069 		--
5070 		-- Check if attribute_category requies updating
5071 		--
5072 		--IF (p_interaction_rec.attribute_category = fnd_api.g_miss_char) OR (p_interaction_rec.attribute_category IS NULL)  then
5073 		IF (p_interaction_rec.attribute_category = fnd_api.g_miss_char) then
5074 			l_int_rec.attribute_category := l_interaction_rec.attribute_category;
5075 			--l_int_rec.attribute_category := l_interaction_rec.attribute_category;
5076 		ELSE
5077 			l_int_rec.attribute_category := p_interaction_rec.attribute_category;
5078 		END IF;
5079 
5080 		IF (p_interaction_rec.method_code = fnd_api.g_miss_char) then
5081 			l_int_rec.method_code := l_interaction_rec.method_code;
5082 		ELSE
5083 			l_int_rec.method_code := p_interaction_rec.method_code;
5084 		END IF;
5085   IF p_api_version = 1.0 THEN
5086 		  l_int_rec.primary_party_id := NULL;
5087 		  l_int_rec.contact_rel_party_id := NULL;
5088 		  l_int_rec.contact_party_id := NULL;
5089   ELSE
5090 		  IF (p_interaction_rec.primary_party_id = fnd_api.g_miss_num) then
5091 			 l_int_rec.primary_party_id := l_interaction_rec.primary_party_id;
5092 		  ELSE
5093 			l_int_rec.primary_party_id := p_interaction_rec.primary_party_id;
5094 		  END IF;
5095 
5096 		  IF (p_interaction_rec.contact_rel_party_id = fnd_api.g_miss_num) then
5097 			l_int_rec.contact_rel_party_id := l_interaction_rec.contact_rel_party_id;
5098 		  ELSE
5099 			l_int_rec.contact_rel_party_id := p_interaction_rec.contact_rel_party_id;
5100 		  END IF;
5101 		  IF (p_interaction_rec.contact_party_id = fnd_api.g_miss_num) then
5102 			l_int_rec.contact_party_id := l_interaction_rec.contact_party_id;
5103 		  ELSE
5104 			l_int_rec.contact_party_id := p_interaction_rec.contact_party_id;
5105 		  END IF;
5106   END IF;
5107 
5108 		-- DBMS_OUTPUT.PUT_LINE('party_id: ' || l_interaction_rec.party_id);
5109 		-- DBMS_OUTPUT.PUT_LINE('resource_id: ' || l_interaction_rec.resource_id);
5110 		-- DBMS_OUTPUT.PUT_LINE('handler_id: ' || l_interaction_rec.handler_id);
5111 		-- DBMS_OUTPUT.PUT_LINE('outcome_id: ' || l_interaction_rec.outcome_id);
5112 		-- DBMS_OUTPUT.PUT_LINE('non_productive_time_amount: ' || l_interaction_rec.non_productive_time_amount);
5113 
5114 		--
5115 		-- Validate all non-missing attributes by calling the utility procedure.
5116 		--
5117 
5118 		Validate_Interaction_Record
5119 		(	p_api_name      => l_api_name_full,
5120 			p_int_val_rec   => l_int_rec,
5121 			p_resp_appl_id  => p_resp_appl_id,
5122 			p_resp_id       => p_resp_id,
5123 			x_return_status       => l_return_status
5124 		);
5125 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5126 			RAISE fnd_api.g_exc_error;
5127 		END IF;
5128 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_Interaction_Record in JTF_IH_PUB.Update_Interaction');
5129 
5130     -- 08/26/03 mpetrosi B3102306
5131     -- added cross check of source_code, source_code_id
5132     validate_source_code(l_api_name_full,l_int_rec.source_code_id, l_int_rec.source_code, l_return_status);
5133 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5134 			RAISE fnd_api.g_exc_error;
5135 		END IF;
5136 
5137 		--
5138 		-- Update table JTF_IH_INTERACTIONS
5139 		--
5140 		IF (p_interaction_rec.interaction_id IS NULL) THEN
5141 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'interaction_id');
5142 				RAISE fnd_api.g_exc_error;
5143 		ELSE
5144   			l_count := 0;
5145 			SELECT count(*) into l_count
5146 			FROM jtf_ih_interactions
5147 			WHERE interaction_id = p_interaction_rec.interaction_id;
5148 			IF(l_count <> 1) THEN
5149 				x_return_status := fnd_api.g_ret_sts_error;
5150 				jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_interaction_rec.interaction_id),
5151 					    'interaction_id');
5152       -- # 1937894
5153 			       fnd_msg_pub.count_and_get
5154 				      (   p_count       => x_msg_count,
5155 				    p_data  => x_msg_data );
5156        x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5157 				RETURN;
5158 			ELSE
5159 				UPDATE JTF_IH_INTERACTIONS
5160 				SET
5161 			 		REFERENCE_FORM			= l_int_rec.reference_form,
5162 					LAST_UPDATED_BY			= p_user_id,
5163 					DURATION			= l_int_rec.duration,
5164 					LAST_UPDATE_DATE		= sysdate,
5165 					LAST_UPDATE_LOGIN		= p_login_id,
5166 					END_DATE_TIME			= l_int_rec.end_date_time,
5167 					FOLLOW_UP_ACTION		= l_int_rec.follow_up_action,
5168 					NON_PRODUCTIVE_TIME_AMOUNT	= l_int_rec.non_productive_time_amount,
5169 					RESULT_ID			= l_int_rec.result_id,
5170 					REASON_ID			= l_int_rec.reason_id,
5171 					START_DATE_TIME			= l_int_rec.start_date_time,
5172 					OUTCOME_ID			= decode( l_int_rec.outcome_id, fnd_api.g_miss_num, null, l_int_rec.outcome_id),
5173 					PREVIEW_TIME_AMOUNT		= l_int_rec.preview_time_amount,
5174 					PRODUCTIVE_TIME_AMOUNT		= l_int_rec.productive_time_amount,
5175 					HANDLER_ID			= l_int_rec.handler_id,
5176 					INTER_INTERACTION_DURATION	= l_int_rec.inter_interaction_duration,
5177 					WRAP_UP_TIME_AMOUNT		= l_int_rec.wrapUp_time_amount,
5178 					SCRIPT_ID			= l_int_rec.script_id,
5179 					PARTY_ID			= l_int_rec.party_id,
5180 					RESOURCE_ID			= l_int_rec.resource_id,
5181 					OBJECT_ID			= l_int_rec.object_id,
5182 		       		OBJECT_TYPE			= l_int_rec.object_type,
5183 		       		SOURCE_CODE_ID		= decode(l_int_rec.source_code_id,fnd_api.g_miss_num,NULL,l_int_rec.source_code_id),
5184 		       		SOURCE_CODE			= decode(l_int_rec.source_code,fnd_api.g_miss_char,NULL,l_int_rec.source_code),
5185 					ATTRIBUTE1			= l_int_rec.attribute1,
5186 					ATTRIBUTE2			= l_int_rec.attribute2,
5187 					ATTRIBUTE3			= l_int_rec.attribute3,
5188 					ATTRIBUTE4			= l_int_rec.attribute4,
5189 					ATTRIBUTE5			= l_int_rec.attribute5,
5190 					ATTRIBUTE6			= l_int_rec.attribute6,
5191 					ATTRIBUTE7			= l_int_rec.attribute7,
5192 					ATTRIBUTE8			= l_int_rec.attribute8,
5193 					ATTRIBUTE9			= l_int_rec.attribute9,
5194 					ATTRIBUTE10			= l_int_rec.attribute10,
5195 					ATTRIBUTE11			= l_int_rec.attribute11,
5196 					ATTRIBUTE12			= l_int_rec.attribute12,
5197 					ATTRIBUTE13			= l_int_rec.attribute13,
5198 					ATTRIBUTE14			= l_int_rec.attribute14,
5199 					ATTRIBUTE_CATEGORY	= l_int_rec.attribute_category,
5200 					TOUCHPOINT1_TYPE	= l_int_rec.touchpoint1_type,
5201 					TOUCHPOINT2_TYPE	= l_int_rec.touchpoint2_type,
5202         METHOD_CODE   = l_int_rec.method_code,
5203         primary_party_id    = l_int_rec.primary_party_id,
5204         contact_rel_party_id = l_int_rec.contact_rel_party_id,
5205         contact_party_id    = l_int_rec.contact_party_id
5206 				WHERE CURRENT OF c_Interaction_csr;
5207 				--
5208 				-- Close Cursor
5209 				--
5210 				Close c_Interaction_csr;
5211 				--
5212 			END IF;
5213 		END IF;
5214 		-- DBMS_OUTPUT.PUT_LINE('PAST update table jtf_ih_interactions in JTF_IH_PUB.Update_Interaction');
5215 
5216 		-- DBMS_OUTPUT.PUT_LINE('PAST INSERT INTO jtf_ih_Interaction_inters in JTF_IH_PUB.Update_Interaction');
5217 
5218 			-- Post processing Call
5219 
5220 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_INTERACTION', 'A', 'V') THEN
5221 				JTF_IH_PUB_VUHK.update_interaction_post(
5222 				                     --p_interaction_rec=>l_interaction_rec_hk,
5223 				                     p_interaction_rec=>l_int_rec,
5224 						     x_data=>l_data,
5225 						     x_count=>l_count_hk,
5226 						     x_return_code=>l_return_code);
5227 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5228 					RAISE FND_API.G_EXC_ERROR;
5229 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5230 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5231 				END IF;
5232 			END IF;
5233 
5234 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_INTERACTION', 'A', 'C') THEN
5235 				JTF_IH_PUB_CUHK.update_interaction_post(
5236 				                     --p_interaction_rec=>l_interaction_rec_hk,
5237 				                     p_interaction_rec=>l_int_rec,
5238 						     x_data=>l_data,
5239 						     x_count=>l_count_hk,
5240 						     x_return_code=>l_return_code);
5241 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5242 					RAISE FND_API.G_EXC_ERROR;
5243 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5244 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5245 				END IF;
5246 			END IF;
5247 
5248 
5249 		-- Standard check of p_commit
5250 		IF fnd_api.to_boolean(p_commit) THEN
5251 			COMMIT WORK;
5252 		END IF;
5253 
5254 		-- Standard call to get message count and if count is 1, get message info
5255 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
5256 
5257 		EXCEPTION
5258 		WHEN fnd_api.g_exc_error THEN
5259 			ROLLBACK TO update_interaction_pub;
5260 			x_return_status := fnd_api.g_ret_sts_error;
5261 			fnd_msg_pub.count_and_get
5262 				( p_count       => x_msg_count,
5263 				p_data  => x_msg_data );
5264       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5265 		WHEN fnd_api.g_exc_unexpected_error THEN
5266 			ROLLBACK TO update_interaction_pub;
5267 			x_return_status := fnd_api.g_ret_sts_unexp_error;
5268 			fnd_msg_pub.count_and_get
5269 				( p_count       => x_msg_count,
5270 				p_data  => x_msg_data );
5271       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5272 		WHEN OTHERS THEN
5273 			ROLLBACK TO update_interaction_pub;
5274 			x_return_status := fnd_api.g_ret_sts_unexp_error;
5275 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
5276 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
5277 			END IF;
5278 			fnd_msg_pub.count_and_get
5279 				( p_count       => x_msg_count,
5280 				p_data  => x_msg_data );
5281       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5282 	END Update_Interaction;
5283 
5284 --
5285 --
5286 -- History
5287 -- -------
5288 --		Author			Date		Description
5289 --		------			----		-----------
5290 --		Jean Zhu		01/11/2000	Initial build
5291 --		James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
5292 --		James Baldo Jr.	03-MAY-2000	Fix for bugdb 1286036 and 1288344
5293 --		James Baldo Jr.	24-MAY-2000	Fix for bugdb 1311442 - closing interaction without outcome set
5294 --		James Baldo Jr.	27-JUL-2000	Fix for bugdb 1314647 - calculation for duration
5295 --      Igor Aleshin    04-JAN-2002	Fix for bugdb 2167904 - g_miss values issue
5296 --      Igor Aleshin    25-MAR-2002 Fix for bugdb 2281489 - null message data with 'E' status
5297 --      Igor Aleshin    01-APR-2002 Fix for bugdb 1937894 - interaction history apis are raising
5298 --          exceptions without error message
5299 --      Igor Aleshin    06-17-2002 Fix for bugdb 2418028 - Close Interaction gives incorrect error
5300 --      Igor Aleshin    11-SEP-2002 Fixed bug# 2560551 - TST1158.8: FUNC: DEBUG - ALL INTERACTIONS
5301 --          DISPLAYS INTERACTION DURATION AS 0
5302 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
5303 --
5304 --
5305 
5306 PROCEDURE Close_Interaction
5307 (
5308 	p_api_version		IN	NUMBER,
5309 	p_init_msg_list		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
5310 	p_commit		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
5311 	p_resp_appl_id		IN	NUMBER	DEFAULT NULL,
5312 	p_resp_id		IN	NUMBER	DEFAULT NULL,
5313 	p_user_id		IN	NUMBER,
5314 	p_login_id		IN	NUMBER	DEFAULT NULL,
5315 	x_return_status		OUT NOCOPY	VARCHAR2,
5316 	x_msg_count		OUT NOCOPY	NUMBER,
5317 	x_msg_data		OUT NOCOPY	VARCHAR2,
5318 	p_interaction_rec	IN	interaction_rec_type,
5319     p_object_version IN NUMBER DEFAULT NULL
5320 )
5321 AS
5322 		l_api_name   	CONSTANT VARCHAR2(30) := 'Close_Interaction';
5323 		l_api_version      	CONSTANT NUMBER       := 1.1;
5324 		l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
5325 		l_return_status    	VARCHAR2(1);
5326 		--l_outcome_id		NUMBER := NULL;
5327 		--l_end_date_time		DATE := NULL;
5328 		--l_start_date_time	DATE := NULL;
5329 		--l_duration		NUMBER := 0;
5330 		l_action_item_id	NUMBER := NULL;
5331 		l_count			NUMBER := 0;
5332 		l_return_code		VARCHAR2(1);
5333 		l_data			VARCHAR2(2000);
5334 		l_count_hk		NUMBER;
5335 		l_interaction_rec	INTERACTION_REC_TYPE;
5336 
5337   -- Bug# 2560511
5338 		la_outcome_id		NUMBER := NULL;
5339 		la_end_date_time		DATE := NULL;
5340 		la_start_date_time	DATE := NULL;
5341 		la_duration		NUMBER := 0;
5342 
5343   -- Bug# 3779487
5344  	 	msg_code		VARCHAR2(50);
5345 		la_out_act_list	jtf_ih_core_util_pvt.param_tbl_type;
5346 
5347   -- Perf fix for literal Usage
5348   l_active_perf            VARCHAR2(1);
5349 
5350 		CURSOR	l_activity_id_c IS
5351 		SELECT activity_id FROM jtf_ih_activities
5352 		WHERE interaction_id = p_interaction_rec.interaction_id;
5353 	BEGIN
5354 		SAVEPOINT close_interaction_pub1;
5355 
5356    -- Perf variables
5357    l_active_perf := 'N';
5358 
5359 		-- Preprocessing Call
5360 		l_interaction_rec := p_interaction_rec;
5361 
5362 		IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'B', 'C') THEN
5363 			JTF_IH_PUB_CUHK.close_interaction_pre(p_interaction_rec=>l_interaction_rec,
5364 						     x_data=>l_data,
5365 						     x_count=>l_count_hk,
5366 						     x_return_code=>l_return_code);
5367 			IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5368 				RAISE FND_API.G_EXC_ERROR;
5369 			ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5370 				RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5371 			END IF;
5372 		END IF;
5373 
5374 		IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'B', 'V') THEN
5375 			JTF_IH_PUB_VUHK.close_interaction_pre(p_interaction_rec=>l_interaction_rec,
5376 						     x_data=>l_data,
5377 						     x_count=>l_count_hk,
5378 						     x_return_code=>l_return_code);
5379 			IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5380 				RAISE FND_API.G_EXC_ERROR;
5381 			ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5382 				RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5383 			END IF;
5384 		END IF;
5385 
5386 		-- Standard call to check for call compatibility
5387 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
5388               l_api_name, g_pkg_name) THEN
5389 			RAISE fnd_api.g_exc_unexpected_error;
5390 		END IF;
5391 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Close_Interaction');
5392 
5393 		-- Initialize message list if p_init_msg_list is set to TRUE
5394 		IF fnd_api.to_boolean(p_init_msg_list) THEN
5395 			fnd_msg_pub.initialize;
5396 		END IF;
5397 
5398    		-- Initialize API return status to success
5399    		x_return_status := fnd_api.g_ret_sts_success;
5400 
5401    		--
5402 		-- Apply business-rule validation to all required and passed parameters
5403 		--
5404 		-- Validate user and login session IDs
5405 		--
5406 		IF (p_user_id IS NULL) THEN
5407 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
5408 				RAISE fnd_api.g_exc_error;
5409 		ELSE
5410 			jtf_ih_core_util_pvt.validate_who_info
5411 			( p_api_name        => l_api_name_full,
5412 				p_parameter_name_usr    => 'p_user_id',
5413 				p_parameter_name_log    => 'p_login_id',
5414 				p_user_id         => p_user_id,
5415 				p_login_id        => p_login_id,
5416 				x_return_status   => l_return_status );
5417 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5418 				RAISE fnd_api.g_exc_error;
5419 			END IF;
5420 		END IF;
5421 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Close_Interaction');
5422    	  SELECT count(*) into l_count
5423     FROM jtf_ih_activities
5424     WHERE interaction_id = p_interaction_rec.interaction_id;
5425 		-- DBMS_OUTPUT.PUT_LINE('lcount = ' || l_count);
5426     IF (l_count <= 0) THEN
5427    	 x_return_status := fnd_api.g_ret_sts_error;
5428 		 -- DBMS_OUTPUT.PUT_LINE('x_return_status = ' || x_return_status);
5429    -- Bug# 1937894
5430 --     jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_interaction_rec.interaction_id),
5431 --					    'activity_id');
5432      IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_success) THEN
5433       fnd_message.set_name('JTF', 'JTF_IH_NO_ACTIVITY');
5434       fnd_message.set_token('API_NAME', l_api_name);
5435       fnd_msg_pub.add;
5436      END IF;
5437 
5438 		 -- DBMS_OUTPUT.PUT_LINE('Yes');
5439 			fnd_msg_pub.count_and_get
5440 				( p_count       => x_msg_count,
5441 				  p_data  => x_msg_data );
5442       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5443 
5444 	   RETURN;
5445 		END IF;
5446 
5447 		--
5448 		--
5449 		-- Update interaction
5450 		--
5451 		Update_Interaction
5452 		(	p_api_version,
5453 			p_init_msg_list,
5454 			--p_commit,
5455       -- Bug# 2418028
5456 			FND_API.G_FALSE,
5457 			p_resp_appl_id,
5458 			p_resp_id,
5459 			p_user_id,
5460 			p_login_id,
5461 			x_return_status,
5462 			x_msg_count,
5463 			x_msg_data,
5464 			p_interaction_rec,
5465       p_object_version);
5466 		IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
5467 			RAISE fnd_api.g_exc_error;
5468 		END IF;
5469 		-- DBMS_OUTPUT.PUT_LINE('PAST Update_Interaction in JTF_IH_PUB.Close_Interaction');
5470 
5471 		-- DBMS_OUTPUT.PUT_LINE('PAST validate at least one Activity per Interaction in JTF_IH_PUB.Close_Interaction');
5472 	   	--SELECT outcome_id into l_outcome_id
5473 	   	SELECT outcome_id into l_interaction_rec.outcome_id
5474 	        FROM jtf_ih_interactions
5475 	        WHERE interaction_id = p_interaction_rec.interaction_id;
5476 		IF (l_interaction_rec.outcome_id IS NULL) or (l_interaction_rec.outcome_id = fnd_api.g_miss_num) THEN
5477 			x_return_status := fnd_api.g_ret_sts_error;
5478 		       	jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_interaction_rec.outcome_id),
5479 				    'outcome_id');
5480       -- # 1937894
5481       --
5482 			fnd_msg_pub.count_and_get
5483 				( p_count       => x_msg_count,
5484 				  p_data  => x_msg_data );
5485       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5486 			RETURN;
5487 		END IF;
5488 
5489       SELECT end_date_time, start_date_time, duration
5490       --into l_end_date_time, l_start_date_time, l_duration
5491       into   l_interaction_rec.end_date_time,
5492              l_interaction_rec.start_date_time,
5493              l_interaction_rec.duration
5494       FROM jtf_ih_interactions
5495       WHERE interaction_id = p_interaction_rec.interaction_id;
5496 
5497   -- Added by IAleshin 21-MAY-2002
5498   --
5499   IF ((p_interaction_rec.start_date_time IS NOT NULL)AND (p_interaction_rec.start_date_time <> fnd_api.g_miss_date)) THEN
5500       --l_start_date_time := p_interaction_rec.start_date_time;
5501       l_interaction_rec.start_date_time := p_interaction_rec.start_date_time;
5502   END IF;
5503 
5504   IF ((p_interaction_rec.end_date_time IS NOT NULL) AND (p_interaction_rec.end_date_time <> fnd_api.g_miss_date)) THEN
5505       --l_end_date_time := p_interaction_rec.end_date_time;
5506       l_interaction_rec.end_date_time := p_interaction_rec.end_date_time;
5507 		END IF;
5508 
5509   IF l_interaction_rec.end_date_time IS NULL THEN
5510      --l_end_date_time := SYSDATE;
5511      l_interaction_rec.end_date_time := SYSDATE;
5512   END IF;
5513 
5514 		Validate_StartEnd_Date
5515 			(	p_api_name    => l_api_name_full,
5516 				--p_start_date_time   => l_start_date_time,
5517 				p_start_date_time   => l_interaction_rec.start_date_time,
5518 				--p_end_date_time		=> l_end_date_time,
5519 				p_end_date_time		=> l_interaction_rec.end_date_time,
5520 				x_return_status     => l_return_status
5521 			);
5522 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5523 			RAISE fnd_api.g_exc_error;
5524 		END IF;
5525 
5526   IF((p_interaction_rec.duration <> fnd_api.g_miss_num) AND (p_interaction_rec.duration IS NOT NULL)) THEN
5527       --l_duration := p_interaction_rec.duration;
5528       l_interaction_rec.duration := p_interaction_rec.duration;
5529   ELSE
5530       -- 09/11/2002 - IAleshin
5531       -- If we have a value for duration then leave it, else recalculate duration for current Interaction
5532       --
5533       IF (l_interaction_rec.duration IS NULL) OR (l_interaction_rec.duration = 0) THEN
5534         --l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
5535         l_interaction_rec.duration := ROUND((l_interaction_rec.end_date_time - l_interaction_rec.start_date_time)*24*60*60);
5536       END IF;
5537   END IF;
5538 
5539 		FOR v_activity_id_c IN l_activity_id_c LOOP
5540 
5541       -- Added by IAleshin 21-MAY-2002
5542       --
5543       SELECT outcome_id, action_item_id, start_date_time, end_date_time, duration
5544       INTO la_outcome_id, l_action_item_id, la_start_date_time, la_end_date_time, la_duration
5545       FROM jtf_ih_activities
5546       WHERE activity_id = v_activity_id_c.activity_id;
5547 
5548 
5549 			IF (la_outcome_id IS NULL) OR (la_outcome_id = fnd_api.g_miss_num) THEN
5550 				x_return_status := fnd_api.g_ret_sts_error;
5551            -- Bug# 3779487 added by nchouras 4-AUG-2004
5552       la_out_act_list(1).token_name := 'API_NAME';
5553       la_out_act_list(1).token_value := l_api_name_full;
5554       la_out_act_list(2).token_name := 'VALUE1';
5555       la_out_act_list(2).token_value := la_outcome_id;
5556       la_out_act_list(3).token_name := 'PARAMETER1';
5557       la_out_act_list(3).token_value := 'outcome_id';
5558       la_out_act_list(4).token_name := 'PARAMETER2';
5559       la_out_act_list(4).token_value := 'activity';
5560       la_out_act_list(5).token_name := 'PARAMETER3';
5561       la_out_act_list(5).token_value := 'activity_id';
5562       la_out_act_list(6).token_name := 'VALUE2';
5563       la_out_act_list(6).token_value := v_activity_id_c.activity_id;
5564       msg_code := 'JTF_API_ALL_INVALID_OUTCOME';
5565       --end Bug# 3779487
5566 
5567       -- Bug# 3779487 changed l_outcome_id to la_outcome_id
5568       --			     jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(la_outcome_id),
5569       --						'outcome_id');
5570     	-- Bug# 3779487 added by nchouras 4-AUG-2004
5571       jtf_ih_core_util_pvt.add_invalid_argument_msg_gen( msg_code,
5572                                                          la_out_act_list);
5573 
5574 			     fnd_msg_pub.count_and_get
5575 				  (   p_count       => x_msg_count,
5576 				      p_data  => x_msg_data );
5577 			     RETURN;
5578 			END IF;
5579 
5580 			IF (l_action_item_id IS NULL) OR (l_action_item_id = fnd_api.g_miss_num) THEN
5581 				x_return_status := fnd_api.g_ret_sts_error;
5582 			     jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_action_item_id),
5583 						'action_item_id');
5584 			     RETURN;
5585 			END IF;
5586 
5587       IF la_end_date_time IS NULL THEN
5588     la_end_date_time := SYSDATE;
5589       END IF;
5590 		    Validate_StartEnd_Date
5591 			     (	p_api_name    => l_api_name_full,
5592 				    p_start_date_time   => la_start_date_time,
5593 				    p_end_date_time		=> la_end_date_time,
5594 				    x_return_status     => l_return_status
5595 			     );
5596 		      IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5597 			     RAISE fnd_api.g_exc_error;
5598 		      END IF;
5599 
5600         -- 09/11/2002 - IAleshin
5601         -- If we have a value for duration then leave it, else recalculate duration for current Activity.
5602         --
5603         IF (la_duration IS NULL) OR (la_duration = 0) THEN
5604         la_duration := ROUND((la_end_date_time - la_start_date_time)*24*60*60);
5605         END IF;
5606         -- Perf fix for literal Usage
5607         UPDATE jtf_ih_activities SET ACTIVE = l_active_perf,
5608                END_DATE_TIME = la_end_date_time, DURATION = la_duration
5609 	WHERE ACTIVITY_ID = v_activity_id_c.activity_id;
5610 
5611    /* --Commented by IAleshin 21-MAY-2002
5612       ----
5613 			l_outcome_id := NULL;
5614    			SELECT outcome_id
5615    			into l_outcome_id
5616 			FROM jtf_ih_activities
5617 			WHERE activity_id = v_activity_id_c.activity_id;
5618 			IF (l_outcome_id IS NULL) THEN
5619 				x_return_status := fnd_api.g_ret_sts_error;
5620 			   jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_outcome_id),
5621 						'outcome_id');
5622       -- # 1937894
5623       --
5624 			fnd_msg_pub.count_and_get
5625 				( p_count       => x_msg_count,
5626 				  p_data  => x_msg_data );
5627       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5628 			RETURN;
5629 			END IF;
5630 
5631 			IF (l_action_item_id IS NULL) THEN
5632 				x_return_status := fnd_api.g_ret_sts_error;
5633 			   jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_action_item_id),
5634 						'action_item_id');
5635     -- # 2281489
5636 			     fnd_msg_pub.count_and_get
5637 				( p_count       => x_msg_count,
5638 				  p_data  => x_msg_data );
5639     x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5640 			RETURN;
5641 			END IF;
5642 
5643 			SELECT end_date_time, outcome_id
5644 			into l_end_date_time, l_outcome_id
5645 			FROM jtf_ih_activities
5646 			WHERE activity_id = v_activity_id_c.activity_id;
5647 			IF (l_outcome_id IS NULL) or (l_outcome_id = fnd_api.g_miss_num) THEN
5648 				x_return_status := fnd_api.g_ret_sts_error;
5649 			       	jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_interaction_rec.outcome_id),
5650 				    'outcome_id');
5651     -- Bug# 1937894
5652     --
5653 				fnd_msg_pub.count_and_get
5654 					( p_count       => x_msg_count,
5655 					  p_data  => x_msg_data );
5656     x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5657 				RETURN;
5658 			END IF;
5659 
5660  			IF(l_end_date_time IS NULL) or (l_end_date_time = fnd_api.g_miss_date) THEN
5661 				l_end_date_time := SYSDATE;
5662 			END IF;
5663 			UPDATE jtf_ih_activities SET ACTIVE = 'N',end_date_time = l_end_date_time
5664 					WHERE activity_id = v_activity_id_c.activity_id;*/
5665 		END LOOP;
5666 		-- DBMS_OUTPUT.PUT_LINE('PAST Update ACTIVE in JTF_IH_PUB.Close_Interaction');
5667 
5668        -- Changed location by IAleshin
5669        -- Bug# 2418028
5670 	   -- Set active to 'N' for jtf_ih_interactions and related jtf_ih_activities
5671 	   --
5672 	   -- Check if end_date_time is currently 'null' or 'fnd_api.g_miss_date'
5673 	   -- If either of the above is true, then set end_date_time to sysdate
5674 	   --
5675 
5676            -- Perf fix for literal Usage
5677 	   UPDATE jtf_ih_interactions
5678            SET ACTIVE = l_active_perf,
5679            START_DATE_TIME = l_interaction_rec.start_date_time,
5680            end_date_time = l_interaction_rec.end_date_time,
5681            duration = l_interaction_rec.duration
5682 	   WHERE interaction_id = p_interaction_rec.interaction_id;
5683 
5684 			-- Post processing Call
5685 
5686 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'A', 'V') THEN
5687 				JTF_IH_PUB_VUHK.close_interaction_post(p_interaction_rec=>l_interaction_rec,
5688 						     x_data=>l_data,
5689 						     x_count=>l_count_hk,
5690 						     x_return_code=>l_return_code);
5691 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5692 					RAISE FND_API.G_EXC_ERROR;
5693 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5694 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5695 				END IF;
5696 			END IF;
5697 
5698 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'A', 'C') THEN
5699 				JTF_IH_PUB_CUHK.close_interaction_post(p_interaction_rec=>l_interaction_rec,
5700 						     x_data=>l_data,
5701 						     x_count=>l_count_hk,
5702 						     x_return_code=>l_return_code);
5703 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5704 					RAISE FND_API.G_EXC_ERROR;
5705 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5706 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5707 				END IF;
5708 			END IF;
5709 
5710 
5711 		-- Standard check of p_commit
5712 		IF fnd_api.to_boolean(p_commit) THEN
5713 			COMMIT WORK;
5714 		END IF;
5715 		-- Standard call to get message count and if count is 1, get message info
5716 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
5717 		EXCEPTION
5718 		WHEN fnd_api.g_exc_error THEN
5719 			ROLLBACK TO close_interaction_pub1;
5720 			x_return_status := fnd_api.g_ret_sts_error;
5721 			fnd_msg_pub.count_and_get
5722 				( p_count       => x_msg_count,
5723 				  p_data  => x_msg_data );
5724       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5725 		WHEN fnd_api.g_exc_unexpected_error THEN
5726 			ROLLBACK TO close_interaction_pub1;
5727 			x_return_status := fnd_api.g_ret_sts_unexp_error;
5728 			fnd_msg_pub.count_and_get
5729 				( p_count       => x_msg_count,
5730 				p_data  => x_msg_data );
5731       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5732 		WHEN OTHERS THEN
5733 			ROLLBACK TO close_interaction_pub1;
5734 			x_return_status := fnd_api.g_ret_sts_unexp_error;
5735 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
5736 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
5737 			END IF;
5738 			fnd_msg_pub.count_and_get
5739 				( p_count       => x_msg_count,
5740 				p_data  => x_msg_data );
5741       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
5742 
5743 	END Close_Interaction;
5744 
5745 --
5746 --
5747 -- History
5748 -- -------
5749 --		Author			Date		Description
5750 --		------			----		-----------
5751 --		Jean Zhu 		01/11/2000	Initial Version
5752 -- 		James Baldo Jr. 03/06/2000 	to fix bug: write cust_account_id column
5753 -- 		James Baldo Jr. 04/20/2000 	to fix bugdb 1275539: write doc_source_object_name
5754 --		James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
5755 --		Igor Aleshin	18-DEC-2001	Fix bug# 2153913
5756 --      Igor Aleshin    21-DEC-2001 Fix for bugdb - 2153913 - PREVENT G_MISS_DATE VALUE FROM BEING
5757 --            WRITTEN TO THE END_DATE_TIME VALUE.
5758 --      Igor Aleshin    04-MAR-2002 Added Attributes to Activitiy_Rec
5759 --      Igor Aleshin    10-MAY-2002 ENH# 2079963 - NEED INTERACTION HISTORY
5760 --          RECORD TO SUPPORT MULTIPLE AGENTS
5761 --      Igor Aleshin    20-MAY-2002 Changed the logic in Duration piece of code.
5762 --      Igor Aleshin    05-JUN-2002 Removed from statemements Resource_ID for Activity_Rec_Type
5763 --      Igor Aleshin    24-FEB-2003 Fixed bug# 2817083 - Error loggin interactions
5764 --
5765 
5766 PROCEDURE Add_Activity
5767 (
5768 	p_api_version		IN	NUMBER,
5769 	p_init_msg_list		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
5770 	p_commit			IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
5771 	p_resp_appl_id		IN	NUMBER	DEFAULT NULL,
5772 	p_resp_id			IN	NUMBER	DEFAULT NULL,
5773 	p_user_id			IN	NUMBER,
5774 	p_login_id			IN	NUMBER	DEFAULT NULL,
5775 	x_return_status		OUT NOCOPY	VARCHAR2,
5776 	x_msg_count			OUT NOCOPY	NUMBER,
5777 	x_msg_data			OUT NOCOPY	VARCHAR2,
5778 	p_activity_rec		IN	activity_rec_type,
5779 	x_activity_id		OUT NOCOPY NUMBER
5780 )
5781 AS
5782 		l_api_name   	CONSTANT VARCHAR2(30) := 'Add_Activity';
5783 		l_api_version      	CONSTANT NUMBER       := 1.0;
5784 		l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
5785 		l_return_status    	VARCHAR2(1);
5786 		--l_activity_id 	    	NUMBER;
5787 		--l_duration		NUMBER := NULL;
5788 		--l_start_date_time	DATE;
5789   -- Bug# 2153913
5790 		--l_end_date_time	    DATE;
5791 		l_active		VARCHAR2(1);
5792 		l_return_code		VARCHAR2(1);
5793 		l_data			VARCHAR2(2000);
5794 		l_count			NUMBER;
5795 		l_activity_rec		ACTIVITY_REC_TYPE;
5796   -- Bug# 2817083
5797                 l_inter_active	VARCHAR2(1) ;   -- Bug# 4477761
5798   DuplicateID     exception;
5799 	BEGIN
5800                 -- local variables initialization to remove GSCC warning
5801                 -- l_active := 'Y';
5802 
5803 		-- Standard start of API savepoint
5804 		SAVEPOINT add_activity_pub;
5805 			-- Preprocessing Call
5806 			l_activity_rec := p_activity_rec;
5807 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_ACTIVITY', 'B', 'C') THEN
5808 				JTF_IH_PUB_CUHK.add_activity_pre(p_activity_rec=>l_activity_rec,
5809 						     x_data=>l_data,
5810 						     x_count=>l_count,
5811 						     x_return_code=>l_return_code);
5812 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5813 					RAISE FND_API.G_EXC_ERROR;
5814 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5815 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5816 				END IF;
5817 			END IF;
5818 
5819 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_ACTIVITY', 'B', 'V') THEN
5820 				JTF_IH_PUB_VUHK.add_activity_pre(p_activity_rec=>l_activity_rec,
5821 						     x_data=>l_data,
5822 						     x_count=>l_count,
5823 						     x_return_code=>l_return_code);
5824 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
5825 					RAISE FND_API.G_EXC_ERROR;
5826 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5827 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5828 				END IF;
5829 			END IF;
5830 
5831 
5832 		-- Standard call to check for call compatibility
5833 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
5834               l_api_name, g_pkg_name) THEN
5835 		RAISE fnd_api.g_exc_unexpected_error;
5836 		END IF;
5837 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Add_Activity');
5838 
5839 		-- Initialize message list if p_init_msg_list is set to TRUE
5840 		IF fnd_api.to_boolean(p_init_msg_list) THEN
5841 		fnd_msg_pub.initialize;
5842 		END IF;
5843 
5844    		-- Initialize API return status to success
5845    		x_return_status := fnd_api.g_ret_sts_success;
5846 
5847    		--
5848 		-- Apply business-rule validation to all required and passed parameters
5849 		--
5850 		-- Validate user and login session IDs
5851 		--
5852 		IF (p_user_id IS NULL) THEN
5853 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
5854 				RAISE fnd_api.g_exc_error;
5855 		ELSE
5856 			jtf_ih_core_util_pvt.validate_who_info
5857 			( p_api_name        => l_api_name_full,
5858 				p_parameter_name_usr    => 'p_user_id',
5859 				p_parameter_name_log    => 'p_login_id',
5860 				p_user_id         => p_user_id,
5861 				p_login_id        => p_login_id,
5862 				x_return_status   => l_return_status );
5863 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5864 				RAISE fnd_api.g_exc_error;
5865 			END IF;
5866 		END IF;
5867 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Add_Activity');
5868 
5869 		--
5870 		-- Validate all non-missing attributes by calling the utility procedure.
5871 		--
5872 		Validate_Activity_Record
5873 		(	p_api_name      => l_api_name_full,
5874 			p_act_val_rec   => p_activity_rec,
5875 			p_resp_appl_id  => p_resp_appl_id,
5876 			p_resp_id       => p_resp_id,
5877 			x_return_status       => l_return_status
5878 		);
5879 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5880 			RAISE fnd_api.g_exc_error;
5881 		END IF;
5882 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_Activity_Record in JTF_IH_PUB.Add_Activity');
5883 
5884                 -- Bug# 4477761
5885                 -- Setting the Active status of the activity rec
5886                 -- based on the fact whether the Interaction it is
5887                 -- associated with is closed or open
5888                 -- If Activity added to closed interaction active status = 'N'
5889 
5890    		SELECT active
5891  		INTO   l_inter_active
5892  		FROM   JTF_IH_INTERACTIONS
5893  		WHERE   interaction_id = p_activity_rec.interaction_id;
5894 
5895  		IF l_inter_active = 'Y' THEN
5896  		  l_active   := 'Y';
5897  		ELSE
5898  		  l_active   := 'N';
5899                 END IF;
5900 
5901                 --End Bug# 4477761
5902 
5903   -- Changed by IAleshin 20-MAY-2002
5904 		IF (p_activity_rec.end_date_time <> fnd_api.g_miss_DATE) AND (p_activity_rec.end_date_time IS NOT NULL) THEN
5905 		  --l_end_date_time := p_activity_rec.end_date_time;
5906 		  l_activity_rec.end_date_time := p_activity_rec.end_date_time;
5907                  ELSIF l_active = 'N' THEN      --Bug# 4477761 add activity to closed interaction
5908                     --l_end_date_time := SYSDATE;
5909                     l_activity_rec.end_date_time := SYSDATE;
5910                  ELSE
5911 			--l_end_date_time := null;
5912 			l_activity_rec.end_date_time := null;
5913 		END IF;
5914 
5915 		IF ((p_activity_rec.start_date_time <> fnd_api.g_miss_date) AND (p_activity_rec.start_date_time IS NOT NULL)) THEN
5916 			--l_start_date_time := p_activity_rec.start_date_time;
5917 			l_activity_rec.start_date_time := p_activity_rec.start_date_time;
5918 		ELSE
5919 			--l_start_date_time := SYSDATE;
5920 			l_activity_rec.start_date_time := SYSDATE;
5921 		END IF;
5922 
5923 		Validate_StartEnd_Date(	p_api_name    => l_api_name_full,
5924 				    --p_start_date_time   => l_start_date_time,
5925 				    p_start_date_time   => l_activity_rec.start_date_time,
5926 				    --p_end_date_time		=> l_end_date_time,
5927 				    p_end_date_time	    => l_activity_rec.end_date_time,
5928 				    x_return_status     => l_return_status);
5929 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
5930 				RAISE fnd_api.g_exc_error;
5931 			END IF;
5932 
5933 		IF ((p_activity_rec.duration IS NOT NULL) AND (p_activity_rec.duration <> fnd_api.g_miss_num))THEN
5934 			--l_duration := p_activity_rec.duration;
5935 			l_activity_rec.duration := p_activity_rec.duration;
5936 		ELSIF(l_activity_rec.end_date_time IS NOT NULL) THEN
5937 			--l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
5938 			l_activity_rec.duration := ROUND((l_activity_rec.end_date_time - l_activity_rec.start_date_time)*24*60*60);
5939 		END IF;
5940 
5941   -- Removed by IAleshin 06/04/2002
5942   -- Enh# 2079963
5943   /*IF( p_activity_rec.resource_id IS NOT NULL) AND (p_activity_rec.resource_id <> fnd_api.g_miss_num) THEN
5944    	  SELECT count(resource_id) into l_count
5945     FROM jtf_rs_resource_extns
5946     WHERE resource_id = p_activity_rec.resource_id;
5947     IF (l_count <= 0) THEN
5948      	  x_return_status := fnd_api.g_ret_sts_error;
5949      	  jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_activity_rec.resource_id),'resource_id');
5950 	         RETURN;
5951 	      END IF;
5952       l_activity_rec.resource_id := p_activity_rec.resource_id;
5953   ELSE
5954       -- If resource_id is null or g_miss_num, then get value from parent interaction
5955       SELECT resource_id INTO l_activity_rec.resource_id
5956       FROM jtf_ih_interactions WHERE interaction_id = p_activity_rec.interaction_id;
5957   END IF;*/
5958 
5959   -- Bug 2817083
5960   --l_activity_id := Get_Activity_ID(NULL);
5961   l_activity_rec.activity_id := Get_Activity_ID(NULL);
5962 		--SELECT JTF_IH_ACTIVITIES_S1.NextVal into l_activity_id FROM dual;
5963 
5964     validate_source_code(l_api_name_full, l_activity_rec.source_code_id, l_activity_rec.source_code, x_return_status);
5965 		IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
5966 			RAISE fnd_api.g_exc_error;
5967 		END IF;
5968 
5969 		INSERT INTO jtf_ih_Activities
5970 		(
5971 			ACTIVITY_ID,
5972 			OBJECT_ID,
5973 			OBJECT_TYPE,
5974 			SOURCE_CODE_ID,
5975 			SOURCE_CODE,
5976 			DURATION,
5977 			DESCRIPTION,
5978 			DOC_ID,
5979 			DOC_REF,
5980 			DOC_SOURCE_OBJECT_NAME,
5981 			END_DATE_TIME,
5982 			RESULT_ID,
5983 			REASON_ID,
5984 			START_DATE_TIME,
5985 			ACTION_ID,
5986 			INTERACTION_ACTION_TYPE,
5987 			MEDIA_ID,
5988 			OUTCOME_ID,
5989 			ACTION_ITEM_ID,
5990 			INTERACTION_ID,
5991 			TASK_ID,
5992 			CREATION_DATE,
5993 			CREATED_BY,
5994 			LAST_UPDATED_BY,
5995 			LAST_UPDATE_DATE,
5996 			LAST_UPDATE_LOGIN,
5997 			CUST_ACCOUNT_ID,
5998       ATTRIBUTE1,
5999       ATTRIBUTE2,
6000       ATTRIBUTE3,
6001       ATTRIBUTE4,
6002       ATTRIBUTE5,
6003       ATTRIBUTE6,
6004       ATTRIBUTE7,
6005       ATTRIBUTE8,
6006       ATTRIBUTE9,
6007       ATTRIBUTE10,
6008       ATTRIBUTE11,
6009       ATTRIBUTE12,
6010       ATTRIBUTE13,
6011       ATTRIBUTE14,
6012       ATTRIBUTE15,
6013       ATTRIBUTE_CATEGORY,
6014 			ACTIVE,
6015       SCRIPT_TRANS_ID,
6016       ROLE
6017 --      ,RESOURCE_ID
6018 		)
6019 		VALUES
6020 		(
6021 			--l_activity_id,
6022 			l_activity_rec.activity_id,
6023 			decode( p_activity_rec.object_id, fnd_api.g_miss_num, null, p_activity_rec.object_id),
6024       decode( p_activity_rec.object_type, fnd_api.g_miss_char, null, p_activity_rec.object_type),
6025 			decode( l_activity_rec.source_code_id, fnd_api.g_miss_num, null, l_activity_rec.source_code_id),
6026 			decode( l_activity_rec.source_code, fnd_api.g_miss_char, null, l_activity_rec.source_code),
6027 			--l_duration,
6028 			l_activity_rec.duration,
6029 			decode( p_activity_rec.description, fnd_api.g_miss_char, null, p_activity_rec.description),
6030 			decode( p_activity_rec.doc_id, fnd_api.g_miss_num, null, p_activity_rec.doc_id),
6031 			decode( p_activity_rec.doc_ref, fnd_api.g_miss_char, null, p_activity_rec.doc_ref),
6032 			decode( p_activity_rec.doc_source_object_name, fnd_api.g_miss_char, null, p_activity_rec.doc_source_object_name),
6033 			--l_end_date_time,
6034 			l_activity_rec.end_date_time,
6035 			decode( p_activity_rec.result_id, fnd_api.g_miss_num, null, p_activity_rec.result_id),
6036 			decode( p_activity_rec.reason_id, fnd_api.g_miss_num, null, p_activity_rec.reason_id),
6037 			--l_start_date_time,
6038 			l_activity_rec.start_date_time,
6039 			decode( p_activity_rec.action_id, fnd_api.g_miss_num, null, p_activity_rec.action_id),
6040 			decode( p_activity_rec.interaction_action_type, fnd_api.g_miss_char, null, p_activity_rec.interaction_action_type),
6041 			decode( p_activity_rec.media_id, fnd_api.g_miss_num, null, p_activity_rec.media_id),
6042 			decode( p_activity_rec.outcome_id, fnd_api.g_miss_num, null, p_activity_rec.outcome_id),
6043 			decode( p_activity_rec.action_item_id, fnd_api.g_miss_num, null, p_activity_rec.action_item_id),
6044 			p_activity_rec.interaction_id,
6045 			decode( p_activity_rec.task_id, fnd_api.g_miss_num, null, p_activity_rec.task_id),
6046 			Sysdate,
6047 			p_user_id,
6048 			p_user_id,
6049 			Sysdate,
6050 			p_login_id,
6051 			decode( p_activity_rec.cust_account_id, fnd_api.g_miss_num, null, p_activity_rec.cust_account_id),
6052 			decode( p_activity_rec.attribute1, fnd_api.g_miss_char, null, p_activity_rec.attribute1),
6053 			decode( p_activity_rec.attribute2, fnd_api.g_miss_char, null, p_activity_rec.attribute2),
6054 			decode( p_activity_rec.attribute3, fnd_api.g_miss_char, null, p_activity_rec.attribute3),
6055 			decode( p_activity_rec.attribute4, fnd_api.g_miss_char, null, p_activity_rec.attribute4),
6056 			decode( p_activity_rec.attribute5, fnd_api.g_miss_char, null, p_activity_rec.attribute5),
6057 			decode( p_activity_rec.attribute6, fnd_api.g_miss_char, null, p_activity_rec.attribute6),
6058 			decode( p_activity_rec.attribute7, fnd_api.g_miss_char, null, p_activity_rec.attribute7),
6059       decode( p_activity_rec.attribute8, fnd_api.g_miss_char, null, p_activity_rec.attribute8),
6060       decode( p_activity_rec.attribute9, fnd_api.g_miss_char, null, p_activity_rec.attribute9),
6061       decode( p_activity_rec.attribute10, fnd_api.g_miss_char, null, p_activity_rec.attribute10),
6062       decode( p_activity_rec.attribute11, fnd_api.g_miss_char, null, p_activity_rec.attribute11),
6063       decode( p_activity_rec.attribute12, fnd_api.g_miss_char, null, p_activity_rec.attribute12),
6064       decode( p_activity_rec.attribute13, fnd_api.g_miss_char, null, p_activity_rec.attribute13),
6065       decode( p_activity_rec.attribute14, fnd_api.g_miss_char, null, p_activity_rec.attribute14),
6066       decode( p_activity_rec.attribute15, fnd_api.g_miss_char, null, p_activity_rec.attribute15),
6067       decode( p_activity_rec.attribute_category, fnd_api.g_miss_char, null, p_activity_rec.attribute_category),
6068 			l_active,
6069       decode( p_activity_rec.script_trans_id, fnd_api.g_miss_num, null, p_activity_rec.script_trans_id),
6070       decode( p_activity_rec.role, fnd_api.g_miss_char, null, p_activity_rec.role)
6071 --      ,l_activity_rec.resource_id
6072 		);
6073 		-- DBMS_OUTPUT.PUT_LINE('PAST INSERT INTO jtf_ih_activities in JTF_IH_PUB.Add_Activity');
6074 
6075 		--
6076 		-- Set OUT value
6077 		--
6078 		--x_activity_id := l_activity_id;
6079 		x_activity_id := l_activity_rec.activity_id;
6080 
6081 			-- Post processing Call
6082 
6083 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_ACTIVITY', 'A', 'V') THEN
6084 				JTF_IH_PUB_VUHK.add_activity_post(p_activity_rec=>l_activity_rec,
6085 						     x_data=>l_data,
6086 						     x_count=>l_count,
6087 						     x_return_code=>l_return_code);
6088 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6089 					RAISE FND_API.G_EXC_ERROR;
6090 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6091 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6092 				END IF;
6093 			END IF;
6094 
6095 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_ACTIVITY', 'A', 'C') THEN
6096 				JTF_IH_PUB_CUHK.add_activity_post(p_activity_rec=>l_activity_rec,
6097 						     x_data=>l_data,
6098 						     x_count=>l_count,
6099 						     x_return_code=>l_return_code);
6100 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6101 					RAISE FND_API.G_EXC_ERROR;
6102 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6103 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6104 				END IF;
6105 			END IF;
6106 
6107 
6108 
6109 
6110 		-- Standard check of p_commit
6111 		IF fnd_api.to_boolean(p_commit) THEN
6112 			COMMIT WORK;
6113 		END IF;
6114 
6115 		-- Standard call to get message count and if count is 1, get message info
6116 		fnd_msg_pub.count_and_get(p_count  => x_msg_count, p_data   => x_msg_data );
6117 		EXCEPTION
6118 		WHEN fnd_api.g_exc_error THEN
6119 			ROLLBACK TO add_activity_pub;
6120 			x_return_status := fnd_api.g_ret_sts_error;
6121 			fnd_msg_pub.count_and_get
6122 				( p_count       => x_msg_count,
6123 				p_data  => x_msg_data );
6124       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
6125 		WHEN fnd_api.g_exc_unexpected_error THEN
6126 			ROLLBACK TO add_activity_pub;
6127 			x_return_status := fnd_api.g_ret_sts_unexp_error;
6128 			fnd_msg_pub.count_and_get
6129 				( p_count       => x_msg_count,
6130 				p_data  => x_msg_data );
6131       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
6132 		WHEN OTHERS THEN
6133 			ROLLBACK TO add_activity_pub;
6134 			x_return_status := fnd_api.g_ret_sts_unexp_error;
6135 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
6136 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
6137 			END IF;
6138 			fnd_msg_pub.count_and_get
6139 				( p_count       => x_msg_count,
6140 				p_data  => x_msg_data );
6141       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
6142 	END Add_Activity;
6143 
6144 
6145 --
6146 --
6147 -- History
6148 -- -------
6149 --		Author			Date		Description
6150 --		------			----		-----------
6151 --		Jean Zhu 		01/11/2000	Initial Version
6152 -- 		James Baldo Jr. 03/06/2000 	to fix bug: write cust_account_id column
6153 -- 		James Baldo Jr. 04/20/2000 	to fix bugdb 1275539: write doc_source_object_name
6154 --		James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
6155 --		James Baldo Jr.	05-MAY-2000	Fix for updateing start_date_time bug
6156 --      Igor Aleshin    28-SEP-2001 Fix performance issue for multiple updates. Based on bugdb # 2029051
6157 --      Igor Aleshin    18-DEC-2001 Fix bug# 2153913
6158 --      Igor Aleshin    04-MAR-2002 Added Attributes to Activity_Rec
6159 --      Igor Aleshin    10-MAY-2002 ENH# 2079963 - NEED INTERACTION HISTORY RECORD TO
6160 --          SUPPORT MULTIPLE AGENTS
6161 --      Igor Aleshin    21-MAY-2002 Modified duration calculation
6162 --      Igor Aleshin    05-JUN-2002 Removed from statemements Resource_ID for Activity_Rec_Type
6163 --      Igor Aleshin    11-SEP-2002 Fixed duration overwrite issue
6164 --      Igor Aleshin    19-FEB-2003 Fixed bug# 2804696 - TRANSACTION_ID IS NOT GETTING LOGGED IN INTERACTION TABLES
6165 --      Igor Aleshin    29-AUG-2003 Fixed bug#3117798 - BR1159: UPDATING SOURCE CODE IN INTERACTIONS GIVES API ERROR.
6166 --
6167 
6168 PROCEDURE Update_Activity
6169 (
6170 	p_api_version		IN	NUMBER,
6171 	p_init_msg_list		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
6172 	p_commit		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
6173 	p_resp_appl_id		IN	NUMBER	DEFAULT NULL,
6174 	p_resp_id		IN	NUMBER	DEFAULT NULL,
6175 	p_user_id		IN	NUMBER,
6176 	p_login_id		IN	NUMBER	DEFAULT NULL,
6177 	x_return_status		OUT NOCOPY	VARCHAR2,
6178 	x_msg_count		OUT NOCOPY	NUMBER,
6179 	x_msg_data		OUT NOCOPY	VARCHAR2,
6180 	p_activity_rec		IN	activity_rec_type,
6181     -- Bug# 2012159
6182     p_object_version IN NUMBER DEFAULT NULL
6183 )
6184 AS
6185 		l_api_name   	CONSTANT VARCHAR2(30) := 'Update_Activity';
6186 		l_api_version      	CONSTANT NUMBER       := 1.0;
6187 		l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
6188 		l_return_status    	VARCHAR2(1);
6189 		--l_start_date_time	DATE;
6190 		--l_end_date_time		DATE;
6191 		--l_duration		NUMBER := NULL;
6192 		l_count			NUMBER := 0;
6193 		l_active		VARCHAR2(1) := NULL;
6194 		l_return_code		VARCHAR2(1);
6195 		l_data			VARCHAR2(2000);
6196 		l_count_hk		NUMBER;
6197 		l_activity_rec		ACTIVITY_REC_TYPE;
6198   -- Added by Igor
6199   -- 2012459
6200   --
6201   l_activity_id      NUMBER;
6202 	    --l_cust_account_id        NUMBER;
6203 	    --l_cust_org_id      NUMBER;
6204 	    --l_role       VARCHAR2(240);
6205 	    --l_task_id          NUMBER;
6206 	    --l_doc_id           NUMBER;
6207 	    --l_doc_ref          VARCHAR2(30);
6208 	    --l_doc_source_object_name       VARCHAR2(80);
6209 	    --l_media_id         NUMBER;
6210 	    --l_action_item_id         NUMBER;
6211 	    --l_interaction_id         NUMBER;
6212 	    --l_outcome_id       NUMBER;
6213 	    --l_result_id        NUMBER;
6214 	    --l_reason_id        NUMBER;
6215 	    --l_description      VARCHAR2(1000);
6216 	    --l_action_id        NUMBER;
6217 	    --l_interaction_action_type      VARCHAR2(240);
6218 	    --l_object_id        NUMBER;
6219 	    --l_object_type      VARCHAR2(30);
6220 	    --l_source_code_id         NUMBER;
6221 	    --l_source_code      VARCHAR2(100);
6222 	    --l_script_trans_id        NUMBER;
6223   l_object_version         NUMBER;
6224   --l_attribute1       VARCHAR2(150);
6225   --l_attribute2       VARCHAR2(150);
6226   --l_attribute3       VARCHAR2(150);
6227   --l_attribute4       VARCHAR2(150);
6228   --l_attribute5       VARCHAR2(150);
6229   --l_attribute6       VARCHAR2(150);
6230   --l_attribute7       VARCHAR2(150);
6231   --l_attribute8       VARCHAR2(150);
6232   --l_attribute9       VARCHAR2(150);
6233   --l_attribute10       VARCHAR2(150);
6234   --l_attribute11       VARCHAR2(150);
6235   --l_attribute12       VARCHAR2(150);
6236   --l_attribute13       VARCHAR2(150);
6237   --l_attribute14       VARCHAR2(150);
6238   --l_attribute15       VARCHAR2(150);
6239   --l_attribute_category      VARCHAR2(150);
6240   -- Removed by IAleshin 06/05/2002
6241   --l_resource_id       NUMBER;
6242 	l_recalc_duration		BOOLEAN;
6243 
6244   l_profile_id       VARCHAR2(20);  --profile option id check to update closed interaction
6245 
6246   CURSOR c_Activity_crs IS SELECT * FROM JTF_IH_ACTIVITIES
6247       WHERE Activity_ID = p_activity_rec.activity_id;
6248   rc_Activity  c_Activity_crs%ROWTYPE;
6249 
6250 	BEGIN
6251 		-- Stand!rd start of API savepoint
6252 		SAVEPOINT update_activity_pub;
6253 
6254 			-- Preprocessing Call
6255 			l_activity_rec := p_activity_rec;
6256 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITY', 'B', 'C') THEN
6257 				JTF_IH_PUB_CUHK.update_activity_pre(p_activity_rec=>l_activity_rec,
6258 						     x_data=>l_data,
6259 						     x_count=>l_count_hk,
6260 						     x_return_code=>l_return_code);
6261 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6262 					RAISE FND_API.G_EXC_ERROR;
6263 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6264 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6265 				END IF;
6266 			END IF;
6267 
6268 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITY', 'B', 'V') THEN
6269 				JTF_IH_PUB_VUHK.update_activity_pre(p_activity_rec=>l_activity_rec,
6270 						     x_data=>l_data,
6271 						     x_count=>l_count,
6272 						     x_return_code=>l_return_code);
6273 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6274 					RAISE FND_API.G_EXC_ERROR;
6275 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6276 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6277 				END IF;
6278 			END IF;
6279 
6280 		-- Standard call to check for call compatibility
6281 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
6282               l_api_name, g_pkg_name) THEN
6283 		RAISE fnd_api.g_exc_unexpected_error;
6284 		END IF;
6285 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Update_Activity');
6286 
6287 		-- Initialize message list if p_init_msg_list is set to TRUE
6288 		IF fnd_api.to_boolean(p_init_msg_list) THEN
6289 		fnd_msg_pub.initialize;
6290 		END IF;
6291 
6292    		-- Initialize API return status to success
6293    		x_return_status := fnd_api.g_ret_sts_success;
6294 
6295    		--
6296 		-- Apply business-rule validation to all required and passed parameters
6297 		--
6298 		-- Validate user and login session IDs
6299 		--
6300 		IF (p_user_id IS NULL) THEN
6301 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
6302 				RAISE fnd_api.g_exc_error;
6303 		ELSE
6304 			jtf_ih_core_util_pvt.validate_who_info
6305 			(	p_api_name        => l_api_name_full,
6306 				p_parameter_name_usr    => 'p_user_id',
6307 				p_parameter_name_log    => 'p_login_id',
6308 				p_user_id         => p_user_id,
6309 				p_login_id        => p_login_id,
6310 				x_return_status   => l_return_status );
6311 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
6312 				RAISE fnd_api.g_exc_error;
6313 			END IF;
6314 		END IF;
6315 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Update_Activity');
6316 
6317 		--
6318 		-- Validate all non-missing attributes by calling the utility procedure.
6319 		--
6320 		Validate_Activity_Record
6321 		(	p_api_name      => l_api_name_full,
6322 			p_act_val_rec   => p_activity_rec,
6323 			p_resp_appl_id  => p_resp_appl_id,
6324 			p_resp_id       => p_resp_id,
6325 			x_return_status       => l_return_status
6326 		);
6327 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
6328 			RAISE fnd_api.g_exc_error;
6329 		END IF;
6330 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_Activity_Record in JTF_IH_PUB.Update_Activity');
6331 
6332 		--
6333 		-- Update table JTF_IH_INTERACTIONS
6334 		--
6335 		IF (p_activity_rec.activity_id IS NULL) THEN
6336 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'activity_id');
6337 				RAISE fnd_api.g_exc_error;
6338 		ELSE
6339    			l_count := 0;
6340    			SELECT count(*) into l_count
6341 			FROM jtf_ih_activities
6342 			WHERE activity_id = p_activity_rec.activity_id;
6343 			IF (l_count <> 1) THEN
6344 				x_return_status := fnd_api.g_ret_sts_error;
6345 				jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_activity_rec.activity_id),
6346 					    'activity_id');
6347 				RETURN;
6348 			ELSE
6349 
6350     OPEN c_Activity_crs;
6351 		      FETCH c_Activity_crs INTO  rc_Activity;
6352 		          IF (c_Activity_crs%notfound) THEN
6353 			         x_return_status := fnd_api.g_ret_sts_error;
6354 			         jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_activity_rec.activity_id),
6355 							   'Activity_id');
6356 			         RETURN;
6357 		          END IF;
6358       l_active := rc_Activity.Active;
6359 
6360                              -- Bug# 4477761 check if profile option is turned on
6361 	    		     -- If yes then allow update on closed activity
6362 			     fnd_profile.get('JTF_IH_ALLOW_INT_UPDATE_AFTER_CLOSE',l_profile_id);
6363  				IF(l_active <> 'N') OR (l_active = 'N' AND l_profile_id = 'Y') THEN
6364 					l_recalc_duration := FALSE;
6365 					IF (p_activity_rec.start_date_time <> fnd_api.g_miss_date) AND (p_activity_rec.start_date_time IS NOT NULL) THEN
6366 						--l_start_date_time := p_activity_rec.start_date_time;
6367 						l_activity_rec.start_date_time := p_activity_rec.start_date_time;
6368 						-- duration may need to be recalculated based on the new value - RDD
6369 						l_recalc_duration := TRUE;
6370 					ELSE
6371       						--l_start_date_time := rc_Activity.Start_Date_Time;
6372       						l_activity_rec.start_date_time := rc_Activity.Start_Date_Time;
6373 					END IF;
6374 
6375 					IF ((p_activity_rec.end_date_time IS NOT NULL) AND (p_activity_rec.end_date_time <> fnd_api.g_miss_date)) THEN
6376 						--l_end_date_time := p_activity_rec.end_date_time;
6377 						l_activity_rec.end_date_time := rc_Activity.End_Date_Time;
6378 						-- duration may need to be recalculated based on the new value - RDD
6379 						l_recalc_duration := TRUE;
6380         ELSE
6381       --l_end_date_time := rc_Activity.End_Date_Time;
6382       l_activity_rec.end_date_time := rc_Activity.End_Date_Time;
6383 					END IF;
6384 
6385 					Validate_StartEnd_Date
6386 						(	p_api_name    	=> l_api_name_full,
6387 							--p_start_date_time   	=> l_start_date_time,
6388 							p_start_date_time   	=> l_activity_rec.start_date_time,
6389 							--p_end_date_time		=> l_end_date_time,
6390 							p_end_date_time		=> l_activity_rec.end_date_time,
6391 							x_return_status     	=> l_return_status
6392 						);
6393 						IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
6394 							RAISE fnd_api.g_exc_error;
6395 						END IF;
6396 
6397  			-- Determine if duration recalc can be done.  We require start and end date. - RDD
6398 			IF l_recalc_duration = TRUE THEN
6399 				IF l_activity_rec.end_date_time IS NULL THEN
6400 					l_recalc_duration := FALSE;
6401 				END IF;
6402 			END IF;
6403 
6404 		   -- Added expression based on the bug# 2560551
6405 			IF(p_activity_rec.duration <> fnd_api.g_miss_num) AND (p_activity_rec.duration IS NOT NULL) THEN
6406 				--l_duration := p_activity_rec.duration;
6407 				l_activity_rec.duration := p_activity_rec.duration;
6408 			ELSE
6409 				IF l_recalc_duration = TRUE THEN
6410 					--l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
6411 					l_activity_rec.duration := ROUND((l_activity_rec.end_date_time - l_activity_rec.start_date_time)*24*60*60);
6412 				ELSE
6413 					--l_duration := rc_Activity.duration;
6414 					l_activity_rec.duration := rc_Activity.duration;
6415 				END IF;
6416 			END IF;
6417 
6418 					--IF(p_activity_rec.cust_account_id = fnd_api.g_miss_num) OR (p_activity_rec.cust_account_id IS NULL) THEN
6419 					IF(p_activity_rec.cust_account_id = fnd_api.g_miss_num) THEN
6420                         --l_cust_account_id := rc_Activity.cust_account_id;
6421                         l_activity_rec.cust_account_id := rc_Activity.cust_account_id;
6422                     ELSE
6423                         --l_cust_account_id := p_activity_rec.cust_account_id;
6424                         l_activity_rec.cust_account_id := p_activity_rec.cust_account_id;
6425 					END IF;
6426 
6427 					--IF(p_activity_rec.cust_org_id = fnd_api.g_miss_num) OR (p_activity_rec.cust_org_id IS NULL) THEN
6428 					IF(p_activity_rec.cust_org_id = fnd_api.g_miss_num) THEN
6429                         --l_cust_org_id := rc_Activity.cust_org_id;
6430                         l_activity_rec.cust_org_id := rc_Activity.cust_org_id;
6431                     ELSE
6432                         --l_cust_org_id := p_activity_rec.cust_org_id;
6433                         l_activity_rec.cust_org_id := p_activity_rec.cust_org_id;
6434 					END IF;
6435 
6436 					--IF(p_activity_rec.role = fnd_api.g_miss_char) OR (p_activity_rec.role IS NULL) THEN
6437 					IF(p_activity_rec.role = fnd_api.g_miss_char)  THEN
6438                         --l_role := rc_Activity.role;
6439                         l_activity_rec.role := rc_Activity.role;
6440                     ELSE
6441                         --l_role := p_activity_rec.role;
6442                         l_activity_rec.role := p_activity_rec.role;
6443 					END IF;
6444 
6445 					--IF(p_activity_rec.outcome_id = fnd_api.g_miss_num) OR (p_activity_rec.outcome_id IS NULL) THEN
6446 					IF(p_activity_rec.outcome_id = fnd_api.g_miss_num) THEN
6447                         --l_outcome_id := rc_Activity.outcome_id;
6448                         l_activity_rec.outcome_id := rc_Activity.outcome_id;
6449                     ELSE
6450                         --l_outcome_id := p_activity_rec.outcome_id;
6451                         l_activity_rec.outcome_id := p_activity_rec.outcome_id;
6452 					END IF;
6453 
6454 					--IF(p_activity_rec.result_id	= fnd_api.g_miss_num) OR (p_activity_rec.result_id IS NULL) THEN
6455 					IF(p_activity_rec.result_id	= fnd_api.g_miss_num) THEN
6456                         --l_result_id := rc_Activity.result_id;
6457                         l_activity_rec.result_id := rc_Activity.result_id;
6458                     ELSE
6459                         --l_result_id := p_activity_rec.result_id;
6460                         l_activity_rec.result_id := p_activity_rec.result_id;
6461 					END IF;
6462 
6463 					--IF(p_activity_rec.reason_id	= fnd_api.g_miss_num) OR (p_activity_rec.reason_id IS NULL) THEN
6464 					IF(p_activity_rec.reason_id	= fnd_api.g_miss_num) THEN
6465                         --l_reason_id := rc_Activity.reason_id;
6466                         l_activity_rec.reason_id := rc_Activity.reason_id;
6467                     ELSE
6468                         --l_reason_id := p_activity_rec.reason_id;
6469                         l_activity_rec.reason_id := p_activity_rec.reason_id;
6470 					END IF;
6471 
6472 					--IF(p_activity_rec.task_id = fnd_api.g_miss_num) OR (p_activity_rec.task_id IS NULL) THEN
6473 					IF(p_activity_rec.task_id = fnd_api.g_miss_num) THEN
6474                         --l_task_id := rc_Activity.task_id;
6475                         l_activity_rec.task_id := rc_Activity.task_id;
6476                     ELSE
6477                         --l_task_id := p_activity_rec.task_id;
6478                         l_activity_rec.task_id := p_activity_rec.task_id;
6479 					END IF;
6480 
6481 					--IF(p_activity_rec.object_id	= fnd_api.g_miss_num) OR (p_activity_rec.object_id IS NULL) THEN
6482 					IF(p_activity_rec.object_id	= fnd_api.g_miss_num) THEN
6483                         --l_object_id := rc_Activity.object_id;
6484                         l_activity_rec.object_id := rc_Activity.object_id;
6485                     ELSE
6486                         --l_object_id := p_activity_rec.object_id;
6487                         l_activity_rec.object_id := p_activity_rec.object_id;
6488 					END IF;
6489 
6490 					--IF(p_activity_rec.object_type = fnd_api.g_miss_char) OR (p_activity_rec.object_type IS NULL)  THEN
6491 					IF(p_activity_rec.object_type = fnd_api.g_miss_char) THEN
6492                       --l_object_type := rc_Activity.object_type;
6493                       l_activity_rec.object_type := rc_Activity.object_type;
6494                     ELSE
6495                       --l_object_type := p_activity_rec.object_type;
6496                       l_activity_rec.object_type := p_activity_rec.object_type;
6497 					END IF;
6498 
6499                     IF(p_activity_rec.source_code_id = fnd_api.g_miss_num)
6500                         AND (p_activity_rec.source_code = fnd_api.g_miss_char) THEN
6501                             --l_source_code_id := rc_Activity.source_code_id;
6502                             l_activity_rec.source_code_id := rc_Activity.source_code_id;
6503                             --l_source_code := rc_Activity.source_code;
6504                             l_activity_rec.source_code := rc_Activity.source_code;
6505                     ELSE
6506                         --l_source_code_id := p_activity_rec.source_code_id;
6507                         l_activity_rec.source_code_id := p_activity_rec.source_code_id;
6508                         --l_source_code := p_activity_rec.source_code;
6509                         l_activity_rec.source_code := p_activity_rec.source_code;
6510                     END IF;
6511 
6512 
6513 
6514 					--IF(p_activity_rec.doc_id = fnd_api.g_miss_num) OR (p_activity_rec.doc_id IS NULL) THEN
6515 					IF(p_activity_rec.doc_id = fnd_api.g_miss_num) THEN
6516                         --l_doc_id := rc_Activity.doc_id;
6517                         l_activity_rec.doc_id := rc_Activity.doc_id;
6518                     ELSE
6519                         --l_doc_id := p_activity_rec.doc_id;
6520                         l_activity_rec.doc_id := p_activity_rec.doc_id;
6521 					END IF;
6522 
6523 					--IF(p_activity_rec.doc_ref = fnd_api.g_miss_char) OR (p_activity_rec.doc_ref IS NULL) THEN
6524 					IF(p_activity_rec.doc_ref = fnd_api.g_miss_char) THEN
6525                         --l_doc_ref := rc_Activity.doc_ref;
6526                         l_activity_rec.doc_ref := rc_Activity.doc_ref;
6527                     ELSE
6528                         --l_doc_ref := p_activity_rec.doc_ref;
6529                         l_activity_rec.doc_ref := p_activity_rec.doc_ref;
6530 					END IF;
6531 
6532 					--IF(p_activity_rec.doc_source_object_name = fnd_api.g_miss_char) OR (p_activity_rec.doc_source_object_name IS NULL) THEN
6533 					IF(p_activity_rec.doc_source_object_name = fnd_api.g_miss_char) THEN
6534                         --l_doc_source_object_name := rc_Activity.doc_source_object_name;
6535                         l_activity_rec.doc_source_object_name := rc_Activity.doc_source_object_name;
6536                     ELSE
6537                         --l_doc_source_object_name := p_activity_rec.doc_source_object_name;
6538                         l_activity_rec.doc_source_object_name := p_activity_rec.doc_source_object_name;
6539 					END IF;
6540 
6541 					--IF(p_activity_rec.media_id = fnd_api.g_miss_num) OR (p_activity_rec.media_id IS NULL) THEN
6542 					IF(p_activity_rec.media_id = fnd_api.g_miss_num) THEN
6543                         --l_media_id := rc_Activity.media_id;
6544                         l_activity_rec.media_id := rc_Activity.media_id;
6545                     ELSE
6546                         --l_media_id := p_activity_rec.media_id;
6547                         l_activity_rec.media_id := p_activity_rec.media_id;
6548 					END IF;
6549 
6550 					--IF(p_activity_rec.action_item_id = fnd_api.g_miss_num) OR (p_activity_rec.action_item_id IS NULL) THEN
6551 					IF(p_activity_rec.action_item_id = fnd_api.g_miss_num) THEN
6552                         --l_action_item_id := rc_Activity.action_item_id;
6553                         l_activity_rec.action_item_id := rc_Activity.action_item_id;
6554                     ELSE
6555                         --l_action_item_id := p_activity_rec.action_item_id;
6556                         l_activity_rec.action_item_id := p_activity_rec.action_item_id;
6557 					END IF;
6558 
6559 					--IF(p_activity_rec.interaction_id = fnd_api.g_miss_num) OR (p_activity_rec.interaction_id IS NULL) THEN
6560 					IF(p_activity_rec.interaction_id = fnd_api.g_miss_num) THEN
6561                         --l_interaction_id := rc_Activity.interaction_id;
6562                         l_activity_rec.interaction_id := rc_Activity.interaction_id;
6563                     ELSE
6564                         --l_interaction_id := p_activity_rec.interaction_id;
6565                         l_activity_rec.interaction_id := p_activity_rec.interaction_id;
6566 					END IF;
6567 
6568 					--IF(p_activity_rec.description = fnd_api.g_miss_char) OR (p_activity_rec.description IS NULL) THEN
6569 					IF(p_activity_rec.description = fnd_api.g_miss_char) THEN
6570                         --l_description := rc_Activity.description;
6571                         l_activity_rec.description := rc_Activity.description;
6572                     ELSE
6573                         --l_description := p_activity_rec.description;
6574                         l_activity_rec.description := p_activity_rec.description;
6575 					END IF;
6576 
6577 					--IF(p_activity_rec.action_id	= fnd_api.g_miss_num) OR (p_activity_rec.action_id IS NULL) THEN
6578 					IF(p_activity_rec.action_id	= fnd_api.g_miss_num) THEN
6579                         --l_action_id := rc_Activity.action_id;
6580                         l_activity_rec.action_id := rc_Activity.action_id;
6581                     ELSE
6582                         --l_action_id := p_activity_rec.action_id;
6583                         l_activity_rec.action_id := p_activity_rec.action_id;
6584 					END IF;
6585 
6586 					--IF(p_activity_rec.interaction_action_type = fnd_api.g_miss_char) OR (p_activity_rec.interaction_action_type IS NULL) THEN
6587 					IF(p_activity_rec.interaction_action_type = fnd_api.g_miss_char) THEN
6588                         --l_interaction_action_type := rc_Activity.interaction_action_type;
6589                         l_activity_rec.interaction_action_type := rc_Activity.interaction_action_type;
6590                     ELSE
6591                         --l_interaction_action_type := p_activity_rec.interaction_action_type;
6592                         l_activity_rec.interaction_action_type := p_activity_rec.interaction_action_type;
6593 					END IF;
6594 
6595  		      --
6596  		      -- Check if object_version_number requires updating
6597  		      --
6598  		      IF (p_object_version IS NULL)  then
6599                  l_object_version := rc_Activity.object_version_number;
6600  		      ELSE
6601  		         l_object_version := p_object_version;
6602  		      END IF;
6603 
6604         --
6605         -- Check Attributes requires updating
6606         --
6607 					IF(p_activity_rec.attribute1 = fnd_api.g_miss_char) THEN
6608                         --l_attribute1 := rc_Activity.attribute1;
6609                         l_activity_rec.attribute1 := rc_Activity.attribute1;
6610                     ELSE
6611                         --l_attribute1 := p_activity_rec.attribute1;
6612                         l_activity_rec.attribute1 := p_activity_rec.attribute1;
6613 					END IF;
6614 
6615 					IF(p_activity_rec.attribute2 = fnd_api.g_miss_char) THEN
6616                         --l_attribute2 := rc_Activity.attribute1;
6617                         l_activity_rec.attribute2 := rc_Activity.attribute1;
6618                     ELSE
6619                         --l_attribute2 := p_activity_rec.attribute2;
6620                         l_activity_rec.attribute2 := p_activity_rec.attribute2;
6621 					END IF;
6622 
6623 					IF(p_activity_rec.attribute3 = fnd_api.g_miss_char) THEN
6624                         --l_attribute3 := rc_Activity.attribute3;
6625                         l_activity_rec.attribute3 := rc_Activity.attribute3;
6626                     ELSE
6627                         --l_attribute3 := p_activity_rec.attribute3;
6628                         l_activity_rec.attribute3 := p_activity_rec.attribute3;
6629 					END IF;
6630 
6631 					IF(p_activity_rec.attribute4 = fnd_api.g_miss_char) THEN
6632                         --l_attribute4 := rc_Activity.attribute4;
6633                         l_activity_rec.attribute4 := rc_Activity.attribute4;
6634                     ELSE
6635                         --l_attribute4 := p_activity_rec.attribute4;
6636                         l_activity_rec.attribute4 := p_activity_rec.attribute4;
6637 					END IF;
6638 
6639 					IF(p_activity_rec.attribute5 = fnd_api.g_miss_char) THEN
6640                         --l_attribute5 := rc_Activity.attribute5;
6641                         l_activity_rec.attribute5 := rc_Activity.attribute5;
6642                     ELSE
6643                         --l_attribute5 := p_activity_rec.attribute5;
6644                         l_activity_rec.attribute5 := p_activity_rec.attribute5;
6645 					END IF;
6646 
6647 					IF(p_activity_rec.attribute6 = fnd_api.g_miss_char) THEN
6648                         --l_attribute6 := rc_Activity.attribute6;
6649                         l_activity_rec.attribute6 := rc_Activity.attribute6;
6650                     ELSE
6651                         --l_attribute6 := p_activity_rec.attribute6;
6652                         l_activity_rec.attribute6 := p_activity_rec.attribute6;
6653 					END IF;
6654 
6655 					IF(p_activity_rec.attribute7 = fnd_api.g_miss_char) THEN
6656                         --l_attribute7 := rc_Activity.attribute7;
6657                         l_activity_rec.attribute7 := rc_Activity.attribute7;
6658                     ELSE
6659                         --l_attribute7 := p_activity_rec.attribute7;
6660                         l_activity_rec.attribute7 := p_activity_rec.attribute7;
6661 					END IF;
6662 
6663 					IF(p_activity_rec.attribute8 = fnd_api.g_miss_char) THEN
6664                         --l_attribute8 := rc_Activity.attribute8;
6665                         l_activity_rec.attribute8 := rc_Activity.attribute8;
6666                     ELSE
6667                         --l_attribute8 := p_activity_rec.attribute8;
6668                         l_activity_rec.attribute8 := p_activity_rec.attribute8;
6669 					END IF;
6670 
6671 					IF(p_activity_rec.attribute9 = fnd_api.g_miss_char) THEN
6672                         --l_attribute9 := rc_Activity.attribute9;
6673                         l_activity_rec.attribute9 := rc_Activity.attribute9;
6674                     ELSE
6675                         --l_attribute9 := p_activity_rec.attribute9;
6676                         l_activity_rec.attribute9 := p_activity_rec.attribute9;
6677 					END IF;
6678 
6679 					IF(p_activity_rec.attribute10 = fnd_api.g_miss_char) THEN
6680                         --l_attribute10 := rc_Activity.attribute10;
6681                         l_activity_rec.attribute10 := rc_Activity.attribute10;
6682                     ELSE
6683                         --l_attribute10 := p_activity_rec.attribute10;
6684                         l_activity_rec.attribute10 := p_activity_rec.attribute10;
6685 					END IF;
6686 
6687 					IF(p_activity_rec.attribute11 = fnd_api.g_miss_char) THEN
6688                         --l_attribute11 := rc_Activity.attribute11;
6689                         l_activity_rec.attribute11 := rc_Activity.attribute11;
6690                     ELSE
6691                         --l_attribute11 := p_activity_rec.attribute11;
6692                         l_activity_rec.attribute11 := p_activity_rec.attribute11;
6693 					END IF;
6694 
6695 					IF(p_activity_rec.attribute12 = fnd_api.g_miss_char) THEN
6696                         --l_attribute12 := rc_Activity.attribute12;
6697                         l_activity_rec.attribute12 := rc_Activity.attribute12;
6698                     ELSE
6699                         --l_attribute12 := p_activity_rec.attribute12;
6700                         l_activity_rec.attribute12 := p_activity_rec.attribute12;
6701 					END IF;
6702 
6703 					IF(p_activity_rec.attribute13 = fnd_api.g_miss_char) THEN
6704                         --l_attribute13 := rc_Activity.attribute13;
6705                         l_activity_rec.attribute13 := rc_Activity.attribute13;
6706                     ELSE
6707                         --l_attribute13 := p_activity_rec.attribute13;
6708                         l_activity_rec.attribute13 := p_activity_rec.attribute13;
6709 					END IF;
6710 
6711 					IF(p_activity_rec.attribute14 = fnd_api.g_miss_char) THEN
6712                         --l_attribute14 := rc_Activity.attribute14;
6713                         l_activity_rec.attribute14 := rc_Activity.attribute14;
6714                     ELSE
6715                         --l_attribute14 := p_activity_rec.attribute14;
6716                         l_activity_rec.attribute14 := p_activity_rec.attribute14;
6717 					END IF;
6718 
6719 					IF(p_activity_rec.attribute15 = fnd_api.g_miss_char) THEN
6720                         --l_attribute15 := rc_Activity.attribute15;
6721                         l_activity_rec.attribute15 := rc_Activity.attribute15;
6722                     ELSE
6723                         --l_attribute15 := p_activity_rec.attribute15;
6724                         l_activity_rec.attribute15 := p_activity_rec.attribute15;
6725 					END IF;
6726 
6727 					IF(p_activity_rec.attribute_category = fnd_api.g_miss_char) THEN
6728                         --l_attribute_category := rc_Activity.attribute_category;
6729                         l_activity_rec.attribute_category := rc_Activity.attribute_category;
6730                     ELSE
6731                         --l_attribute_category := p_activity_rec.attribute_category;
6732                         l_activity_rec.attribute_category := p_activity_rec.attribute_category;
6733 					END IF;
6734 
6735         -- Bug# 2804696
6736 					IF(p_activity_rec.script_trans_id = fnd_api.g_miss_num) THEN
6737                         --l_script_trans_id := rc_Activity.script_trans_id;
6738                         l_activity_rec.script_trans_id := rc_Activity.script_trans_id;
6739                     ELSE
6740                         --l_script_trans_id := p_activity_rec.script_trans_id;
6741                         l_activity_rec.script_trans_id := p_activity_rec.script_trans_id;
6742 					END IF;
6743 
6744 
6745         -- Removed by IAleshin - 06/05/2002
6746         /*
6747 					IF(p_activity_rec.resource_id = fnd_api.g_miss_num) THEN
6748       l_resource_id := rc_Activity.resource_id;
6749         ELSE
6750       SELECT count(resource_id) into l_count
6751           FROM jtf_rs_resource_extns
6752         WHERE resource_id = p_activity_rec.resource_id;
6753         IF (l_count <= 0) THEN
6754      	      x_return_status := fnd_api.g_ret_sts_error;
6755      	      jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_activity_rec.resource_id),'resource_id');
6756 	           RETURN;
6757 	          END IF;
6758       l_resource_id := p_activity_rec.resource_id;
6759 					END IF;*/
6760 
6761         -- 08/26/03 mpetrosi B3102306
6762         -- added cross check of source_code, source_code_id
6763         validate_source_code(l_api_name, l_activity_rec.source_code_id,
6764                              l_activity_rec.source_code, l_return_status);
6765 		    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
6766 			    RAISE fnd_api.g_exc_error;
6767 		    END IF;
6768 
6769         UPDATE jtf_ih_activities SET
6770 	           cust_account_id = l_activity_rec.cust_account_id,
6771 	           cust_org_id = l_activity_rec.cust_org_id,
6772 	           role = l_activity_rec.role,
6773 	           LAST_UPDATED_BY	= p_user_id,
6774                    LAST_UPDATE_DATE	= sysdate,
6775 	           end_date_time = l_activity_rec.end_date_time,
6776 	           start_date_time = l_activity_rec.start_date_time,
6777                    duration = l_activity_rec.duration,
6778 	           task_id = l_activity_rec.task_id,
6779 	           doc_id = l_activity_rec.doc_id,
6780 	           doc_ref = l_activity_rec.doc_ref,
6781 	           doc_source_object_name = l_activity_rec.doc_source_object_name,
6782 	           media_id = l_activity_rec.media_id,
6783 	           action_item_id = l_activity_rec.action_item_id,
6784 	           outcome_id = l_activity_rec.outcome_id,
6785 	           result_id = l_activity_rec.result_id,
6786 	           reason_id = l_activity_rec.reason_id,
6787 	           description = l_activity_rec.description,
6788 	           action_id = l_activity_rec.action_id,
6789 	           interaction_action_type = l_activity_rec.interaction_action_type,
6790 	           object_id = l_activity_rec.object_id,
6791 	           object_type = l_activity_rec.object_type,
6792 	           source_code_id = decode( l_activity_rec.source_code_id, fnd_api.g_miss_num, NULL, l_activity_rec.source_code_id),
6793 	           source_code = decode( l_activity_rec.source_code, fnd_api.g_miss_char, NULL, l_activity_rec.source_code),
6794 	           script_trans_id = l_activity_rec.script_trans_id,
6795                object_version_number = l_object_version,
6796                attribute1 = l_activity_rec.attribute1,
6797                attribute2 = l_activity_rec.attribute2,
6798                attribute3 = l_activity_rec.attribute3,
6799                attribute4 = l_activity_rec.attribute4,
6800                attribute5 = l_activity_rec.attribute5,
6801                attribute6 = l_activity_rec.attribute6,
6802                attribute7 = l_activity_rec.attribute7,
6803                attribute8 = l_activity_rec.attribute8,
6804                attribute9 = l_activity_rec.attribute9,
6805                attribute10 = l_activity_rec.attribute10,
6806                attribute11 = l_activity_rec.attribute11,
6807                attribute12 = l_activity_rec.attribute12,
6808                attribute13 = l_activity_rec.attribute13,
6809                attribute14 = l_activity_rec.attribute14,
6810                attribute15 = l_activity_rec.attribute15,
6811                attribute_category = l_activity_rec.attribute_category
6812          -- resource_id = l_resource_id
6813         WHERE Activity_id = p_activity_rec.activity_id;
6814         CLOSE c_Activity_crs;
6815 				ELSE
6816 				  --jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(p_activity_rec.activity_id),
6817   				  --    'activity is currently set to N');
6818 				  --Bug# 4477761 new error msg
6819 				  IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_error) THEN
6820 				    fnd_message.set_name('JTF', 'JTF_IH_ACT_UPDATE_NOT_ALLOW');
6821 				    fnd_message.set_token('ACT_ID', to_char(p_activity_rec.activity_id));
6822 				    fnd_msg_pub.add;
6823  	                          END IF;
6824 				  RAISE fnd_api.g_exc_error ;
6825 				END IF;
6826 			END IF;
6827 		END IF;
6828 		-- DBMS_OUTPUT.PUT_LINE('PAST update table jtf_ih_activities in JTF_IH_PUB.Update_Activity');
6829 
6830 			-- Post processing Call
6831 
6832 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITY', 'A', 'V') THEN
6833 				JTF_IH_PUB_VUHK.update_activity_post(p_activity_rec=>l_activity_rec,
6834 						     x_data=>l_data,
6835 						     x_count=>l_count_hk,
6836 						     x_return_code=>l_return_code);
6837 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6838 					RAISE FND_API.G_EXC_ERROR;
6839 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6840 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6841 				END IF;
6842 			END IF;
6843 
6844 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITY', 'A', 'C') THEN
6845 				JTF_IH_PUB_CUHK.update_activity_post(p_activity_rec=>l_activity_rec,
6846 						     x_data=>l_data,
6847 						     x_count=>l_count_hk,
6848 						     x_return_code=>l_return_code);
6849 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6850 					RAISE FND_API.G_EXC_ERROR;
6851 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6852 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6853 				END IF;
6854 			END IF;
6855 
6856 
6857 		-- Standard check of p_commit
6858 		IF fnd_api.to_boolean(p_commit) THEN
6859 			COMMIT WORK;
6860 		END IF;
6861 
6862 		-- Standard call to get message count and if count is 1, get message info
6863 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
6864 		EXCEPTION
6865 		WHEN fnd_api.g_exc_error THEN
6866 			ROLLBACK TO update_activity_pub;
6867 			x_return_status := fnd_api.g_ret_sts_error;
6868 			fnd_msg_pub.count_and_get
6869 				( p_count       => x_msg_count,
6870 				p_data  => x_msg_data );
6871       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
6872 		WHEN fnd_api.g_exc_unexpected_error THEN
6873 			ROLLBACK TO update_activity_pub;
6874 			x_return_status := fnd_api.g_ret_sts_unexp_error;
6875 			fnd_msg_pub.count_and_get
6876 				( p_count       => x_msg_count,
6877 				p_data  => x_msg_data );
6878       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
6879 		WHEN OTHERS THEN
6880 			ROLLBACK TO update_activity_pub;
6881 			x_return_status := fnd_api.g_ret_sts_unexp_error;
6882 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
6883 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
6884 			END IF;
6885 			fnd_msg_pub.count_and_get
6886 				( p_count       => x_msg_count,
6887 				p_data  => x_msg_data );
6888       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
6889 	END Update_Activity;
6890 
6891 --
6892 --
6893 -- History
6894 -- -------
6895 --		Author			Date		Description
6896 --		------			----		-----------
6897 --		Jean Zhu		01/11/2000	Initial build
6898 --		James Baldo Jr.		25-APR-2000	User Hooks Customer and Vertical Industry
6899 --		James Baldo Jr.		24-MAY-2000	Implementation fix for bugdb 1311491 - duration not being calculated
6900 --		James Baldo Jr.		27-JUL-2000	Implementation fix for bugdb 1339925 - start_date_time > end_date_time
6901 --      Igor Aleshin  21-MAY-2002 Modified duration calculation for Activities
6902 --      Igor Aleshin  11-SEP-2002 Fixed bug# 2560551 - TST1158.8: FUNC: DEBUG - ALL INTERACTIONS
6903 --              DISPLAYS INTERACTION DURATION AS 0
6904 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
6905 --
6906 --
6907 
6908 PROCEDURE Close_Interaction
6909 (
6910 	p_api_version		IN	NUMBER,
6911 	p_init_msg_list		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
6912 	p_commit		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
6913 	p_resp_appl_id		IN	NUMBER	DEFAULT NULL,
6914 	p_resp_id		IN	NUMBER	DEFAULT NULL,
6915 	p_user_id		IN	NUMBER,
6916 	p_login_id		IN	NUMBER	DEFAULT NULL,
6917 	x_return_status		OUT NOCOPY	VARCHAR2,
6918 	x_msg_count		OUT NOCOPY	NUMBER,
6919 	x_msg_data		OUT NOCOPY	VARCHAR2,
6920 	p_interaction_id	IN	NUMBER
6921 )
6922 AS
6923 		l_api_name   	CONSTANT VARCHAR2(30) := 'Close_Interaction';
6924 		l_api_version      	CONSTANT NUMBER       := 1.0;
6925 		l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
6926 		l_return_status    	VARCHAR2(1);
6927 		l_outcome_id		NUMBER := NULL;
6928 		l_end_date_time		DATE := NULL;
6929 		l_start_date_time	DATE := NULL;
6930 		l_duration		NUMBER := NULL;
6931 		l_action_item_id	NUMBER := NULL;
6932 		l_return_code		VARCHAR2(1);
6933 		l_data			VARCHAR2(2000);
6934 		l_count_hk		NUMBER;
6935 		l_interaction_id	NUMBER;
6936 
6937   -- Bug# 2560551
6938     la_outcome_id		NUMBER := NULL;
6939 		la_end_date_time	DATE := NULL;
6940 		la_start_date_time	DATE := NULL;
6941 		la_duration		    NUMBER := NULL;
6942   -- Bug# 3779487
6943   	msg_code 			VARCHAR2(50);
6944 		la_out_act_list		jtf_ih_core_util_pvt.param_tbl_type;
6945 
6946   -- Perf fix for literal Usage
6947   l_duration_perf          NUMBER;
6948   l_active_perf            VARCHAR2(1);
6949 
6950 		 CURSOR	l_activity_id_c IS
6951 			SELECT activity_id FROM jtf_ih_activities
6952 			WHERE interaction_id = p_interaction_id;
6953 	BEGIN
6954 		SAVEPOINT close_interaction_pub2;
6955 
6956    -- Perf variables
6957    l_duration_perf := 0;
6958    l_active_perf := 'N';
6959 
6960 			-- Preprocessing Call
6961 			l_interaction_id := p_interaction_id;
6962 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'B', 'C') THEN
6963 				JTF_IH_PUB_CUHK.close_interaction_pre(p_interaction_id=>l_interaction_id,
6964 						     x_data=>l_data,
6965 						     x_count=>l_count_hk,
6966 						     x_return_code=>l_return_code);
6967 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6968 					RAISE FND_API.G_EXC_ERROR;
6969 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6970 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6971 				END IF;
6972 			END IF;
6973 
6974 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'B', 'V') THEN
6975 				JTF_IH_PUB_VUHK.close_interaction_pre(p_interaction_id=>l_interaction_id,
6976 						     x_data=>l_data,
6977 						     x_count=>l_count_hk,
6978 						     x_return_code=>l_return_code);
6979 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
6980 					RAISE FND_API.G_EXC_ERROR;
6981 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6982 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6983 				END IF;
6984 			END IF;
6985 
6986 		-- Standard call to check for call compatibility
6987 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
6988               l_api_name, g_pkg_name) THEN
6989 		RAISE fnd_api.g_exc_unexpected_error;
6990 		END IF;
6991 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Close_Interaction_2');
6992 
6993 		-- Initialize message list if p_init_msg_list is set to TRUE
6994 		IF fnd_api.to_boolean(p_init_msg_list) THEN
6995 		fnd_msg_pub.initialize;
6996 		END IF;
6997 
6998    		-- Initialize API return status to success
6999    		x_return_status := fnd_api.g_ret_sts_success;
7000 
7001    		--
7002 		-- Apply business-rule validation to all required and passed parameters
7003 		--
7004 		-- Validate user and login session IDs
7005 		--
7006 		IF (p_user_id IS NULL) THEN
7007 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
7008 				RAISE fnd_api.g_exc_error;
7009 		ELSE
7010 			jtf_ih_core_util_pvt.validate_who_info
7011 			( p_api_name        => l_api_name_full,
7012 				p_parameter_name_usr    => 'p_user_id',
7013 				p_parameter_name_log    => 'p_login_id',
7014 				p_user_id         => p_user_id,
7015 				p_login_id        => p_login_id,
7016 				x_return_status   => l_return_status );
7017 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7018 				RAISE fnd_api.g_exc_error;
7019 			END IF;
7020 		END IF;
7021 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Close_Interaction_2');
7022 
7023    	SELECT outcome_id, end_date_time, start_date_time, duration
7024         INTO l_outcome_id, l_end_date_time, l_start_date_time, l_duration
7025         FROM jtf_ih_interactions
7026         WHERE interaction_id = p_interaction_id;
7027 		IF ((l_outcome_id IS NULL) OR (l_outcome_id = fnd_api.g_miss_num)) THEN
7028 			x_return_status := fnd_api.g_ret_sts_error;
7029 	       jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_outcome_id),
7030 				    'outcome_id');
7031 		RETURN;
7032 		END IF;
7033 
7034 --	SELECT end_date_time, start_date_time into l_end_date_time, l_start_date_time
7035 --	FROM jtf_ih_interactions
7036 --	WHERE interaction_id = p_interaction_id;
7037 
7038 		IF ((l_end_date_time IS NULL) OR (l_end_date_time = FND_API.G_MISS_DATE)) THEN
7039 			l_end_date_time := SYSDATE;
7040 		END IF;
7041 		Validate_StartEnd_Date
7042 			(	p_api_name    => l_api_name_full,
7043 				p_start_date_time   => l_start_date_time,
7044 				p_end_date_time		=> l_end_date_time,
7045 				x_return_status     => l_return_status
7046 			);
7047 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7048 			RAISE fnd_api.g_exc_error;
7049 		END IF;
7050 
7051   IF (l_duration = 0) OR (l_duration IS NULL) THEN
7052 		  l_duration := ROUND(( l_end_date_time - l_start_date_time)*24*60*60);
7053   END IF;
7054 
7055 		FOR v_activity_id_c IN l_activity_id_c LOOP
7056       --
7057       -- Added by IAleshin 21-MAY-2002
7058       --
7059       SELECT outcome_id, action_item_id, start_date_time, end_date_time, duration
7060       INTO la_outcome_id, l_action_item_id, la_start_date_time, la_end_date_time, la_duration
7061       FROM jtf_ih_activities
7062       WHERE activity_id = v_activity_id_c.activity_id;
7063 
7064 
7065 			IF (l_outcome_id IS NULL) OR (l_outcome_id = fnd_api.g_miss_num) THEN
7066 				x_return_status := fnd_api.g_ret_sts_error;
7067 
7068       -- Bug# 3779487 added by nchouras 4-AUG-2004
7069       la_out_act_list(1).token_name := 'API_NAME';
7070       la_out_act_list(1).token_value := l_api_name_full;
7071       la_out_act_list(2).token_name := 'VALUE1';
7072       la_out_act_list(2).token_value := la_outcome_id;
7073       la_out_act_list(3).token_name := 'PARAMETER1';
7074       la_out_act_list(3).token_value := 'outcome_id';
7075       la_out_act_list(4).token_name := 'PARAMETER2';
7076       la_out_act_list(4).token_value := 'activity';
7077       la_out_act_list(5).token_name := 'PARAMETER3';
7078       la_out_act_list(5).token_value := 'activity_id';
7079       la_out_act_list(6).token_name := 'VALUE2';
7080       la_out_act_list(6).token_value := v_activity_id_c.activity_id;
7081       msg_code := 'JTF_API_ALL_INVALID_OUTCOME';
7082       --end Bug# 3779487
7083 
7084 			   -- jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_outcome_id),
7085 					--	'outcome_id');
7086         jtf_ih_core_util_pvt.add_invalid_argument_msg_gen( msg_code,
7087                                                            la_out_act_list);
7088 			     fnd_msg_pub.count_and_get
7089 				  (   p_count       => x_msg_count,
7090 				      p_data  => x_msg_data );
7091 			     RETURN;
7092 			END IF;
7093 
7094 			IF (l_action_item_id IS NULL) OR (l_action_item_id = fnd_api.g_miss_num) THEN
7095 				x_return_status := fnd_api.g_ret_sts_error;
7096 			     jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_action_item_id),
7097 						'action_item_id');
7098 			     RETURN;
7099 			END IF;
7100 
7101       -- Bug# 2560551
7102       IF (la_end_date_time IS NULL) OR (la_end_date_time = fnd_api.g_miss_date) THEN
7103       -- IF (l_end_date_time IS NULL) THEN
7104     la_end_date_time := SYSDATE;
7105       END IF;
7106 
7107 		    Validate_StartEnd_Date
7108 			     (	p_api_name    => l_api_name_full,
7109 				    p_start_date_time   => la_start_date_time,
7110 				    p_end_date_time		=> la_end_date_time,
7111 				    x_return_status     => l_return_status
7112 			    );
7113 
7114 		      IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7115 			     RAISE fnd_api.g_exc_error;
7116 		      END IF;
7117         IF (la_duration = 0) OR (la_duration IS NULL) THEN
7118         la_duration := ROUND((la_end_date_time - la_start_date_time)*24*60*60);
7119         END IF;
7120 			  UPDATE jtf_ih_activities SET ACTIVE = l_active_perf,END_DATE_TIME = la_end_date_time, DURATION = la_duration
7121 					WHERE ACTIVITY_ID = v_activity_id_c.activity_id;
7122 			/*l_outcome_id := NULL;
7123    			SELECT outcome_id into l_outcome_id
7124 			FROM jtf_ih_activities
7125 			WHERE activity_id = v_activity_id_c.activity_id;
7126 			IF (l_outcome_id IS NULL) THEN
7127 				x_return_status := fnd_api.g_ret_sts_error;
7128 			   jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_outcome_id),
7129 						'outcome_id');
7130 			RETURN;
7131 			END IF;
7132 
7133 			l_action_item_id := NULL;
7134    			SELECT action_item_id into l_action_item_id
7135 			FROM jtf_ih_activities
7136 			WHERE activity_id = v_activity_id_c.activity_id;
7137 			IF (l_action_item_id IS NULL) THEN
7138 				x_return_status := fnd_api.g_ret_sts_error;
7139 			   jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name_full, to_char(l_action_item_id),
7140 						'action_item_id');
7141 			RETURN;
7142 			END IF;
7143 
7144 			l_duration := NULL;
7145 			SELECT end_date_time, start_date_time into l_end_date_time, l_start_date_time
7146 			FROM jtf_ih_activities
7147 			WHERE activity_id = v_activity_id_c.activity_id;
7148 			IF ((l_end_date_time IS NULL) OR (l_end_date_time = FND_API.G_MISS_DATE)) THEN
7149 				l_end_date_time := SYSDATE;
7150 			END IF;
7151 			l_duration := ROUND((l_end_date_time - l_start_date_time) * 24 * 60);
7152 
7153 
7154 					IF l_duration = FND_API.G_MISS_NUM
7155 	           THEN l_duration:= NULL;
7156 	        END IF;
7157 
7158 			UPDATE jtf_ih_activities SET ACTIVE = 'N',end_date_time = l_end_date_time, duration = l_duration
7159 					WHERE interaction_id = p_interaction_id;*/
7160 		END LOOP;
7161 		-- DBMS_OUTPUT.PUT_LINE('PAST Update ACTIVE in JTF_IH_PUB.Close_Interaction_2');
7162 
7163   -- Bug# 2418345
7164 		--
7165 		-- Set active to 'N' for jtf_ih_interactions and related jtf_ih_activities
7166 		--
7167                 -- Perf fix for literal Usage
7168 		UPDATE jtf_ih_interactions SET ACTIVE = l_active_perf,end_date_time =l_end_date_time,
7169       duration = decode(l_duration, fnd_api.g_miss_num, l_duration_perf, l_duration)
7170 				WHERE interaction_id = p_interaction_id;
7171 
7172 			-- Post processing Call
7173 
7174 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'A', 'V') THEN
7175 				JTF_IH_PUB_VUHK.close_interaction_post(p_interaction_id=>l_interaction_id,
7176 						     x_data=>l_data,
7177 						     x_count=>l_count_hk,
7178 						     x_return_code=>l_return_code);
7179 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7180 					RAISE FND_API.G_EXC_ERROR;
7181 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7182 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7183 				END IF;
7184 			END IF;
7185 
7186 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_INTERACTION', 'A', 'C') THEN
7187 				JTF_IH_PUB_CUHK.close_interaction_post(p_interaction_id=>l_interaction_id,
7188 						     x_data=>l_data,
7189 						     x_count=>l_count_hk,
7190 						     x_return_code=>l_return_code);
7191 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7192 					RAISE FND_API.G_EXC_ERROR;
7193 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7194 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7195 				END IF;
7196 			END IF;
7197 
7198 
7199 
7200 		-- Standard check of p_commit
7201 		IF fnd_api.to_boolean(p_commit) THEN
7202 			COMMIT WORK;
7203 		END IF;
7204 
7205 		-- Standard call to get message count and if count is 1, get message info
7206 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
7207 		EXCEPTION
7208 		WHEN fnd_api.g_exc_error THEN
7209 			ROLLBACK TO close_interaction_pub2;
7210 			x_return_status := fnd_api.g_ret_sts_error;
7211 			fnd_msg_pub.count_and_get
7212 				( p_count       => x_msg_count,
7213 				p_data  => x_msg_data );
7214       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7215 		WHEN fnd_api.g_exc_unexpected_error THEN
7216 			ROLLBACK TO close_interaction_pub2;
7217 			x_return_status := fnd_api.g_ret_sts_unexp_error;
7218 			fnd_msg_pub.count_and_get
7219 				( p_count       => x_msg_count,
7220 				p_data  => x_msg_data );
7221       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7222 		WHEN OTHERS THEN
7223 			ROLLBACK TO close_interaction_pub2;
7224 			x_return_status := fnd_api.g_ret_sts_unexp_error;
7225 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
7226 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
7227 			END IF;
7228 			fnd_msg_pub.count_and_get
7229 				( p_count       => x_msg_count,
7230 				p_data  => x_msg_data );
7231       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7232 	END Close_Interaction;
7233 
7234 
7235 --
7236 --	HISTORY
7237 --
7238 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
7239 --	------		----		--------------------------
7240 --
7241 --	Jean Zhu	11-JAN-2000	INITIAL VERSION
7242 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
7243 --	James Baldo Jr.	31-JUL-2000	Implementation fix for bugdb # 1341094 to correct
7244 --					updates on activities that have ACTIVE = N
7245 --	Igor Aleshin	5-NOV-2002	Fixed bug# 2656975 - IH-API:  UPDATE_ACTIVITITYDURATION
7246 --					NOT CALCULATING THE DURATION CORRECTLY.
7247 --	Rick Day	19-NOV-2002     Corrected issues with coding of 2656975 and general proc. structure
7248 PROCEDURE Update_ActivityDuration
7249 (
7250 	p_api_version		IN	NUMBER,
7251 	p_init_msg_list		IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
7252 	p_commit			IN	VARCHAR2 DEFAULT FND_API.G_FALSE,
7253 	p_resp_appl_id		IN	NUMBER	DEFAULT NULL,
7254 	p_resp_id			IN	NUMBER	DEFAULT NULL,
7255 	p_user_id			IN	NUMBER,
7256 	p_login_id			IN	NUMBER	DEFAULT NULL,
7257 	x_return_status		OUT NOCOPY	VARCHAR2,
7258 	x_msg_count			OUT NOCOPY	NUMBER,
7259 	x_msg_data			OUT NOCOPY	VARCHAR2,
7260 	p_activity_id		IN	NUMBER,
7261 	p_end_date_time		IN  DATE,
7262 	p_duration			IN	NUMBER,
7263     -- Bug# 2012159
7264     p_object_version IN NUMBER DEFAULT NULL
7265 
7266 )
7267 AS
7268 	l_api_name   	CONSTANT VARCHAR2(30) := 'Update_ActivityDuration';
7269 	l_api_version      	CONSTANT NUMBER       := 1.0;
7270 	l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
7271 	l_return_status    	VARCHAR2(1);
7272 	l_start_date_time	DATE;
7273 	l_return_code		VARCHAR2(1);
7274 	l_data			    VARCHAR2(2000);
7275 	l_count			    NUMBER;
7276 	l_activity_id		NUMBER;
7277 	l_end_date_time		DATE;
7278 	l_duration		    NUMBER;
7279 	l_active		    VARCHAR2(1) := NULL;
7280 	l_recalc_duration   BOOLEAN := TRUE;
7281 	BEGIN
7282 
7283 		-- Standard start of API savepoint
7284 		SAVEPOINT update_activityDuration;
7285 
7286 		-- No Activity ID - No Update possible
7287 		IF (p_activity_id IS NULL) THEN
7288 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'activity_id');
7289 			RAISE fnd_api.g_exc_error;
7290 		END IF;
7291 
7292 		-- If duration and end_date are null or have g_miss values then raise an exception
7293 		-- "Not specified required End_Date_Time and Duration"
7294 		-- Bug# 2656975
7295 		IF ((p_duration IS NULL) OR (p_duration = fnd_api.g_miss_num)) AND
7296 			((p_end_date_time IS NULL) OR (p_end_date_time = fnd_api.g_miss_date )) THEN
7297 		    FND_MESSAGE.SET_NAME('JTF','JTF_IH_NO_DURATION_END_DATE');
7298 		    FND_MSG_PUB.Add;
7299 		    RAISE fnd_api.g_exc_error;
7300 		END IF;
7301 
7302 		-- set the local variables
7303 		l_activity_id := p_activity_id;
7304 		l_end_date_time := p_end_date_time;
7305 		l_duration := p_duration;
7306 
7307 
7308 		-- Preprocessing Call
7309 		IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITYDURATION', 'B', 'C') THEN
7310 			JTF_IH_PUB_CUHK.update_actduration_pre(
7311 							p_activity_id=>l_activity_id,
7312 							p_end_date_time=>l_end_date_time,
7313 							p_duration=>l_duration,
7314 						     	x_data=>l_data,
7315 						     	x_count=>l_count,
7316 						     	x_return_code=>l_return_code);
7317 			IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7318 				RAISE FND_API.G_EXC_ERROR;
7319 			ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7320 				RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7321 			END IF;
7322 		END IF;
7323 
7324 		IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITYDURATION', 'B', 'V') THEN
7325 				JTF_IH_PUB_VUHK.update_actduration_pre(
7326 							p_activity_id=>l_activity_id,
7327 							p_end_date_time=>l_end_date_time,
7328 							p_duration=>l_duration,
7329 						     	x_data=>l_data,
7330 						     	x_count=>l_count,
7331 						     	x_return_code=>l_return_code);
7332 			IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7333 				RAISE FND_API.G_EXC_ERROR;
7334 			ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7335 				RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7336 			END IF;
7337 		END IF;
7338 
7339 
7340 		-- Standard call to check for call compatibility
7341 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
7342               l_api_name, g_pkg_name) THEN
7343 		      RAISE fnd_api.g_exc_unexpected_error;
7344 		END IF;
7345 		--DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Update_ActivityDuration');
7346 
7347 		-- Initialize message list if p_init_msg_list is set to TRUE
7348 		IF fnd_api.to_boolean(p_init_msg_list) THEN
7349 			fnd_msg_pub.initialize;
7350 		END IF;
7351 
7352    		-- Initialize API return status to success
7353    		x_return_status := fnd_api.g_ret_sts_success;
7354 
7355    		--
7356 		-- Apply business-rule validation to all required and passed parameters
7357 		--
7358 		-- Validate user and login session IDs
7359 		--
7360 		IF (p_user_id IS NULL) THEN
7361 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
7362 				RAISE fnd_api.g_exc_error;
7363 		ELSE
7364 			jtf_ih_core_util_pvt.validate_who_info
7365 			(	p_api_name        => l_api_name_full,
7366 				p_parameter_name_usr    => 'p_user_id',
7367 				p_parameter_name_log    => 'p_login_id',
7368 				p_user_id         => p_user_id,
7369 				p_login_id        => p_login_id,
7370 				x_return_status   => l_return_status );
7371 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7372 				RAISE fnd_api.g_exc_error;
7373 			END IF;
7374 		END IF;
7375 		--DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Update_ActivityDuration');
7376 
7377 		--
7378 		-- Get the current activity values
7379 		--
7380 
7381 		SELECT start_date_time, end_date_time, duration, active into
7382 			l_start_date_time, l_end_date_time, l_duration, l_active
7383 			FROM jtf_ih_activities
7384 			WHERE activity_id = p_activity_id;
7385 		--
7386 		-- If the activity is not active, then refuse the update.
7387 		--
7388 		If l_active = 'N' then
7389 			x_return_status := fnd_api.g_ret_sts_error;
7390       		jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, l_active,
7391 					    'ACTIVE');
7392 			RAISE fnd_api.g_exc_error;
7393 		END IF;
7394 
7395 		-- Bug# 2656975 Determine if the end_date needs updating - RDD
7396 		IF (p_end_date_time <> fnd_api.g_miss_date ) THEN
7397 
7398 			-- set the date from what is passed.
7399 			l_end_date_time := p_end_date_time;
7400 
7401 			-- validate it with the start date time if not nulling the value
7402 			IF (p_end_date_time IS NOT NULL) THEN
7403 				Validate_StartEnd_Date
7404 				(	p_api_name    => l_api_name_full,
7405 					p_start_date_time   => l_start_date_time,
7406 					p_end_date_time		=> l_end_date_time,
7407 					x_return_status     => l_return_status
7408 				);
7409 				IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7410 					RAISE fnd_api.g_exc_error;
7411 				END IF;
7412 				-- DBMS_OUTPUT.PUT_LINE('PAST Validate_StartEnd_Date in JTF_IH_PUB.Update_ActivityDuration');
7413 			END IF;
7414 		END IF;
7415 
7416 		-- Bug# 2656975 Determine how the duration is to be updated - RDD
7417 		--   If the duration is not passed, then calculate it.
7418 		--	   else Make sure negative durations are not allowed.
7419 		--	   else use the passed value
7420 		IF (p_duration IS NULL) OR (p_duration = fnd_api.g_miss_num) THEN
7421 		    l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
7422 		ELSIF p_duration < 0 THEN
7423 		    l_duration := 0;
7424 		ELSE
7425 		    l_duration := p_duration;
7426 		END IF;
7427 
7428 		-- Update the activity
7429 		UPDATE jtf_ih_activities SET END_DATE_TIME = l_end_date_time,
7430 						DURATION = l_duration,
7431 						OBJECT_VERSION_NUMBER = p_object_version
7432     	WHERE activity_id = p_activity_id;
7433 		-- DBMS_OUTPUT.PUT_LINE('PAST update end_date_time and duration in JTF_IH_PUB.Update_ActivityDuration');
7434 
7435 		-- Post processing Call
7436 
7437 		IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITYDURATION', 'A', 'V') THEN
7438 			JTF_IH_PUB_VUHK.update_actduration_post(
7439 							p_activity_id=>l_activity_id,
7440 							p_end_date_time=>l_end_date_time,
7441 							p_duration=>l_duration,
7442 						     	x_data=>l_data,
7443 						     	x_count=>l_count,
7444 						     	x_return_code=>l_return_code);
7445 			IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7446 				RAISE FND_API.G_EXC_ERROR;
7447 			ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7448 				RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7449 			END IF;
7450 		END IF;
7451 
7452 		IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_ACTIVITYDURATION', 'A', 'C') THEN
7453 			JTF_IH_PUB_CUHK.update_actduration_post(
7454 							p_activity_id=>l_activity_id,
7455 							p_end_date_time=>l_end_date_time,
7456 							p_duration=>l_duration,
7457 						     	x_data=>l_data,
7458 						     	x_count=>l_count,
7459 						     	x_return_code=>l_return_code);
7460 			IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7461 				RAISE FND_API.G_EXC_ERROR;
7462 			ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7463 				RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7464 			END IF;
7465 		END IF;
7466 
7467 		-- Standard check of p_commit
7468 		IF fnd_api.to_boolean(p_commit) THEN
7469 			COMMIT WORK;
7470 		END IF;
7471 
7472 		-- Standard call to get message count and if count is 1, get message info
7473 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
7474 		EXCEPTION
7475 		WHEN fnd_api.g_exc_error THEN
7476 			ROLLBACK TO update_activityDuration;
7477 			x_return_status := fnd_api.g_ret_sts_error;
7478 			fnd_msg_pub.count_and_get
7479 				( p_count       => x_msg_count,
7480 				p_data  => x_msg_data );
7481       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7482 		WHEN fnd_api.g_exc_unexpected_error THEN
7483 			ROLLBACK TO update_activityDuration;
7484 			x_return_status := fnd_api.g_ret_sts_unexp_error;
7485 			fnd_msg_pub.count_and_get
7486 				( p_count       => x_msg_count,
7487 				p_data  => x_msg_data );
7488       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7489 		WHEN OTHERS THEN
7490 			ROLLBACK TO update_activityDuration;
7491 			x_return_status := fnd_api.g_ret_sts_unexp_error;
7492 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
7493 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
7494 			END IF;
7495 			fnd_msg_pub.count_and_get
7496 				( p_count       => x_msg_count,
7497 				p_data  => x_msg_data );
7498       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7499 	END Update_ActivityDuration;
7500 
7501 
7502 --
7503 --
7504 --	HISTORY
7505 --
7506 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
7507 --	------		----		--------------------------
7508 --
7509 --	James Baldo Jr.	15-MAR-2000	Initial Version after losing file
7510 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
7511 --	James Baldo Jr. 30-NOV-2000	Logic for two new columns, Media_Abandon_Flag and Media_Transferred_Flag.
7512 --					Enhancement Bugdb # 1501325
7513 --  Igor Aleshin    18-DEC-2001 Bug# 2153913 - PREVENT G_MISS_DATE VALUE FROM BEING WRITTEN TO
7514 --            THE END_DATE_TIME VALUE.
7515 --  Igor Aleshin    21-MAY-2002 Removed decode function from Source_Item_Create_Date_Time in Insert
7516 --            statement
7517 --  Igor Aleshin    24-FEB-2003 Fixed bug# 2817083 - Error loggin interactions
7518 --  Igor Aleshin    03-JUL-2003 Enh# 3022511 - Add a column to the jtf_ih_media_items table
7519 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
7520 --
7521 --
7522 
7523 PROCEDURE Open_MediaItem
7524 (
7525    p_api_version	IN	NUMBER,
7526    p_init_msg_list	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
7527    p_commit	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
7528    p_resp_appl_id	IN	NUMBER		DEFAULT NULL,
7529    p_resp_id	IN	NUMBER		DEFAULT NULL,
7530    p_user_id	IN	NUMBER,
7531    p_login_id	IN	NUMBER		DEFAULT NULL,
7532    x_return_status	OUT NOCOPY	VARCHAR2,
7533    x_msg_count	OUT NOCOPY	NUMBER,
7534    x_msg_data	OUT NOCOPY	VARCHAR2,
7535    p_media_rec	IN	media_rec_type,
7536    x_media_id	OUT NOCOPY NUMBER
7537 ) AS
7538    l_api_name   	CONSTANT VARCHAR2(30) := 'Open_MediaItem';
7539    l_api_version      	CONSTANT NUMBER       := 1.0;
7540    l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
7541    l_return_status    	VARCHAR2(1);
7542    --l_media_id		NUMBER;
7543    --l_start_date_time	DATE;
7544    -- Bug# 2153913
7545    --l_end_date_time	    DATE;
7546    l_active		VARCHAR2(1);
7547    --l_duration		NUMBER := NULL;
7548    l_return_code		VARCHAR2(1);
7549    l_data			VARCHAR2(2000);
7550    l_count			NUMBER;
7551    l_media_rec		MEDIA_REC_TYPE;
7552    --l_source_item_create_date_time DATE;
7553    --l_address       VARCHAR2(2000);
7554 
7555    -- Perf fix for literal Usage
7556    l_ao_update_pending_perf VARCHAR2(1);
7557    l_soft_closed_perf       VARCHAR2(1);
7558 BEGIN
7559    -- local variables initialization to remove GSCC warning
7560    l_active := 'Y';
7561 
7562    -- Perf variables
7563    l_ao_update_pending_perf := 'N';
7564    l_soft_closed_perf := 'N';
7565 
7566    -- Standard start of API savepoint
7567    SAVEPOINT open_mediaitem_pub;
7568 
7569    -- Preprocessing Call
7570    l_media_rec := p_media_rec;
7571 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_MEDIAITEM', 'B', 'C') THEN
7572 				JTF_IH_PUB_CUHK.open_mediaitem_pre(p_media_rec=>l_media_rec,
7573 						     x_data=>l_data,
7574 						     x_count=>l_count,
7575 						     x_return_code=>l_return_code);
7576 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7577 					RAISE FND_API.G_EXC_ERROR;
7578 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7579 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7580 				END IF;
7581 			END IF;
7582 
7583 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_MEDIAITEM', 'B', 'V') THEN
7584 				JTF_IH_PUB_VUHK.open_mediaitem_pre(p_media_rec=>l_media_rec,
7585 						     x_data=>l_data,
7586 						     x_count=>l_count,
7587 						     x_return_code=>l_return_code);
7588 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7589 					RAISE FND_API.G_EXC_ERROR;
7590 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7591 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7592 				END IF;
7593 			END IF;
7594 
7595 
7596 		-- Standard call to check for call compatibility
7597 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
7598               l_api_name, g_pkg_name) THEN
7599 			RAISE fnd_api.g_exc_unexpected_error;
7600 		END IF;
7601 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Open_MediaItem');
7602 
7603 		-- Initialize message list if p_init_msg_list is set to TRUE
7604 		IF fnd_api.to_boolean(p_init_msg_list) THEN
7605 			fnd_msg_pub.initialize;
7606 		END IF;
7607 
7608    		-- Initialize API return status to success
7609    		x_return_status := fnd_api.g_ret_sts_success;
7610 
7611    		--
7612 		-- Apply business-rule validation to all required and passed parameters
7613 		--
7614 		-- Validate user and login session IDs
7615 		--
7616 		IF (p_user_id IS NULL) THEN
7617 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
7618 				RAISE fnd_api.g_exc_error;
7619 		ELSE
7620 			jtf_ih_core_util_pvt.validate_who_info
7621 			( p_api_name        => l_api_name_full,
7622 			  p_parameter_name_usr    => 'p_user_id',
7623 			  p_parameter_name_log    => 'p_login_id',
7624 			  p_user_id         => p_user_id,
7625 			  p_login_id        => p_login_id,
7626 			  x_return_status   => l_return_status );
7627 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7628 				RAISE fnd_api.g_exc_error;
7629 			END IF;
7630 		END IF;
7631 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Open_MediaItem');
7632 
7633 		--
7634 		-- Validate all non-missing attributes by calling the utility procedure.
7635 		--
7636 		Validate_Media_Item
7637 		(	p_api_name      => l_api_name_full,
7638 			p_media_item_val      => p_media_rec,
7639 			p_resp_appl_id  => p_resp_appl_id,
7640 			p_resp_id       => p_resp_id,
7641 			x_return_status       => l_return_status
7642 		);
7643 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7644 			RAISE fnd_api.g_exc_error;
7645 		END IF;
7646 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_MediaItem_Record in JTF_IH_PUB.Open_MediaItem');
7647 
7648   -- Bug# 2153913
7649 		-- Assign the end_date_time
7650 		IF (p_media_rec.end_date_time <> fnd_api.g_miss_date) THEN
7651 			--l_end_date_time := p_media_rec.end_date_time;
7652 			l_media_rec.end_date_time := p_media_rec.end_date_time;
7653 		ELSE
7654 			--l_end_date_time := NULL;
7655 			l_media_rec.end_date_time := NULL;
7656 		END IF;
7657 
7658 		-- Assign the start_date_time
7659 		--IF ((p_media_rec.start_date_time IS NOT NULL) AND (p_media_rec.start_date_time <> fnd_api.g_miss_date)) THEN
7660 		IF (p_media_rec.start_date_time <> fnd_api.g_miss_date) THEN
7661 			--l_start_date_time := p_media_rec.start_date_time;
7662 			l_media_rec.start_date_time := p_media_rec.start_date_time;
7663 		ELSE
7664 			--l_start_date_time := SYSDATE;
7665 			l_media_rec.start_date_time := SYSDATE;
7666 		END IF;
7667 
7668   -- Changed by IAleshin 21-MAY-2002
7669 	    Validate_StartEnd_Date
7670 			(	p_api_name    => l_api_name_full,
7671 				--p_start_date_time => l_start_date_time,
7672 				p_start_date_time   => l_media_rec.start_date_time,
7673 				--p_end_date_time   => l_end_date_time,
7674 				p_end_date_time	    => l_media_rec.end_date_time,
7675 				x_return_status     => l_return_status
7676 			);
7677   IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7678 				RAISE fnd_api.g_exc_error;
7679   END IF;
7680 
7681 		IF (p_media_rec.duration <> fnd_api.g_miss_num) AND (p_media_rec.duration IS NOT NULL) THEN
7682 			--l_duration := p_media_rec.duration;
7683 			l_media_rec.duration := p_media_rec.duration;
7684 		ELSE
7685 			--l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
7686 			l_media_rec.duration := ROUND((l_media_rec.end_date_time - l_media_rec.start_date_time)*24*60*60);
7687 		END IF;
7688 
7689   IF(p_media_rec.source_item_create_date_time <> fnd_api.g_miss_date) AND (p_media_rec.source_item_create_date_time IS NOT NULL) THEN
7690       --l_source_item_create_date_time := p_media_rec.source_item_create_date_time;
7691       l_media_rec.source_item_create_date_time := p_media_rec.source_item_create_date_time;
7692   ELSE
7693       --l_source_item_create_date_time := NULL;
7694       l_media_rec.source_item_create_date_time := NULL;
7695   END IF;
7696 
7697   IF (p_media_rec.address = fnd_api.g_miss_char) THEN
7698       IF p_media_rec.direction = 'INBOUND'
7699     AND p_media_rec.media_item_type LIKE 'TELE%'
7700     AND p_media_rec.ani <> fnd_api.g_miss_char THEN
7701         --l_address := p_media_rec.ani;
7702         l_media_rec.address := p_media_rec.ani;
7703       END IF;
7704   ELSE
7705       --l_address := p_media_rec.address;
7706       l_media_rec.address := p_media_rec.address;
7707   END IF;
7708 
7709   -- Bug# 2817083
7710 		--SELECT JTF_IH_MEDIA_ITEMS_S1.NextVal into l_media_id FROM dual;
7711   --l_media_id := Get_Media_Id(NULL);
7712   l_media_rec.media_id := Get_Media_Id(NULL);
7713 
7714 		INSERT INTO jtf_ih_media_items
7715 		(
7716 			 CREATED_BY,
7717 			 CREATION_DATE,
7718 			 LAST_UPDATED_BY,
7719 			 LAST_UPDATE_DATE,
7720 			 LAST_UPDATE_LOGIN,
7721 			 MEDIA_ID,
7722 			 DURATION,
7723 			 DIRECTION,
7724 			 END_DATE_TIME,
7725 			 SOURCE_ITEM_CREATE_DATE_TIME,
7726 			 SOURCE_ITEM_ID,
7727 			 START_DATE_TIME,
7728 			 SOURCE_ID,
7729 			 MEDIA_ITEM_TYPE,
7730 			 MEDIA_ITEM_REF,
7731 			 MEDIA_DATA,
7732 			 MEDIA_ABANDON_FLAG,
7733 			 MEDIA_TRANSFERRED_FLAG,
7734 			 ACTIVE,
7735              SERVER_GROUP_ID,
7736              DNIS,
7737              ANI,
7738              CLASSIFICATION,
7739              ADDRESS,
7740              AO_UPDATE_PENDING,
7741              SOFT_CLOSED
7742 			)
7743 			VALUES
7744 			(
7745 			 p_user_id,
7746 			 Sysdate,
7747 			 p_user_id,
7748 			 Sysdate,
7749 			 p_login_id,
7750 			 --l_media_id,
7751 			 l_media_rec.media_id,
7752 			 --l_duration,
7753 			 l_media_rec.duration,
7754 			 decode( p_media_rec.direction, fnd_api.g_miss_char, null, p_media_rec.direction),
7755 			 --l_end_date_time,
7756 			 l_media_rec.end_date_time,
7757        -- Added by IAleshin 21-MAY-2002
7758 			 --l_source_item_create_date_time,
7759 			 l_media_rec.source_item_create_date_time,
7760 			 decode( p_media_rec.source_item_id, fnd_api.g_miss_num, null, p_media_rec.source_item_id),
7761 			 --l_start_date_time,
7762 			 l_media_rec.start_date_time,
7763 			 decode( p_media_rec.source_id, fnd_api.g_miss_num, null, p_media_rec.source_id),
7764 			 decode( p_media_rec.media_item_type, fnd_api.g_miss_char, null, p_media_rec.media_item_type),
7765 			 decode( p_media_rec.media_item_ref, fnd_api.g_miss_char, null, p_media_rec.media_item_ref),
7766 			 decode( p_media_rec.media_data, fnd_api.g_miss_char, null, p_media_rec.media_data),
7767 			 decode( p_media_rec.media_abandon_flag, fnd_api.g_miss_char, null, p_media_rec.media_abandon_flag),
7768 			 decode( p_media_rec.media_transferred_flag, fnd_api.g_miss_char, null, p_media_rec.media_transferred_flag),
7769 			 l_active,
7770              decode( p_media_rec.server_group_id, fnd_api.g_miss_num, null, p_media_rec.server_group_id),
7771              decode( p_media_rec.dnis, fnd_api.g_miss_char, null, p_media_rec.dnis),
7772              decode( p_media_rec.ani, fnd_api.g_miss_char, null, p_media_rec.ani),
7773              decode( p_media_rec.classification, fnd_api.g_miss_char, null, p_media_rec.classification),
7774              --decode( l_address, fnd_api.g_miss_char, null, l_address),
7775              decode( l_media_rec.address, fnd_api.g_miss_char, null, l_media_rec.address),
7776              l_ao_update_pending_perf,
7777              l_soft_closed_perf
7778 			);
7779 		-- DBMS_OUTPUT.PUT_LINE('PAST INSERT INTO jtf_ih_media_items in JTF_IH_PUB.Open_MediaItem');
7780 
7781 
7782 		--
7783 		-- Set OUT value
7784 		--
7785 		--x_media_id := l_media_id;
7786 		x_media_id := l_media_rec.media_id;
7787 
7788 			-- Post processing Call
7789 
7790 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_MEDIAITEM', 'A', 'V') THEN
7791 				JTF_IH_PUB_VUHK.open_mediaitem_post(p_media_rec=>l_media_rec,
7792 						     x_data=>l_data,
7793 						     x_count=>l_count,
7794 						     x_return_code=>l_return_code);
7795 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7796 					RAISE FND_API.G_EXC_ERROR;
7797 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7798 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7799 				END IF;
7800 			END IF;
7801 
7802 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'OPEN_MEDIAITEM', 'A', 'C') THEN
7803 				JTF_IH_PUB_CUHK.open_mediaitem_post(p_media_rec=>l_media_rec,
7804 						     x_data=>l_data,
7805 						     x_count=>l_count,
7806 						     x_return_code=>l_return_code);
7807 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7808 					RAISE FND_API.G_EXC_ERROR;
7809 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7810 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7811 				END IF;
7812 			END IF;
7813 
7814 		-- Standard check of p_commit
7815 		IF fnd_api.to_boolean(p_commit) THEN
7816 			COMMIT WORK;
7817 		END IF;
7818 
7819 		-- Standard call to get message count and if count is 1, get message info
7820 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
7821 		EXCEPTION
7822 		WHEN fnd_api.g_exc_error THEN
7823 			ROLLBACK TO open_mediaitem_pub;
7824 			x_return_status := fnd_api.g_ret_sts_error;
7825 			fnd_msg_pub.count_and_get
7826 				( p_count       => x_msg_count,
7827 				p_data  => x_msg_data );
7828       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7829 		WHEN fnd_api.g_exc_unexpected_error THEN
7830 			ROLLBACK TO open_mediaitem_pub;
7831 			x_return_status := fnd_api.g_ret_sts_unexp_error;
7832 			fnd_msg_pub.count_and_get
7833 				( p_count       => x_msg_count,
7834 				p_data  => x_msg_data );
7835       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7836 		WHEN OTHERS THEN
7837 			ROLLBACK TO open_mediaitem_pub;
7838 			x_return_status := fnd_api.g_ret_sts_unexp_error;
7839 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
7840 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
7841 			END IF;
7842 			fnd_msg_pub.count_and_get
7843 				( p_count       => x_msg_count,
7844 				p_data  => x_msg_data );
7845       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
7846 	END Open_MediaItem;
7847 
7848 
7849 --
7850 --	HISTORY
7851 --
7852 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
7853 --	------		----		--------------------------
7854 --
7855 --	James Baldo Jr.	15-MAR-2000	Initial Version after losing file
7856 --	James Baldo Jr.	21-APR-2000	Active setting defect based on bugdb# 127726
7857 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
7858 --	James Baldo Jr. 30-NOV-2000	Logic for two new columns, Media_Abandon_Flag and Media_Transferred_Flag.
7859 --					Enhancement Bugdb # 1501325
7860 --  Igor Aleshin    18-DEC-2001 Bug# 2153913 - PREVENT G_MISS_DATE VALUE FROM BEING WRITTEN TO
7861 --            THE END_DATE_TIME VALUE.
7862 --  Igor Aleshin    07-MAY-2002 Bug# 2338832 - 1156-1157: IH API G_MISS CLEAN-UP REPLACEMENT PATCH
7863 --  Igor Aleshin    09-MAY-2002 Bug# 2363404 - IH API: ITEM NOT ALLOWING NULLS
7864 --  Igor Aleshin    20-MAY-2002 Modified duration Calculation
7865 --  Igor Aleshin    29-MAY-2003 Enh# 2940473 - IH Bulk API Changes
7866 --  Igor Aleshin    03-JUL-2003 Enh# 3022511 - Add a column to the jtf_ih_media_items table
7867 --  Igor Aleshin	15-MAR-2004 Enh# 3491849 - JTH.R: IH CHANGES TO SUPPORT FTC ABANDONMENT REGULATIONS
7868 --
7869 
7870 	PROCEDURE Update_MediaItem
7871 	(
7872 	p_api_version	IN	NUMBER,
7873 	p_init_msg_list	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
7874 	p_commit	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
7875 	p_resp_appl_id	IN	NUMBER		DEFAULT NULL,
7876 	p_resp_id	IN	NUMBER		DEFAULT NULL,
7877 	p_user_id	IN	NUMBER,
7878 	p_login_id	IN	NUMBER		DEFAULT NULL,
7879 	x_return_status	OUT NOCOPY	VARCHAR2,
7880 	x_msg_count	OUT NOCOPY	NUMBER,
7881 	x_msg_data	OUT NOCOPY	VARCHAR2,
7882 	p_media_rec	IN	media_rec_type,
7883     -- Bug# 2012159
7884     p_object_version IN NUMBER DEFAULT NULL
7885 	) AS
7886 	l_api_name   			CONSTANT VARCHAR2(30) := 'Update_MediaItem';
7887 	l_api_version      			CONSTANT NUMBER       := 1.0;
7888 	l_api_name_full    			CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
7889 	l_return_status    			VARCHAR2(1);
7890 	l_media_id				NUMBER;
7891     -- Commented by IAleshin 20-MAY-2002
7892 /*	l_source_id				NUMBER :=fnd_api.g_miss_num;
7893 	l_direction				VARCHAR2(240) :=fnd_api.g_miss_char;
7894 	l_duration				NUMBER :=fnd_api.g_miss_num;
7895 	l_end_date_time				DATE :=fnd_api.g_miss_date;
7896 	l_interaction_performed			VARCHAR2(240) :=fnd_api.g_miss_char;
7897 	l_start_date_time			DATE :=fnd_api.g_miss_date;
7898 	l_media_data				VARCHAR2(80) :=fnd_api.g_miss_char;
7899 	l_source_item_create_date_time		DATE :=fnd_api.g_miss_date;
7900 	l_source_item_id			NUMBER :=fnd_api.g_miss_num;
7901 	l_media_item_type			VARCHAR2(80) :=fnd_api.g_miss_char;
7902 	l_media_item_ref			VARCHAR2(240) :=fnd_api.g_miss_char;
7903 	l_media_abandon_flag			VARCHAR2(1) :=fnd_api.g_miss_char;
7904 	l_media_transferred_flag		VARCHAR2(1) :=fnd_api.g_miss_char;*/
7905 	l_media_rec                             media_rec_type;
7906 	l_return_code				VARCHAR2(1);
7907 	l_data					VARCHAR2(2000);
7908 	l_count					NUMBER;
7909 	--l_media_rec_hk				MEDIA_REC_TYPE;
7910     l_object_version  NUMBER;
7911     l_address         VARCHAR2(2000);
7912     b_Duration			BOOLEAN := FALSE;
7913 
7914 	CURSOR c_MediaItem_csr IS
7915 		SELECT *
7916 		FROM 	JTF_IH_MEDIA_ITEMS
7917 		WHERE 	media_id = p_media_rec.media_id
7918 		FOR UPDATE;
7919 	l_MediaItem_rec	c_MediaItem_csr%ROWTYPE;
7920 
7921 	BEGIN
7922 
7923         -- local variables initialization to remove GSCC warnings
7924         l_media_rec := p_media_rec;
7925 
7926 	-- Standard start of API savepoint
7927 		SAVEPOINT update_mediaitem_pub;
7928 
7929 			-- Preprocessing Call
7930 			--l_media_rec_hk := p_media_rec;
7931 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIAITEM', 'B', 'C') THEN
7932 				JTF_IH_PUB_CUHK.update_mediaitem_pre(
7933 				                     --p_media_rec=>l_media_rec_hk,
7934 				                     p_media_rec=>l_media_rec,
7935 						     x_data=>l_data,
7936 						     x_count=>l_count,
7937 						     x_return_code=>l_return_code);
7938 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7939 					RAISE FND_API.G_EXC_ERROR;
7940 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7941 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7942 				END IF;
7943 			END IF;
7944 
7945 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIAITEM', 'B', 'V') THEN
7946 				JTF_IH_PUB_VUHK.update_mediaitem_pre(
7947 				                     --p_media_rec=>l_media_rec_hk,
7948 				                     p_media_rec=>l_media_rec,
7949 						     x_data=>l_data,
7950 						     x_count=>l_count,
7951 						     x_return_code=>l_return_code);
7952 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
7953 					RAISE FND_API.G_EXC_ERROR;
7954 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7955 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7956 				END IF;
7957 			END IF;
7958 
7959 
7960 
7961 	-- Standard call to check for call compatibility
7962 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
7963               l_api_name, g_pkg_name) THEN
7964 			RAISE fnd_api.g_exc_unexpected_error;
7965 		END IF;
7966 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Update_MediaItem');
7967 
7968 	-- Initialize message list if p_init_msg_list is set to TRUE
7969 		IF fnd_api.to_boolean(p_init_msg_list) THEN
7970 			fnd_msg_pub.initialize;
7971 		END IF;
7972 
7973    	-- Initialize API return status to success
7974    		x_return_status := fnd_api.g_ret_sts_success;
7975 
7976    	--
7977 	-- Apply business-rule validation to all required and passed parameters
7978 	--
7979 	-- Validate user and login session IDs
7980 	--
7981 		IF (p_user_id IS NULL) THEN
7982 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
7983 			RAISE fnd_api.g_exc_error;
7984 		ELSE
7985 			jtf_ih_core_util_pvt.validate_who_info
7986 			( p_api_name        => l_api_name_full,
7987 			  p_parameter_name_usr    => 'p_user_id',
7988 			  p_parameter_name_log    => 'p_login_id',
7989 			  p_user_id         => p_user_id,
7990 			  p_login_id        => p_login_id,
7991 			  x_return_status   => l_return_status );
7992 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
7993 				RAISE fnd_api.g_exc_error;
7994 			END IF;
7995 		END IF;
7996 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Update_MediaItem');
7997 
7998 
7999 		OPEN c_MediaItem_csr;
8000 		FETCH c_MediaItem_csr INTO  l_MediaItem_rec;
8001 		IF (c_MediaItem_csr%notfound) THEN
8002 			x_return_status := fnd_api.g_ret_sts_error;
8003 			jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_media_rec.media_id),
8004 							    'media_id');
8005 			RETURN;
8006 		END IF;
8007 		--
8008 		-- Check if Active is set to 'N'
8009 		--
8010 		IF (l_MediaItem_rec.active = 'N')  then
8011 			--x_return_status := fnd_api.g_ret_sts_error;
8012 			jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_media_rec.media_id),'Active set to N for mediaitem');
8013 			RAISE fnd_api.g_exc_error;
8014 		END IF;
8015 		--
8016 		-- Check if source_id requies updating
8017 		--
8018 		IF (p_media_rec.source_id = fnd_api.g_miss_num) then
8019 			--l_source_id := l_MediaItem_rec.source_id;
8020 			l_media_rec.source_id := l_MediaItem_rec.source_id;
8021   		ELSE
8022 			l_media_rec.source_id := p_media_rec.source_id;
8023 		END IF;
8024 		--
8025 		-- Check if direction requires updating
8026 		--
8027 		IF (p_media_rec.direction = fnd_api.g_miss_char) then
8028 --			l_direction := l_MediaItem_rec.direction;
8029 			l_media_rec.direction := l_MediaItem_rec.direction;
8030 		ELSE
8031 			l_media_rec.direction := p_media_rec.direction;
8032 		END IF;
8033 		--
8034 		-- Check if end_date_time requires updating
8035 		--
8036 		IF (p_media_rec.start_date_time = fnd_api.g_miss_date) OR (p_media_rec.start_date_time is NULL ) then
8037 			l_media_rec.start_date_time := l_MediaItem_rec.start_date_time;
8038   		ELSE
8039 			l_media_rec.start_date_time := p_media_rec.start_date_time;
8040 			b_Duration := TRUE;
8041 		END IF;
8042 
8043 		--
8044 		-- Check if end_date_time requires updating
8045 		--
8046 		IF (p_media_rec.end_date_time = fnd_api.g_miss_date) then
8047 			--l_end_date_time := l_MediaItem_rec.end_date_time;
8048 			l_media_rec.end_date_time := l_MediaItem_rec.end_date_time;
8049   		ELSE
8050 			l_media_rec.end_date_time := p_media_rec.end_date_time;
8051 			b_Duration := TRUE;
8052 		END IF;
8053 
8054   		Validate_StartEnd_Date( p_api_name => l_api_name_full,
8055 					p_start_date_time   	=> l_media_rec.start_date_time,
8056 					p_end_date_time		    => l_media_rec.end_date_time,
8057 					x_return_status     	=> l_return_status
8058 				);
8059 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
8060 				RAISE fnd_api.g_exc_error;
8061 			END IF;
8062 
8063 		--
8064 		-- Check if duration requires updating
8065 		--
8066 		IF (p_media_rec.duration = fnd_api.g_miss_num) then
8067 			--l_duration := l_MediaItem_rec.duration;
8068 			l_media_rec.duration := l_MediaItem_rec.duration;
8069   		ELSE
8070 			l_media_rec.duration := p_media_rec.duration;
8071 			b_Duration := FALSE;
8072 		END IF;
8073 
8074   		IF (l_media_rec.duration = fnd_api.g_miss_num)
8075       		OR (l_media_rec.duration IS NULL) OR (l_media_rec.duration = 0) OR b_Duration THEN
8076       		l_media_rec.duration := ROUND((l_media_rec.end_date_time - l_media_rec.start_date_time)*24*60*60);
8077   		END IF;
8078 
8079 		--
8080 		-- Check if interaction_performed requires updating
8081 		--
8082 		IF (p_media_rec.interaction_performed = fnd_api.g_miss_char) then
8083 			--l_interaction_performed := l_MediaItem_rec.interaction_performed;
8084 			l_media_rec.interaction_performed := l_MediaItem_rec.interaction_performed;
8085   ELSE
8086 			l_media_rec.interaction_performed := p_media_rec.interaction_performed;
8087 		END IF;
8088 		--
8089 		-- Check if media_data requires updating
8090 		--
8091 		IF (p_media_rec.media_data = fnd_api.g_miss_char) then
8092 			--l_media_data := l_MediaItem_rec.media_data;
8093 			l_media_rec.media_data := l_MediaItem_rec.media_data;
8094   ELSE
8095 			l_media_rec.media_data := p_media_rec.media_data;
8096 		END IF;
8097 		--
8098 		-- Check if source_item_create_date_time requires updating
8099 		--
8100 		IF (p_media_rec.source_item_create_date_time = fnd_api.g_miss_date) then
8101 			--l_source_item_create_date_time := l_MediaItem_rec.source_item_create_date_time;
8102 			l_media_rec.source_item_create_date_time := l_MediaItem_rec.source_item_create_date_time;
8103   ELSE
8104 			l_media_rec.source_item_create_date_time := p_media_rec.source_item_create_date_time;
8105 		END IF;
8106 		--
8107 		-- Check if source_item_id requires updating
8108 		--
8109 		IF (p_media_rec.source_item_id = fnd_api.g_miss_num) then
8110 			--l_source_item_id := l_MediaItem_rec.source_item_id;
8111 			l_media_rec.source_item_id := l_MediaItem_rec.source_item_id;
8112   ELSE
8113 			l_media_rec.source_item_id := p_media_rec.source_item_id;
8114 		END IF;
8115 		--
8116 		-- Check if media_item_type requires updating
8117 		--
8118 		IF (p_media_rec.media_item_type = fnd_api.g_miss_char) then
8119 			--l_media_item_type := l_MediaItem_rec.media_item_type;
8120 			l_media_rec.media_item_type:= l_MediaItem_rec.media_item_type;
8121 		ELSE
8122 			l_media_rec.media_item_type := p_media_rec.media_item_type;
8123 		END IF;
8124 		--
8125 		-- Check if media_item_ref requires updating
8126 		--
8127 		IF (p_media_rec.media_item_ref = fnd_api.g_miss_char) then
8128 			--l_media_item_ref := l_MediaItem_rec.media_item_ref;
8129 			l_media_rec.media_item_ref := l_MediaItem_rec.media_item_ref;
8130   ELSE
8131 			l_media_rec.media_item_ref := p_media_rec.media_item_ref;
8132 		END IF;
8133 		--
8134 		-- Check if media_abandon_flag requires updating
8135 		--
8136 		IF (p_media_rec.media_abandon_flag = fnd_api.g_miss_char) then
8137 			--l_media_abandon_flag := l_MediaItem_rec.media_abandon_flag;
8138 			l_media_rec.media_abandon_flag := l_MediaItem_rec.media_abandon_flag;
8139   ELSE
8140 			l_media_rec.media_abandon_flag := p_media_rec.media_abandon_flag;
8141 		END IF;
8142 		--
8143 		-- Check if media_transferred_flag requires updating
8144 		--
8145 		IF (p_media_rec.media_transferred_flag = fnd_api.g_miss_char) then
8146 			--l_media_transferred_flag := l_MediaItem_rec.media_transferred_flag;
8147 			l_media_rec.media_transferred_flag := l_MediaItem_rec.media_transferred_flag;
8148   ELSE
8149 			l_media_rec.media_transferred_flag := p_media_rec.media_transferred_flag;
8150 		END IF;
8151 		--
8152 		-- Check if server_group_id requires updating
8153 		--
8154 		IF (p_media_rec.server_group_id = fnd_api.g_miss_num) then
8155 			--l_server_group_id := l_MediaItem_rec.server_group_id;
8156 			l_media_rec.server_group_id := l_MediaItem_rec.server_group_id;
8157   ELSE
8158 			l_media_rec.server_group_id := p_media_rec.server_group_id;
8159 		END IF;
8160 		--
8161 		-- Check if dnis requires updating
8162 		--
8163 		IF (p_media_rec.dnis = fnd_api.g_miss_char) then
8164 			--l_dnis := l_MediaItem_rec.dnis;
8165 			l_media_rec.dnis := l_MediaItem_rec.dnis;
8166   ELSE
8167 			l_media_rec.dnis := p_media_rec.dnis;
8168 		END IF;
8169 		--
8170 		-- Check if ani requires updating
8171 		--
8172 		IF (p_media_rec.ani = fnd_api.g_miss_char) then
8173 			--l_ani := l_MediaItem_rec.ani;
8174 			l_media_rec.ani := l_MediaItem_rec.ani;
8175   ELSE
8176 			l_media_rec.ani := p_media_rec.ani;
8177 		END IF;
8178 		--
8179 		-- Check if classification requires updating
8180 		--
8181 		IF (p_media_rec.classification = fnd_api.g_miss_char) then
8182 			--l_classification := l_MediaItem_rec.classification;
8183 			l_media_rec.classification := l_MediaItem_rec.classification;
8184   ELSE
8185 			l_media_rec.classification := p_media_rec.classification;
8186 		END IF;
8187 
8188 		--
8189 		-- Check if object_version_number requies updating
8190 		--
8191 		IF (p_object_version = fnd_api.g_miss_num)  then
8192 		      l_object_version := l_MediaItem_rec.object_version_number;
8193   ELSE
8194 		      l_object_version := p_object_version;
8195 		END IF;
8196 
8197   		--
8198 		-- Check if bulk_writer_code requires updating
8199 		--
8200 		IF (p_media_rec.bulk_writer_code = fnd_api.g_miss_char) then
8201 			l_media_rec.bulk_writer_code := l_MediaItem_rec.bulk_writer_code;
8202   ELSE
8203 			l_media_rec.bulk_writer_code := p_media_rec.bulk_writer_code;
8204 		END IF;
8205 
8206    		--
8207 		-- Check if bulk_batch_type requires updating
8208 		--
8209 		IF (p_media_rec.bulk_batch_type = fnd_api.g_miss_char) then
8210 			l_media_rec.bulk_batch_type := l_MediaItem_rec.bulk_batch_type;
8211   ELSE
8212 			l_media_rec.bulk_batch_type := p_media_rec.bulk_writer_code;
8213 		END IF;
8214   		--
8215 		-- Check if bulk_batch_id requires updating
8216 		--
8217 		IF (p_media_rec.bulk_batch_id = fnd_api.g_miss_num) then
8218 			l_media_rec.bulk_batch_id := l_MediaItem_rec.bulk_batch_id;
8219   ELSE
8220 			l_media_rec.bulk_batch_id := p_media_rec.bulk_batch_id;
8221 		END IF;
8222   		--
8223 		-- Check if bulk_interaction_id requires updating
8224 		--
8225 		IF (p_media_rec.bulk_interaction_id = fnd_api.g_miss_num) then
8226 			l_media_rec.bulk_interaction_id := l_MediaItem_rec.bulk_interaction_id;
8227   ELSE
8228 			l_media_rec.bulk_interaction_id := p_media_rec.bulk_interaction_id;
8229 		END IF;
8230 
8231   		--
8232 		-- Check if email_address requires updating
8233 		--
8234 
8235 		IF (p_media_rec.address = fnd_api.g_miss_char) THEN
8236       IF p_media_rec.direction = 'INBOUND' AND p_media_rec.media_item_type LIKE 'TELE%' THEN
8237     IF p_media_rec.ani <> fnd_api.g_miss_char THEN
8238         l_media_rec.address := p_media_rec.ani;
8239     ELSE
8240         l_media_rec.address := NULL;
8241     END IF;
8242       ELSE
8243     l_media_rec.address :=  l_MediaItem_rec.address;
8244       END IF;
8245   ELSE
8246 			l_media_rec.address := p_media_rec.address;
8247 		END IF;
8248 
8249 		--
8250 		--
8251 		-- Validate all non-missing attributes by calling the utility procedure.
8252 		--
8253 		Validate_Media_Item
8254 		(	p_api_name      => l_api_name_full,
8255 			p_media_item_val      => l_media_rec,
8256 			p_resp_appl_id  => p_resp_appl_id,
8257 			p_resp_id       => p_resp_id,
8258 			x_return_status       => l_return_status
8259 		);
8260 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
8261 			RAISE fnd_api.g_exc_error;
8262 		END IF;
8263 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_MediaItem_Record in JTF_IH_PUB.Update_MediaItem');
8264 
8265 		UPDATE JTF_IH_MEDIA_ITEMS
8266 			SET	source_id		=	l_media_rec.source_id,
8267 				direction		=	l_media_rec.direction,
8268 				duration		=	l_media_rec.duration,
8269 				end_date_time		=	l_media_rec.end_date_time,
8270 				interaction_performed	=	l_media_rec.interaction_performed,
8271 				start_date_time		=	l_media_rec.start_date_time,
8272 				media_data		=	decode( l_media_rec.media_data, fnd_api.g_miss_char, null, l_media_rec.media_data),
8273 				source_item_create_date_time = l_media_rec.source_item_create_date_time,
8274 				source_item_id		=	l_media_rec.source_item_id,
8275 				media_item_type		=	l_media_rec.media_item_type,
8276 				media_item_ref		=	l_media_rec.media_item_ref,
8277 				media_abandon_flag	=	l_media_rec.media_abandon_flag,
8278 				media_transferred_flag	=	l_media_rec.media_transferred_flag,
8279     -- Bug# 2338832
8280     server_group_id     =   decode(l_media_rec.server_group_id,fnd_api.g_miss_num,null, l_media_rec.server_group_id),
8281     dnis    =   decode(l_media_rec.dnis, fnd_api.g_miss_char, null, l_media_rec.dnis),
8282     ani     =   decode(l_media_rec.ani, fnd_api.g_miss_char, null, l_media_rec.ani),
8283     classification      =   decode(l_media_rec.classification, fnd_api.g_miss_char, null, l_media_rec.classification),
8284 				last_update_date	=	sysdate,
8285 				last_updated_by		=	p_user_id,
8286 				last_update_login	=	p_login_id,
8287     object_version_number = l_object_version,
8288     BULK_WRITER_CODE    =   l_media_rec.bulk_writer_code,
8289     BULK_BATCH_TYPE     =   l_media_rec.bulk_batch_type,
8290     BULK_BATCH_ID       =   l_media_rec.bulk_batch_id,
8291     BULK_INTERACTION_ID =   l_media_rec.bulk_interaction_id,
8292     ADDRESS       =   decode(l_media_rec.address,fnd_api.g_miss_char, null, l_media_rec.address)
8293 			WHERE CURRENT OF c_MediaItem_csr;
8294 		--
8295 		-- Close Cursor
8296 		--
8297 		Close c_MediaItem_csr;
8298 		--
8299 
8300 			-- Post processing Call
8301 
8302 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIAITEM', 'A', 'V') THEN
8303 				JTF_IH_PUB_VUHK.update_mediaitem_post(
8304 				                     --p_media_rec=>l_media_rec_hk,
8305 				                     p_media_rec=>l_media_rec,
8306 						     x_data=>l_data,
8307 						     x_count=>l_count,
8308 						     x_return_code=>l_return_code);
8309 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8310 					RAISE FND_API.G_EXC_ERROR;
8311 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8312 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8313 				END IF;
8314 			END IF;
8315 
8316 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIAITEM', 'A', 'C') THEN
8317 				JTF_IH_PUB_CUHK.update_mediaitem_post(
8318 				                     --p_media_rec=>l_media_rec_hk,
8319 				                     p_media_rec=>l_media_rec,
8320 						     x_data=>l_data,
8321 						     x_count=>l_count,
8322 						     x_return_code=>l_return_code);
8323 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8324 					RAISE FND_API.G_EXC_ERROR;
8325 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8326 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8327 				END IF;
8328 			END IF;
8329 
8330 
8331 		-- Standard check of p_commit
8332 		--
8333 		IF fnd_api.to_boolean(p_commit) THEN
8334 			COMMIT WORK;
8335 		END IF;
8336 		--
8337 		-- Standard call to get message count and if count is 1, get message info
8338 		--
8339 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
8340 		EXCEPTION
8341 		WHEN fnd_api.g_exc_error THEN
8342 			ROLLBACK TO Update_mediaitem_pub;
8343 			x_return_status := fnd_api.g_ret_sts_error;
8344 			fnd_msg_pub.count_and_get
8345 				( p_count       => x_msg_count,
8346 				p_data  => x_msg_data );
8347       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8348 		WHEN fnd_api.g_exc_unexpected_error THEN
8349 			ROLLBACK TO Update_mediaitem_pub;
8350 			x_return_status := fnd_api.g_ret_sts_unexp_error;
8351 			fnd_msg_pub.count_and_get
8352 				( p_count       => x_msg_count,
8353 				p_data  => x_msg_data );
8354       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8355 		WHEN OTHERS THEN
8356 			ROLLBACK TO Update_mediaitem_pub;
8357 			x_return_status := fnd_api.g_ret_sts_unexp_error;
8358 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
8359 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
8360 			END IF;
8361 			fnd_msg_pub.count_and_get
8362 				( p_count       => x_msg_count,
8363 				p_data  => x_msg_data );
8364       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8365 	END Update_MediaItem;
8366 
8367 
8368 --
8369 --	HISTORY
8370 --
8371 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
8372 --	------		----		--------------------------
8373 --
8374 --	James Baldo Jr.	15-MAR-2000	Initial Version after losing file
8375 --	James Baldo Jr.	21-APR-2000	Active setting defect based on bugdb# 127726
8376 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
8377 --	James Baldo Jr.	28-JUL-2000	Fix for bugdb # 1340013 for initializing end_date_time
8378 --					when not set by client.
8379 --	James Baldo Jr. 30-NOV-2000	Logic for two new columns, Media_Abandon_Flag and Media_Transferred_Flag.
8380 --					Enhancement Bugdb # 1501325
8381 --  Igor Aleshin    18-DEC-2001 Bug# 2153913 - PREVENT G_MISS_DATE VALUE FROM BEING WRITTEN TO
8382 --            THE END_DATE_TIME VALUE.
8383 --  Igor Aleshin    21-MAY-2002 Changed setup procedure for End_Date_Time.
8384 --  Igor Aleshin    29-MAY-2003 Enh# 2940473 - IH Bulk API Changes
8385 --  Igor Aleshin    16-JUL-2003 Enh# 3045626 - Clean-Up Close_MediaItem Update Logic
8386 --  Igor Aleshin    08-Mar-2004 Enh# 3491849 - JTH.R: IH CHANGES TO SUPPORT FTC ABANDONMENT REGULATIONS
8387 --  vekrishn        27-JUL-2004 Perf Fix for literal Usage
8388 --
8389 --
8390 
8391 	PROCEDURE Close_MediaItem
8392 	(
8393 	p_api_version	IN	NUMBER,
8394 	p_init_msg_list	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
8395 	p_commit		IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
8396 	p_resp_appl_id	IN	NUMBER		DEFAULT NULL,
8397 	p_resp_id		IN	NUMBER		DEFAULT NULL,
8398 	p_user_id		IN	NUMBER,
8399 	p_login_id		IN	NUMBER		DEFAULT NULL,
8400 	x_return_status	OUT NOCOPY	VARCHAR2,
8401 	x_msg_count		OUT NOCOPY	NUMBER,
8402 	x_msg_data		OUT NOCOPY	VARCHAR2,
8403 	p_media_rec		IN media_rec_type,
8404     p_object_version IN NUMBER DEFAULT NULL
8405 	) AS
8406 		l_api_name   		CONSTANT VARCHAR2(30) := 'Close_MediaItem';
8407 		l_api_version      	CONSTANT NUMBER       := 1.0;
8408 		l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
8409 		l_return_status    	VARCHAR2(1);
8410 		l_source_id	    	NUMBER(15);
8411 		l_count	    		NUMBER := 0;
8412 		l_media_data	    VARCHAR2(80);
8413 		l_end_date_time    	DATE := NULL;
8414   -- Added by IAleshin 21-MAY-2002
8415 		--l_start_date_time   DATE := NULL;
8416                 --l_duration    		NUMBER;
8417   --
8418 		l_media_lc_rec  	media_lc_rec_type;
8419 		l_return_code		VARCHAR2(1);
8420 		l_data				VARCHAR2(2000);
8421 		l_count_hk			NUMBER;
8422 		l_media_rec			MEDIA_REC_TYPE;
8423 
8424 		l_ao_update_pending VARCHAR2(1);
8425         l_soft_closed  		VARCHAR2(1);
8426         l_direction			VARCHAR2(256);
8427         l_media_item_type	VARCHAR2(256);
8428 
8429   -- Perf fix for literal Usage
8430   l_active_perf            VARCHAR2(1);
8431   l_soft_closed_perf       VARCHAR2(1);
8432 
8433 		 CURSOR c_media_item_lc_segs IS
8434 		 	SELECT *
8435 		 	FROM jtf_ih_media_item_lc_segs
8436 		 	WHERE media_id = p_media_rec.media_id;
8437 	BEGIN
8438 		-- Standard start of API savepoint
8439 		SAVEPOINT close_mediaitem_pub1;
8440 
8441    -- Perf variables
8442    l_active_perf := 'N';
8443    l_soft_closed_perf := 'Y';
8444 
8445 			-- Preprocessing Call
8446 			l_media_rec := p_media_rec;
8447 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_MEDIAITEM', 'B', 'C') THEN
8448 				JTF_IH_PUB_CUHK.close_mediaitem_pre(
8449 				                     p_media_rec=>l_media_rec,
8450 						     x_data=>l_data,
8451 						     x_count=>l_count_hk,
8452 						     x_return_code=>l_return_code);
8453 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8454 					RAISE FND_API.G_EXC_ERROR;
8455 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8456 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8457 				END IF;
8458 			END IF;
8459 
8460 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_MEDIAITEM', 'B', 'V') THEN
8461 				JTF_IH_PUB_VUHK.close_mediaitem_pre(
8462 				                     p_media_rec=>l_media_rec,
8463 						     x_data=>l_data,
8464 						     x_count=>l_count_hk,
8465 						     x_return_code=>l_return_code);
8466 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8467 					RAISE FND_API.G_EXC_ERROR;
8468 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8469 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8470 				END IF;
8471 			END IF;
8472 
8473 
8474 		-- Standard call to check for call compatibility
8475 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
8476               l_api_name, g_pkg_name) THEN
8477 			RAISE fnd_api.g_exc_unexpected_error;
8478 		END IF;
8479 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Close_MediaItem');
8480 
8481 		-- Initialize message list if p_init_msg_list is set to TRUE
8482 		IF fnd_api.to_boolean(p_init_msg_list) THEN
8483 			fnd_msg_pub.initialize;
8484 		END IF;
8485 
8486    		-- Initialize API return status to success
8487    		x_return_status := fnd_api.g_ret_sts_success;
8488 
8489    		--
8490 		-- Apply business-rule validation to all required and passed parameters
8491 		--
8492 		-- Validate user and login session IDs
8493 		--
8494 		IF (p_user_id IS NULL) THEN
8495 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
8496 				RAISE fnd_api.g_exc_error;
8497 		ELSE
8498 			jtf_ih_core_util_pvt.validate_who_info(
8499 				p_api_name        => l_api_name_full,
8500 				p_parameter_name_usr    => 'p_user_id',
8501 				p_parameter_name_log    => 'p_login_id',
8502 				p_user_id         => p_user_id,
8503 				p_login_id        => p_login_id,
8504 				x_return_status   => l_return_status );
8505 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
8506 				RAISE fnd_api.g_exc_error;
8507 			END IF;
8508 		END IF;
8509 
8510 
8511   	-- Enh# 3491849
8512   	--
8513     -- Get current values for ao_update_pending and soft_closed columns and end_date_time
8514     --
8515    	SELECT ao_update_pending,  direction, media_item_type, end_date_time
8516         INTO l_ao_update_pending, l_direction, l_media_item_type, l_end_date_time
8517         FROM JTF_IH_MEDIA_ITEMS WHERE Media_Id = p_media_rec.media_id;
8518 
8519   -- Check end_date_time parameter.
8520   --
8521   IF p_media_rec.end_date_time <> fnd_api.g_miss_date AND p_media_rec.end_date_time IS NOT NULL THEN
8522       l_media_rec.end_date_time := p_media_rec.end_date_time;
8523   ELSE
8524       IF l_end_date_time IS NOT NULL AND l_end_date_time <> fnd_api.g_miss_date THEN
8525       l_media_rec.end_date_time := l_end_date_time;
8526     ELSE
8527     	l_media_rec.end_date_time := SYSDATE;
8528 	END IF;
8529   END IF;
8530 		--
8531 		--Update MediaItem
8532 		--
8533 		Update_MediaItem(
8534 					p_api_version,
8535 					p_init_msg_list,
8536 					'F',         -- No Commit.
8537 					p_resp_appl_id,
8538 					p_resp_id,
8539 					p_user_id,
8540 					p_login_id,
8541 					x_return_status,
8542 					x_msg_count,
8543 					x_msg_data,
8544 					l_media_rec,
8545         			p_object_version);
8546 		IF (x_return_status <> fnd_api.g_ret_sts_success) THEN
8547 			RAISE fnd_api.g_exc_error;
8548 		END IF;
8549 		-- DBMS_OUTPUT.PUT_LINE('PAST Update_MediaItem in JTF_IH_PUB.Close_MediaItem');
8550 		--
8551   	-- Enh# 3491849
8552   	--
8553   	IF l_direction = 'OUTBOUND' AND l_media_item_type = 'TELEPHONE' THEN
8554 		IF l_ao_update_pending = 'Y' THEN
8555 			--  Soft close the MI
8556 			UPDATE JTF_IH_MEDIA_ITEMS
8557 			SET SOFT_CLOSED = l_soft_closed_perf
8558 			WHERE MEDIA_ID = p_media_rec.media_id;
8559 		ELSE
8560 			-- hard close the MI
8561 			UPDATE JTF_IH_MEDIA_ITEMS
8562 			SET ACTIVE = l_active_perf
8563 			WHERE MEDIA_ID = p_media_rec.media_id;
8564 		END IF;
8565 	ELSE
8566 		-- hard close the MI
8567 		UPDATE JTF_IH_MEDIA_ITEMS
8568 		set ACTIVE = l_active_perf
8569 		WHERE MEDIA_ID = p_media_rec.media_id;
8570 	END IF;
8571 
8572   -- Close all related Media_Item_LCs
8573   --
8574   FOR cur_Milcs IN (SELECT milcs_id, start_date_time, end_date_time, duration
8575           FROM jtf_ih_media_item_lc_segs WHERE Media_Id = p_media_rec.media_id) LOOP
8576       IF (cur_Milcs.end_date_time IS NULL) OR (cur_Milcs.end_date_time = fnd_api.g_miss_date) THEN
8577     		cur_Milcs.end_date_time := l_end_date_time;
8578 		    Validate_StartEnd_Date
8579 			   (  p_api_name    => l_api_name_full,
8580 				  p_start_date_time   => cur_Milcs.start_date_time,
8581 				  p_end_date_time		=> cur_Milcs.end_date_time,
8582 				  x_return_status     => l_return_status);
8583 		      IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
8584 			     RAISE fnd_api.g_exc_error;
8585 		      END IF;
8586     		-- If we already have duration then pass previouse value without modification
8587     		-- else calculate new duration value
8588     	IF (cur_Milcs.duration IS NULL) OR (cur_Milcs.duration = 0) THEN
8589         	cur_Milcs.duration := ROUND((cur_Milcs.end_date_time - cur_Milcs.start_date_time)*24*60*60);
8590     	END IF;
8591       END IF;
8592 
8593         UPDATE JTF_IH_MEDIA_ITEM_LC_SEGS SET
8594 			End_Date_Time = cur_Milcs.end_date_time,
8595         	Start_Date_time = cur_Milcs.start_date_time,
8596         	Duration = cur_Milcs.duration,
8597         	Active = l_active_perf
8598         	WHERE milcs_id = cur_Milcs.milcs_id;
8599   END LOOP;
8600 			-- Post processing Call
8601 
8602 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_MEDIAITEM', 'A', 'V') THEN
8603 				JTF_IH_PUB_VUHK.close_mediaitem_post(p_media_rec=>l_media_rec,
8604 						     x_data=>l_data,
8605 						     x_count=>l_count_hk,
8606 						     x_return_code=>l_return_code);
8607 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8608 					RAISE FND_API.G_EXC_ERROR;
8609 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8610 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8611 				END IF;
8612 			END IF;
8613 
8614 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'CLOSE_MEDIAITEM', 'A', 'C') THEN
8615 				JTF_IH_PUB_CUHK.close_mediaitem_post(p_media_rec=>l_media_rec,
8616 						     x_data=>l_data,
8617 						     x_count=>l_count_hk,
8618 						     x_return_code=>l_return_code);
8619 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8620 					RAISE FND_API.G_EXC_ERROR;
8621 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8622 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8623 				END IF;
8624 			END IF;
8625 
8626 
8627 		-- Standard check of p_commit
8628 		IF fnd_api.to_boolean(p_commit) THEN
8629 			COMMIT WORK;
8630 		END IF;
8631 		--
8632 		-- Standard check of p_commit
8633 		--
8634 		IF fnd_api.to_boolean(p_commit) THEN
8635 			COMMIT WORK;
8636 		END IF;
8637 		--
8638 		-- Standard call to get message count and if count is 1, get message info
8639 		--
8640 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
8641 		EXCEPTION
8642 		WHEN fnd_api.g_exc_error THEN
8643 			ROLLBACK TO close_mediaitem_pub1;
8644 			x_return_status := fnd_api.g_ret_sts_error;
8645 			fnd_msg_pub.count_and_get
8646 				( p_count       => x_msg_count,
8647 				p_data  => x_msg_data );
8648       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8649 		WHEN fnd_api.g_exc_unexpected_error THEN
8650 			ROLLBACK TO close_mediaitem_pub1;
8651 			x_return_status := fnd_api.g_ret_sts_unexp_error;
8652 			fnd_msg_pub.count_and_get
8653 				( p_count       => x_msg_count,
8654 				p_data  => x_msg_data );
8655       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8656 		WHEN OTHERS THEN
8657 			ROLLBACK TO close_mediaitem_pub1;
8658 			x_return_status := fnd_api.g_ret_sts_unexp_error;
8659 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
8660 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
8661 			END IF;
8662 			fnd_msg_pub.count_and_get
8663 				( p_count       => x_msg_count,
8664 				p_data  => x_msg_data );
8665       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8666 	END Close_MediaItem;
8667 
8668 --
8669 --	HISTORY
8670 --
8671 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
8672 --	------		----		--------------------------
8673 --
8674 --	James Baldo Jr.	15-MAR-2000	Initial Version after losing file
8675 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
8676 --  Igor Aleshin    18-DEC-2001 Bug# 2153913 - PREVENT G_MISS_DATE VALUE FROM BEING WRITTEN TO
8677 --            THE END_DATE_TIME VALUE.
8678 --  Igor Aleshin    20-MAY-2002 Changed duration calculation
8679 --  Igor Aleshin    24-FEB-2003 Fixed bug# 2817083 - Error loggin interactions
8680 
8681 --
8682 
8683 	PROCEDURE Add_MediaLifecycle
8684 	(
8685 	p_api_version	IN	NUMBER,
8686 	p_init_msg_list	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
8687 	p_commit	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
8688 	p_resp_appl_id	IN	NUMBER		DEFAULT NULL,
8689 	p_resp_id	IN	NUMBER		DEFAULT NULL,
8690 	p_user_id	IN	NUMBER,
8691 	p_login_id	IN	NUMBER		DEFAULT NULL,
8692 	x_return_status	OUT NOCOPY	VARCHAR2,
8693 	x_msg_count	OUT NOCOPY	NUMBER,
8694 	x_msg_data	OUT NOCOPY	VARCHAR2,
8695 	p_media_lc_rec	IN	media_lc_rec_type,
8696 	x_milcs_id	OUT NOCOPY	NUMBER
8697 	) AS
8698 		l_api_name   	CONSTANT VARCHAR2(30) := 'Open_MediaLifeCycle';
8699 		l_api_version      	CONSTANT NUMBER       := 1.0;
8700 		l_api_name_full    	CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
8701 		l_return_status    	VARCHAR2(1);
8702 		--l_milcs_id		NUMBER;
8703 		--l_start_date_time	DATE;
8704   -- Bug# 2153913
8705 		--l_end_date_time	    DATE;
8706 		l_active		VARCHAR2(1);
8707 		--l_duration		NUMBER := NULL;
8708 		l_media_lc_rec		media_lc_rec_type;
8709 		--l_media_lc_rec_hk	media_lc_rec_type;
8710 		l_return_code		VARCHAR2(1);
8711 		l_data			VARCHAR2(2000);
8712 		l_count			NUMBER;
8713 		--l_milcs_type_id		NUMBER := NULL;
8714 
8715 	BEGIN
8716                 -- local variables initialization to remove GSCC warning
8717                 l_active := 'Y';
8718                 l_media_lc_rec := p_media_lc_rec;
8719 
8720 		--
8721 		-- Standard start of API savepoint
8722 		--
8723 		SAVEPOINT open_medialifecycle_pub;
8724 
8725 			-- Preprocessing Call
8726 			--l_media_lc_rec_hk := p_media_lc_rec;
8727 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_MEDIALIFECYCLE', 'B', 'C') THEN
8728 				JTF_IH_PUB_CUHK.add_medialifecycle_pre(
8729 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
8730 				                     p_media_lc_rec=>l_media_lc_rec,
8731 						     x_data=>l_data,
8732 						     x_count=>l_count,
8733 						     x_return_code=>l_return_code);
8734 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8735 					RAISE FND_API.G_EXC_ERROR;
8736 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8737 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8738 				END IF;
8739 			END IF;
8740 
8741 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_MEDIALIFECYCLE', 'B', 'V') THEN
8742 				JTF_IH_PUB_VUHK.add_medialifecycle_pre(
8743 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
8744 				                     p_media_lc_rec=>l_media_lc_rec,
8745 						     x_data=>l_data,
8746 						     x_count=>l_count,
8747 						     x_return_code=>l_return_code);
8748 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8749 					RAISE FND_API.G_EXC_ERROR;
8750 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8751 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8752 				END IF;
8753 			END IF;
8754 
8755 		--
8756 		-- Standard call to check for call compatibility
8757 		--
8758 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
8759               l_api_name, g_pkg_name) THEN
8760 			RAISE fnd_api.g_exc_unexpected_error;
8761 		END IF;
8762 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Add_MediaLifeCycle');
8763 		--
8764 		-- Initialize message list if p_init_msg_list is set to TRUE
8765 		--
8766 		IF fnd_api.to_boolean(p_init_msg_list) THEN
8767 		fnd_msg_pub.initialize;
8768 		END IF;
8769 		--
8770    		-- Initialize API return status to success
8771    		--
8772    		x_return_status := fnd_api.g_ret_sts_success;
8773 
8774    		--
8775 		-- Apply business-rule validation to all required and passed parameters
8776 		--
8777 		-- Validate user and login session IDs
8778 		--
8779 		IF (p_user_id IS NULL) THEN
8780 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
8781 				RAISE fnd_api.g_exc_error;
8782 		ELSE
8783 			jtf_ih_core_util_pvt.validate_who_info
8784 			( p_api_name        => l_api_name_full,
8785 			  p_parameter_name_usr    => 'p_user_id',
8786 			  p_parameter_name_log    => 'p_login_id',
8787 			  p_user_id         => p_user_id,
8788 			  p_login_id        => p_login_id,
8789 			  x_return_status   => l_return_status );
8790 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
8791 				RAISE fnd_api.g_exc_error;
8792 			END IF;
8793 		END IF;
8794 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Add_MediaLifeCycle');
8795 
8796 		--
8797 		-- Validate all non-missing attributes by calling the utility procedure.
8798 		--
8799 		Validate_Mlcs_Record
8800 		(	p_api_name      => l_api_name_full,
8801 			p_media_lc_rec  => p_media_lc_rec,
8802 			p_resp_appl_id  => p_resp_appl_id,
8803 			p_resp_id       => p_resp_id,
8804 			x_return_status       => l_return_status
8805 		);
8806 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
8807 			RAISE fnd_api.g_exc_error;
8808 		END IF;
8809 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_Media_LC_Record in JTF_IH_PUB.Add_MediaLifeCycle');
8810 		-- assign milcs_type_id if not supplied
8811 		-- since milcs_code has been validate previously no checking is required.
8812 		IF ((p_media_lc_rec.milcs_type_id IS NULL)  OR (p_media_lc_rec.milcs_type_id = fnd_api.g_miss_num)) THEN
8813 			select milcs_type_id
8814 			--INTO l_milcs_type_id
8815 			INTO   l_media_lc_rec.milcs_type_id
8816 			from JTF_IH_MEDIA_ITM_LC_SEG_TYS
8817 			where milcs_code = p_media_lc_rec.milcs_code;
8818 		ELSE
8819 			--l_milcs_type_id := p_media_lc_rec.milcs_type_id;
8820 			l_media_lc_rec.milcs_type_id := p_media_lc_rec.milcs_type_id;
8821 		END IF;
8822 
8823   -- Modified by IAleshin 20-MAY-2002
8824 		-- assign the end_date_time
8825 		IF(p_media_lc_rec.end_date_time IS NOT NULL) AND (p_media_lc_rec.end_date_time <> fnd_api.g_miss_date) THEN
8826 			--l_end_date_time := p_media_lc_rec.end_date_time;
8827 			l_media_lc_rec.end_date_time := p_media_lc_rec.end_date_time;
8828 		ELSE
8829 			--l_end_date_time := NULL;
8830 			l_media_lc_rec.end_date_time := NULL;
8831                         --l_duration := NULL;
8832                         l_media_lc_rec.duration := NULL;
8833 		END IF;
8834 
8835 		-- assign the start_date_time
8836 		IF(p_media_lc_rec.start_date_time IS NOT NULL) AND (p_media_lc_rec.start_date_time <> fnd_api.g_miss_date) THEN
8837 			--l_start_date_time := p_media_lc_rec.start_date_time;
8838 			l_media_lc_rec.start_date_time := p_media_lc_rec.start_date_time;
8839 		ELSE
8840 			--l_start_date_time := SYSDATE;
8841 			l_media_lc_rec.start_date_time := SYSDATE;
8842 		END IF;
8843 
8844 			Validate_StartEnd_Date
8845 			(	p_api_name    => l_api_name_full,
8846 				--p_start_date_time   => l_start_date_time,
8847 				p_start_date_time   => l_media_lc_rec.start_date_time,
8848 				--p_end_date_time	    => l_end_date_time,
8849 				p_end_date_time	    => l_media_lc_rec.end_date_time,
8850 				x_return_status     => l_return_status
8851 			);
8852 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
8853 				RAISE fnd_api.g_exc_error;
8854 			END IF;
8855 
8856 		-- assign the duration
8857 		IF(p_media_lc_rec.duration IS NOT NULL) AND (p_media_lc_rec.duration <> fnd_api.g_miss_num) THEN
8858 			--l_duration := p_media_lc_rec.duration;
8859 			l_media_lc_rec.duration := p_media_lc_rec.duration;
8860 		ELSIF (l_media_lc_rec.end_date_time IS NULL) THEN
8861                         --l_duration := 0;
8862                         l_media_lc_rec.duration := 0;
8863   ELSE
8864 			--l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
8865 			l_media_lc_rec.duration := ROUND((l_media_lc_rec.end_date_time - l_media_lc_rec.start_date_time)*24*60*60);
8866 		END IF;
8867 
8868 		-- DBMS_OUTPUT.PUT_LINE('PAST assign the duration in JTF_IH_PUB.Add_MediaLifeCycle');
8869 
8870   -- Bug# 2817083
8871 		--SELECT JTF_IH_MEDIA_ITEM_LC_SEG_S1.NextVal into l_milcs_id FROM dual;
8872 		-- DBMS_OUTPUT.PUT_LINE('PAST generated sequence JTF_IH_PUB.Add_MediaLifeCycle milcs := ' || l_milcs_id);
8873   --l_milcs_id := Get_milcs_id(NULL);
8874   l_media_lc_rec.milcs_id := Get_milcs_id(NULL);
8875 
8876 		INSERT INTO jtf_ih_media_item_lc_segs
8877 		(
8878 			 CREATED_BY,
8879 			 CREATION_DATE,
8880 			 LAST_UPDATED_BY,
8881 			 LAST_UPDATE_DATE,
8882 			 LAST_UPDATE_LOGIN,
8883 			 MILCS_ID,
8884 			 START_DATE_TIME,
8885 			 TYPE_TYPE,
8886 			 TYPE_ID,
8887 			 DURATION,
8888 			 END_DATE_TIME,
8889 			 MILCS_TYPE_ID,
8890 			 MEDIA_ID,
8891 			 HANDLER_ID,
8892 			 RESOURCE_ID,
8893 			 ACTIVE
8894 			)
8895 			VALUES
8896 			(
8897 			 p_user_id,
8898 			 Sysdate,
8899 			 p_user_id,
8900 			 Sysdate,
8901 			 p_login_id,
8902 			 --l_milcs_id,
8903 			 l_media_lc_rec.milcs_id,
8904 			 --l_start_date_time,
8905 			 l_media_lc_rec.start_date_time,
8906 			 decode(p_media_lc_rec.type_type,fnd_api.g_miss_char, null, p_media_lc_rec.type_type),
8907 			 decode(p_media_lc_rec.type_id,fnd_api.g_miss_num, null, p_media_lc_rec.type_id),
8908 			 --l_duration,
8909 			 l_media_lc_rec.duration,
8910 			 --l_end_date_time,
8911 			 l_media_lc_rec.end_date_time,
8912 			 --l_milcs_type_id,
8913 			 l_media_lc_rec.milcs_type_id,
8914 			 l_media_lc_rec.media_id,
8915 			 l_media_lc_rec.handler_id,
8916 			 decode(l_media_lc_rec.resource_id,fnd_api.g_miss_num, null, l_media_lc_rec.resource_id),
8917 			 l_active
8918 			);
8919 		-- DBMS_OUTPUT.PUT_LINE('PAST INSERT INTO Validate_Media_LC_Record in JTF_IH_PUB.Add_MediaLifeCycle');
8920 
8921 		--
8922 		-- Set OUT value
8923 		--
8924 		--x_milcs_id := l_milcs_id;
8925 		x_milcs_id := l_media_lc_rec.milcs_id;
8926 
8927 			-- Post processing Call
8928 
8929 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_MEDIALIFECYCLE', 'A', 'V') THEN
8930 				JTF_IH_PUB_VUHK.add_medialifecycle_post(
8931 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
8932 				                     p_media_lc_rec=>l_media_lc_rec,
8933 						     x_data=>l_data,
8934 						     x_count=>l_count,
8935 						     x_return_code=>l_return_code);
8936 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8937 					RAISE FND_API.G_EXC_ERROR;
8938 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8939 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8940 				END IF;
8941 			END IF;
8942 
8943 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'ADD_MEDIALIFECYCLE', 'A', 'C') THEN
8944 				JTF_IH_PUB_CUHK.add_medialifecycle_post(
8945 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
8946 				                     p_media_lc_rec=>l_media_lc_rec,
8947 						     x_data=>l_data,
8948 						     x_count=>l_count,
8949 						     x_return_code=>l_return_code);
8950 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
8951 					RAISE FND_API.G_EXC_ERROR;
8952 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
8953 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8954 				END IF;
8955 			END IF;
8956 
8957 
8958 
8959 		-- Standard check of p_commit
8960 		IF fnd_api.to_boolean(p_commit) THEN
8961 			COMMIT WORK;
8962 		END IF;
8963 
8964 		-- Standard call to get message count and if count is 1, get message info
8965 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
8966 		EXCEPTION
8967 		WHEN fnd_api.g_exc_error THEN
8968 			ROLLBACK TO open_medialifecycle_pub;
8969 			x_return_status := fnd_api.g_ret_sts_error;
8970 			fnd_msg_pub.count_and_get
8971 				( p_count       => x_msg_count,
8972 				p_data  => x_msg_data );
8973       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8974 		WHEN fnd_api.g_exc_unexpected_error THEN
8975 			ROLLBACK TO open_medialifecycle_pub;
8976 			x_return_status := fnd_api.g_ret_sts_unexp_error;
8977 			fnd_msg_pub.count_and_get
8978 				( p_count       => x_msg_count,
8979 				p_data  => x_msg_data );
8980       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8981 		WHEN OTHERS THEN
8982 			ROLLBACK TO open_medialifecycle_pub;
8983 			x_return_status := fnd_api.g_ret_sts_unexp_error;
8984 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
8985 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
8986 			END IF;
8987 			fnd_msg_pub.count_and_get
8988 				( p_count       => x_msg_count,
8989 				p_data  => x_msg_data );
8990       x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
8991 	END Add_MediaLifecycle;
8992 
8993 --
8994 --	HISTORY
8995 --
8996 --	AUTHOR		DATE		MODIFICATION DESCRIPTION
8997 --	------		----		--------------------------
8998 --
8999 --	James Baldo Jr.	15-MAR-2000	Initial Version after losing file
9000 --	James Baldo Jr.	21-APR-2000	For Active setting defect based on bugdb# 1277244
9001 --	James Baldo Jr.	25-APR-2000	User Hooks Customer and Vertical Industry
9002 --  Igor Aleshin    29-MAY-2003 Enh# 2940473 - IH Bulk API Changes
9003 --
9004 --
9005 
9006 	PROCEDURE Update_MediaLifecycle
9007 	(
9008 	p_api_version	IN	NUMBER,
9009 	p_init_msg_list	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
9010 	p_commit	IN	VARCHAR2	DEFAULT FND_API.G_FALSE,
9011 	p_resp_appl_id	IN	NUMBER		DEFAULT NULL,
9012 	p_resp_id	IN	NUMBER		DEFAULT NULL,
9013 	p_user_id	IN	NUMBER,
9014 	p_login_id	IN	NUMBER		DEFAULT NULL,
9015 	x_return_status	OUT NOCOPY	VARCHAR2,
9016 	x_msg_count	OUT NOCOPY	NUMBER,
9017 	x_msg_data	OUT NOCOPY	VARCHAR2,
9018 	p_media_lc_rec	IN	media_lc_rec_type,
9019     -- Bug# 2012159
9020     p_object_version IN NUMBER DEFAULT NULL
9021 	) AS
9022 	l_api_name   			CONSTANT VARCHAR2(30) := 'Update_MediaLifecycle';
9023 	l_api_version      			CONSTANT NUMBER       := 1.0;
9024 	l_api_name_full    			CONSTANT VARCHAR2(61) := g_pkg_name||'.'||l_api_name;
9025 	l_return_status    			VARCHAR2(1);
9026 	l_milcs_id				NUMBER;
9027 	l_media_id				NUMBER;
9028 	--l_type_id				NUMBER;
9029 	--l_duration				NUMBER;
9030 	--l_end_date_time				DATE;
9031 	--l_start_date_time			DATE;
9032 	--l_milcs_type_id				NUMBER;
9033 	l_type_type				VARCHAR2(80);
9034 	l_handler_id				NUMBER;
9035 	l_resource_id				NUMBER;
9036 	l_active				VARCHAR2(1);
9037 	l_media_lc_rec				media_lc_rec_type;
9038 	--l_media_lc_rec_hk			media_lc_rec_type;
9039 	l_return_code				VARCHAR2(1);
9040 	l_data					VARCHAR2(2000);
9041 	l_count					NUMBER;
9042     l_object_version  NUMBER;
9043     l_bulk_writer_code      VARCHAR2(240);
9044     l_bulk_batch_type       VARCHAR2(240);
9045     l_bulk_batch_id   NUMBER;
9046     l_bulk_interaction_id   NUMBER;
9047 
9048 	CURSOR c_Update_MediaLifecycle_csr IS
9049 		SELECT *
9050 		FROM 	JTF_IH_MEDIA_ITEM_LC_SEGS
9051 		WHERE 	milcs_id = p_media_lc_rec.milcs_id
9052 		FOR UPDATE;
9053 	v_Update_MediaLifecycle_rec	c_Update_MediaLifecycle_csr%ROWTYPE;
9054 
9055 	BEGIN
9056                -- local variables initialization to remove GSCC warnings
9057                --l_type_id :=fnd_api.g_miss_num;
9058                --l_duration :=fnd_api.g_miss_num;
9059                --l_end_date_time :=fnd_api.g_miss_date;
9060                --l_start_date_time :=fnd_api.g_miss_date;
9061                --l_milcs_type_id :=fnd_api.g_miss_num;
9062                l_type_type :=fnd_api.g_miss_char;
9063                l_handler_id :=fnd_api.g_miss_num;
9064                l_resource_id :=fnd_api.g_miss_num;
9065                l_active :=NULL;
9066                l_media_lc_rec :=p_media_lc_rec;
9067 
9068                         -- Standard start of API savepoint
9069 		        SAVEPOINT update_medialifecycle_pub;
9070 
9071 			-- Preprocessing Call
9072 			--l_media_lc_rec_hk := p_media_lc_rec;
9073 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIALIFECYCLE', 'B', 'C') THEN
9074 				JTF_IH_PUB_CUHK.update_medialifecycle_pre(
9075 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
9076 				                     p_media_lc_rec=>l_media_lc_rec,
9077 						     x_data=>l_data,
9078 						     x_count=>l_count,
9079 						     x_return_code=>l_return_code);
9080 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
9081 					RAISE FND_API.G_EXC_ERROR;
9082 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
9083 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9084 				END IF;
9085 			END IF;
9086 
9087 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIALIFECYCLE', 'B', 'V') THEN
9088 				JTF_IH_PUB_VUHK.update_medialifecycle_pre(
9089 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
9090 				                     p_media_lc_rec=>l_media_lc_rec,
9091 						     x_data=>l_data,
9092 						     x_count=>l_count,
9093 						     x_return_code=>l_return_code);
9094 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
9095 					RAISE FND_API.G_EXC_ERROR;
9096 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
9097 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9098 				END IF;
9099 			END IF;
9100 
9101 		-- Standard call to check for call compatibility
9102 		IF NOT fnd_api.compatible_api_call(l_api_version, p_api_version,
9103               l_api_name, g_pkg_name) THEN
9104 			RAISE fnd_api.g_exc_unexpected_error;
9105 		END IF;
9106 		-- DBMS_OUTPUT.PUT_LINE('PAST fnd_api.compatible_api_call in JTF_IH_PUB.Update_MediaLifecycle');
9107 
9108 		-- Initialize message list if p_init_msg_list is set to TRUE
9109 		IF fnd_api.to_boolean(p_init_msg_list) THEN
9110 			fnd_msg_pub.initialize;
9111 		END IF;
9112 
9113    		-- Initialize API return status to success
9114    		x_return_status := fnd_api.g_ret_sts_success;
9115 
9116    		--
9117 		-- Apply business-rule validation to all required and passed parameters
9118 		--
9119 		-- Validate user and login session IDs
9120 		--
9121 		IF (p_user_id IS NULL) THEN
9122 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'p_user_id');
9123 			RAISE fnd_api.g_exc_error;
9124 		ELSE
9125 			jtf_ih_core_util_pvt.validate_who_info
9126 			( p_api_name        => l_api_name_full,
9127 			  p_parameter_name_usr    => 'p_user_id',
9128 			  p_parameter_name_log    => 'p_login_id',
9129 			  p_user_id         => p_user_id,
9130 			  p_login_id        => p_login_id,
9131 			  x_return_status   => l_return_status );
9132 			IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
9133 				RAISE fnd_api.g_exc_error;
9134 			END IF;
9135 		END IF;
9136 		-- DBMS_OUTPUT.PUT_LINE('PAST jtf_ih_core_util_pvt.validate_who_info in JTF_IH_PUB.Update_MediaLifecycle');
9137 
9138 		IF (p_media_lc_rec.milcs_id IS NULL) THEN
9139 			jtf_ih_core_util_pvt.add_null_parameter_msg(l_api_name_full, 'milcs_id');
9140 			RAISE fnd_api.g_exc_error;
9141 		ELSE
9142 
9143 			OPEN c_Update_MediaLifecycle_csr;
9144 			FETCH c_Update_MediaLifecycle_csr INTO  v_Update_MediaLifecycle_rec;
9145 			IF (c_Update_MediaLifecycle_csr%notfound) THEN
9146 				x_return_status := fnd_api.g_ret_sts_error;
9147 				jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_media_lc_rec.milcs_id),
9148 							    'media_id');
9149 				RETURN;
9150 			END IF;
9151 			-- DBMS_OUTPUT.PUT_LINE('PAST OPEN c_Update_MediaLifecycle_csr in JTF_IH_PUB.Update_MediaLifecycle');
9152 
9153 			IF(v_Update_MediaLifecycle_rec.active <> 'N') THEN
9154 				--
9155 				-- Check if start_date_time requires updating
9156 				--
9157 				IF ((p_media_lc_rec.start_date_time IS NULL) OR (p_media_lc_rec.start_date_time = fnd_api.g_miss_date)) then
9158 					--l_start_date_time := v_Update_MediaLifecycle_rec.start_date_time;
9159 					l_media_lc_rec.start_date_time := v_Update_MediaLifecycle_rec.start_date_time;
9160 				ELSE
9161 					--l_start_date_time := p_media_lc_rec.start_date_time;
9162 					l_media_lc_rec.start_date_time := p_media_lc_rec.start_date_time;
9163 				END IF;
9164 				--
9165 				-- Check if end_date_time requires updating
9166 				--
9167 				IF ((p_media_lc_rec.end_date_time IS NULL) OR (p_media_lc_rec.end_date_time = fnd_api.g_miss_date)) THEN
9168 					IF ((v_Update_MediaLifecycle_rec.end_date_time IS NULL) OR (v_Update_MediaLifecycle_rec.end_date_time = fnd_api.g_miss_date)) THEN
9169 						--l_end_date_time := sysdate;
9170 						l_media_lc_rec.end_date_time := sysdate;
9171 					ELSE
9172 						--l_end_date_time := v_Update_MediaLifecycle_rec.end_date_time;
9173 						l_media_lc_rec.end_date_time := v_Update_MediaLifecycle_rec.end_date_time;
9174 					END IF;
9175 				ELSE
9176 					--l_end_date_time := p_media_lc_rec.end_date_time;
9177 					l_media_lc_rec.end_date_time := p_media_lc_rec.end_date_time;
9178 				END IF;
9179 
9180 				Validate_StartEnd_Date
9181 						(	p_api_name    => l_api_name_full,
9182 							--p_start_date_time   => l_start_date_time,
9183 							p_start_date_time   => l_media_lc_rec.start_date_time,
9184 							--p_end_date_time	    => l_end_date_time,
9185 							p_end_date_time	    => l_media_lc_rec.end_date_time,
9186 							x_return_status     => l_return_status
9187 						);
9188 				IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
9189 					--DBMS_OUTPUT.PUT_LINE('Error in Validate_StartEnd_Date of JTF_IH_PUB.Update_MediaLifecycle');
9190 					RAISE fnd_api.g_exc_error;
9191 				END IF;
9192 				--
9193 				-- Check if  duration requires updating
9194 				--
9195 				IF ((p_media_lc_rec.duration IS NULL) OR (p_media_lc_rec.duration = fnd_api.g_miss_num)) THEN
9196 				    --l_duration := v_Update_MediaLifecycle_rec.duration;
9197 				    l_media_lc_rec.duration := v_Update_MediaLifecycle_rec.duration;
9198 				ELSE
9199 				    --l_duration := ROUND((l_end_date_time - l_start_date_time)*24*60*60);
9200 				    l_media_lc_rec.duration := ROUND((l_media_lc_rec.end_date_time - l_media_lc_rec.start_date_time)*24*60*60);
9201 				END IF;
9202 
9203 				--
9204 				-- Validate start_date_time and end_date_time by calling the utility procedure.
9205 				--
9206 				--DBMS_OUTPUT.PUT_LINE('PAST Validate_StartEnd_Date in JTF_IH_PUB.Update_MediaLifecycle');
9207 			ELSE
9208 				-- DBMS_OUTPUT.PUT_LINE('hello active error in JTF_IH_PUB.Update_MediaLifecycle');
9209 				jtf_ih_core_util_pvt.add_invalid_argument_msg(l_api_name, to_char(p_media_lc_rec.milcs_id),'Active set to N for medialifecycle');
9210 				RAISE fnd_api.g_exc_error;
9211 			END IF;
9212 				--
9213 				-- Check if type_type requies updating
9214 				--
9215 				-- DBMS_OUTPUT.PUT_LINE('l_type_type1 p_media_lc_rec.type_type := ' || p_media_lc_rec.type_type);
9216 				-- DBMS_OUTPUT.PUT_LINE('l_type_type1 v_Update_MediaLifecycle_rec.type_type := ' || v_Update_MediaLifecycle_rec.type_type);
9217 				IF (p_media_lc_rec.type_type = fnd_api.g_miss_char) then
9218 					-- DBMS_OUTPUT.PUT_LINE('l_type_type2 := ');
9219 					-- DBMS_OUTPUT.PUT_LINE('l_type_type2 := ' || v_Update_MediaLifecycle_rec.type_type);
9220 					--l_type_type := v_Update_MediaLifecycle_rec.type_type;
9221 					l_media_lc_rec.type_type := v_Update_MediaLifecycle_rec.type_type;
9222 				ELSE
9223 					-- DBMS_OUTPUT.PUT_LINE('l_type_type3' || p_media_lc_rec.type_type);
9224 					--l_type_type := p_media_lc_rec.type_type;
9225 					l_media_lc_rec.type_type := p_media_lc_rec.type_type;
9226 				END IF;
9227 				--
9228 				-- Check if type_id requires updating
9229 				--
9230 				-- DBMS_OUTPUT.PUT_LINE('l_type_id');
9231 				IF (p_media_lc_rec.type_id = fnd_api.g_miss_num) then
9232 					--l_type_id := v_Update_MediaLifecycle_rec.type_id;
9233 					l_media_lc_rec.type_id := v_Update_MediaLifecycle_rec.type_id;
9234 				ELSE
9235 					--l_type_id := p_media_lc_rec.type_id;
9236 					l_media_lc_rec.type_id := p_media_lc_rec.type_id;
9237 				END IF;
9238 				--
9239 				-- Check if milcs_type_id requires updating
9240 				--
9241 				-- DBMS_OUTPUT.PUT_LINE('l_milcs_type_id');
9242 				IF (p_media_lc_rec.milcs_type_id = fnd_api.g_miss_num) then
9243 					--l_milcs_type_id := v_Update_MediaLifecycle_rec.milcs_type_id;
9244 					l_media_lc_rec.milcs_type_id := v_Update_MediaLifecycle_rec.milcs_type_id;
9245 
9246 				ELSE
9247 					--l_milcs_type_id := p_media_lc_rec.milcs_type_id;
9248 					l_media_lc_rec.milcs_type_id := p_media_lc_rec.milcs_type_id;
9249 				END IF;
9250 				--
9251 				-- Check if handler_id requires updating
9252 				--
9253 				-- DBMS_OUTPUT.PUT_LINE('l_handler_id');
9254 				IF (p_media_lc_rec.handler_id = fnd_api.g_miss_num) then
9255 					--l_handler_id := v_Update_MediaLifecycle_rec.handler_id;
9256 					l_media_lc_rec.handler_id := v_Update_MediaLifecycle_rec.handler_id;
9257 
9258 				ELSE
9259 					l_handler_id := p_media_lc_rec.handler_id;
9260 					l_media_lc_rec.handler_id := p_media_lc_rec.handler_id;
9261 				END IF;
9262 				--
9263 				-- Check if resource_id requires updating
9264 				--
9265 				-- DBMS_OUTPUT.PUT_LINE('l_resource_id');
9266 				IF (p_media_lc_rec.resource_id = fnd_api.g_miss_num) then
9267 					--l_resource_id := v_Update_MediaLifecycle_rec.resource_id;
9268 					l_media_lc_rec.resource_id := v_Update_MediaLifecycle_rec.resource_id;
9269 
9270 				ELSE
9271 					--l_resource_id := p_media_lc_rec.resource_id;
9272 					l_media_lc_rec.resource_id := p_media_lc_rec.resource_id;
9273 				END IF;
9274 				-- DBMS_OUTPUT.PUT_LINE('Before UPDATE JTF_IH_MEDIA_ITEM_LC_SEGS in JTF_IH_PUB.Update_MediaLifecycle');
9275 		  --
9276 		  -- Check if object_version_number requies updating
9277 		  --
9278 		  IF (p_object_version IS NULL)  then
9279 		        l_object_version := v_Update_MediaLifecycle_rec.object_version_number;
9280 		  ELSE
9281 		        l_object_version := p_object_version;
9282 		  END IF;
9283 
9284 
9285 		  --
9286 		  -- Check if bulk_writer_code requies updating
9287 		  --
9288 		  IF (p_media_lc_rec.bulk_writer_code IS NULL)  then
9289 		        l_bulk_writer_code := v_Update_MediaLifecycle_rec.bulk_writer_code;
9290 		  ELSE
9291 		        l_bulk_writer_code := p_media_lc_rec.bulk_writer_code;
9292 		  END IF;
9293 		  --
9294 		  -- Check if bulk_writer_code requies updating
9295 		  --
9296 		  IF (p_media_lc_rec.bulk_batch_type IS NULL)  then
9297 		        l_bulk_batch_type := v_Update_MediaLifecycle_rec.bulk_batch_type;
9298 		  ELSE
9299 		        l_bulk_batch_type := p_media_lc_rec.bulk_batch_type;
9300 		  END IF;
9301 
9302 		  --
9303 		  -- Check if bulk_batch_id requies updating
9304 		  --
9305 		  IF (p_media_lc_rec.bulk_batch_id IS NULL)  then
9306 		        l_bulk_batch_id := v_Update_MediaLifecycle_rec.bulk_batch_id;
9307 		  ELSE
9308 		        l_bulk_batch_id := p_media_lc_rec.bulk_batch_id;
9309 		  END IF;
9310 		  --
9311 		  -- Check if bulk_interaction_id requies updating
9312 		  --
9313 		  IF (p_media_lc_rec.bulk_interaction_id IS NULL)  then
9314 		        l_bulk_interaction_id := v_Update_MediaLifecycle_rec.bulk_writer_code;
9315 		  ELSE
9316 		        l_bulk_interaction_id := p_media_lc_rec.bulk_interaction_id;
9317 		  END IF;
9318 		--
9319 		-- Validate all non-missing attributes by calling the utility procedure.
9320 		--
9321 		Validate_Mlcs_Record
9322 		(	p_api_name      => l_api_name_full,
9323 			p_media_lc_rec  => l_media_lc_rec,
9324 			p_resp_appl_id  => p_resp_appl_id,
9325 			p_resp_id       => p_resp_id,
9326 			x_return_status       => l_return_status
9327 		);
9328 		IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
9329 			RAISE fnd_api.g_exc_error;
9330 		END IF;
9331 		-- DBMS_OUTPUT.PUT_LINE('PAST Validate_MediaItem_Record in JTF_IH_PUB.Update_MediaLifecycle');
9332 
9333 
9334 				UPDATE JTF_IH_MEDIA_ITEM_LC_SEGS
9335 				SET
9336 					handler_id		=	l_media_lc_rec.handler_id,
9337 					resource_id		=	l_media_lc_rec.resource_id,
9338 					duration		=	decode( l_media_lc_rec.duration, fnd_api.g_miss_num, 0,l_media_lc_rec.duration),
9339 					end_date_time		=	l_media_lc_rec.end_date_time,
9340 					start_date_time		=	l_media_lc_rec.start_date_time,
9341 					type_type		=	decode( l_media_lc_rec.type_type, fnd_api.g_miss_char, null,l_media_lc_rec.type_type),
9342 					type_id 		= 	decode( l_media_lc_rec.type_id, fnd_api.g_miss_num, null,l_media_lc_rec.type_id),
9343 					milcs_type_id		=	decode( l_media_lc_rec.milcs_type_id, fnd_api.g_miss_num, null,l_media_lc_rec.milcs_type_id),
9344 					last_update_date	=	sysdate,
9345 					last_updated_by		=	p_user_id,
9346 					last_update_login	=	p_login_id,
9347         object_version_number = l_object_version,
9348         bulk_writer_code    =   decode( l_bulk_writer_code, fnd_api.g_miss_char, null, l_bulk_writer_code),
9349         bulk_batch_type     =   decode( l_bulk_batch_type, fnd_api.g_miss_char, null, l_bulk_batch_type),
9350         bulk_batch_id       =   decode( l_bulk_batch_id, fnd_api.g_miss_num, null, l_bulk_batch_id),
9351         bulk_interaction_id =   decode( l_bulk_interaction_id, fnd_api.g_miss_num, null, l_bulk_interaction_id)
9352 				WHERE CURRENT OF c_Update_MediaLifecycle_csr;
9353 			END IF;
9354 
9355 			-- Post processing Call
9356 
9357 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIALIFECYCLE', 'A', 'V') THEN
9358 				JTF_IH_PUB_VUHK.update_medialifecycle_post(
9359 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
9360 				                     p_media_lc_rec=>l_media_lc_rec,
9361 						     x_data=>l_data,
9362 						     x_count=>l_count,
9363 						     x_return_code=>l_return_code);
9364 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
9365 					RAISE FND_API.G_EXC_ERROR;
9366 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
9367 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9368 				END IF;
9369 			END IF;
9370 
9371 			IF JTF_USR_HKS.Ok_TO_EXECUTE('JTF_IH_PUB', 'UPDATE_MEDIALIFECYCLE', 'A', 'C') THEN
9372 				JTF_IH_PUB_CUHK.update_medialifecycle_post(
9373 				                     --p_media_lc_rec=>l_media_lc_rec_hk,
9374 				                     p_media_lc_rec=>l_media_lc_rec,
9375 						     x_data=>l_data,
9376 						     x_count=>l_count,
9377 						     x_return_code=>l_return_code);
9378 				IF (l_return_code = FND_API.G_RET_STS_ERROR) THEN
9379 					RAISE FND_API.G_EXC_ERROR;
9380 				ELSIF (l_return_code = FND_API.G_RET_STS_UNEXP_ERROR) THEN
9381 					RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9382 				END IF;
9383 			END IF;
9384 
9385 
9386 
9387 		-- Standard check of p_commit
9388 		IF fnd_api.to_boolean(p_commit) THEN
9389 			COMMIT WORK;
9390 		END IF;
9391 
9392 		-- Standard call to get message count and if count is 1, get message info
9393 		fnd_msg_pub.count_and_get( p_count  => x_msg_count, p_data   => x_msg_data );
9394 		EXCEPTION
9395 		WHEN fnd_api.g_exc_error THEN
9396 			ROLLBACK TO update_medialifecycle_pub;
9397 			x_return_status := fnd_api.g_ret_sts_error;
9398 			fnd_msg_pub.count_and_get
9399 				( p_count       => x_msg_count,
9400 				p_data  => x_msg_data );
9401     x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
9402 		WHEN fnd_api.g_exc_unexpected_error THEN
9403 			ROLLBACK TO update_medialifecycle_pub;
9404 			x_return_status := fnd_api.g_ret_sts_unexp_error;
9405 			fnd_msg_pub.count_and_get
9406 				( p_count       => x_msg_count,
9407 				p_data  => x_msg_data );
9408     x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
9409 		WHEN OTHERS THEN
9410 			ROLLBACK TO update_medialifecycle_pub;
9411 			x_return_status := fnd_api.g_ret_sts_unexp_error;
9412 			IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
9413 				fnd_msg_pub.add_exc_msg(g_pkg_name, l_api_name);
9414 			END IF;
9415 			fnd_msg_pub.count_and_get
9416 				( p_count       => x_msg_count,
9417 				p_data  => x_msg_data );
9418     x_msg_data := FND_MSG_PUB.Get(p_msg_index => x_msg_count, p_encoded=>'F');
9419 	END Update_MediaLifecycle;
9420 
9421 
9422 
9423 FUNCTION INIT_INTERACTION_REC RETURN interaction_rec_type
9424 AS
9425 
9426 l_interaction_rec_type interaction_rec_type;
9427 
9428 BEGIN
9429 
9430 return l_interaction_rec_type;
9431 
9432 END INIT_INTERACTION_REC;
9433 
9434 FUNCTION INIT_ACTIVITY_REC RETURN activity_rec_type
9435 AS
9436 
9437 l_activity_rec_type activity_rec_type;
9438 
9439 BEGIN
9440 
9441 return l_activity_rec_type;
9442 
9443 END INIT_ACTIVITY_REC;
9444 
9445 END JTF_IH_PUB;
9446