DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSI_PARTY_RELATIONSHIPS_PVT

Source


1 PACKAGE BODY csi_party_relationships_pvt AS
2 /* $Header: csivipb.pls 120.12 2007/10/20 00:51:30 fli ship $ */
3 
4 
5 g_pkg_name     CONSTANT VARCHAR2(30)  := 'CSI_PARTY_RELATIONSHIPS_PVT';
6 g_expire_party_flag      VARCHAR2(1)  := 'N';
7 --g_expire_account_flag    VARCHAR2(1)  := 'N'; -- Commented by sguthiva for bug 2307804
8 --g_force_expire_flag      VARCHAR2(1)  := 'N'; -- Commented by sguthiva for bug 2307804
9 --g_contract_event_type    VARCHAR2(30) := NULL;-- Commented by sguthiva for bug 2307804
10 
11 
12 /*----------------------------------------------------------*/
13 /* Procedure name:  Initialize_acct_rec_no_dump             */
14 /* Description : This procudure gets the first record       */
15 /*                 from the history                         */
16 /*----------------------------------------------------------*/
17 
18 PROCEDURE Initialize_acct_rec_no_dump
19 (
20   x_party_account_rec       IN OUT NOCOPY   csi_datastructures_pub.party_account_header_rec,
21   p_ip_account_id           IN NUMBER ,
22   x_first_no_dump           IN OUT NOCOPY   DATE
23   ) IS
24 
25 CURSOR Int_first_no_dump(i_ip_acct_id IN NUMBER ) IS
26 SELECT
27     CREATION_DATE                   ,
28     NEW_RELATIONSHIP_TYPE_CODE      ,
29     NEW_ACTIVE_START_DATE           ,
30     NEW_ACTIVE_END_DATE             ,
31     NEW_CONTEXT                     ,
32     NEW_ATTRIBUTE1                  ,
33     NEW_ATTRIBUTE2                  ,
34     NEW_ATTRIBUTE3                  ,
35     NEW_ATTRIBUTE4                  ,
36     NEW_ATTRIBUTE5                  ,
37     NEW_ATTRIBUTE6                  ,
38     NEW_ATTRIBUTE7                  ,
39     NEW_ATTRIBUTE8                  ,
40     NEW_ATTRIBUTE9                  ,
41     NEW_ATTRIBUTE10                 ,
42     NEW_ATTRIBUTE11                 ,
43     NEW_ATTRIBUTE12                 ,
44     NEW_ATTRIBUTE13                 ,
45     NEW_ATTRIBUTE14                 ,
46     NEW_ATTRIBUTE15                 ,
47     NEW_BILL_TO_ADDRESS             ,
48     NEW_SHIP_TO_ADDRESS
49  FROM CSI_IP_ACCOUNTS_H
50 WHERE ip_account_id = i_ip_acct_id
51   --and  full_dump_flag = 'N'
52   --and  creation_date < x_first_no_dump
53   order by creation_date;
54 
55 BEGIN
56 
57   FOR C1 IN Int_first_no_dump(p_ip_account_id  ) LOOP
58    IF Int_first_no_dump%ROWCOUNT = 1 THEN
59      x_first_no_dump            :=  C1.creation_date;
60      x_party_account_rec.RELATIONSHIP_TYPE_CODE := C1.NEW_RELATIONSHIP_TYPE_CODE;
61      x_party_account_rec.ACTIVE_START_DATE  := C1.NEW_ACTIVE_START_DATE;
62      x_party_account_rec.ACTIVE_END_DATE    := C1.NEW_ACTIVE_END_DATE;
63      x_party_account_rec.CONTEXT            := C1.NEW_CONTEXT;
64      x_party_account_rec.ATTRIBUTE1         := C1.NEW_ATTRIBUTE1;
65      x_party_account_rec.ATTRIBUTE2         := C1.NEW_ATTRIBUTE2;
66      x_party_account_rec.ATTRIBUTE3         := C1.NEW_ATTRIBUTE3;
67      x_party_account_rec.ATTRIBUTE4         := C1.NEW_ATTRIBUTE4;
68      x_party_account_rec.ATTRIBUTE5         := C1.NEW_ATTRIBUTE5;
69      x_party_account_rec.ATTRIBUTE6         := C1.NEW_ATTRIBUTE6;
70      x_party_account_rec.ATTRIBUTE7         := C1.NEW_ATTRIBUTE7;
71      x_party_account_rec.ATTRIBUTE8         := C1.NEW_ATTRIBUTE8;
72      x_party_account_rec.ATTRIBUTE9         := C1.NEW_ATTRIBUTE9;
73      x_party_account_rec.ATTRIBUTE10        := C1.NEW_ATTRIBUTE10;
74      x_party_account_rec.ATTRIBUTE11        := C1.NEW_ATTRIBUTE11;
75      x_party_account_rec.ATTRIBUTE12        := C1.NEW_ATTRIBUTE12;
76      x_party_account_rec.ATTRIBUTE13        := C1.NEW_ATTRIBUTE13;
77      x_party_account_rec.ATTRIBUTE14        := C1.NEW_ATTRIBUTE14;
78      x_party_account_rec.ATTRIBUTE15        := C1.NEW_ATTRIBUTE15;
79      x_party_account_rec.BILL_TO_ADDRESS    := C1.NEW_BILL_TO_ADDRESS;
80      x_party_account_rec.SHIP_TO_ADDRESS    := C1.NEW_SHIP_TO_ADDRESS;
81    ELSE
82      EXIT;
83    END IF;
84 
85   END LOOP;
86 END Initialize_acct_rec_no_dump;
87 
88 /*----------------------------------------------------------*/
89 /* Procedure name:  Initialize_acct_rec                     */
90 /* Description : This procudure recontructs the record      */
91 /*                 from the history                         */
92 /*----------------------------------------------------------*/
93 
94 PROCEDURE Initialize_acct_rec
95 (
96   x_party_account_rec           IN OUT NOCOPY  csi_datastructures_pub.party_account_header_rec,
97   p_ip_account_hist_id          IN NUMBER ,
98   x_nearest_full_dump           IN OUT NOCOPY  DATE
99   ) IS
100 
101 CURSOR Int_nearest_full_dump(p_ip_acct_hist_id IN NUMBER ) IS
102 SELECT
103     CREATION_DATE                   ,
104     NEW_RELATIONSHIP_TYPE_CODE      ,
105     NEW_ACTIVE_START_DATE           ,
106     NEW_ACTIVE_END_DATE             ,
107     NEW_CONTEXT                     ,
108     NEW_ATTRIBUTE1                  ,
109     NEW_ATTRIBUTE2                  ,
110     NEW_ATTRIBUTE3                  ,
111     NEW_ATTRIBUTE4                  ,
112     NEW_ATTRIBUTE5                  ,
113     NEW_ATTRIBUTE6                  ,
114     NEW_ATTRIBUTE7                  ,
115     NEW_ATTRIBUTE8                  ,
116     NEW_ATTRIBUTE9                  ,
117     NEW_ATTRIBUTE10                 ,
118     NEW_ATTRIBUTE11                 ,
119     NEW_ATTRIBUTE12                 ,
120     NEW_ATTRIBUTE13                 ,
121     NEW_ATTRIBUTE14                 ,
122     NEW_ATTRIBUTE15                 ,
123     NEW_BILL_TO_ADDRESS             ,
124     NEW_SHIP_TO_ADDRESS
125  FROM CSI_IP_ACCOUNTS_H
126 WHERE ip_account_history_id = p_ip_acct_hist_id
127   and  full_dump_flag = 'Y';
128 
129 BEGIN
130 
131   FOR C1 IN Int_nearest_full_dump(p_ip_account_hist_id  ) LOOP
132      x_nearest_full_dump            := C1.creation_date;
133      x_party_account_rec.RELATIONSHIP_TYPE_CODE := C1.NEW_RELATIONSHIP_TYPE_CODE;
134      x_party_account_rec.ACTIVE_START_DATE  := C1.NEW_ACTIVE_START_DATE;
135      x_party_account_rec.ACTIVE_END_DATE    := C1.NEW_ACTIVE_END_DATE;
136      x_party_account_rec.CONTEXT            := C1.NEW_CONTEXT;
137      x_party_account_rec.ATTRIBUTE1         := C1.NEW_ATTRIBUTE1;
138      x_party_account_rec.ATTRIBUTE2         := C1.NEW_ATTRIBUTE2;
139      x_party_account_rec.ATTRIBUTE3         := C1.NEW_ATTRIBUTE3;
140      x_party_account_rec.ATTRIBUTE4         := C1.NEW_ATTRIBUTE4;
141      x_party_account_rec.ATTRIBUTE5         := C1.NEW_ATTRIBUTE5;
142      x_party_account_rec.ATTRIBUTE6         := C1.NEW_ATTRIBUTE6;
143      x_party_account_rec.ATTRIBUTE7         := C1.NEW_ATTRIBUTE7;
144      x_party_account_rec.ATTRIBUTE8         := C1.NEW_ATTRIBUTE8;
145      x_party_account_rec.ATTRIBUTE9         := C1.NEW_ATTRIBUTE9;
146      x_party_account_rec.ATTRIBUTE10        := C1.NEW_ATTRIBUTE10;
147      x_party_account_rec.ATTRIBUTE11        := C1.NEW_ATTRIBUTE11;
148      x_party_account_rec.ATTRIBUTE12        := C1.NEW_ATTRIBUTE12;
149      x_party_account_rec.ATTRIBUTE13        := C1.NEW_ATTRIBUTE13;
150      x_party_account_rec.ATTRIBUTE14        := C1.NEW_ATTRIBUTE14;
151      x_party_account_rec.ATTRIBUTE15        := C1.NEW_ATTRIBUTE15;
152      x_party_account_rec.BILL_TO_ADDRESS    := C1.NEW_BILL_TO_ADDRESS;
153      x_party_account_rec.SHIP_TO_ADDRESS    := C1.NEW_SHIP_TO_ADDRESS;
154 
155   END LOOP;
156 END Initialize_acct_rec ;
157 
158 
159 /*----------------------------------------------------------*/
160 /* Procedure name:  Construct_acct_from_hist                */
161 /* Description : This procudure recontructs the record      */
162 /*                 from the history                         */
163 /*----------------------------------------------------------*/
164 
165 PROCEDURE Construct_acct_from_hist
166 (
167   x_party_account_tbl      IN OUT NOCOPY  csi_datastructures_pub.party_account_header_tbl,
168   p_time_stamp             IN DATE
169    ) IS
170 
171  l_nearest_full_dump      DATE := sysdate;
172  l_ip_account_hist_id     NUMBER;
173  l_party_account_tbl      csi_datastructures_pub.party_account_header_tbl;
174  l_acct_count             NUMBER := 0;
175  --
176  Process_next             EXCEPTION;
177 
178 CURSOR get_nearest_full_dump(p_ip_acct_id IN NUMBER ,p_time IN DATE) IS
179 SELECT
180   MAX(ip_account_history_id)
181 FROM CSI_IP_ACCOUNTS_H
182 WHERE creation_date <= p_time
183   and ip_account_id = p_ip_acct_id
184   and  full_dump_flag = 'Y' ;
185 
186 
187 CURSOR get_ip_acct_hist (p_ip_account_id IN NUMBER ,
188                          p_nearest_full_dump IN DATE,
189                          p_time IN DATE ) IS
190 SELECT
191     OLD_PARTY_ACCOUNT_ID            ,
192     NEW_PARTY_ACCOUNT_ID            ,
193     OLD_RELATIONSHIP_TYPE_CODE      ,
194     NEW_RELATIONSHIP_TYPE_CODE      ,
195     OLD_ACTIVE_START_DATE           ,
196     NEW_ACTIVE_START_DATE           ,
197     OLD_ACTIVE_END_DATE             ,
198     NEW_ACTIVE_END_DATE             ,
199     OLD_CONTEXT                     ,
200     NEW_CONTEXT                     ,
201     OLD_ATTRIBUTE1                  ,
202     NEW_ATTRIBUTE1                  ,
203     OLD_ATTRIBUTE2                  ,
204     NEW_ATTRIBUTE2                  ,
205     OLD_ATTRIBUTE3                  ,
206     NEW_ATTRIBUTE3                  ,
207     OLD_ATTRIBUTE4                  ,
208     NEW_ATTRIBUTE4                  ,
209     OLD_ATTRIBUTE5                  ,
210     NEW_ATTRIBUTE5                  ,
211     OLD_ATTRIBUTE6                  ,
212     NEW_ATTRIBUTE6                  ,
213     OLD_ATTRIBUTE7                  ,
214     NEW_ATTRIBUTE7                  ,
215     OLD_ATTRIBUTE8                  ,
216     NEW_ATTRIBUTE8                  ,
217     OLD_ATTRIBUTE9                  ,
218     NEW_ATTRIBUTE9                  ,
219     OLD_ATTRIBUTE10                 ,
220     NEW_ATTRIBUTE10                 ,
221     OLD_ATTRIBUTE11                 ,
222     NEW_ATTRIBUTE11                 ,
223     OLD_ATTRIBUTE12                 ,
224     NEW_ATTRIBUTE12                 ,
225     OLD_ATTRIBUTE13                 ,
226     NEW_ATTRIBUTE13                 ,
227     OLD_ATTRIBUTE14                 ,
228     NEW_ATTRIBUTE14                 ,
229     OLD_ATTRIBUTE15                 ,
230     NEW_ATTRIBUTE15                 ,
231     OLD_BILL_TO_ADDRESS             ,
232     NEW_BILL_TO_ADDRESS             ,
233     OLD_SHIP_TO_ADDRESS             ,
234     NEW_SHIP_TO_ADDRESS
235  FROM CSI_IP_ACCOUNTS_H
236 WHERE creation_date <= p_time
237   and creation_date >= p_nearest_full_dump
238   and ip_account_id = p_ip_account_id
239   ORDER BY creation_date;
240 
241   l_time_stamp  DATE := p_time_stamp;
242 
243 BEGIN
244 l_party_account_tbl := x_party_account_tbl;
245 IF  l_party_account_tbl.count > 0 THEN
246   FOR i IN l_party_account_tbl.FIRST..l_party_account_tbl.LAST LOOP
247   BEGIN
248     OPEN get_nearest_full_dump(l_party_account_tbl(i).ip_account_id,p_time_stamp);
249     FETCH get_nearest_full_dump INTO l_ip_account_hist_id;
250     CLOSE get_nearest_full_dump;
251 
252     IF l_ip_account_hist_id IS NOT NULL THEN
253       Initialize_acct_rec( l_party_account_tbl(i), l_ip_account_hist_id ,l_nearest_full_dump);
254     ELSE
255        Initialize_acct_rec_no_dump(l_party_account_tbl(i), l_party_account_tbl(i).ip_account_id, l_time_stamp);
256            l_nearest_full_dump :=  l_time_stamp;
257            -- If the user chooses a date before the creation date of the instance
258            -- then raise an error
259            IF p_time_stamp < l_time_stamp THEN
260               -- Messages Commented for bug 2423342. Records that do not qualify should get deleted.
261               -- FND_MESSAGE.SET_NAME('CSI','CSI_H_DATE_BEFORE_CRE_DATE');
262               -- FND_MESSAGE.SET_TOKEN('CREATION_DATE',to_char(l_time_stamp, 'DD-MON-YYYY HH24:MI:SS'));
263               -- FND_MESSAGE.SET_TOKEN('USER_DATE',to_char(p_time_stamp, 'DD-MON-YYYY HH24:MI:SS'));
264               -- FND_MSG_PUB.Add;
265               -- RAISE FND_API.G_EXC_ERROR;
266               l_party_account_tbl.DELETE(i);
267               RAISE Process_next;
268            END IF;
269     END IF;
270 
271 
272     FOR C2 IN get_ip_acct_hist(l_party_account_tbl(i).ip_account_id ,l_nearest_full_dump,p_time_stamp ) LOOP
273 
274        IF (C2.OLD_RELATIONSHIP_TYPE_CODE IS NULL AND C2.NEW_RELATIONSHIP_TYPE_CODE IS NOT NULL)
275        OR (C2.OLD_RELATIONSHIP_TYPE_CODE IS NOT NULL AND C2.NEW_RELATIONSHIP_TYPE_CODE IS NULL)
276        OR (C2.OLD_RELATIONSHIP_TYPE_CODE <> C2.NEW_RELATIONSHIP_TYPE_CODE) THEN
277          l_party_account_tbl(i).RELATIONSHIP_TYPE_CODE := C2.NEW_RELATIONSHIP_TYPE_CODE;
278        END IF;
279 
280        IF (C2.OLD_PARTY_ACCOUNT_ID IS NULL AND C2.NEW_PARTY_ACCOUNT_ID IS NOT NULL)
281        OR (C2.OLD_PARTY_ACCOUNT_ID IS NOT NULL AND C2.NEW_PARTY_ACCOUNT_ID IS NULL)
282        OR (C2.OLD_PARTY_ACCOUNT_ID <> C2.NEW_PARTY_ACCOUNT_ID) THEN
283             l_party_account_tbl(i).PARTY_ACCOUNT_ID := C2.NEW_PARTY_ACCOUNT_ID;
284        END IF;
285 
286 
287        IF (C2.OLD_ACTIVE_START_DATE IS NULL AND C2.NEW_ACTIVE_START_DATE IS NOT NULL)
288        OR (C2.OLD_ACTIVE_START_DATE IS NOT NULL AND C2.NEW_ACTIVE_START_DATE IS NULL)
289        OR (C2.OLD_ACTIVE_START_DATE <> C2.NEW_ACTIVE_START_DATE) THEN
290             l_party_account_tbl(i).ACTIVE_START_DATE := C2.NEW_ACTIVE_START_DATE;
291        END IF;
292 
293 
294        IF (C2.OLD_ACTIVE_END_DATE IS NULL AND C2.NEW_ACTIVE_END_DATE IS NOT NULL)
295        OR (C2.OLD_ACTIVE_END_DATE IS NOT NULL AND C2.NEW_ACTIVE_END_DATE IS NULL)
296        OR (C2.OLD_ACTIVE_END_DATE <> C2.NEW_ACTIVE_END_DATE) THEN
297             l_party_account_tbl(i).ACTIVE_END_DATE := C2.NEW_ACTIVE_END_DATE;
298        END IF;
299 
300 
301        IF (C2.OLD_CONTEXT IS NULL AND C2.NEW_CONTEXT IS NOT NULL)
302        OR (C2.OLD_CONTEXT IS NOT NULL AND C2.NEW_CONTEXT IS NULL)
303        OR (C2.OLD_CONTEXT <> C2.NEW_CONTEXT) THEN
304             l_party_account_tbl(i).CONTEXT := C2.NEW_CONTEXT;
305        END IF;
306 
307        IF (C2.OLD_ATTRIBUTE1 IS NULL AND C2.NEW_ATTRIBUTE1 IS NOT NULL)
308        OR (C2.OLD_ATTRIBUTE1 IS NOT NULL AND C2.NEW_ATTRIBUTE1 IS NULL)
309        OR (C2.OLD_ATTRIBUTE1 <> C2.NEW_ATTRIBUTE1) THEN
310             l_party_account_tbl(i).ATTRIBUTE1 := C2.NEW_ATTRIBUTE1;
311        END IF;
312 
313        IF (C2.OLD_ATTRIBUTE2 IS NULL AND C2.NEW_ATTRIBUTE2 IS NOT NULL)
314        OR (C2.OLD_ATTRIBUTE2 IS NOT NULL AND C2.NEW_ATTRIBUTE2 IS NULL)
315        OR (C2.OLD_ATTRIBUTE2 <> C2.NEW_ATTRIBUTE2) THEN
316             l_party_account_tbl(i).ATTRIBUTE2 := C2.NEW_ATTRIBUTE2;
317        END IF;
318 
319        IF (C2.OLD_ATTRIBUTE3 IS NULL AND C2.NEW_ATTRIBUTE3 IS NOT NULL)
320        OR (C2.OLD_ATTRIBUTE3 IS NOT NULL AND C2.NEW_ATTRIBUTE3 IS NULL)
321        OR (C2.OLD_ATTRIBUTE3 <> C2.NEW_ATTRIBUTE3) THEN
322             l_party_account_tbl(i).ATTRIBUTE3 := C2.NEW_ATTRIBUTE3;
323        END IF;
324 
325        IF (C2.OLD_ATTRIBUTE4 IS NULL AND C2.NEW_ATTRIBUTE4 IS NOT NULL)
326        OR (C2.OLD_ATTRIBUTE4 IS NOT NULL AND C2.NEW_ATTRIBUTE4 IS NULL)
327        OR (C2.OLD_ATTRIBUTE4 <> C2.NEW_ATTRIBUTE4) THEN
328             l_party_account_tbl(i).ATTRIBUTE4 := C2.NEW_ATTRIBUTE4;
329        END IF;
330 
331 
332        IF (C2.OLD_ATTRIBUTE5 IS NULL AND C2.NEW_ATTRIBUTE5 IS NOT NULL)
333        OR (C2.OLD_ATTRIBUTE5 IS NOT NULL AND C2.NEW_ATTRIBUTE5 IS NULL)
334        OR (C2.OLD_ATTRIBUTE5 <> C2.NEW_ATTRIBUTE5) THEN
335             l_party_account_tbl(i).ATTRIBUTE5 := C2.NEW_ATTRIBUTE5;
336        END IF;
337 
338 
339        IF (C2.OLD_ATTRIBUTE6 IS NULL AND C2.NEW_ATTRIBUTE6 IS NOT NULL)
340        OR (C2.OLD_ATTRIBUTE6 IS NOT NULL AND C2.NEW_ATTRIBUTE6 IS NULL)
341        OR (C2.OLD_ATTRIBUTE6 <> C2.NEW_ATTRIBUTE6) THEN
342             l_party_account_tbl(i).ATTRIBUTE6 := C2.NEW_ATTRIBUTE6;
343        END IF;
344 
345        IF (C2.OLD_ATTRIBUTE7 IS NULL AND C2.NEW_ATTRIBUTE7 IS NOT NULL)
346        OR (C2.OLD_ATTRIBUTE7 IS NOT NULL AND C2.NEW_ATTRIBUTE7 IS NULL)
347        OR (C2.OLD_ATTRIBUTE7 <> C2.NEW_ATTRIBUTE7) THEN
348             l_party_account_tbl(i).ATTRIBUTE7 := C2.NEW_ATTRIBUTE7;
349        END IF;
350 
351        IF (C2.OLD_ATTRIBUTE8 IS NULL AND C2.NEW_ATTRIBUTE8 IS NOT NULL)
352        OR (C2.OLD_ATTRIBUTE8 IS NOT NULL AND C2.NEW_ATTRIBUTE8 IS NULL)
353        OR (C2.OLD_ATTRIBUTE8 <> C2.NEW_ATTRIBUTE8) THEN
354             l_party_account_tbl(i).ATTRIBUTE8 := C2.NEW_ATTRIBUTE8;
355        END IF;
356 
357        IF (C2.OLD_ATTRIBUTE9 IS NULL AND C2.NEW_ATTRIBUTE9 IS NOT NULL)
358        OR (C2.OLD_ATTRIBUTE9 IS NOT NULL AND C2.NEW_ATTRIBUTE9 IS NULL)
359        OR (C2.OLD_ATTRIBUTE9 <> C2.NEW_ATTRIBUTE9) THEN
360             l_party_account_tbl(i).ATTRIBUTE3 := C2.NEW_ATTRIBUTE3;
361        END IF;
362 
363 
364        IF (C2.OLD_ATTRIBUTE10 IS NULL AND C2.NEW_ATTRIBUTE10 IS NOT NULL)
365        OR (C2.OLD_ATTRIBUTE10 IS NOT NULL AND C2.NEW_ATTRIBUTE10 IS NULL)
366        OR (C2.OLD_ATTRIBUTE10 <> C2.NEW_ATTRIBUTE10) THEN
367             l_party_account_tbl(i).ATTRIBUTE10 := C2.NEW_ATTRIBUTE10;
368        END IF;
369 
370 
371 
372        IF (C2.OLD_ATTRIBUTE11 IS NULL AND C2.NEW_ATTRIBUTE11 IS NOT NULL)
373        OR (C2.OLD_ATTRIBUTE11 IS NOT NULL AND C2.NEW_ATTRIBUTE11 IS NULL)
374        OR (C2.OLD_ATTRIBUTE11 <> C2.NEW_ATTRIBUTE11) THEN
375             l_party_account_tbl(i).ATTRIBUTE11 := C2.NEW_ATTRIBUTE11;
376        END IF;
377 
378        IF (C2.OLD_ATTRIBUTE12 IS NULL AND C2.NEW_ATTRIBUTE12 IS NOT NULL)
379        OR (C2.OLD_ATTRIBUTE12 IS NOT NULL AND C2.NEW_ATTRIBUTE12 IS NULL)
380        OR (C2.OLD_ATTRIBUTE12 <> C2.NEW_ATTRIBUTE12) THEN
381             l_party_account_tbl(i).ATTRIBUTE12 := C2.NEW_ATTRIBUTE12;
382        END IF;
383 
384 
385        IF (C2.OLD_ATTRIBUTE13 IS NULL AND C2.NEW_ATTRIBUTE13 IS NOT NULL)
386        OR (C2.OLD_ATTRIBUTE13 IS NOT NULL AND C2.NEW_ATTRIBUTE13 IS NULL)
387        OR (C2.OLD_ATTRIBUTE13 <> C2.NEW_ATTRIBUTE13) THEN
388             l_party_account_tbl(i).ATTRIBUTE13 := C2.NEW_ATTRIBUTE13;
389        END IF;
390 
391 
392        IF (C2.OLD_ATTRIBUTE14 IS NULL AND C2.NEW_ATTRIBUTE14 IS NOT NULL)
393        OR (C2.OLD_ATTRIBUTE14 IS NOT NULL AND C2.NEW_ATTRIBUTE14 IS NULL)
394        OR (C2.OLD_ATTRIBUTE14 <> C2.NEW_ATTRIBUTE14) THEN
395             l_party_account_tbl(i).ATTRIBUTE14 := C2.NEW_ATTRIBUTE14;
396        END IF;
397 
398        IF (C2.OLD_ATTRIBUTE15 IS NULL AND C2.NEW_ATTRIBUTE15 IS NOT NULL)
399        OR (C2.OLD_ATTRIBUTE15 IS NOT NULL AND C2.NEW_ATTRIBUTE15 IS NULL)
400        OR (C2.OLD_ATTRIBUTE15 <> C2.NEW_ATTRIBUTE15) THEN
401             l_party_account_tbl(i).ATTRIBUTE15 := C2.NEW_ATTRIBUTE15;
402        END IF;
403 
404        IF (C2.OLD_BILL_TO_ADDRESS IS NULL AND C2.NEW_BILL_TO_ADDRESS IS NOT NULL)
405        OR (C2.OLD_BILL_TO_ADDRESS IS NOT NULL AND C2.NEW_BILL_TO_ADDRESS IS NULL)
406        OR (C2.OLD_BILL_TO_ADDRESS <> C2.NEW_BILL_TO_ADDRESS) THEN
407             l_party_account_tbl(i).BILL_TO_ADDRESS := C2.NEW_BILL_TO_ADDRESS;
408        END IF;
409 
410        IF (C2.OLD_SHIP_TO_ADDRESS IS NULL AND C2.NEW_SHIP_TO_ADDRESS IS NOT NULL)
411        OR (C2.OLD_SHIP_TO_ADDRESS IS NOT NULL AND C2.NEW_SHIP_TO_ADDRESS IS NULL)
412        OR (C2.OLD_SHIP_TO_ADDRESS <> C2.NEW_SHIP_TO_ADDRESS) THEN
413             l_party_account_tbl(i).SHIP_TO_ADDRESS := C2.NEW_SHIP_TO_ADDRESS;
414        END IF;
415 
416      END LOOP;
417    EXCEPTION
418       WHEN Process_next THEN
419          NULL;
420    END;
421  END LOOP;
422  x_party_account_tbl.DELETE;
423  IF l_party_account_tbl.count > 0 THEN
424     FOR acct_row in l_party_account_tbl.FIRST .. l_party_account_tbl.LAST
425     LOOP
426        IF l_party_account_tbl.EXISTS(acct_row) THEN
427           l_acct_count := l_acct_count + 1;
428           x_party_account_tbl(l_acct_count) := l_party_account_tbl(acct_row);
429        END IF;
430     END LOOP;
431  END IF;
432 END IF;
433 END Construct_acct_from_hist;
434 
435 /*----------------------------------------------------------*/
436 /* Procedure name:  Resolve_id_columns                      */
437 /* Description : This procudure gets the descriptions for   */
438 /*               id columns                                 */
439 /*----------------------------------------------------------*/
440 
441 PROCEDURE  Resolve_id_columns
442             (p_account_header_tbl  IN OUT NOCOPY    csi_datastructures_pub.party_account_header_tbl)
443 
444 IS
445 
446    BEGIN
447 
448         FOR tab_row in p_account_header_tbl.FIRST..p_account_header_tbl.LAST
449            LOOP
450 
451              BEGIN
452                SELECT account_number,
453                       account_name
454                INTO   p_account_header_tbl(tab_row).party_account_number,
455                       p_account_header_tbl(tab_row).party_account_name
456                FROM   hz_cust_accounts
457                WHERE  cust_account_id = p_account_header_tbl(tab_row).party_account_id;
458              EXCEPTION
459                WHEN no_data_found THEN
460                    NULL;
461              END;
462 
463     -- Added for bug 2670371
464              BEGIN
465                SELECT hl.address1
466                      ,hl.address2
467                      ,hl.address3
468                      ,hl.address4
469                      ,hl.city
470                      ,hl.state
471                      ,hl.postal_code
472                      ,hl.country
473                INTO   p_account_header_tbl(tab_row).bill_to_address1
474                      ,p_account_header_tbl(tab_row).bill_to_address2
475                      ,p_account_header_tbl(tab_row).bill_to_address3
476                      ,p_account_header_tbl(tab_row).bill_to_address4
477                      ,p_account_header_tbl(tab_row).bill_to_city
478                      ,p_account_header_tbl(tab_row).bill_to_state
479                      ,p_account_header_tbl(tab_row).bill_to_postal_code
480                      ,p_account_header_tbl(tab_row).bill_to_country
481                FROM   hz_cust_site_uses_all hcs
482                      ,hz_cust_acct_sites_all hca
483                      ,hz_party_sites hps
484                      ,hz_locations hl
485                WHERE hcs.cust_acct_site_id=hca.cust_acct_site_id
486                AND   hca.party_site_id=hps.party_site_id
487                AND   hps.location_id=hl.location_id
488                AND   hcs.site_use_id=p_account_header_tbl(tab_row).bill_to_address
489                AND   hcs.site_use_code = 'BILL_TO';
490              EXCEPTION
491                WHEN no_data_found THEN
492                    NULL;
493              END;
494 
495              BEGIN
496                SELECT hl.address1
497                      ,hl.address2
498                      ,hl.address3
499                      ,hl.address4
500                      ,hl.city
501                      ,hl.state
502                      ,hl.postal_code
503                      ,hl.country
504                INTO   p_account_header_tbl(tab_row).ship_to_address1
505                      ,p_account_header_tbl(tab_row).ship_to_address2
506                      ,p_account_header_tbl(tab_row).ship_to_address3
507                      ,p_account_header_tbl(tab_row).ship_to_address4
508                      ,p_account_header_tbl(tab_row).ship_to_city
509                      ,p_account_header_tbl(tab_row).ship_to_state
510                      ,p_account_header_tbl(tab_row).ship_to_postal_code
511                      ,p_account_header_tbl(tab_row).ship_to_country
512                FROM   hz_cust_site_uses_all hcs
513                      ,hz_cust_acct_sites_all hca
514                      ,hz_party_sites hps
515                      ,hz_locations hl
516                WHERE hcs.cust_acct_site_id=hca.cust_acct_site_id
517                AND   hca.party_site_id=hps.party_site_id
518                AND   hps.location_id=hl.location_id
519                AND   hcs.site_use_id=p_account_header_tbl(tab_row).ship_to_address
520                AND   hcs.site_use_code = 'SHIP_TO';
521              EXCEPTION
522                WHEN no_data_found THEN
523                    NULL;
524              END;
525 
526 -- End addition for bug 2670371
527 /* Commented for bug 2670371
528              BEGIN
529                SELECT location
530                INTO   p_account_header_tbl(tab_row).bill_to_location
531                FROM   hz_cust_site_uses_all
532                WHERE  site_use_id   =  p_account_header_tbl(tab_row).bill_to_address
533                AND    site_use_code = 'BILL_TO';
534              EXCEPTION
535                WHEN no_data_found THEN
536                    NULL;
537              END;
538 
539              BEGIN
540                SELECT location
541                INTO   p_account_header_tbl(tab_row).ship_to_location
542                FROM   hz_cust_site_uses_all
543                WHERE  site_use_id   =  p_account_header_tbl(tab_row).ship_to_address
544                AND    site_use_code = 'SHIP_TO';
545              EXCEPTION
546                WHEN no_data_found THEN
547                    NULL;
548              END;
549 */
550 --  End comment for bug 2670371
551         END LOOP;
552 
553 END Resolve_id_columns;
554 
555 /*----------------------------------------------------------*/
556 /* Procedure name:  Get_acct_Column_Values                  */
557 /* Description : This procudure gets the column values      */
558 /*                        for the Dynamic SQL               */
559 /*----------------------------------------------------------*/
560 
561 PROCEDURE Get_acct_Column_Values
562 (
563     p_get_acct_cursor_id      IN   NUMBER      ,
564     x_pty_acct_query_rec      OUT NOCOPY    csi_datastructures_pub.party_account_header_rec
565     ) IS
566 
567 BEGIN
568 
569  dbms_sql.column_value(p_get_acct_cursor_id, 1, x_pty_acct_query_rec.ip_account_id);
570  dbms_sql.column_value(p_get_acct_cursor_id, 2, x_pty_acct_query_rec.instance_party_id);
571  dbms_sql.column_value(p_get_acct_cursor_id, 3, x_pty_acct_query_rec.party_account_id);
572  dbms_sql.column_value(p_get_acct_cursor_id, 4, x_pty_acct_query_rec.relationship_type_code );
573  dbms_sql.column_value(p_get_acct_cursor_id, 5, x_pty_acct_query_rec.active_start_date);
574  dbms_sql.column_value(p_get_acct_cursor_id, 6, x_pty_acct_query_rec.active_end_date);
575  dbms_sql.column_value(p_get_acct_cursor_id, 7, x_pty_acct_query_rec.context);
576  dbms_sql.column_value(p_get_acct_cursor_id, 8, x_pty_acct_query_rec.attribute1);
577  dbms_sql.column_value(p_get_acct_cursor_id, 9, x_pty_acct_query_rec.attribute2);
578  dbms_sql.column_value(p_get_acct_cursor_id, 10, x_pty_acct_query_rec.attribute3);
579  dbms_sql.column_value(p_get_acct_cursor_id, 11, x_pty_acct_query_rec.attribute4);
580  dbms_sql.column_value(p_get_acct_cursor_id, 12, x_pty_acct_query_rec.attribute5);
581  dbms_sql.column_value(p_get_acct_cursor_id, 13, x_pty_acct_query_rec.attribute6);
582  dbms_sql.column_value(p_get_acct_cursor_id, 14, x_pty_acct_query_rec.attribute7);
583  dbms_sql.column_value(p_get_acct_cursor_id, 15, x_pty_acct_query_rec.attribute8);
584  dbms_sql.column_value(p_get_acct_cursor_id, 16, x_pty_acct_query_rec.attribute9);
585  dbms_sql.column_value(p_get_acct_cursor_id, 17, x_pty_acct_query_rec.attribute10);
586  dbms_sql.column_value(p_get_acct_cursor_id, 18, x_pty_acct_query_rec.attribute11);
587  dbms_sql.column_value(p_get_acct_cursor_id, 19, x_pty_acct_query_rec.attribute12);
588  dbms_sql.column_value(p_get_acct_cursor_id, 20, x_pty_acct_query_rec.attribute13);
589  dbms_sql.column_value(p_get_acct_cursor_id, 21, x_pty_acct_query_rec.attribute14);
590  dbms_sql.column_value(p_get_acct_cursor_id, 22, x_pty_acct_query_rec.attribute15);
591  dbms_sql.column_value(p_get_acct_cursor_id, 23, x_pty_acct_query_rec.object_version_number);
592  dbms_sql.column_value(p_get_acct_cursor_id, 24, x_pty_acct_query_rec.bill_to_address);
593  dbms_sql.column_value(p_get_acct_cursor_id, 25, x_pty_acct_query_rec.ship_to_address);
594 
595 END Get_acct_Column_Values;
596 
597 /*----------------------------------------------------------*/
598 /* Procedure name:  Define_Acct_Columns                     */
599 /* Description : This procudure defines the columns         */
600 /*                        for the Dynamic SQL               */
601 /*----------------------------------------------------------*/
602 
603 PROCEDURE Define_Acct_Columns
604 (
605   p_get_acct_cursor_id      IN   NUMBER
606   ) IS
607   l_party_acct_rec       csi_datastructures_pub.party_account_header_rec;
608 BEGIN
609 
610  dbms_sql.define_column(p_get_acct_cursor_id, 1, l_party_acct_rec.ip_account_id);
611  dbms_sql.define_column(p_get_acct_cursor_id, 2, l_party_acct_rec.instance_party_id);
612  dbms_sql.define_column(p_get_acct_cursor_id, 3, l_party_acct_rec.party_account_id);
613  dbms_sql.define_column(p_get_acct_cursor_id, 4, l_party_acct_rec.relationship_type_code ,30);
614  dbms_sql.define_column(p_get_acct_cursor_id, 5, l_party_acct_rec.active_start_date);
615  dbms_sql.define_column(p_get_acct_cursor_id, 6, l_party_acct_rec.active_end_date);
616  dbms_sql.define_column(p_get_acct_cursor_id, 7, l_party_acct_rec.context,30);
617  dbms_sql.define_column(p_get_acct_cursor_id, 8, l_party_acct_rec.attribute1,150);
618  dbms_sql.define_column(p_get_acct_cursor_id, 9, l_party_acct_rec.attribute2,150);
619  dbms_sql.define_column(p_get_acct_cursor_id, 10, l_party_acct_rec.attribute3,150);
620  dbms_sql.define_column(p_get_acct_cursor_id, 11, l_party_acct_rec.attribute4,150);
621  dbms_sql.define_column(p_get_acct_cursor_id, 12, l_party_acct_rec.attribute5,150);
622  dbms_sql.define_column(p_get_acct_cursor_id, 13, l_party_acct_rec.attribute6,150);
623  dbms_sql.define_column(p_get_acct_cursor_id, 14, l_party_acct_rec.attribute7,150);
624  dbms_sql.define_column(p_get_acct_cursor_id, 15, l_party_acct_rec.attribute8,150);
625  dbms_sql.define_column(p_get_acct_cursor_id, 16, l_party_acct_rec.attribute9,150);
626  dbms_sql.define_column(p_get_acct_cursor_id, 17, l_party_acct_rec.attribute10,150);
627  dbms_sql.define_column(p_get_acct_cursor_id, 18, l_party_acct_rec.attribute11,150);
628  dbms_sql.define_column(p_get_acct_cursor_id, 19, l_party_acct_rec.attribute12,150);
629  dbms_sql.define_column(p_get_acct_cursor_id, 20, l_party_acct_rec.attribute13,150);
630  dbms_sql.define_column(p_get_acct_cursor_id, 21, l_party_acct_rec.attribute14,150);
631  dbms_sql.define_column(p_get_acct_cursor_id, 22, l_party_acct_rec.attribute15,150);
632  dbms_sql.define_column(p_get_acct_cursor_id, 23, l_party_acct_rec.object_version_number);
633  dbms_sql.define_column(p_get_acct_cursor_id, 24, l_party_acct_rec.bill_to_address);
634  dbms_sql.define_column(p_get_acct_cursor_id, 25, l_party_acct_rec.ship_to_address);
635 
636 END Define_Acct_Columns;
637 
638 
639 /*----------------------------------------------------------*/
640 /* Procedure name:  Bind_Acct_variable                      */
641 /* Description : Procedure used to  generate the where      */
642 /*                cluase  for Party relationship            */
643 /*----------------------------------------------------------*/
644 
645 PROCEDURE Bind_Acct_variable
646 (
647     p_pty_acct_query_rec   IN    csi_datastructures_pub.party_account_query_rec,
648     p_get_acct_cursor_id   IN    NUMBER
649     ) IS
650 
651 BEGIN
652  IF( (p_pty_acct_query_rec.ip_account_id IS NOT NULL)
653                   AND (p_pty_acct_query_rec.ip_account_id <> FND_API.G_MISS_NUM))  THEN
654     DBMS_SQL.BIND_VARIABLE(p_get_acct_cursor_id, ':ip_account_id', p_pty_acct_query_rec.ip_account_id);
655  END IF;
656 
657  IF( (p_pty_acct_query_rec.instance_party_id IS NOT NULL)
658                   AND (p_pty_acct_query_rec.instance_party_id <> FND_API.G_MISS_NUM))  THEN
659     DBMS_SQL.BIND_VARIABLE(p_get_acct_cursor_id, ':instance_party_id', p_pty_acct_query_rec.instance_party_id);
660  END IF;
661 
662  IF( (p_pty_acct_query_rec.party_account_id IS NOT NULL)
663                   AND (p_pty_acct_query_rec.party_account_id <> FND_API.G_MISS_NUM))  THEN
664     DBMS_SQL.BIND_VARIABLE(p_get_acct_cursor_id, ':party_account_id', p_pty_acct_query_rec.party_account_id);
665  END IF;
666 
667  IF( (p_pty_acct_query_rec.relationship_type_code IS NOT NULL)
668                   AND (p_pty_acct_query_rec.relationship_type_code <> FND_API.G_MISS_CHAR))  THEN
669     DBMS_SQL.BIND_VARIABLE(p_get_acct_cursor_id, ':relationship_type_code', p_pty_acct_query_rec.relationship_type_code);
670  END IF;
671 
672 END ;
673 
674 
675 /*----------------------------------------------------------*/
676 /* Procedure name:  Gen_Acct_Where_Clause                   */
677 /* Description : Procedure used to  generate the where      */
678 /*                cluase  for Party relationship            */
679 /*----------------------------------------------------------*/
680 
681 PROCEDURE Gen_Acct_Where_Clause
682 (
683     p_pty_acct_query_rec      IN    csi_datastructures_pub.party_account_query_rec
684    ,x_where_clause            OUT NOCOPY    VARCHAR2
685     ) IS
686 
687 BEGIN
688 
689  -- Assign null at the start
690  x_where_clause := '';
691 
692 IF (( p_pty_acct_query_rec.ip_account_id  IS NOT NULL)  AND
693          ( p_pty_acct_query_rec.ip_account_id  <> FND_API.G_MISS_NUM)) THEN
694      x_where_clause := ' ip_account_id = :ip_account_id ';
695 ELSIF ( p_pty_acct_query_rec.ip_account_id  IS NULL) THEN
696      x_where_clause := ' ip_account_id IS NULL ';
697 END IF;
698 
699 IF ((p_pty_acct_query_rec.instance_party_id IS NOT NULL) AND
700        (p_pty_acct_query_rec.instance_party_id <> FND_API.G_MISS_NUM))   THEN
701         IF x_where_clause IS NULL THEN
702             x_where_clause := ' instance_party_id = :instance_party_id ';
703         ELSE
704             x_where_clause := x_where_clause||' AND '||' instance_party_id = :instance_party_id ';
705         END IF;
706 ELSIF (p_pty_acct_query_rec.instance_party_id IS  NULL)  THEN
707         IF x_where_clause IS NULL THEN
708             x_where_clause := ' instance_party_id IS NULL ';
709         ELSE
710             x_where_clause := x_where_clause||' AND '||' instance_party_id IS NULL ';
711         END IF;
712 END IF;
713 
714 IF ((p_pty_acct_query_rec.party_account_id  IS NOT NULL)         AND
715         (p_pty_acct_query_rec.party_account_id  <> FND_API.G_MISS_NUM)) THEN
716         IF x_where_clause IS NULL THEN
717             x_where_clause := ' party_account_id = :party_account_id ';
718         ELSE
719             x_where_clause := x_where_clause||' AND '||' party_account_id = :party_account_id ';
720         END IF;
721 ELSIF (p_pty_acct_query_rec.party_account_id  IS NULL) THEN
722         IF x_where_clause IS NULL THEN
723             x_where_clause := ' party_account_id IS NULL';
724         ELSE
725             x_where_clause := x_where_clause||' AND '||' party_account_id IS NULL ';
726         END IF;
727 END IF ;
728 
729 IF  ((p_pty_acct_query_rec.relationship_type_code IS NOT NULL) AND
730         (p_pty_acct_query_rec.relationship_type_code <> FND_API.G_MISS_CHAR)) THEN
731         IF x_where_clause IS NULL THEN
732             x_where_clause := '  relationship_type_code = :relationship_type_code ';
733         ELSE
734             x_where_clause := x_where_clause||' AND '||
735                    '  relationship_type_code = :relationship_type_code ';
736         END IF;
737 ELSIF (p_pty_acct_query_rec.relationship_type_code IS  NULL) THEN
738         IF x_where_clause IS NULL THEN
739             x_where_clause := '  relationship_type_code IS NULL ';
740         ELSE
741             x_where_clause := x_where_clause||' AND '||
742                    '  relationship_type_code IS NULL ';
743         END IF;
744 END IF;
745 
746 END Gen_Acct_Where_Clause;
747 
748 /*----------------------------------------------------------*/
749 /* Procedure name:  Initialize_pty_rec_no_dump              */
750 /* Description : This procudure returns the first record    */
751 /*                 from history                             */
752 /*----------------------------------------------------------*/
753 
754 PROCEDURE Initialize_pty_rec_no_dump
755 (
756   x_party_rec           IN OUT NOCOPY  csi_datastructures_pub.party_header_rec,
757   p_inst_party_id       IN NUMBER,
758   x_first_no_dump       IN OUT NOCOPY  DATE
759    ) IS
760 
761 
762 CURSOR Int_first_no_dump(p_inst_pty_id IN NUMBER ) IS
763 SELECT
764     CREATION_DATE                   ,
765     NEW_PARTY_SOURCE_TABLE          ,
766     NEW_PARTY_ID                    ,
767     NEW_RELATIONSHIP_TYPE_CODE      ,
768     NEW_CONTACT_FLAG                ,
769     NEW_CONTACT_IP_ID               ,
770     NEW_ACTIVE_START_DATE           ,
771     NEW_ACTIVE_END_DATE             ,
772     NEW_CONTEXT                     ,
773     NEW_ATTRIBUTE1                  ,
774     NEW_ATTRIBUTE2                  ,
775     NEW_ATTRIBUTE3                  ,
776     NEW_ATTRIBUTE4                  ,
777     NEW_ATTRIBUTE5                  ,
778     NEW_ATTRIBUTE6                  ,
779     NEW_ATTRIBUTE7                  ,
780     NEW_ATTRIBUTE8                  ,
781     NEW_ATTRIBUTE9                  ,
782     NEW_ATTRIBUTE10                 ,
783     NEW_ATTRIBUTE11                 ,
784     NEW_ATTRIBUTE12                 ,
785     NEW_ATTRIBUTE13                 ,
786     NEW_ATTRIBUTE14                 ,
787     NEW_ATTRIBUTE15                 ,
788     NEW_PRIMARY_FLAG                ,
789     NEW_PREFERRED_FLAG
790  FROM CSI_I_PARTIES_H
791 WHERE instance_party_id = p_inst_pty_id
792 --  and creation_date < x_first_no_dump
793   -- and  full_dump_flag = 'N'
794   order by creation_date;
795 
796 BEGIN
797 
798   FOR C1 IN Int_first_no_dump(p_inst_party_id  ) LOOP
799    IF Int_first_no_dump%ROWCOUNT = 1 THEN
800      x_first_no_dump            := C1.creation_date;
801      x_party_rec.PARTY_SOURCE_TABLE := C1.NEW_PARTY_SOURCE_TABLE;
802      x_party_rec.PARTY_ID           := C1.NEW_PARTY_ID;
803      x_party_rec.RELATIONSHIP_TYPE_CODE := C1.NEW_RELATIONSHIP_TYPE_CODE;
804      x_party_rec.CONTACT_FLAG       := C1.NEW_CONTACT_FLAG;
805      x_party_rec.CONTACT_IP_ID      := C1.NEW_CONTACT_IP_ID;
806      x_party_rec.ACTIVE_START_DATE  := C1.NEW_ACTIVE_START_DATE;
807      x_party_rec.ACTIVE_END_DATE    := C1.NEW_ACTIVE_END_DATE;
808      x_party_rec.CONTEXT            := C1.NEW_CONTEXT;
809      x_party_rec.ATTRIBUTE1         := C1.NEW_ATTRIBUTE1;
810      x_party_rec.ATTRIBUTE2         := C1.NEW_ATTRIBUTE2;
811      x_party_rec.ATTRIBUTE3         := C1.NEW_ATTRIBUTE3;
812      x_party_rec.ATTRIBUTE4         := C1.NEW_ATTRIBUTE4;
813      x_party_rec.ATTRIBUTE5         := C1.NEW_ATTRIBUTE5;
814      x_party_rec.ATTRIBUTE6         := C1.NEW_ATTRIBUTE6;
815      x_party_rec.ATTRIBUTE7         := C1.NEW_ATTRIBUTE7;
816      x_party_rec.ATTRIBUTE8         := C1.NEW_ATTRIBUTE8;
817      x_party_rec.ATTRIBUTE9         := C1.NEW_ATTRIBUTE9;
818      x_party_rec.ATTRIBUTE10        := C1.NEW_ATTRIBUTE10;
819      x_party_rec.ATTRIBUTE11        := C1.NEW_ATTRIBUTE11;
820      x_party_rec.ATTRIBUTE12        := C1.NEW_ATTRIBUTE12;
821      x_party_rec.ATTRIBUTE13        := C1.NEW_ATTRIBUTE13;
822      x_party_rec.ATTRIBUTE14        := C1.NEW_ATTRIBUTE14;
823      x_party_rec.ATTRIBUTE15        := C1.NEW_ATTRIBUTE15;
824      x_party_rec.PRIMARY_FLAG       := C1.NEW_PRIMARY_FLAG;
825      x_party_rec.PREFERRED_FLAG     := C1.NEW_PREFERRED_FLAG;
826    ELSE
827      EXIT;
828    END IF;
829 
830   END LOOP;
831 END Initialize_pty_rec_no_dump;
832 
833 
834 /*----------------------------------------------------------*/
835 /* Procedure name:  Initialize_pty_rec                      */
836 /* Description : This procudure recontructs the record      */
837 /*                 from the history                         */
838 /*----------------------------------------------------------*/
839 
840 PROCEDURE Initialize_pty_rec
841 (
842   x_party_rec           IN OUT NOCOPY  csi_datastructures_pub.party_header_rec,
843   p_inst_party_hist_id  IN NUMBER,
844   x_nearest_full_dump   IN OUT NOCOPY  DATE
845    ) IS
846 
847 
848 CURSOR Int_nearest_full_dump(p_inst_pty_hist_id IN NUMBER ) IS
849 SELECT
850     CREATION_DATE                   ,
851     NEW_PARTY_SOURCE_TABLE          ,
852     NEW_PARTY_ID                    ,
853     NEW_RELATIONSHIP_TYPE_CODE      ,
854     NEW_CONTACT_FLAG                ,
855     NEW_CONTACT_IP_ID               ,
856     NEW_ACTIVE_START_DATE           ,
857     NEW_ACTIVE_END_DATE             ,
858     NEW_CONTEXT                     ,
859     NEW_ATTRIBUTE1                  ,
860     NEW_ATTRIBUTE2                  ,
861     NEW_ATTRIBUTE3                  ,
862     NEW_ATTRIBUTE4                  ,
863     NEW_ATTRIBUTE5                  ,
864     NEW_ATTRIBUTE6                  ,
865     NEW_ATTRIBUTE7                  ,
866     NEW_ATTRIBUTE8                  ,
867     NEW_ATTRIBUTE9                  ,
868     NEW_ATTRIBUTE10                 ,
869     NEW_ATTRIBUTE11                 ,
870     NEW_ATTRIBUTE12                 ,
871     NEW_ATTRIBUTE13                 ,
872     NEW_ATTRIBUTE14                 ,
873     NEW_ATTRIBUTE15                 ,
874     NEW_PRIMARY_FLAG                ,
875     NEW_PREFERRED_FLAG
876  FROM CSI_I_PARTIES_H
877 WHERE instance_party_history_id = p_inst_pty_hist_id
878   and  full_dump_flag = 'Y' ;
879 
880 BEGIN
881 
882   FOR C1 IN Int_nearest_full_dump(p_inst_party_hist_id  ) LOOP
883      x_nearest_full_dump            := C1.creation_date;
884      x_party_rec.PARTY_SOURCE_TABLE := C1.NEW_PARTY_SOURCE_TABLE;
885      x_party_rec.PARTY_ID           := C1.NEW_PARTY_ID;
886      x_party_rec.RELATIONSHIP_TYPE_CODE := C1.NEW_RELATIONSHIP_TYPE_CODE;
887      x_party_rec.CONTACT_FLAG       := C1.NEW_CONTACT_FLAG;
888      x_party_rec.CONTACT_IP_ID      := C1.NEW_CONTACT_IP_ID;
889      x_party_rec.ACTIVE_START_DATE  := C1.NEW_ACTIVE_START_DATE;
890      x_party_rec.ACTIVE_END_DATE    := C1.NEW_ACTIVE_END_DATE;
891      x_party_rec.CONTEXT            := C1.NEW_CONTEXT;
892      x_party_rec.ATTRIBUTE1         := C1.NEW_ATTRIBUTE1;
893      x_party_rec.ATTRIBUTE2         := C1.NEW_ATTRIBUTE2;
894      x_party_rec.ATTRIBUTE3         := C1.NEW_ATTRIBUTE3;
895      x_party_rec.ATTRIBUTE4         := C1.NEW_ATTRIBUTE4;
896      x_party_rec.ATTRIBUTE5         := C1.NEW_ATTRIBUTE5;
897      x_party_rec.ATTRIBUTE6         := C1.NEW_ATTRIBUTE6;
898      x_party_rec.ATTRIBUTE7         := C1.NEW_ATTRIBUTE7;
899      x_party_rec.ATTRIBUTE8         := C1.NEW_ATTRIBUTE8;
900      x_party_rec.ATTRIBUTE9         := C1.NEW_ATTRIBUTE9;
901      x_party_rec.ATTRIBUTE10        := C1.NEW_ATTRIBUTE10;
902      x_party_rec.ATTRIBUTE11        := C1.NEW_ATTRIBUTE11;
903      x_party_rec.ATTRIBUTE12        := C1.NEW_ATTRIBUTE12;
904      x_party_rec.ATTRIBUTE13        := C1.NEW_ATTRIBUTE13;
905      x_party_rec.ATTRIBUTE14        := C1.NEW_ATTRIBUTE14;
906      x_party_rec.ATTRIBUTE15        := C1.NEW_ATTRIBUTE15;
907      x_party_rec.PRIMARY_FLAG       := C1.NEW_PRIMARY_FLAG;
908      x_party_rec.PREFERRED_FLAG     := C1.NEW_PREFERRED_FLAG;
909 
910   END LOOP;
911 END Initialize_pty_rec ;
912 
913 
914 /*----------------------------------------------------------*/
915 /* Procedure name:  Construct_pty_from_hist                 */
916 /* Description : This procudure recontructs the record      */
917 /*                 from the history                         */
918 /*----------------------------------------------------------*/
919 
920 PROCEDURE Construct_pty_from_hist
921 (
922   x_party_tbl      IN OUT NOCOPY  csi_datastructures_pub.party_header_tbl,
923   p_time_stamp     IN DATE
924   ) IS
925 
926 l_nearest_full_dump      DATE := sysdate;
927 l_inst_party_hist_id     NUMBER;
928 l_party_tbl              csi_datastructures_pub.party_header_tbl;
929 l_pty_count              NUMBER := 0;
930 --
931 Process_next             EXCEPTION;
932 
933 CURSOR get_nearest_full_dump(p_inst_party_id IN NUMBER ,p_time IN DATE) IS
934 SELECT
935   MAX(instance_party_history_id)
936 FROM CSI_I_PARTIES_H
937 WHERE creation_date <= p_time
938   and instance_party_id = p_inst_party_id
939   and  full_dump_flag = 'Y' ;
940 
941 CURSOR get_inst_party_hist (p_inst_party_id IN NUMBER ,
942                             p_nearest_full_dump IN DATE,
943                             p_time IN DATE ) IS
944 SELECT
945     INSTANCE_PARTY_HISTORY_ID       ,
946     OLD_PARTY_SOURCE_TABLE          ,
947     NEW_PARTY_SOURCE_TABLE          ,
948     OLD_PARTY_ID                    ,
949     NEW_PARTY_ID                    ,
950     OLD_RELATIONSHIP_TYPE_CODE      ,
951     NEW_RELATIONSHIP_TYPE_CODE      ,
952     OLD_CONTACT_FLAG                ,
953     NEW_CONTACT_FLAG                ,
954     OLD_CONTACT_IP_ID               ,
955     NEW_CONTACT_IP_ID               ,
956     OLD_ACTIVE_START_DATE           ,
957     NEW_ACTIVE_START_DATE           ,
958     OLD_ACTIVE_END_DATE             ,
959     NEW_ACTIVE_END_DATE             ,
960     OLD_CONTEXT                     ,
961     NEW_CONTEXT                     ,
962     OLD_ATTRIBUTE1                  ,
963     NEW_ATTRIBUTE1                  ,
964     OLD_ATTRIBUTE2                  ,
965     NEW_ATTRIBUTE2                  ,
966     OLD_ATTRIBUTE3                  ,
967     NEW_ATTRIBUTE3                  ,
968     OLD_ATTRIBUTE4                  ,
969     NEW_ATTRIBUTE4                  ,
970     OLD_ATTRIBUTE5                  ,
971     NEW_ATTRIBUTE5                  ,
972     OLD_ATTRIBUTE6                  ,
973     NEW_ATTRIBUTE6                  ,
974     OLD_ATTRIBUTE7                  ,
975     NEW_ATTRIBUTE7                  ,
976     OLD_ATTRIBUTE8                  ,
977     NEW_ATTRIBUTE8                  ,
978     OLD_ATTRIBUTE9                  ,
979     NEW_ATTRIBUTE9                  ,
980     OLD_ATTRIBUTE10                 ,
981     NEW_ATTRIBUTE10                 ,
982     OLD_ATTRIBUTE11                 ,
983     NEW_ATTRIBUTE11                 ,
984     OLD_ATTRIBUTE12                 ,
985     NEW_ATTRIBUTE12                 ,
986     OLD_ATTRIBUTE13                 ,
987     NEW_ATTRIBUTE13                 ,
988     OLD_ATTRIBUTE14                 ,
989     NEW_ATTRIBUTE14                 ,
990     OLD_ATTRIBUTE15                 ,
991     NEW_ATTRIBUTE15                 ,
992     OLD_PRIMARY_FLAG                ,
993     NEW_PRIMARY_FLAG                ,
994     OLD_PREFERRED_FLAG              ,
995     NEW_PREFERRED_FLAG
996  FROM CSI_I_PARTIES_H
997 WHERE creation_date <= p_time
998   and creation_date >= p_nearest_full_dump
999   and instance_party_id = p_inst_party_id
1000   and  full_dump_flag = 'N'
1001   ORDER BY creation_date;
1002 
1003   l_time_stamp  DATE := p_time_stamp;
1004 
1005 BEGIN
1006 l_party_tbl := x_party_tbl;
1007 IF l_party_tbl.count > 0 THEN
1008   FOR i IN l_party_tbl.FIRST..l_party_tbl.LAST LOOP
1009   BEGIN
1010      OPEN get_nearest_full_dump(l_party_tbl(i).instance_party_id,p_time_stamp);
1011      FETCH get_nearest_full_dump INTO l_inst_party_hist_id;
1012      CLOSE get_nearest_full_dump;
1013 
1014      IF l_inst_party_hist_id IS NOT NULL THEN
1015        Initialize_pty_rec( l_party_tbl(i), l_inst_party_hist_id ,l_nearest_full_dump);
1016      ELSE
1017 
1018        Initialize_pty_rec_no_dump(l_party_tbl(i), l_party_tbl(i).instance_party_id, l_time_stamp);
1019             l_nearest_full_dump :=  l_time_stamp;
1020          -- If the user chooses a date before the creation date of the instance
1021          -- then raise an error
1022            IF p_time_stamp < l_time_stamp THEN
1023               -- Messages Commented for bug 2423342. Records that do not qualify should get deleted.
1024               -- FND_MESSAGE.SET_NAME('CSI','CSI_H_DATE_BEFORE_CRE_DATE');
1025               -- FND_MESSAGE.SET_TOKEN('CREATION_DATE',to_char(l_time_stamp, 'DD-MON-YYYY HH24:MI:SS'));
1026               -- FND_MESSAGE.SET_TOKEN('USER_DATE',to_char(p_time_stamp, 'DD-MON-YYYY HH24:MI:SS'));
1027               -- FND_MSG_PUB.Add;
1028               -- RAISE FND_API.G_EXC_ERROR;
1029               l_party_tbl.DELETE(i);
1030               RAISE Process_next;
1031            END IF;
1032 
1033      END IF;
1034 
1035     FOR C2 IN get_inst_party_hist(l_party_tbl(i).instance_party_id ,l_nearest_full_dump,p_time_stamp ) LOOP
1036 
1037       IF (C2.OLD_PARTY_SOURCE_TABLE IS NULL AND C2.NEW_PARTY_SOURCE_TABLE IS NOT NULL)
1038       OR (C2.OLD_PARTY_SOURCE_TABLE IS NOT NULL AND C2.NEW_PARTY_SOURCE_TABLE IS NULL)
1039       OR (C2.OLD_PARTY_SOURCE_TABLE <> C2.NEW_PARTY_SOURCE_TABLE) THEN
1040                  l_party_tbl(i).PARTY_SOURCE_TABLE := C2.NEW_PARTY_SOURCE_TABLE;
1041       END IF;
1042 
1043       IF (C2.OLD_PARTY_ID IS NULL AND C2.NEW_PARTY_ID IS NOT NULL)
1044       OR (C2.OLD_PARTY_ID IS NOT NULL AND C2.NEW_PARTY_ID IS NULL)
1045       OR (C2.OLD_PARTY_ID <> C2.NEW_PARTY_ID) THEN
1046                 l_party_tbl(i).PARTY_ID := C2.NEW_PARTY_ID;
1047       END IF;
1048 
1049       IF (C2.OLD_RELATIONSHIP_TYPE_CODE IS NULL AND C2.NEW_RELATIONSHIP_TYPE_CODE IS NOT NULL)
1050       OR (C2.OLD_RELATIONSHIP_TYPE_CODE IS NOT NULL AND C2.NEW_RELATIONSHIP_TYPE_CODE IS NULL)
1051       OR (C2.OLD_RELATIONSHIP_TYPE_CODE <> C2.NEW_RELATIONSHIP_TYPE_CODE) THEN
1052                 l_party_tbl(i).RELATIONSHIP_TYPE_CODE := C2.NEW_RELATIONSHIP_TYPE_CODE;
1053       END IF;
1054 
1055       IF (C2.OLD_CONTACT_FLAG IS NULL AND C2.NEW_CONTACT_FLAG IS NOT NULL)
1056       OR (C2.OLD_CONTACT_FLAG IS NOT NULL AND C2.NEW_CONTACT_FLAG IS NULL)
1057       OR (C2.OLD_CONTACT_FLAG <> C2.NEW_CONTACT_FLAG) THEN
1058                 l_party_tbl(i).CONTACT_FLAG := C2.NEW_CONTACT_FLAG;
1059       END IF;
1060 
1061       IF (C2.OLD_CONTACT_IP_ID IS NULL AND C2.NEW_CONTACT_IP_ID IS NOT NULL)
1062       OR (C2.OLD_CONTACT_IP_ID IS NOT NULL AND C2.NEW_CONTACT_IP_ID IS NULL)
1063       OR (C2.OLD_CONTACT_IP_ID <> C2.NEW_CONTACT_IP_ID) THEN
1064                 l_party_tbl(i).CONTACT_IP_ID := C2.NEW_CONTACT_IP_ID;
1065       END IF;
1066 
1067       IF (C2.OLD_ACTIVE_START_DATE IS NULL AND C2.NEW_ACTIVE_START_DATE IS NOT NULL)
1068       OR (C2.OLD_ACTIVE_START_DATE IS NOT NULL AND C2.NEW_ACTIVE_START_DATE IS NULL)
1069       OR (C2.OLD_ACTIVE_START_DATE <> C2.NEW_ACTIVE_START_DATE) THEN
1070            l_party_tbl(i).ACTIVE_START_DATE := C2.NEW_ACTIVE_START_DATE;
1071       END IF;
1072 
1073 
1074       IF (C2.OLD_ACTIVE_END_DATE IS NULL AND C2.NEW_ACTIVE_END_DATE IS NOT NULL)
1075       OR (C2.OLD_ACTIVE_END_DATE IS NOT NULL AND C2.NEW_ACTIVE_END_DATE IS NULL)
1076       OR (C2.OLD_ACTIVE_END_DATE <> C2.NEW_ACTIVE_END_DATE) THEN
1077            l_party_tbl(i).ACTIVE_END_DATE := C2.NEW_ACTIVE_END_DATE;
1078       END IF;
1079 
1080 
1081       IF (C2.OLD_CONTEXT IS NULL AND C2.NEW_CONTEXT IS NOT NULL)
1082       OR (C2.OLD_CONTEXT IS NOT NULL AND C2.NEW_CONTEXT IS NULL)
1083       OR (C2.OLD_CONTEXT <> C2.NEW_CONTEXT) THEN
1084            l_party_tbl(i).CONTEXT := C2.NEW_CONTEXT;
1085       END IF;
1086 
1087       IF (C2.OLD_ATTRIBUTE1 IS NULL AND C2.NEW_ATTRIBUTE1 IS NOT NULL)
1088       OR (C2.OLD_ATTRIBUTE1 IS NOT NULL AND C2.NEW_ATTRIBUTE1 IS NULL)
1089       OR (C2.OLD_ATTRIBUTE1 <> C2.NEW_ATTRIBUTE1) THEN
1090            l_party_tbl(i).ATTRIBUTE1 := C2.NEW_ATTRIBUTE1;
1091       END IF;
1092 
1093       IF (C2.OLD_ATTRIBUTE2 IS NULL AND C2.NEW_ATTRIBUTE2 IS NOT NULL)
1094       OR (C2.OLD_ATTRIBUTE2 IS NOT NULL AND C2.NEW_ATTRIBUTE2 IS NULL)
1095       OR (C2.OLD_ATTRIBUTE2 <> C2.NEW_ATTRIBUTE2) THEN
1096            l_party_tbl(i).ATTRIBUTE2 := C2.NEW_ATTRIBUTE2;
1097       END IF;
1098 
1099       IF (C2.OLD_ATTRIBUTE3 IS NULL AND C2.NEW_ATTRIBUTE3 IS NOT NULL)
1100       OR (C2.OLD_ATTRIBUTE3 IS NOT NULL AND C2.NEW_ATTRIBUTE3 IS NULL)
1101       OR (C2.OLD_ATTRIBUTE3 <> C2.NEW_ATTRIBUTE3) THEN
1102            l_party_tbl(i).ATTRIBUTE3 := C2.NEW_ATTRIBUTE3;
1103       END IF;
1104 
1105       IF (C2.OLD_ATTRIBUTE4 IS NULL AND C2.NEW_ATTRIBUTE4 IS NOT NULL)
1106       OR (C2.OLD_ATTRIBUTE4 IS NOT NULL AND C2.NEW_ATTRIBUTE4 IS NULL)
1107       OR (C2.OLD_ATTRIBUTE4 <> C2.NEW_ATTRIBUTE4) THEN
1108            l_party_tbl(i).ATTRIBUTE4 := C2.NEW_ATTRIBUTE4;
1109       END IF;
1110 
1111 
1112       IF (C2.OLD_ATTRIBUTE5 IS NULL AND C2.NEW_ATTRIBUTE5 IS NOT NULL)
1113       OR (C2.OLD_ATTRIBUTE5 IS NOT NULL AND C2.NEW_ATTRIBUTE5 IS NULL)
1114       OR (C2.OLD_ATTRIBUTE5 <> C2.NEW_ATTRIBUTE5) THEN
1115            l_party_tbl(i).ATTRIBUTE5 := C2.NEW_ATTRIBUTE5;
1116       END IF;
1117 
1118 
1119       IF (C2.OLD_ATTRIBUTE6 IS NULL AND C2.NEW_ATTRIBUTE6 IS NOT NULL)
1120       OR (C2.OLD_ATTRIBUTE6 IS NOT NULL AND C2.NEW_ATTRIBUTE6 IS NULL)
1121       OR (C2.OLD_ATTRIBUTE6 <> C2.NEW_ATTRIBUTE6) THEN
1122            l_party_tbl(i).ATTRIBUTE6 := C2.NEW_ATTRIBUTE6;
1123       END IF;
1124 
1125       IF (C2.OLD_ATTRIBUTE7 IS NULL AND C2.NEW_ATTRIBUTE7 IS NOT NULL)
1126       OR (C2.OLD_ATTRIBUTE7 IS NOT NULL AND C2.NEW_ATTRIBUTE7 IS NULL)
1127       OR (C2.OLD_ATTRIBUTE7 <> C2.NEW_ATTRIBUTE7) THEN
1128            l_party_tbl(i).ATTRIBUTE7 := C2.NEW_ATTRIBUTE7;
1129       END IF;
1130 
1131       IF (C2.OLD_ATTRIBUTE8 IS NULL AND C2.NEW_ATTRIBUTE8 IS NOT NULL)
1132       OR (C2.OLD_ATTRIBUTE8 IS NOT NULL AND C2.NEW_ATTRIBUTE8 IS NULL)
1133       OR (C2.OLD_ATTRIBUTE8 <> C2.NEW_ATTRIBUTE8) THEN
1134            l_party_tbl(i).ATTRIBUTE8 := C2.NEW_ATTRIBUTE8;
1135       END IF;
1136 
1137       IF (C2.OLD_ATTRIBUTE9 IS NULL AND C2.NEW_ATTRIBUTE9 IS NOT NULL)
1138       OR (C2.OLD_ATTRIBUTE9 IS NOT NULL AND C2.NEW_ATTRIBUTE9 IS NULL)
1139       OR (C2.OLD_ATTRIBUTE9 <> C2.NEW_ATTRIBUTE9) THEN
1140            l_party_tbl(i).ATTRIBUTE3 := C2.NEW_ATTRIBUTE3;
1141       END IF;
1142 
1143 
1144       IF (C2.OLD_ATTRIBUTE10 IS NULL AND C2.NEW_ATTRIBUTE10 IS NOT NULL)
1145       OR (C2.OLD_ATTRIBUTE10 IS NOT NULL AND C2.NEW_ATTRIBUTE10 IS NULL)
1146       OR (C2.OLD_ATTRIBUTE10 <> C2.NEW_ATTRIBUTE10) THEN
1147            l_party_tbl(i).ATTRIBUTE10 := C2.NEW_ATTRIBUTE10;
1148       END IF;
1149 
1150 
1151 
1152       IF (C2.OLD_ATTRIBUTE11 IS NULL AND C2.NEW_ATTRIBUTE11 IS NOT NULL)
1153       OR (C2.OLD_ATTRIBUTE11 IS NOT NULL AND C2.NEW_ATTRIBUTE11 IS NULL)
1154       OR (C2.OLD_ATTRIBUTE11 <> C2.NEW_ATTRIBUTE11) THEN
1155            l_party_tbl(i).ATTRIBUTE11 := C2.NEW_ATTRIBUTE11;
1156       END IF;
1157 
1158       IF (C2.OLD_ATTRIBUTE12 IS NULL AND C2.NEW_ATTRIBUTE12 IS NOT NULL)
1159       OR (C2.OLD_ATTRIBUTE12 IS NOT NULL AND C2.NEW_ATTRIBUTE12 IS NULL)
1160       OR (C2.OLD_ATTRIBUTE12 <> C2.NEW_ATTRIBUTE12) THEN
1161            l_party_tbl(i).ATTRIBUTE12 := C2.NEW_ATTRIBUTE12;
1162       END IF;
1163 
1164 
1165       IF (C2.OLD_ATTRIBUTE13 IS NULL AND C2.NEW_ATTRIBUTE13 IS NOT NULL)
1166       OR (C2.OLD_ATTRIBUTE13 IS NOT NULL AND C2.NEW_ATTRIBUTE13 IS NULL)
1167       OR (C2.OLD_ATTRIBUTE13 <> C2.NEW_ATTRIBUTE13) THEN
1168            l_party_tbl(i).ATTRIBUTE13 := C2.NEW_ATTRIBUTE13;
1169       END IF;
1170 
1171 
1172       IF (C2.OLD_ATTRIBUTE14 IS NULL AND C2.NEW_ATTRIBUTE14 IS NOT NULL)
1173       OR (C2.OLD_ATTRIBUTE14 IS NOT NULL AND C2.NEW_ATTRIBUTE14 IS NULL)
1174       OR (C2.OLD_ATTRIBUTE14 <> C2.NEW_ATTRIBUTE14) THEN
1175            l_party_tbl(i).ATTRIBUTE14 := C2.NEW_ATTRIBUTE14;
1176       END IF;
1177 
1178       IF (C2.OLD_ATTRIBUTE15 IS NULL AND C2.NEW_ATTRIBUTE15 IS NOT NULL)
1179       OR (C2.OLD_ATTRIBUTE15 IS NOT NULL AND C2.NEW_ATTRIBUTE15 IS NULL)
1180       OR (C2.OLD_ATTRIBUTE15 <> C2.NEW_ATTRIBUTE15) THEN
1181            l_party_tbl(i).ATTRIBUTE15 := C2.NEW_ATTRIBUTE15;
1182       END IF;
1183 
1184       IF (C2.OLD_PRIMARY_FLAG IS NULL AND C2.NEW_PRIMARY_FLAG IS NOT NULL)
1185       OR (C2.OLD_PRIMARY_FLAG IS NOT NULL AND C2.NEW_PRIMARY_FLAG IS NULL)
1186       OR (C2.OLD_PRIMARY_FLAG <> C2.NEW_PRIMARY_FLAG) THEN
1187                 l_party_tbl(i).PRIMARY_FLAG := C2.NEW_PRIMARY_FLAG;
1188       END IF;
1189 
1190       IF (C2.OLD_PREFERRED_FLAG IS NULL AND C2.NEW_PREFERRED_FLAG IS NOT NULL)
1191       OR (C2.OLD_PREFERRED_FLAG IS NOT NULL AND C2.NEW_PREFERRED_FLAG IS NULL)
1192       OR (C2.OLD_PREFERRED_FLAG <> C2.NEW_PREFERRED_FLAG) THEN
1193                 l_party_tbl(i).PREFERRED_FLAG := C2.NEW_PREFERRED_FLAG;
1194       END IF;
1195 
1196     END LOOP;
1197    EXCEPTION
1198       WHEN Process_next THEN
1199          NULL;
1200    END;
1201  END LOOP;
1202  x_party_tbl.DELETE;
1203  IF l_party_tbl.count > 0 THEN
1204     FOR pty_row in l_party_tbl.FIRST .. l_party_tbl.LAST
1205     LOOP
1206        IF l_party_tbl.EXISTS(pty_row) THEN
1207           l_pty_count := l_pty_count + 1;
1208           x_party_tbl(l_pty_count) := l_party_tbl(pty_row);
1209        END IF;
1210     END LOOP;
1211  END IF;
1212 END IF;
1213 END Construct_pty_from_hist;
1214 
1215 
1216 /*----------------------------------------------------------*/
1217 /* Procedure name:  Get_Pty_Column_Values                   */
1218 /* Description : This procudure gets the column values      */
1219 /*                        for the Dynamic SQL               */
1220 /*----------------------------------------------------------*/
1221 
1222 PROCEDURE Get_Pty_Column_Values
1223 (
1224     p_get_pty_cursor_id      IN   NUMBER      ,
1225     x_party_rec            OUT NOCOPY   csi_datastructures_pub.party_header_rec
1226     ) IS
1227 
1228 BEGIN
1229 
1230  dbms_sql.column_value(p_get_pty_cursor_id, 1, x_party_rec.instance_party_id);
1231  dbms_sql.column_value(p_get_pty_cursor_id, 2, x_party_rec.instance_id);
1232  dbms_sql.column_value(p_get_pty_cursor_id, 3, x_party_rec.party_source_table);
1233  dbms_sql.column_value(p_get_pty_cursor_id, 4, x_party_rec.party_id);
1234  dbms_sql.column_value(p_get_pty_cursor_id, 5, x_party_rec.relationship_type_code);
1235  dbms_sql.column_value(p_get_pty_cursor_id, 6, x_party_rec.contact_flag);
1236  dbms_sql.column_value(p_get_pty_cursor_id, 7, x_party_rec.contact_ip_id);
1237  dbms_sql.column_value(p_get_pty_cursor_id, 8, x_party_rec.active_start_date);
1238  dbms_sql.column_value(p_get_pty_cursor_id, 9, x_party_rec.active_end_date);
1239  dbms_sql.column_value(p_get_pty_cursor_id, 10, x_party_rec.context);
1240  dbms_sql.column_value(p_get_pty_cursor_id, 11, x_party_rec.attribute1);
1241  dbms_sql.column_value(p_get_pty_cursor_id, 12, x_party_rec.attribute2);
1242  dbms_sql.column_value(p_get_pty_cursor_id, 13, x_party_rec.attribute3);
1243  dbms_sql.column_value(p_get_pty_cursor_id, 14, x_party_rec.attribute4);
1244  dbms_sql.column_value(p_get_pty_cursor_id, 15, x_party_rec.attribute5);
1245  dbms_sql.column_value(p_get_pty_cursor_id, 16, x_party_rec.attribute6);
1246  dbms_sql.column_value(p_get_pty_cursor_id, 17, x_party_rec.attribute7);
1247  dbms_sql.column_value(p_get_pty_cursor_id, 18, x_party_rec.attribute8);
1248  dbms_sql.column_value(p_get_pty_cursor_id, 19, x_party_rec.attribute9);
1249  dbms_sql.column_value(p_get_pty_cursor_id, 20, x_party_rec.attribute10);
1250  dbms_sql.column_value(p_get_pty_cursor_id, 21, x_party_rec.attribute11);
1251  dbms_sql.column_value(p_get_pty_cursor_id, 22, x_party_rec.attribute12);
1252  dbms_sql.column_value(p_get_pty_cursor_id, 23, x_party_rec.attribute13);
1253  dbms_sql.column_value(p_get_pty_cursor_id, 24, x_party_rec.attribute14);
1254  dbms_sql.column_value(p_get_pty_cursor_id, 25, x_party_rec.attribute15);
1255  dbms_sql.column_value(p_get_pty_cursor_id, 26, x_party_rec.object_version_number);
1256  dbms_sql.column_value(p_get_pty_cursor_id, 27, x_party_rec.primary_flag);
1257  dbms_sql.column_value(p_get_pty_cursor_id, 28, x_party_rec.preferred_flag);
1258 
1259 END Get_Pty_Column_Values;
1260 
1261 /*----------------------------------------------------------*/
1262 /* Procedure name:  Define_Pty_Columns                      */
1263 /* Description : This procudure defines the columns         */
1264 /*                        for the Dynamic SQL               */
1265 /*----------------------------------------------------------*/
1266 
1267 PROCEDURE Define_Pty_Columns
1268 (
1269   p_get_pty_cursor_id      IN   NUMBER
1270   ) IS
1271   l_party_rec            csi_datastructures_pub.party_header_rec;
1272 BEGIN
1273 
1274  dbms_sql.define_column(p_get_pty_cursor_id, 1, l_party_rec.instance_party_id);
1275  dbms_sql.define_column(p_get_pty_cursor_id, 2, l_party_rec.instance_id);
1276  dbms_sql.define_column(p_get_pty_cursor_id, 3, l_party_rec.party_source_table ,30);
1277  dbms_sql.define_column(p_get_pty_cursor_id, 4, l_party_rec.party_id);
1278  dbms_sql.define_column(p_get_pty_cursor_id, 5, l_party_rec.relationship_type_code ,30);
1279  dbms_sql.define_column(p_get_pty_cursor_id, 6, l_party_rec.contact_flag,1);
1280  dbms_sql.define_column(p_get_pty_cursor_id, 7, l_party_rec.contact_ip_id);
1281  dbms_sql.define_column(p_get_pty_cursor_id, 8, l_party_rec.active_start_date);
1282  dbms_sql.define_column(p_get_pty_cursor_id, 9, l_party_rec.active_end_date);
1283  dbms_sql.define_column(p_get_pty_cursor_id, 10, l_party_rec.context,30);
1284  dbms_sql.define_column(p_get_pty_cursor_id, 11, l_party_rec.attribute1,150);
1285  dbms_sql.define_column(p_get_pty_cursor_id, 12, l_party_rec.attribute2,150);
1286  dbms_sql.define_column(p_get_pty_cursor_id, 13, l_party_rec.attribute3,150);
1287  dbms_sql.define_column(p_get_pty_cursor_id, 14, l_party_rec.attribute4,150);
1288  dbms_sql.define_column(p_get_pty_cursor_id, 15, l_party_rec.attribute5,150);
1289  dbms_sql.define_column(p_get_pty_cursor_id, 16, l_party_rec.attribute6,150);
1290  dbms_sql.define_column(p_get_pty_cursor_id, 17, l_party_rec.attribute7,150);
1291  dbms_sql.define_column(p_get_pty_cursor_id, 18, l_party_rec.attribute8,150);
1292  dbms_sql.define_column(p_get_pty_cursor_id, 19, l_party_rec.attribute9,150);
1293  dbms_sql.define_column(p_get_pty_cursor_id, 20, l_party_rec.attribute10,150);
1294  dbms_sql.define_column(p_get_pty_cursor_id, 21, l_party_rec.attribute11,150);
1295  dbms_sql.define_column(p_get_pty_cursor_id, 22, l_party_rec.attribute12,150);
1296  dbms_sql.define_column(p_get_pty_cursor_id, 23, l_party_rec.attribute13,150);
1297  dbms_sql.define_column(p_get_pty_cursor_id, 24, l_party_rec.attribute14,150);
1298  dbms_sql.define_column(p_get_pty_cursor_id, 25, l_party_rec.attribute15,150);
1299  dbms_sql.define_column(p_get_pty_cursor_id, 26, l_party_rec.object_version_number);
1300  dbms_sql.define_column(p_get_pty_cursor_id, 27, l_party_rec.primary_flag,1);
1301  dbms_sql.define_column(p_get_pty_cursor_id, 28, l_party_rec.preferred_flag,1);
1302 
1303 END Define_Pty_Columns;
1304 
1305 
1306 /*----------------------------------------------------------*/
1307 /* Procedure name:  Bind_Pty_variable                       */
1308 /* Description : Procedure used to  generate the where      */
1309 /*                cluase  for Party relationship            */
1310 /*----------------------------------------------------------*/
1311 
1312 PROCEDURE Bind_Pty_variable
1313 (
1314     p_party_query_rec      IN    csi_datastructures_pub.party_query_rec,
1315     p_cur_get_pty_rel      IN   NUMBER
1316    ) IS
1317 
1318 BEGIN
1319 
1320  IF( (p_party_query_rec.instance_party_id IS NOT NULL)
1321                   AND (p_party_query_rec.instance_party_id <> FND_API.G_MISS_NUM))  THEN
1322     DBMS_SQL.BIND_VARIABLE(p_cur_get_pty_rel, ':instance_party_id', p_party_query_rec.instance_party_id);
1323  END IF;
1324 
1325  IF( (p_party_query_rec.instance_id IS NOT NULL)
1326                   AND (p_party_query_rec.instance_id <> FND_API.G_MISS_NUM))  THEN
1327     DBMS_SQL.BIND_VARIABLE(p_cur_get_pty_rel, ':instance_id', p_party_query_rec.instance_id);
1328  END IF;
1329 
1330  IF( (p_party_query_rec.party_id IS NOT NULL)
1331                   AND (p_party_query_rec.party_id <> FND_API.G_MISS_NUM))  THEN
1332     DBMS_SQL.BIND_VARIABLE(p_cur_get_pty_rel, ':party_id', p_party_query_rec.party_id);
1333  END IF;
1334 
1335  IF( (p_party_query_rec.relationship_type_code IS NOT NULL)
1336                   AND (p_party_query_rec.relationship_type_code <> FND_API.G_MISS_CHAR))  THEN
1337     DBMS_SQL.BIND_VARIABLE(p_cur_get_pty_rel, ':relationship_type_code', p_party_query_rec.relationship_type_code);
1338  END IF;
1339 
1340 END Bind_Pty_variable;
1341 
1342 /*----------------------------------------------------------*/
1343 /* Procedure name:  Gen_Pty_Where_Clause                    */
1344 /* Description : Procedure used to  generate the where      */
1345 /*                clause  for Party relationship            */
1346 /*----------------------------------------------------------*/
1347 
1348 PROCEDURE Gen_Pty_Where_Clause
1349 (
1350     p_party_query_rec      IN    csi_datastructures_pub.party_query_rec
1351    ,x_where_clause         OUT NOCOPY    VARCHAR2
1352  ) IS
1353 
1354 BEGIN
1355 
1356  -- Assign null at the start
1357  x_where_clause := '';
1358 
1359 IF (( p_party_query_rec.instance_party_id  IS NOT NULL)  AND
1360         ( p_party_query_rec.instance_party_id  <> FND_API.G_MISS_NUM)) THEN
1361         x_where_clause := ' instance_party_id = :instance_party_id ';
1362 ELSIF ( p_party_query_rec.instance_party_id  IS  NULL) THEN
1363        x_where_clause := ' instance_party_id IS NULL ';
1364 END IF;
1365 
1366 IF ((p_party_query_rec.instance_id IS NOT NULL)       AND
1367         (p_party_query_rec.instance_id <> FND_API.G_MISS_NUM))   THEN
1368         IF x_where_clause IS NULL THEN
1369             x_where_clause := ' instance_id = :instance_id ';
1370         ELSE
1371             x_where_clause := x_where_clause||' AND '||' instance_id = :instance_id ';
1372         END IF;
1373 ELSIF (p_party_query_rec.instance_id IS NULL) THEN
1374         IF x_where_clause IS NULL THEN
1375             x_where_clause := ' instance_id IS NULL ';
1376         ELSE
1377             x_where_clause := x_where_clause||' AND '||' instance_id IS NULL';
1378         END IF;
1379 END IF;
1380 
1381 IF ((p_party_query_rec.party_id  IS NOT NULL)   AND
1382             (p_party_query_rec.party_id  <> FND_API.G_MISS_NUM)) THEN
1383         IF x_where_clause IS NULL THEN
1384             x_where_clause := ' party_id = :party_id ';
1385         ELSE
1386             x_where_clause := x_where_clause||' AND '||' party_id = :party_id ';
1387         END IF;
1388 ELSIF (p_party_query_rec.party_id  IS  NULL) THEN
1389         IF x_where_clause IS NULL THEN
1390             x_where_clause := ' party_id IS NULL ';
1391         ELSE
1392             x_where_clause := x_where_clause||' AND '||' party_id IS NULL ';
1393         END IF;
1394 END IF ;
1395 
1396 IF  ((p_party_query_rec.relationship_type_code IS NOT NULL) AND
1397         (p_party_query_rec.relationship_type_code <> FND_API.G_MISS_CHAR)) THEN
1398         IF x_where_clause IS NULL THEN
1399             x_where_clause := '  relationship_type_code = :relationship_type_code ';
1400         ELSE
1401             x_where_clause := x_where_clause||' AND '||
1402                    '  relationship_type_code = :relationship_type_code ';
1403         END IF;
1404 ELSIF (p_party_query_rec.relationship_type_code IS  NULL) THEN
1405         IF x_where_clause IS NULL THEN
1406             x_where_clause := '  relationship_type_code IS NULL ';
1407         ELSE
1408             x_where_clause := x_where_clause||' AND '||
1409                    '  relationship_type_code IS NULL ';
1410         END IF;
1411 END IF;
1412 
1413 END Gen_Pty_Where_Clause;
1414 
1415 
1416 /*-------------------------------------------------------------*/
1417 /* Procedure name:Create_inst_party_realationships             */
1418 /* Description : Procedure used to   create new instance-party */
1419 /*                            relationships                    */
1420 /*-------------------------------------------------------------*/
1421 
1422 PROCEDURE create_inst_party_relationship
1423  (    p_api_version         IN  NUMBER
1424      ,p_commit              IN  VARCHAR2
1425      ,p_init_msg_list       IN  VARCHAR2
1426      ,p_validation_level    IN  NUMBER
1427      ,p_party_rec           IN OUT NOCOPY   csi_datastructures_pub.party_rec
1428      ,p_txn_rec             IN OUT NOCOPY   csi_datastructures_pub.transaction_rec
1429      ,x_return_status       OUT NOCOPY  VARCHAR2
1430      ,x_msg_count           OUT NOCOPY  NUMBER
1431      ,x_msg_data            OUT NOCOPY  VARCHAR2
1432      ,p_party_source_tbl    IN OUT NOCOPY   csi_party_relationships_pvt.party_source_tbl
1433      ,p_party_id_tbl        IN OUT NOCOPY   csi_party_relationships_pvt.party_id_tbl
1434      ,p_contact_tbl         IN OUT NOCOPY   csi_party_relationships_pvt.contact_tbl
1435      ,p_party_rel_type_tbl  IN OUT NOCOPY   csi_party_relationships_pvt.party_rel_type_tbl
1436      ,p_party_count_rec     IN OUT NOCOPY   csi_party_relationships_pvt.party_count_rec
1437      ,p_called_from_grp     IN     VARCHAR2
1438 
1439    ) IS
1440 
1441      l_api_name      CONSTANT VARCHAR2(30)   := 'CREATE_INST_PARTY_RELATIONSHIP';
1442      l_api_version   CONSTANT NUMBER         := 1.0;
1443      l_csi_debug_level        NUMBER;
1444      l_party_rec              csi_datastructures_pub.party_rec;
1445      l_msg_index              NUMBER;
1446      l_msg_count              NUMBER;
1447      l_process_flag           BOOLEAN := TRUE;
1448      l_inst_party_his_id      NUMBER;
1449      l_record_found           BOOLEAN := FALSE;
1450      l_exists_flag            VARCHAR2(1);
1451      l_valid_flag             VARCHAR2(1);
1452      l_exists                 VARCHAR2(1);
1453 
1454 BEGIN
1455         -- Standard Start of API savepoint
1456         SAVEPOINT create_inst_party_rel_pvt;
1457 
1458         -- Standard call to check for call compatibility.
1459         IF NOT FND_API.Compatible_API_Call (    l_api_version   ,
1460                                                 p_api_version   ,
1461                                                 l_api_name      ,
1462                                                 g_pkg_name      )
1463         THEN
1464                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1465         END IF;
1466 
1467         -- Initialize message list if p_init_msg_list is set to TRUE.
1468         IF FND_API.to_Boolean( p_init_msg_list ) THEN
1469                 FND_MSG_PUB.initialize;
1470         END IF;
1471 
1472         --  Initialize API return status to success
1473         x_return_status := FND_API.G_RET_STS_SUCCESS;
1474 
1475         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
1476         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
1477 
1478         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
1479         IF (l_csi_debug_level > 0) THEN
1480             csi_gen_utility_pvt.put_line( 'create_inst_party_relationship');
1481         END IF;
1482 
1483         -- If the debug level = 2 then dump all the parameters values.
1484         IF (l_csi_debug_level> 1) THEN
1485                csi_gen_utility_pvt.put_line( 'create_inst_party_relationship'||
1486                                                    p_api_version           ||'-'||
1487                                                    p_commit                ||'-'||
1488                                                    p_init_msg_list               );
1489                -- Dump the records in the log file
1490                csi_gen_utility_pvt.dump_party_rec(p_party_rec);
1491                csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
1492 
1493         END IF;
1494 
1495 
1496         -- Start API body
1497         --
1498         -- Check if all the required parameters are passed
1499     	 CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
1500  	      (    p_party_rec.INSTANCE_ID ,
1501 		    '  p_party_rec.INSTANCE_ID ',
1502 		       l_api_name           );
1503     	 CSI_Instance_parties_vld_pvt.Check_Reqd_Param_char
1504  	      (    p_party_rec.PARTY_SOURCE_TABLE  ,
1505 		    '  p_party_rec.PARTY_SOURCE_TABLE  ',
1506 		       l_api_name           );
1507     	 CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
1508  	      (    p_party_rec.PARTY_ID ,
1509 		    '  p_party_rec.PARTY_ID ',
1510 		       l_api_name           );
1511 
1512          CSI_Instance_parties_vld_pvt.Check_Reqd_Param_char
1513  	      (    p_party_rec.RELATIONSHIP_TYPE_CODE,
1514 		    '  p_party_rec.RELATIONSHIP_TYPE_CODE',
1515 		       l_api_name           );
1516 
1517          CSI_Instance_parties_vld_pvt.Check_Reqd_Param_char
1518  	      (    p_party_rec.CONTACT_FLAG,
1519 		    '  p_party_rec.CONTACT_FLAG',
1520 		       l_api_name           );
1521 
1522        -- Initialize the count
1523        IF p_party_count_rec.party_source_count is NULL OR
1524           p_party_count_rec.party_source_count = FND_API.G_MISS_NUM THEN
1525           p_party_count_rec.party_source_count := 0;
1526        END IF;
1527        --
1528        IF p_party_count_rec.party_id_count is NULL OR
1529           p_party_count_rec.party_id_count = FND_API.G_MISS_NUM THEN
1530           p_party_count_rec.party_id_count := 0;
1531        END IF;
1532        --
1533        IF p_party_count_rec.contact_id_count is NULL OR
1534           p_party_count_rec.contact_id_count = FND_API.G_MISS_NUM THEN
1535           p_party_count_rec.contact_id_count := 0;
1536        END IF;
1537        --
1538        IF p_party_count_rec.rel_type_count is NULL OR
1539           p_party_count_rec.rel_type_count = FND_API.G_MISS_NUM THEN
1540           p_party_count_rec.rel_type_count := 0;
1541        END IF;
1542        --
1543        -- Check if the party is expired
1544        -- If so unexpire the instance party relationship
1545        -- Added by sk for bug 2232880
1546        l_record_found  := FALSE;
1547        IF ( (p_called_from_grp <> FND_API.G_TRUE) AND
1548             (p_party_rec.instance_party_id IS NULL OR
1549              p_party_rec.instance_party_id = fnd_api.g_miss_num) )
1550        THEN
1551           BEGIN
1552              SELECT instance_party_id,
1553                    object_version_number,
1554                    active_start_date
1555              INTO p_party_rec.instance_party_id,
1556                   p_party_rec.object_version_number,
1557                   p_party_rec.active_start_date
1558              FROM csi_i_parties
1559              WHERE instance_id          = p_party_rec.instance_id
1560              AND party_source_table     = p_party_rec.party_source_table
1561              AND party_id               = p_party_rec.party_id
1562              AND relationship_type_code = p_party_rec.relationship_type_code
1563              AND contact_flag           = p_party_rec.contact_flag
1564              AND nvl(contact_ip_id,fnd_api.g_miss_num) = nvl(p_party_rec.contact_ip_id,fnd_api.g_miss_num)
1565              AND active_end_date        < SYSDATE
1566              AND ROWNUM=1;
1567              l_record_found  := TRUE;
1568           EXCEPTION
1569              WHEN OTHERS THEN
1570                 NULL;
1571           END;
1572        END IF;
1573        --
1574        IF l_record_found THEN
1575 	  /* -- Commented by sk for bug 2232880
1576 	  IF (CSI_Instance_parties_vld_pvt.Is_Party_Expired
1577                       (p_party_rec)) THEN
1578 	     IF (p_party_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE) THEN
1579 		 p_party_rec.ACTIVE_END_DATE := NULL;
1580 	     END IF;
1581 	    */ --End commentation by sk for bug 2232880
1582 	     -- Unexpire the instance party relationship
1583 	     -- Unexpire the instance party relationship
1584 	     IF   p_party_rec.active_end_date = fnd_api.g_miss_date
1585 	     THEN
1586                 p_party_rec.active_end_date := NULL;
1587 	     END IF;
1588 	     update_inst_party_relationship
1589 		    ( p_api_version      => p_api_version
1590 		     ,p_commit           => p_commit
1591 		     ,p_init_msg_list    => p_init_msg_list
1592 		     ,p_validation_level => p_validation_level
1593 		     ,p_party_rec        => p_party_rec
1594 		     ,p_txn_rec          => p_txn_rec
1595 		     ,x_return_status    => x_return_status
1596 		     ,x_msg_count        => x_msg_count
1597 		     ,x_msg_data         => x_msg_data  ) ;
1598 
1599              IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1600                 l_msg_index := 1;
1601                 l_msg_count := x_msg_count;
1602                 WHILE l_msg_count > 0 LOOP
1603                    x_msg_data := FND_MSG_PUB.GET(
1604                                      l_msg_index,
1605                                      FND_API.G_FALSE );
1606                    csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1607                    l_msg_index := l_msg_index + 1;
1608                    l_msg_count := l_msg_count - 1;
1609                 END LOOP;
1610                 RAISE FND_API.G_EXC_ERROR;
1611              END IF;
1612           ELSE -- -- Added by sk for bug 2232880 l_record not found
1613 	    --END IF; -- commented by sk for bug 2232880
1614 	    -- Verify if the Party rel combination exists
1615                IF p_called_from_grp <> FND_API.G_TRUE THEN
1616 	          IF (CSI_Instance_parties_vld_pvt.Is_Party_Rel_Comb_Exists
1617 			    (p_party_rec.instance_id            ,
1618 			     p_party_rec.party_source_table     ,
1619 			     p_party_rec.party_id               ,
1620 			     p_party_rec.relationship_type_code ,
1621 			     p_party_rec.contact_flag           ,
1622 			     p_party_rec.contact_ip_id          ,
1623 			     TRUE           )) THEN
1624 	      	      RAISE FND_API.G_EXC_ERROR;
1625 	          END IF;
1626                END IF;
1627            --
1628            IF  p_party_rec.INSTANCE_PARTY_ID is  NULL OR
1629                p_party_rec.INSTANCE_PARTY_ID = FND_API.G_MISS_NUM THEN
1630 
1631            -- If the instance_party_id passed is null then generate from sequence
1632            -- and check if the value exists . If exists then generate
1633            -- again from the sequence till we get a value that does not exist
1634               while l_process_flag loop
1635                p_party_rec.INSTANCE_PARTY_ID := CSI_Instance_parties_vld_pvt.gen_inst_party_id;
1636                IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_PartyID_exists(p_party_rec.INSTANCE_PARTY_ID,
1637                                                                           FALSE                 )) THEN
1638                   l_process_flag := FALSE;
1639                END IF;
1640               end loop;
1641             ELSE
1642                -- Validate the instance_party_id if exist then raise CSI_API_INVALID_PRIMARY_KEY error
1643                IF CSI_Instance_parties_vld_pvt.Is_Inst_PartyID_exists(p_party_rec.INSTANCE_PARTY_ID,
1644                                                                    TRUE                ) THEN
1645                   RAISE FND_API.G_EXC_ERROR;
1646                END IF;
1647            END IF;
1648 
1649         -- Verify if the instance_id exists in csi_item_instances
1650         IF p_called_from_grp <> FND_API.G_TRUE THEN
1651            IF NOT(CSI_Instance_parties_vld_pvt.Is_InstanceID_Valid(p_party_rec.INSTANCE_ID)) THEN
1652                RAISE FND_API.G_EXC_ERROR;
1653            END IF;
1654         END IF;
1655 
1656         -- Verify if the party_source_table exists in CSI_LOOKUPS
1657         -- Check the cache before hitting the database.
1658         l_exists_flag := 'N';
1659         l_valid_flag := 'Y';
1660         IF p_party_source_tbl.count > 0 THEN
1661            FOR src_count in p_party_source_tbl.FIRST .. p_party_source_tbl.LAST
1662            LOOP
1663               IF p_party_source_tbl(src_count).party_source_table = p_party_rec.PARTY_SOURCE_TABLE THEN
1664                  l_valid_flag := p_party_source_tbl(src_count).valid_flag;
1665                  l_exists_flag := 'Y';
1666                  exit;
1667               END IF;
1668            END LOOP;
1669            --
1670            IF l_valid_flag <> 'Y' THEN
1671 	      FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_PARTY_SOURCE');
1672 	      FND_MESSAGE.SET_TOKEN('PARTY_SOURCE_TABLE',p_party_rec.PARTY_SOURCE_TABLE);
1673 	      FND_MSG_PUB.Add;
1674               RAISE FND_API.G_EXC_ERROR;
1675            END IF;
1676         END IF;
1677         --
1678         IF l_exists_flag = 'N' THEN
1679            p_party_count_rec.party_source_count := p_party_count_rec.party_source_count + 1;
1680            p_party_source_tbl(p_party_count_rec.party_source_count).party_source_table := p_party_rec.PARTY_SOURCE_TABLE;
1681            IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Source_tab_Valid(p_party_rec.PARTY_SOURCE_TABLE)) THEN
1682                p_party_source_tbl(p_party_count_rec.party_source_count).valid_flag := 'N';
1683                RAISE FND_API.G_EXC_ERROR;
1684            ELSE
1685               p_party_source_tbl(p_party_count_rec.party_source_count).valid_flag := 'Y';
1686            END IF;
1687         END IF;
1688 
1689         -- Verify if the party_id is valid from HZ_parties,PO_vendors and employee tables
1690         -- based on the value of party_source_table
1691         -- Check the cache before hitting the database.
1692         l_exists_flag := 'N';
1693         l_valid_flag := 'Y';
1694         IF p_party_id_tbl.count > 0 THEN
1695            For party_count IN p_party_id_tbl.FIRST .. p_party_id_tbl.LAST
1696            LOOP
1697               IF p_party_id_tbl(party_count).party_id = p_party_rec.PARTY_ID AND
1698                  p_party_id_tbl(party_count).party_source_table = p_party_rec.PARTY_SOURCE_TABLE AND
1699                  nvl(p_party_id_tbl(party_count).contact_flag,'*') = nvl(p_party_rec.CONTACT_FLAG,'*') THEN
1700                  l_valid_flag := p_party_id_tbl(party_count).valid_flag;
1701                  l_exists_flag := 'Y';
1702                  exit;
1703               END IF;
1704               --
1705               IF l_valid_flag <> 'Y' THEN
1706 		 FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_PARTY_ID');
1707 	 	 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_rec.PARTY_ID);
1708 		 FND_MSG_PUB.Add;
1709                  RAISE FND_API.G_EXC_ERROR;
1710               END IF;
1711            END LOOP;
1712         END IF;
1713         --
1714         IF l_exists_flag <> 'Y' THEN
1715            p_party_count_rec.party_id_count := p_party_count_rec.party_id_count + 1;
1716            p_party_id_tbl(p_party_count_rec.party_id_count).party_id := p_party_rec.PARTY_ID;
1717            p_party_id_tbl(p_party_count_rec.party_id_count).party_source_table := p_party_rec.PARTY_SOURCE_TABLE;
1718            p_party_id_tbl(p_party_count_rec.party_id_count).contact_flag := p_party_rec.CONTACT_FLAG;
1719            IF NOT(CSI_Instance_parties_vld_pvt.Is_Party_Valid
1720                         (p_party_rec.PARTY_SOURCE_TABLE ,
1721                          p_party_rec.PARTY_ID ,
1722                          p_party_rec.CONTACT_FLAG)) THEN
1723                p_party_id_tbl(p_party_count_rec.party_id_count).valid_flag := 'N';
1724                RAISE FND_API.G_EXC_ERROR;
1725            ELSE
1726                p_party_id_tbl(p_party_count_rec.party_id_count).valid_flag := 'Y';
1727            END IF;
1728         END IF;
1729 
1730         --
1731         --
1732         -- Added by rtalluri on 07/25/03 (Bug. 2990027)
1733         -- Contact_flag for the owner party should be 'N', if not then raise an error
1734         IF    ((p_party_rec.relationship_type_code = 'OWNER')
1735           AND  (p_party_rec.contact_flag = 'Y'))
1736         THEN
1737              FND_MESSAGE.SET_NAME('CSI', 'CSI_INVALID_OWNER_CONTACT');
1738              FND_MESSAGE.SET_TOKEN('CONTACT_FLAG', p_party_rec.CONTACT_FLAG);
1739              FND_MESSAGE.SET_TOKEN('RELATIONSHIP_TYPE_CODE', p_party_rec.RELATIONSHIP_TYPE_CODE);
1740              FND_MSG_PUB.ADD;
1741              RAISE FND_API.G_EXC_ERROR;
1742         END IF;
1743         --
1744         -- Verify that the contact_ip_id is null, if the contact_flag is 'N'
1745         IF p_party_rec.CONTACT_FLAG = 'N'
1746         THEN
1747            IF  ((p_party_rec.CONTACT_IP_ID <> FND_API.G_MISS_NUM)
1748             AND (p_party_rec.CONTACT_IP_ID IS NOT NULL))
1749            THEN
1750               FND_MESSAGE.SET_NAME('CSI', 'CSI_CANNOT_CREATE_CONTACT');
1751               FND_MESSAGE.SET_TOKEN('CONTACT_FLAG', p_party_rec.CONTACT_FLAG);
1752               FND_MESSAGE.SET_TOKEN('CONTACT_IP_ID', p_party_rec.CONTACT_IP_ID);
1753               FND_MSG_PUB.ADD;
1754               RAISE FND_API.G_EXC_ERROR;
1755            END IF;
1756         END IF;
1757         --
1758         -- Verify that the contact_ip_id used to create a contact
1759         -- is not used by any other instance
1760         IF p_called_from_grp <> FND_API.G_TRUE THEN
1761           IF p_party_rec.CONTACT_FLAG = 'Y'
1762           THEN
1763              IF  ((p_party_rec.CONTACT_IP_ID <> FND_API.G_MISS_NUM)
1764               AND (p_party_rec.CONTACT_IP_ID IS NOT NULL ))
1765              THEN
1766              l_exists := NULL;
1767                BEGIN
1768                  SELECT 'X'
1769                  INTO   l_exists
1770                  FROM   csi_i_parties
1771                  WHERE  instance_id <> p_party_rec.INSTANCE_ID
1772                  AND    instance_party_id = p_party_rec.CONTACT_IP_ID;
1773 
1774                  IF l_exists IS NOT NULL THEN
1775                     FND_MESSAGE.SET_NAME('CSI', 'CSI_INVALID_CONTACT_ID');
1776                     FND_MESSAGE.SET_TOKEN('CONTACT_FLAG', p_party_rec.CONTACT_FLAG);
1777                     FND_MESSAGE.SET_TOKEN('CONTACT_IP_ID', p_party_rec.CONTACT_IP_ID);
1778                     FND_MSG_PUB.Add;
1779                     RAISE FND_API.G_EXC_ERROR;
1780                  END IF;
1781                EXCEPTION
1782                  WHEN NO_DATA_FOUND THEN
1783                   NULL;
1784                END;
1785              ELSE
1786                 FND_MESSAGE.SET_NAME('CSI', 'CSI_INVALID_CONTACT_ID');
1787                 FND_MESSAGE.SET_TOKEN('CONTACT_FLAG', p_party_rec.CONTACT_FLAG);
1788                 FND_MESSAGE.SET_TOKEN('CONTACT_IP_ID', p_party_rec.CONTACT_IP_ID);
1789                 FND_MSG_PUB.Add;
1790                 RAISE FND_API.G_EXC_ERROR;
1791              END IF;
1792           END IF;
1793         END IF;
1794         --
1795         -- End of Addition by rtalluri on 07/25/03 (Bug. 2990027)
1796         --
1797 
1798         -- Verify the contact_ip_id is valid contact for Party if the contact_flag is 'Y'
1799         IF p_party_rec.contact_flag = 'Y' THEN
1800            IF p_called_from_grp <> FND_API.G_TRUE THEN
1801               -- Check the cache before hitting the database.
1802               l_exists_flag := 'N';
1803               l_valid_flag := 'Y';
1804               IF p_contact_tbl.count > 0 THEN
1805                  For  contact_count in p_contact_tbl.FIRST .. p_contact_tbl.LAST
1806                  LOOP
1807                     IF p_contact_tbl(contact_count).contact_party_id = p_party_rec.PARTY_ID AND
1808                        p_contact_tbl(contact_count).party_source_table = p_party_rec.PARTY_SOURCE_TABLE AND
1809                        p_contact_tbl(contact_count).contact_ip_id = p_party_rec.CONTACT_IP_ID THEN
1810                        l_valid_flag := p_contact_tbl(contact_count).valid_flag;
1811                        l_exists_flag := 'Y';
1812                        exit;
1813                     END IF;
1814                  END LOOP;
1815                  --
1816 /*
1817                  IF l_valid_flag <> 'Y' THEN
1818 	            FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_CONTACT_INFO');
1819 	            FND_MESSAGE.SET_TOKEN('CONTACT_PARTY_ID',p_party_rec.PARTY_ID);
1820 	            FND_MESSAGE.SET_TOKEN('CONTACT_SOURCE_TABLE',p_party_rec.PARTY_SOURCE_TABLE);
1821                     FND_MSG_PUB.Add;
1822                     RAISE FND_API.G_EXC_ERROR;
1823                  END IF;
1824 */ -- code commented by sguthiva for bug 2619247.
1825               END IF;
1826               --
1827               IF l_exists_flag <> 'Y' THEN
1828                  p_party_count_rec.contact_id_count := p_party_count_rec.contact_id_count + 1;
1829                  p_contact_tbl(p_party_count_rec.contact_id_count).contact_party_id := p_party_rec.PARTY_ID;
1830                  p_contact_tbl(p_party_count_rec.contact_id_count).party_source_table := p_party_rec.PARTY_SOURCE_TABLE;
1831                  p_contact_tbl(p_party_count_rec.contact_id_count).contact_ip_id := p_party_rec.CONTACT_IP_ID;
1832                 /* code commented by sguthiva on 09-25-02 for bug 2377709
1833                  IF NOT(CSI_Instance_parties_vld_pvt.Is_Contact_Valid
1834                                                      (p_party_rec.PARTY_ID,
1835                                                       p_party_rec.PARTY_SOURCE_TABLE,
1836                                                       p_party_rec.CONTACT_IP_ID)) THEN
1837                     p_contact_tbl(p_party_count_rec.contact_id_count).valid_flag := 'N';
1838                     RAISE FND_API.G_EXC_ERROR;
1839                  ELSE
1840                     p_contact_tbl(p_party_count_rec.contact_id_count).valid_flag := 'Y';
1841 	         END IF;
1842                 end of code comment  */
1843               END IF;
1844            END IF; -- p_called_from_grp check
1845            -- Verify the relationship_type_code is valid
1846            -- Check the cache before hitting the database.
1847            l_exists_flag := 'N';
1848            l_valid_flag := 'Y';
1849            IF p_party_rel_type_tbl.count > 0 THEN
1850               For rel_type in p_party_rel_type_tbl.FIRST .. p_party_rel_type_tbl.LAST
1851               LOOP
1852                  IF p_party_rel_type_tbl(rel_type).rel_type_code = p_party_rec.RELATIONSHIP_TYPE_CODE AND
1853                     p_party_rel_type_tbl(rel_type).contact_flag = 'C' THEN
1854                     l_valid_flag := p_party_rel_type_tbl(rel_type).valid_flag;
1855                     l_exists_flag := 'Y';
1856                     exit;
1857                  END IF;
1858               END LOOP;
1859               --
1860               IF l_valid_flag <> 'Y' THEN
1861 		 FND_MESSAGE.SET_NAME('CSI','CSI_API_INV_PARTY_TYPE_CODE');
1862 		 FND_MESSAGE.SET_TOKEN('RELATIONSHIP_TYPE_CODE',p_party_rec.RELATIONSHIP_TYPE_CODE);
1863 		 FND_MSG_PUB.Add;
1864                  RAISE FND_API.G_EXC_ERROR;
1865               END IF;
1866            END IF;
1867            --
1868            IF l_exists_flag <> 'Y' THEN
1869               p_party_count_rec.rel_type_count := p_party_count_rec.rel_type_count + 1;
1870               p_party_rel_type_tbl(p_party_count_rec.rel_type_count).rel_type_code := p_party_rec.RELATIONSHIP_TYPE_CODE;
1871               p_party_rel_type_tbl(p_party_count_rec.rel_type_count).contact_flag := 'C';
1872               IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Rel_type_Valid
1873                                                   (p_party_rec.RELATIONSHIP_TYPE_CODE,
1874                                                    'C'    )) THEN
1875                  p_party_rel_type_tbl(p_party_count_rec.rel_type_count).valid_flag := 'N';
1876                  RAISE FND_API.G_EXC_ERROR;
1877               ELSE
1878                  p_party_rel_type_tbl(p_party_count_rec.rel_type_count).valid_flag := 'Y';
1879               END IF;
1880            END IF;
1881         ELSE
1882            -- Verify the relationship_type_code is valid
1883            -- Check the cache before hitting the database.
1884            l_exists_flag := 'N';
1885            l_valid_flag := 'Y';
1886            IF p_party_rel_type_tbl.count > 0 THEN
1887               For rel_type in p_party_rel_type_tbl.FIRST .. p_party_rel_type_tbl.LAST
1888               LOOP
1889                  IF p_party_rel_type_tbl(rel_type).rel_type_code = p_party_rec.RELATIONSHIP_TYPE_CODE AND
1890                     p_party_rel_type_tbl(rel_type).contact_flag = 'P' THEN
1891                     l_valid_flag := p_party_rel_type_tbl(rel_type).valid_flag;
1892                     l_exists_flag := 'Y';
1893                     exit;
1894                  END IF;
1895               END LOOP;
1896               --
1897               IF l_valid_flag <> 'Y' THEN
1898 		 FND_MESSAGE.SET_NAME('CSI','CSI_API_INV_PARTY_TYPE_CODE');
1899 		 FND_MESSAGE.SET_TOKEN('RELATIONSHIP_TYPE_CODE',p_party_rec.RELATIONSHIP_TYPE_CODE);
1900 		 FND_MSG_PUB.Add;
1901                  RAISE FND_API.G_EXC_ERROR;
1902               END IF;
1903            END IF;
1904            --
1905            IF l_exists_flag <> 'Y' THEN
1906               p_party_count_rec.rel_type_count := p_party_count_rec.rel_type_count + 1;
1907               p_party_rel_type_tbl(p_party_count_rec.rel_type_count).rel_type_code := p_party_rec.RELATIONSHIP_TYPE_CODE;
1908               p_party_rel_type_tbl(p_party_count_rec.rel_type_count).contact_flag := 'P';
1909               IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Rel_type_Valid
1910                                                   (p_party_rec.RELATIONSHIP_TYPE_CODE,
1911                                                    'P'    )) THEN
1912                  p_party_rel_type_tbl(p_party_count_rec.rel_type_count).valid_flag := 'N';
1913                  RAISE FND_API.G_EXC_ERROR;
1914               ELSE
1915                  p_party_rel_type_tbl(p_party_count_rec.rel_type_count).valid_flag := 'Y';
1916               END IF;
1917            END IF;
1918         END IF;
1919 
1920 
1921         -- If active_start_date is null or G_MISS value then assign sysdate
1922         IF ((p_party_rec.ACTIVE_START_DATE IS NULL ) OR
1923            ( p_party_rec.ACTIVE_START_DATE = FND_API.G_MISS_DATE)) THEN
1924              p_party_rec.ACTIVE_START_DATE := SYSDATE;
1925         END IF;
1926 
1927         -- verify if the active_start_date is valid
1928         IF p_called_from_grp <> FND_API.G_TRUE THEN
1929            IF NOT(CSI_Instance_parties_vld_pvt.Is_StartDate_Valid
1930                                          (p_party_rec.ACTIVE_START_DATE,
1931                                           p_party_rec.ACTIVE_END_DATE ,
1932                                           p_party_rec.INSTANCE_ID  )) THEN
1933               RAISE FND_API.G_EXC_ERROR;
1934            END IF;
1935         END IF;
1936 
1937         -- Verify if the active_end_date is valid
1938         IF p_called_from_grp <> FND_API.G_TRUE THEN
1939            IF ((p_party_rec.ACTIVE_END_DATE is NOT NULL) AND
1940               ( p_party_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE)) THEN
1941                 IF NOT(CSI_Instance_parties_vld_pvt.Is_EndDate_Valid(p_party_rec.ACTIVE_START_DATE,
1942                                   p_party_rec.ACTIVE_END_DATE ,
1943                                   p_party_rec.INSTANCE_ID,
1944                                   p_party_rec.INSTANCE_PARTY_ID,
1945 			          p_txn_rec.TRANSACTION_ID))  THEN
1946                    RAISE FND_API.G_EXC_ERROR;
1947                 END IF;
1948            END IF;
1949         END IF;
1950 
1951         -- Verify the instance owner exists already if exists then raise error
1952         IF p_called_from_grp <> FND_API.G_TRUE THEN
1953            IF p_party_rec.RELATIONSHIP_TYPE_CODE = 'OWNER' THEN
1954                IF CSI_Instance_parties_vld_pvt.Is_Inst_Owner_exists
1955                                      (p_instance_id => p_party_rec.INSTANCE_ID,
1956                                       p_instance_party_id => p_party_rec.instance_party_id ) THEN
1957                  RAISE FND_API.G_EXC_ERROR;
1958                END IF;
1959            END IF;
1960         END IF;
1961 
1962         -- Verify that there is only one Preferred Party for a
1963         -- given instance party relationship
1964         IF p_party_rec.PREFERRED_FLAG = 'Y' THEN
1965           IF p_party_rec.CONTACT_FLAG <> 'Y' THEN
1966              IF p_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM') THEN
1967                FND_MESSAGE.SET_NAME('CSI','CSI_PREFERRED_PTY_TYPE');
1968                FND_MESSAGE.SET_TOKEN('PARTY_TYPE',p_party_rec.PARTY_SOURCE_TABLE);
1969                FND_MESSAGE.SET_TOKEN('INSTANCE_ID',p_party_rec.INSTANCE_ID);
1970                FND_MSG_PUB.Add;
1971                RAISE FND_API.G_EXC_ERROR;
1972              END IF;
1973           END IF;
1974         END IF;
1975 
1976         -- Verify that there is only one Primary Party for a
1977         -- given instance party relationship
1978         IF p_called_from_grp <> FND_API.G_TRUE THEN
1979 	   IF p_party_rec.PRIMARY_FLAG = 'Y' THEN
1980 	     IF p_party_rec.CONTACT_FLAG = 'Y' THEN
1981 	       IF CSI_Instance_parties_vld_pvt.Is_Primary_Contact_Pty
1982 			    (p_party_rec.INSTANCE_ID,
1983 			     p_party_rec.CONTACT_IP_ID,
1984 			     p_party_rec.RELATIONSHIP_TYPE_CODE,
1985 			     p_party_rec.ACTIVE_START_DATE,
1986 			     p_party_rec.ACTIVE_END_DATE) THEN
1987 		 RAISE FND_API.G_EXC_ERROR;
1988 	       END IF;
1989 	     ELSE
1990 	       IF p_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM') THEN
1991 		  FND_MESSAGE.SET_NAME('CSI','CSI_PRIMARY_PTY_TYPE');
1992 		  FND_MESSAGE.SET_TOKEN('PARTY_TYPE',p_party_rec.PARTY_SOURCE_TABLE);
1993 		  FND_MESSAGE.SET_TOKEN('INSTANCE_ID',p_party_rec.INSTANCE_ID);
1994 		  FND_MSG_PUB.Add;
1995 		  RAISE FND_API.G_EXC_ERROR;
1996 	       ELSE
1997 		 IF CSI_Instance_parties_vld_pvt.Is_Primary_Pty
1998 			    (p_party_rec.INSTANCE_ID,
1999 			     p_party_rec.RELATIONSHIP_TYPE_CODE,
2000 			     p_party_rec.ACTIVE_START_DATE,
2001 			     p_party_rec.ACTIVE_END_DATE) THEN
2002 		    RAISE FND_API.G_EXC_ERROR;
2003 		 END IF;
2004 	       END IF;
2005 	     END IF;
2006 	   END IF;
2007         END IF;
2008       --
2009       IF p_called_from_grp <> fnd_api.g_true THEN
2010        -- If it is an owner party then update csi_item_instances
2011         IF p_party_rec.RELATIONSHIP_TYPE_CODE = 'OWNER' THEN
2012            update csi_item_instances
2013            set    owner_party_source_table = p_party_rec.party_source_table,
2014                   owner_party_id  = p_party_rec.party_id
2015            where  instance_id     = p_party_rec.instance_id;
2016 
2017         END IF;
2018 
2019        -- A contact marked as 'Primary' can also be marked as 'Preferred' or
2020        -- 'Non-Preferred' at the same time.
2021         IF p_party_rec.preferred_flag IS NULL OR
2022            p_party_rec.preferred_flag=fnd_api.g_miss_char
2023         THEN
2024            p_party_rec.preferred_flag:='N';
2025         END IF;
2026 
2027         IF (p_party_rec.preferred_flag='E' OR
2028             p_party_rec.preferred_flag='e' )
2029         THEN
2030             p_party_rec.preferred_flag:='E';
2031         END IF;
2032 
2033        -- A contact marked as Primary cannot be marked as 'Excluded'
2034         IF (p_party_rec.primary_flag IS NOT NULL AND
2035             p_party_rec.primary_flag <> fnd_api.g_miss_char AND
2036             p_party_rec.primary_flag = 'Y' ) AND
2037             p_party_rec.preferred_flag='E'
2038         THEN
2039 		  fnd_message.set_name('CSI','CSI_PRIMARY_PTY_EXC');
2040 		  fnd_msg_pub.Add;
2041 		  RAISE fnd_api.g_exc_error;
2042         END IF;
2043 
2044         -- Possible values for preferred flag are
2045         -- 'N','Y' and 'E'.
2046         IF  p_party_rec.preferred_flag='Y' OR
2047             p_party_rec.preferred_flag='N' OR
2048             p_party_rec.preferred_flag='E'
2049         THEN
2050            NULL;
2051         ELSE
2052 		  fnd_message.set_name('CSI','CSI_PREFERRED_VALUES');
2053           fnd_message.set_token('PREFERRED_FLAG',p_party_rec.preferred_flag);
2054 		  fnd_msg_pub.Add;
2055 		  RAISE fnd_api.g_exc_error;
2056         END IF;
2057 
2058 
2059         -- Call table handlers to insert into the csi_i_parties table
2060         CSI_I_PARTIES_PKG.Insert_Row(
2061           p_INSTANCE_PARTY_ID  =>  p_party_rec.INSTANCE_PARTY_ID      ,
2062           p_INSTANCE_ID        =>  p_party_rec.INSTANCE_ID            ,
2063           p_PARTY_SOURCE_TABLE =>  p_party_rec.PARTY_SOURCE_TABLE     ,
2064           p_PARTY_ID           =>   p_party_rec.PARTY_ID              ,
2065           p_RELATIONSHIP_TYPE_CODE =>  p_party_rec.RELATIONSHIP_TYPE_CODE,
2066           p_CONTACT_FLAG       =>   p_party_rec.CONTACT_FLAG          ,
2067           p_CONTACT_IP_ID      =>   p_party_rec.CONTACT_IP_ID         ,
2068           p_ACTIVE_START_DATE  =>  p_party_rec.ACTIVE_START_DATE       ,
2069           p_ACTIVE_END_DATE    =>  p_party_rec.ACTIVE_END_DATE         ,
2070           p_CONTEXT            =>  p_party_rec.CONTEXT                 ,
2071           p_ATTRIBUTE1         =>  p_party_rec.ATTRIBUTE1              ,
2072           p_ATTRIBUTE2         =>  p_party_rec.ATTRIBUTE2              ,
2073           p_ATTRIBUTE3         =>  p_party_rec.ATTRIBUTE3              ,
2074           p_ATTRIBUTE4         =>  p_party_rec.ATTRIBUTE4              ,
2075           p_ATTRIBUTE5         =>  p_party_rec.ATTRIBUTE5              ,
2076           p_ATTRIBUTE6         =>  p_party_rec.ATTRIBUTE6              ,
2077           p_ATTRIBUTE7         =>  p_party_rec.ATTRIBUTE7               ,
2078           p_ATTRIBUTE8         =>  p_party_rec.ATTRIBUTE8               ,
2079           p_ATTRIBUTE9         =>  p_party_rec.ATTRIBUTE9               ,
2080           p_ATTRIBUTE10        =>  p_party_rec.ATTRIBUTE10              ,
2081           p_ATTRIBUTE11        =>  p_party_rec.ATTRIBUTE11              ,
2082           p_ATTRIBUTE12        =>  p_party_rec.ATTRIBUTE12              ,
2083           p_ATTRIBUTE13        =>  p_party_rec.ATTRIBUTE13              ,
2084           p_ATTRIBUTE14        =>  p_party_rec.ATTRIBUTE14              ,
2085           p_ATTRIBUTE15        =>  p_party_rec.ATTRIBUTE15              ,
2086           p_CREATED_BY         =>  FND_GLOBAL.USER_ID                   ,
2087           p_CREATION_DATE      =>  SYSDATE                              ,
2088           p_LAST_UPDATED_BY    =>  FND_GLOBAL.USER_ID                   ,
2089           p_LAST_UPDATE_DATE   =>  SYSDATE                              ,
2090           p_LAST_UPDATE_LOGIN  =>  FND_GLOBAL.LOGIN_ID                  ,
2091           p_OBJECT_VERSION_NUMBER  => 1                                 ,
2092           p_PRIMARY_FLAG       =>   p_party_rec.PRIMARY_FLAG            ,
2093           p_PREFERRED_FLAG       =>   p_party_rec.PREFERRED_FLAG        );
2094 
2095 
2096         -- Call create_transaction to create txn log
2097         CSI_TRANSACTIONS_PVT.Create_transaction
2098           (
2099              p_api_version            => p_api_version
2100             ,p_commit                 => p_commit
2101             ,p_init_msg_list          => p_init_msg_list
2102             ,p_validation_level       => p_validation_level
2103             ,p_Success_If_Exists_Flag => 'Y'
2104             ,P_transaction_rec       => p_txn_rec
2105             ,x_return_status          => x_return_status
2106             ,x_msg_count              => x_msg_count
2107             ,x_msg_data               => x_msg_data          );
2108 
2109          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2110 	     l_msg_index := 1;
2111              l_msg_count := x_msg_count;
2112     	     WHILE l_msg_count > 0 LOOP
2113      		       x_msg_data := FND_MSG_PUB.GET(
2114   	       			                 l_msg_index,
2115     	  		                     FND_API.G_FALSE	);
2116 	               csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
2117 	    	       l_msg_index := l_msg_index + 1;
2118 		           l_msg_count := l_msg_count - 1;
2119 	      END LOOP;
2120               RAISE FND_API.G_EXC_ERROR;
2121          END IF;
2122 
2123       -- Generate a unique instance_party_history_id from the sequence
2124       l_inst_party_his_id := CSI_Instance_parties_vld_pvt.gen_inst_party_hist_id;
2125 
2126       -- Call table handlers to insert into csi_i_parties_h table
2127       CSI_I_PARTIES_H_PKG.Insert_Row
2128       (
2129           px_INSTANCE_PARTY_HISTORY_ID   => l_inst_party_his_id       ,
2130           p_INSTANCE_PARTY_ID            => p_party_rec.INSTANCE_PARTY_ID   ,
2131           p_TRANSACTION_ID               => p_txn_rec.TRANSACTION_ID  ,
2132           p_OLD_PARTY_SOURCE_TABLE       => NULL                      ,
2133           p_NEW_PARTY_SOURCE_TABLE       => p_party_rec.PARTY_SOURCE_TABLE,
2134           p_OLD_PARTY_ID                 => NULL                      ,
2135           p_NEW_PARTY_ID                 => p_party_rec.PARTY_ID      ,
2136           p_OLD_RELATIONSHIP_TYPE_CODE   => NULL                      ,
2137           p_NEW_RELATIONSHIP_TYPE_CODE   => p_party_rec.RELATIONSHIP_TYPE_CODE,
2138           p_OLD_CONTACT_FLAG             => NULL                      ,
2139           p_NEW_CONTACT_FLAG             => p_party_rec.CONTACT_FLAG  ,
2140           p_OLD_CONTACT_IP_ID            => NULL                      ,
2141           p_NEW_CONTACT_IP_ID            => p_party_rec.CONTACT_IP_ID ,
2142           p_OLD_ACTIVE_START_DATE        => NULL                      ,
2143           p_NEW_ACTIVE_START_DATE        => p_party_rec.ACTIVE_START_DATE,
2144           p_OLD_ACTIVE_END_DATE          => NULL                      ,
2145           p_NEW_ACTIVE_END_DATE          => p_party_rec.ACTIVE_END_DATE,
2146           p_OLD_CONTEXT                  => NULL                      ,
2147           p_NEW_CONTEXT                  => p_party_rec.context       ,
2148           p_OLD_ATTRIBUTE1               => NULL                      ,
2149           p_NEW_ATTRIBUTE1               => p_party_rec.ATTRIBUTE1    ,
2150           p_OLD_ATTRIBUTE2               => NULL                      ,
2151           p_NEW_ATTRIBUTE2               => p_party_rec.ATTRIBUTE2    ,
2152           p_OLD_ATTRIBUTE3               => NULL                      ,
2153           p_NEW_ATTRIBUTE3               => p_party_rec.ATTRIBUTE3    ,
2154           p_OLD_ATTRIBUTE4               => NULL                      ,
2155           p_NEW_ATTRIBUTE4               => p_party_rec.ATTRIBUTE4    ,
2156           p_OLD_ATTRIBUTE5               => NULL                      ,
2157           p_NEW_ATTRIBUTE5               => p_party_rec.ATTRIBUTE5    ,
2158           p_OLD_ATTRIBUTE6               => NULL                      ,
2159           p_NEW_ATTRIBUTE6               => p_party_rec.ATTRIBUTE6    ,
2160           p_OLD_ATTRIBUTE7               => NULL                      ,
2161           p_NEW_ATTRIBUTE7               => p_party_rec.ATTRIBUTE7    ,
2162           p_OLD_ATTRIBUTE8               => NULL                      ,
2163           p_NEW_ATTRIBUTE8               => p_party_rec.ATTRIBUTE8    ,
2164           p_OLD_ATTRIBUTE9               => NULL                      ,
2165           p_NEW_ATTRIBUTE9               => p_party_rec.ATTRIBUTE9    ,
2166           p_OLD_ATTRIBUTE10              => NULL                      ,
2167           p_NEW_ATTRIBUTE10              => p_party_rec.ATTRIBUTE10   ,
2168           p_OLD_ATTRIBUTE11              => NULL                      ,
2169           p_NEW_ATTRIBUTE11              => p_party_rec.ATTRIBUTE11   ,
2170           p_OLD_ATTRIBUTE12              => NULL                      ,
2171           p_NEW_ATTRIBUTE12              => p_party_rec.ATTRIBUTE12   ,
2172           p_OLD_ATTRIBUTE13              => NULL                      ,
2173           p_NEW_ATTRIBUTE13              => p_party_rec.ATTRIBUTE13   ,
2174           p_OLD_ATTRIBUTE14              => NULL                      ,
2175           p_NEW_ATTRIBUTE14              => p_party_rec.ATTRIBUTE14   ,
2176           p_OLD_ATTRIBUTE15              => NULL                      ,
2177           p_NEW_ATTRIBUTE15              => p_party_rec.ATTRIBUTE15   ,
2178           p_FULL_DUMP_FLAG               => 'N'                       ,
2179           p_CREATED_BY                    => FND_GLOBAL.USER_ID        ,
2180           p_CREATION_DATE                 => sysdate                   ,
2181           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID        ,
2182           p_LAST_UPDATE_DATE              => sysdate                   ,
2183           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID       ,
2184           p_OBJECT_VERSION_NUMBER         => 1                         ,
2185           p_OLD_PRIMARY_FLAG             => NULL                      ,
2186           p_NEW_PRIMARY_FLAG             => p_party_rec.PRIMARY_FLAG  ,
2187           p_OLD_PREFERRED_FLAG             => NULL                      ,
2188           p_NEW_PREFERRED_FLAG             => p_party_rec.PREFERRED_FLAG  );
2189 
2190         END IF; -- p_called_from_grp check
2191 
2192       END IF; -- Added by sk for bug 2232880
2193 
2194         --
2195         -- End of API body
2196 
2197         -- Standard check of p_commit.
2198         IF FND_API.To_Boolean( p_commit ) THEN
2199                 COMMIT WORK;
2200         END IF;
2201 
2202 
2203         -- Standard call to get message count and if count is  get message info.
2204         FND_MSG_PUB.Count_And_Get
2205                 (p_count        =>      x_msg_count ,
2206                  p_data         =>      x_msg_data  );
2207 EXCEPTION
2208         WHEN FND_API.G_EXC_ERROR THEN
2209                 ROLLBACK TO create_inst_party_rel_pvt;
2210                 x_return_status := FND_API.G_RET_STS_ERROR ;
2211                FND_MSG_PUB.Count_And_Get
2212                 (       p_count     =>      x_msg_count,
2213                         p_data      =>      x_msg_data  );
2214 
2215         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2216                 ROLLBACK TO create_inst_party_rel_pvt;
2217                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2218                 FND_MSG_PUB.Count_And_Get
2219                 (       p_count   =>      x_msg_count,
2220                         p_data    =>      x_msg_data );
2221 
2222         WHEN OTHERS THEN
2223                 ROLLBACK TO create_inst_party_rel_pvt;
2224                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2225                 IF      FND_MSG_PUB.Check_Msg_Level
2226                         (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2227                 THEN
2228                 FND_MSG_PUB.Add_Exc_Msg
2229                 (       g_pkg_name   ,
2230                         l_api_name   );
2231                 END IF;
2232                 FND_MSG_PUB.Count_And_Get
2233                 (       p_count     =>      x_msg_count,
2234                         p_data      =>      x_msg_data   );
2235 END  create_inst_party_relationship;
2236 
2237 /*------------------------------------------------------------*/
2238 /* Procedure name:  Update_inst_party_relationship            */
2239 /* Description :   Procedure used to  update the existing     */
2240 /*                 instance -party relationships              */
2241 /*------------------------------------------------------------*/
2242 
2243 PROCEDURE update_inst_party_relationship
2244     ( p_api_version                 IN  NUMBER
2245      ,p_commit                      IN  VARCHAR2
2246      ,p_init_msg_list               IN  VARCHAR2
2247      ,p_validation_level            IN  NUMBER
2248      ,p_party_rec                   IN OUT NOCOPY  csi_datastructures_pub.party_rec
2249      ,p_txn_rec                     IN OUT NOCOPY  csi_datastructures_pub.transaction_rec
2250      ,x_return_status               OUT NOCOPY  VARCHAR2
2251      ,x_msg_count                   OUT NOCOPY  NUMBER
2252      ,x_msg_data                    OUT NOCOPY  VARCHAR2
2253      ) IS
2254 
2255     l_api_name      CONSTANT VARCHAR2(30)   := 'UPDATE_INST_PARTY_RELATIONSHIP';
2256     l_api_version   CONSTANT NUMBER         := 1.0;
2257     l_csi_debug_level        NUMBER;
2258     l_curr_party_rec         csi_datastructures_pub.party_rec;
2259     l_temp_party_rec         csi_datastructures_pub.party_rec;
2260     l_cont_party_rec         csi_datastructures_pub.party_rec;
2261     l_init_party_rec         csi_datastructures_pub.party_rec;
2262     l_msg_index              NUMBER;
2263     l_msg_count              NUMBER;
2264     l_line_count             NUMBER;
2265     l_object_version_number  NUMBER;
2266     l_inst_party_his_id      NUMBER;
2267     l_full_dump_frequency    NUMBER;
2268     l_mod_value              NUMBER;
2269     l_party_account_rec      csi_datastructures_pub.party_account_rec;
2270     l_internal_party_id      NUMBER;
2271 
2272     x_msg_index_out          NUMBER;
2273     l_acct_class_code        VARCHAR2(10);
2274 
2275     -- alternate pk check variables
2276     l_alt_pk_instance_id    NUMBER;
2277     l_alt_pk_pty_source_tab VARCHAR2(30);
2278     l_alt_pk_party_id       NUMBER;
2279     l_alt_pk_rel_type_code  VARCHAR2(30);
2280     l_alt_pk_contact_flag   VARCHAR2(1);
2281 
2282   CURSOR GET_IP_ACCOUNT (p_inst_party_id   IN  NUMBER) IS
2283     SELECT
2284         ip_account_id,
2285         object_version_number
2286     FROM csi_ip_accounts
2287     WHERE instance_party_id = p_inst_party_id
2288      AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE)) ;
2289 
2290   CURSOR get_curr_party_rec (p_inst_party_id   IN  NUMBER) IS
2291      SELECT
2292      instance_party_id  ,
2293      instance_id        ,
2294      party_source_table ,
2295      party_id           ,
2296      relationship_type_code,
2297      contact_flag       ,
2298      contact_ip_id      ,
2299      active_start_date  ,
2300      active_end_date    ,
2301      context            ,
2302      attribute1         ,
2303      attribute2         ,
2304      attribute3         ,
2305      attribute4         ,
2306      attribute5         ,
2307      attribute6         ,
2308      attribute7         ,
2309      attribute8         ,
2310      attribute9         ,
2311      attribute10        ,
2312      attribute11        ,
2313      attribute12        ,
2314      attribute13        ,
2315      attribute14        ,
2316      attribute15        ,
2317      object_version_number,
2318      primary_flag       ,
2319      preferred_flag     ,
2320      null parent_tbl_index  ,
2321      null call_contracts,
2322      null interface_id,
2323      null contact_parent_tbl_index,
2324      null cascade_ownership_flag -- Added for bug 2972082
2325     FROM CSI_I_PARTIES
2326     WHERE INSTANCE_PARTY_ID = p_inst_party_id
2327     FOR UPDATE OF OBJECT_VERSION_NUMBER ;
2328 
2329   CURSOR get_cont_party_rec (p_cont_ip_id   IN  NUMBER) IS
2330      SELECT
2331      instance_party_id  ,
2332      instance_id        ,
2333      party_source_table ,
2334      party_id           ,
2335      relationship_type_code,
2336      contact_flag       ,
2337      contact_ip_id      ,
2338      active_start_date  ,
2339      active_end_date    ,
2340      context            ,
2341      attribute1         ,
2342      attribute2         ,
2343      attribute3         ,
2344      attribute4         ,
2345      attribute5         ,
2346      attribute6         ,
2347      attribute7         ,
2348      attribute8         ,
2349      attribute9         ,
2350      attribute10        ,
2351      attribute11        ,
2352      attribute12        ,
2353      attribute13        ,
2354      attribute14        ,
2355      attribute15        ,
2356      object_version_number,
2357      primary_flag       ,
2358      preferred_flag
2359     FROM CSI_I_PARTIES
2360     WHERE CONTACT_IP_ID = p_cont_ip_id
2361     AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE > SYSDATE))
2362     FOR UPDATE OF OBJECT_VERSION_NUMBER ;
2363 
2364   CURSOR curr_instance_rec(p_instance_id IN NUMBER)  IS
2365     SELECT
2366      INSTANCE_ID,
2367      INSTANCE_NUMBER,
2368      EXTERNAL_REFERENCE,
2369      INVENTORY_ITEM_ID,
2370      LAST_VLD_ORGANIZATION_ID VLD_ORGANIZATION_ID,
2371      INVENTORY_REVISION,
2372      INV_MASTER_ORGANIZATION_ID,
2373      SERIAL_NUMBER,
2374      MFG_SERIAL_NUMBER_FLAG,
2375      LOT_NUMBER,
2376      QUANTITY,
2377      UNIT_OF_MEASURE,
2378      ACCOUNTING_CLASS_CODE,
2379      INSTANCE_CONDITION_ID,
2380      INSTANCE_STATUS_ID,
2381      CUSTOMER_VIEW_FLAG,
2382      MERCHANT_VIEW_FLAG,
2383      SELLABLE_FLAG,
2384      SYSTEM_ID,
2385      INSTANCE_TYPE_CODE,
2386      ACTIVE_START_DATE,
2387      ACTIVE_END_DATE,
2388      LOCATION_TYPE_CODE,
2389      LOCATION_ID,
2390      INV_ORGANIZATION_ID,
2391      INV_SUBINVENTORY_NAME,
2392      INV_LOCATOR_ID,
2393      PA_PROJECT_ID,
2394      PA_PROJECT_TASK_ID,
2395      IN_TRANSIT_ORDER_LINE_ID,
2396      WIP_JOB_ID,
2397      PO_ORDER_LINE_ID,
2398      LAST_OE_ORDER_LINE_ID,
2399      LAST_OE_RMA_LINE_ID,
2400      LAST_PO_PO_LINE_ID,
2401      LAST_OE_PO_NUMBER,
2402      LAST_WIP_JOB_ID,
2403      LAST_PA_PROJECT_ID,
2404      LAST_PA_TASK_ID,
2405      LAST_OE_AGREEMENT_ID,
2406      INSTALL_DATE,
2407      MANUALLY_CREATED_FLAG,
2408      RETURN_BY_DATE,
2409      ACTUAL_RETURN_DATE,
2410      CREATION_COMPLETE_FLAG,
2411      COMPLETENESS_FLAG,
2412      NULL VERSION_LABEL,
2413      NULL VERSION_LABEL_DESCRIPTION,
2414      CONTEXT,
2415      ATTRIBUTE1,
2416      ATTRIBUTE2,
2417      ATTRIBUTE3,
2418      ATTRIBUTE4,
2419      ATTRIBUTE5,
2420      ATTRIBUTE6,
2421      ATTRIBUTE7,
2422      ATTRIBUTE8,
2423      ATTRIBUTE9,
2424      ATTRIBUTE10,
2425      ATTRIBUTE11,
2426      ATTRIBUTE12,
2427      ATTRIBUTE13,
2428      ATTRIBUTE14,
2429      ATTRIBUTE15,
2430      OBJECT_VERSION_NUMBER,
2431      LAST_TXN_LINE_DETAIL_ID,
2432      INSTALL_LOCATION_TYPE_CODE,
2433      INSTALL_LOCATION_ID,
2434      INSTANCE_USAGE_CODE,
2435      NULL CHECK_FOR_INSTANCE_EXPIRY,
2436      NULL PROCESSED_FLAG,
2437      NULL CALL_CONTRACTS,
2438      NULL INTERFACE_ID,
2439      NULL GRP_CALL_CONTRACTS,
2440      CONFIG_INST_HDR_ID,
2441      CONFIG_INST_REV_NUM,
2442      CONFIG_INST_ITEM_ID,
2443      CONFIG_VALID_STATUS,
2444      INSTANCE_DESCRIPTION,
2445      NULL CALL_BATCH_VALIDATION,
2446      NULL REQUEST_ID,
2447      NULL PROGRAM_APPLICATION_ID,
2448      NULL PROGRAM_ID,
2449      NULL PROGRAM_UPDATE_DATE,
2450      NULL cascade_ownership_flag, -- Added for bug 2972082
2451      NULL NETWORK_ASSET_FLAG,
2452      NULL MAINTAINABLE_FLAG,
2453      NULL PN_LOCATION_ID,
2454      NULL ASSET_CRITICALITY_CODE,
2455      NULL CATEGORY_ID,
2456      NULL EQUIPMENT_GEN_OBJECT_ID,
2457      NULL INSTANTIATION_FLAG,
2458      NULL LINEAR_LOCATION_ID,
2459      NULL OPERATIONAL_LOG_FLAG,
2460      NULL CHECKIN_STATUS,
2461      NULL SUPPLIER_WARRANTY_EXP_DATE,
2462      NULL ATTRIBUTE16,
2463      NULL ATTRIBUTE17,
2464      NULL ATTRIBUTE18,
2465      NULL ATTRIBUTE19,
2466      NULL ATTRIBUTE20,
2467      NULL ATTRIBUTE21,
2468      NULL ATTRIBUTE22,
2469      NULL ATTRIBUTE23,
2470      NULL ATTRIBUTE24,
2471      NULL ATTRIBUTE25,
2472      NULL ATTRIBUTE26,
2473      NULL ATTRIBUTE27,
2474      NULL ATTRIBUTE28,
2475      NULL ATTRIBUTE29,
2476      NULL ATTRIBUTE30,
2477      NULL PURCHASE_UNIT_PRICE,
2478      NULL PURCHASE_CURRENCY_CODE,
2479      NULL PAYABLES_UNIT_PRICE,
2480      NULL PAYABLES_CURRENCY_CODE,
2481      NULL SALES_UNIT_PRICE,
2482      NULL SALES_CURRENCY_CODE,
2483      NULL OPERATIONAL_STATUS_CODE,
2484      NULL DEPARTMENT_ID,
2485      NULL WIP_ACCOUNTING_CLASS,
2486      NULL AREA_ID,
2487      NULL OWNER_PARTY_ID,
2488      NULL SOURCE_CODE -- Bug 6407307, added Code for Siebel Genesis Project
2489     FROM  csi_item_instances
2490     WHERE instance_id = p_instance_id;
2491 
2492     l_curr_instance_rec  csi_datastructures_pub.instance_rec;
2493 
2494 
2495    CURSOR pty_hist_csr (p_party_hist_id NUMBER) IS
2496    SELECT  instance_party_history_id
2497           ,instance_party_id
2498           ,transaction_id
2499           ,old_party_source_table
2500           ,new_party_source_table
2501           ,old_party_id
2502           ,new_party_id
2503           ,old_relationship_type_code
2504           ,new_relationship_type_code
2505           ,old_contact_flag
2506           ,new_contact_flag
2507           ,old_contact_ip_id
2508           ,new_contact_ip_id
2509           ,old_active_start_date
2510           ,new_active_start_date
2511           ,old_active_end_date
2512           ,new_active_end_date
2513           ,old_context
2514           ,new_context
2515           ,old_attribute1
2516           ,new_attribute1
2517           ,old_attribute2
2518           ,new_attribute2
2519           ,old_attribute3
2520           ,new_attribute3
2521           ,old_attribute4
2522           ,new_attribute4
2523           ,old_attribute5
2524           ,new_attribute5
2525           ,old_attribute6
2526           ,new_attribute6
2527           ,old_attribute7
2528           ,new_attribute7
2529           ,old_attribute8
2530           ,new_attribute8
2531           ,old_attribute9
2532           ,new_attribute9
2533           ,old_attribute10
2534           ,new_attribute10
2535           ,old_attribute11
2536           ,new_attribute11
2537           ,old_attribute12
2538           ,new_attribute12
2539           ,old_attribute13
2540           ,new_attribute13
2541           ,old_attribute14
2542           ,new_attribute14
2543           ,old_attribute15
2544           ,new_attribute15
2545           ,full_dump_flag
2546           ,object_version_number
2547           ,old_primary_flag
2548           ,new_primary_flag
2549           ,old_preferred_flag
2550           ,new_preferred_flag
2551    FROM   csi_i_parties_h
2552    WHERE  csi_i_parties_h.instance_party_history_id = p_party_hist_id
2553    FOR UPDATE OF object_version_number ;
2554    l_pty_hist_csr    pty_hist_csr%rowtype;
2555    l_party_hist_id   NUMBER;
2556    l_open_service    VARCHAR2(1);
2557    l_party_hist_rec  csi_datastructures_pub.party_history_rec;
2558    l_ins_pty_found   NUMBER;
2559    l_pty_end_date    DATE;
2560 BEGIN
2561    -- Standard Start of API savepoint
2562    -- SAVEPOINT    update_inst_party_rel_pvt  ;
2563 
2564    -- Standard call to check for call compatibility.
2565    IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
2566 					   p_api_version           ,
2567 					   l_api_name              ,
2568 					   g_pkg_name              )
2569    THEN
2570 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2571    END IF;
2572 
2573    -- Initialize message list if p_init_msg_list is set to TRUE.
2574    IF FND_API.to_Boolean( p_init_msg_list ) THEN
2575 	   FND_MSG_PUB.initialize;
2576    END IF;
2577 
2578    --  Initialize API return status to success
2579    x_return_status := FND_API.G_RET_STS_SUCCESS;
2580 
2581    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
2582    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2583 
2584    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
2585    IF (l_csi_debug_level > 0) THEN
2586        csi_gen_utility_pvt.put_line( 'update_inst_party_relationship ');
2587    END IF;
2588 
2589    -- If the debug level = 2 then dump all the parameters values.
2590    IF (l_csi_debug_level> 1) THEN
2591        csi_gen_utility_pvt.put_line( 'update_inst_party_relationship:' ||
2592 						    p_api_version    ||'-'||
2593 						    p_commit         ||'-'||
2594 						    p_init_msg_list        );
2595        -- Dump the records in the log file
2596        csi_gen_utility_pvt.dump_party_rec(p_party_rec);
2597        csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
2598    END IF;
2599    -- Start API body
2600    --
2601    -- Check if all the required parameters are passed
2602    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
2603 	 (    p_party_rec.INSTANCE_PARTY_ID ,
2604 	       '  p_party_rec.INSTANCE_PARTY_ID ',
2605 		  l_api_name                 );
2606    --
2607    IF p_party_rec.party_id IS NULL THEN
2608       FND_MESSAGE.SET_NAME('CSI','CSI_API_MANDATORY_PARTY');
2609       FND_MSG_PUB.Add;
2610       RAISE FND_API.G_EXC_ERROR;
2611    END IF;
2612    --
2613    -- Check if the instance party id  is valid
2614    -- End commentation by sk for bug 2232880
2615    -- Verify if the instance_id exists in csi_item_instances
2616    IF p_party_rec.INSTANCE_ID <> FND_API.G_MISS_NUM THEN
2617       IF NOT(CSI_Instance_parties_vld_pvt.Is_InstanceID_Valid(p_party_rec.INSTANCE_ID)) THEN
2618          RAISE FND_API.G_EXC_ERROR;
2619       END IF;
2620    END IF;
2621    -- Verify the instance owner exists already if exists then raise error
2622    IF p_party_rec.RELATIONSHIP_TYPE_CODE = 'OWNER' THEN
2623       IF CSI_Instance_parties_vld_pvt.Is_Inst_Owner_exists
2624                                   (p_instance_id   => p_party_rec.INSTANCE_ID,
2625                                    p_instance_party_id => p_party_rec.instance_party_id ) THEN
2626          RAISE FND_API.G_EXC_ERROR;
2627       END IF;
2628    END IF;
2629    -- start of addition of code by rtalluri for bugfix 2324745 on 04/23/02
2630    -- validating the owner
2631    IF l_curr_party_rec.instance_party_id = p_party_rec.instance_party_id
2632        AND l_curr_party_rec.party_id <> p_party_rec.party_id
2633        AND (p_party_rec.party_id is not null and p_party_rec.party_id <> fnd_api.g_miss_num)
2634        AND l_curr_party_rec.relationship_type_code = 'OWNER'
2635    THEN
2636       OPEN curr_instance_rec(p_party_rec.instance_id);
2637       FETCH curr_instance_rec INTO l_curr_instance_rec;
2638       IF NOT (csi_item_instance_vld_pvt.Validate_Uniqueness(p_instance_rec     => l_curr_instance_rec,
2639                                                             p_party_rec        => p_party_rec,
2640                                                             p_csi_txn_type_id  => p_txn_rec.transaction_type_id
2641 															)) THEN
2642          RAISE FND_API.G_EXC_ERROR;
2643       END IF;
2644       CLOSE curr_instance_rec;
2645    END IF;
2646    -- end of addition of code by rtalluri for bugfix 2324745 on 04/23/02
2647    -- The following code has been added for the following scenario...
2648    -- For the customer merge/account merge, all the parent and the child instances
2649    -- were selected before calling update_item_instance.
2650    -- In this case the child records object_version numbers will be updated
2651    -- if the child owner party is same as the parent.
2652    IF p_txn_rec.transaction_type_id=7
2653    THEN
2654       BEGIN
2655          SELECT object_version_number
2656          INTO   p_party_rec.object_version_number
2657          FROM   csi_i_parties
2658          WHERE  instance_party_id=p_party_rec.instance_party_id;
2659       EXCEPTION
2660          WHEN NO_DATA_FOUND THEN
2661             csi_gen_utility_pvt.put_line('Passed instance_party_id : '||p_party_rec.instance_party_id||' is not found.');
2662             RAISE FND_API.G_EXC_ERROR;
2663       END;
2664    END IF;
2665    -- check if the object_version_number passed matches with the one
2666    -- in the database else raise error
2667    OPEN get_curr_party_rec(p_party_rec.INSTANCE_PARTY_ID);
2668    FETCH get_curr_party_rec INTO l_curr_party_rec;
2669    IF (l_curr_party_rec.object_version_number <> p_party_rec.OBJECT_VERSION_NUMBER) THEN
2670       FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
2671       FND_MSG_PUB.ADD;
2672       RAISE FND_API.G_EXC_ERROR;
2673    END IF;
2674    --
2675    IF get_curr_party_rec%NOTFOUND THEN
2676       FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
2677       FND_MSG_PUB.ADD;
2678       RAISE FND_API.G_EXC_ERROR;
2679    END IF;
2680    CLOSE get_curr_party_rec;
2681    --
2682    IF p_party_rec.instance_id <> FND_API.G_MISS_NUM THEN
2683       IF p_party_rec.instance_id <> l_curr_party_rec.instance_id THEN
2684 	 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2685 	 FND_MESSAGE.Set_Token('COLUMN', 'INSTANCE_ID');
2686 	 FND_MSG_PUB.ADD;
2687 	 RAISE FND_API.G_EXC_ERROR;
2688       END IF;
2689    END IF;
2690    --
2691    IF p_party_rec.active_start_date IS NULL THEN
2692       FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2693       FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
2694       FND_MSG_PUB.ADD;
2695       RAISE FND_API.G_EXC_ERROR;
2696    END IF;
2697    --
2698    IF p_party_rec.active_start_date <> FND_API.G_MISS_DATE THEN
2699       IF p_party_rec.active_start_date <> l_curr_party_rec.active_start_date THEN
2700 	 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2701 	 FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
2702 	 FND_MSG_PUB.ADD;
2703 	RAISE FND_API.G_EXC_ERROR;
2704       END IF;
2705    END IF;
2706    -- Increment the object_version_number before updating
2707    l_OBJECT_VERSION_NUMBER := l_curr_party_rec.OBJECT_VERSION_NUMBER + 1 ;
2708    -- Verify if the active_end_date is valid
2709    -- Don't allow expiry of owner parties
2710    IF p_party_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE THEN
2711       IF l_curr_party_rec.relationship_type_code = 'OWNER'  THEN
2712 	 FND_MESSAGE.Set_Name('CSI', 'CSI_API_EXP_NOT_ALLOWED');
2713 	 FND_MESSAGE.Set_Token('COLUMN', 'OWNER PARTY');
2714 	 FND_MSG_PUB.ADD;
2715 	 RAISE FND_API.G_EXC_ERROR;
2716       ELSE
2717 	 -- Verify if the active_end_date is valid
2718 	 IF (g_expire_party_flag <> 'Y') THEN
2719 	    IF NOT(CSI_Instance_parties_vld_pvt.Is_EndDate_Valid
2720 			    (l_curr_party_rec.ACTIVE_START_DATE,
2721 			     p_party_rec.ACTIVE_END_DATE ,
2722 			     p_party_rec.INSTANCE_ID,
2723 			     p_party_rec.INSTANCE_PARTY_ID,
2724 			     p_txn_rec.TRANSACTION_ID))  THEN
2725 	       RAISE FND_API.G_EXC_ERROR;
2726 	    END IF;
2727 	 END IF;
2728       END IF;
2729    END IF;
2730    --
2731    IF p_party_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
2732       IF ((p_party_rec.relationship_type_code <> l_curr_party_rec.relationship_type_code)
2733 	      AND l_curr_party_rec.relationship_type_code = 'OWNER' ) THEN
2734 	   FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2735 	   FND_MESSAGE.Set_Token('COLUMN', 'OWNER PARTY');
2736 
2737 	   FND_MSG_PUB.ADD;
2738 	   RAISE FND_API.G_EXC_ERROR;
2739       ELSE
2740 	 -- Verify the relationship_type_code is valid
2741 	 IF p_party_rec.contact_flag = 'Y' THEN
2742 	     IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Rel_type_Valid
2743 					     (p_party_rec.RELATIONSHIP_TYPE_CODE,
2744 					      'C'    )) THEN
2745 		 RAISE FND_API.G_EXC_ERROR;
2746 	     END IF;
2747 	 ELSE
2748 	      -- Verify the relationship_type_code is valid
2749 	      IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Rel_type_Valid
2750 					     (p_party_rec.RELATIONSHIP_TYPE_CODE,
2751 					      'P'    )) THEN
2752 		 RAISE FND_API.G_EXC_ERROR;
2753 	      END IF;
2754 	 END IF;
2755       END IF;
2756    END IF;
2757 
2758    -- Verify that there is only one Preferred Party for a
2759    -- given instance party relationship
2760    IF p_party_rec.preferred_flag <> FND_API.G_MISS_CHAR THEN
2761       IF ((p_party_rec.preferred_flag IS NULL AND l_curr_party_rec.preferred_flag IS NOT NULL)
2762 	 OR (p_party_rec.preferred_flag IS NOT NULL AND l_curr_party_rec.preferred_flag IS NULL)
2763 	 OR  (p_party_rec.preferred_flag <> l_curr_party_rec.preferred_flag)
2764 	 AND (p_party_rec.preferred_flag = 'Y')) THEN
2765 	   IF p_party_rec.CONTACT_FLAG <> 'Y' THEN
2766 		IF (((p_party_rec.PARTY_SOURCE_TABLE <> FND_API.G_MISS_CHAR)
2767 		   AND (p_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM')))
2768 		  OR (l_curr_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM'))) THEN
2769 		  FND_MESSAGE.SET_NAME('CSI','CSI_PREFERRED_PTY_TYPE');
2770 		  FND_MESSAGE.SET_TOKEN('PARTY_TYPE',l_curr_party_rec.PARTY_SOURCE_TABLE);
2771 		  FND_MESSAGE.SET_TOKEN('INSTANCE_ID',l_curr_party_rec.INSTANCE_ID);
2772 		  FND_MSG_PUB.Add;
2773 		  RAISE FND_API.G_EXC_ERROR;
2774 	       END IF;
2775 	   END IF;
2776 	END IF;
2777    END IF;
2778    -- Verify that there is only one Primary Party for a
2779    -- given instance party relationship
2780    IF ((nvl(p_party_rec.primary_flag,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR)
2781       OR (nvl(p_party_rec.relationship_type_code,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR)) THEN
2782       IF (((p_party_rec.primary_flag IS NULL AND l_curr_party_rec.primary_flag IS NOT NULL)
2783 	  OR (p_party_rec.primary_flag IS NOT NULL AND l_curr_party_rec.primary_flag IS NULL)
2784 	  OR  (p_party_rec.primary_flag <> l_curr_party_rec.primary_flag)
2785 	  AND (p_party_rec.primary_flag = 'Y'))
2786 	  OR (p_party_rec.relationship_type_code <> l_curr_party_rec.relationship_type_code)) THEN
2787 	 IF (((p_party_rec.CONTACT_FLAG <> FND_API.G_MISS_CHAR)
2788 	       AND (p_party_rec.CONTACT_FLAG = 'Y'))
2789 	       OR (l_curr_party_rec.CONTACT_FLAG = 'Y')) THEN
2790 	       -- SK ADDED
2791 	       -- following code 10 lines needs to be removed once
2792 	       -- html code is fixed
2793 	    IF p_party_rec.PARTY_SOURCE_TABLE IS NULL
2794 	    THEN
2795 	       p_party_rec.PARTY_SOURCE_TABLE:=fnd_api.g_miss_char;
2796 	    END IF;
2797 	    IF  p_party_rec.primary_flag IS NULL THEN
2798 		p_party_rec.primary_flag:='N';
2799 	    END IF;
2800 	    --
2801 	    IF  nvl(l_curr_party_rec.primary_flag,'N') = 'Y'
2802 		AND p_party_rec.primary_flag = 'N'
2803 	    THEN
2804 	       NULL;
2805 	    ELSIF ((nvl(l_curr_party_rec.primary_flag,'N') = 'Y') OR (p_party_rec.primary_flag = 'Y')) THEN
2806 	       IF p_party_rec.ACTIVE_START_DATE IS NULL
2807 		  OR p_party_rec.ACTIVE_START_DATE = fnd_api.g_miss_date THEN
2808 		  p_party_rec.ACTIVE_START_DATE := l_curr_party_rec.ACTIVE_START_DATE;
2809 	       END IF;
2810 	       --
2811 	       IF  p_party_rec.ACTIVE_END_DATE IS NULL
2812 		   OR p_party_rec.ACTIVE_END_DATE = fnd_api.g_miss_date
2813 	       THEN
2814 		  p_party_rec.ACTIVE_END_DATE := l_curr_party_rec.ACTIVE_END_DATE;
2815 	       END IF;
2816 	       -- SK END ADDITION
2817 	       IF CSI_Instance_parties_vld_pvt.Is_Primary_Contact_Pty
2818 		       (l_curr_party_rec.INSTANCE_ID,
2819 			l_curr_party_rec.CONTACT_IP_ID,
2820 			p_party_rec.RELATIONSHIP_TYPE_CODE,
2821 			p_party_rec.ACTIVE_START_DATE,
2822 			p_party_rec.ACTIVE_END_DATE) THEN
2823 		  RAISE FND_API.G_EXC_ERROR;
2824 	       END IF;
2825 	    END IF; --SK ADDED
2826 	 ELSE
2827 	    IF (((p_party_rec.PARTY_SOURCE_TABLE <> FND_API.G_MISS_CHAR)
2828 		   AND (p_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM')))
2829 		  OR (l_curr_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM'))) THEN
2830 		   -- following code is commented by sk
2831 		  /*FND_MESSAGE.SET_NAME('CSI','CSI_HAHA2');
2832 		   --FND_MESSAGE.SET_NAME('CSI','CSI_PRIMARY_PTY_TYPE');
2833 		   FND_MESSAGE.SET_TOKEN('PARTY_TYPE',l_curr_party_rec.PARTY_SOURCE_TABLE);
2834 		   FND_MESSAGE.SET_TOKEN('INSTANCE_ID',l_curr_party_rec.INSTANCE_ID);
2835 		   FND_MSG_PUB.Add;
2836 		   RAISE FND_API.G_EXC_ERROR; */
2837 		  NULL; --added by sk
2838 	    ELSE
2839 	       -- SK ADDED
2840 	       IF  p_party_rec.primary_flag IS NULL
2841 	       THEN
2842 		   p_party_rec.primary_flag:='N';
2843 	       END IF;
2844 	       --
2845 	       IF  nvl(l_curr_party_rec.primary_flag,'N') = 'Y'
2846 		   AND p_party_rec.primary_flag = 'N'
2847 	       THEN
2848 		  NULL;
2849 	       ELSIF ((nvl(l_curr_party_rec.primary_flag,'N') = 'Y') OR (p_party_rec.primary_flag = 'Y')) THEN
2850 		  IF  p_party_rec.ACTIVE_START_DATE IS NULL
2851 		     OR p_party_rec.ACTIVE_START_DATE = fnd_api.g_miss_date
2852 		  THEN
2853 		     p_party_rec.ACTIVE_START_DATE := l_curr_party_rec.ACTIVE_START_DATE;
2854 		  END IF;
2855 		  IF  p_party_rec.ACTIVE_END_DATE IS NULL
2856 		     OR p_party_rec.ACTIVE_END_DATE = fnd_api.g_miss_date
2857 		  THEN
2858 		     p_party_rec.ACTIVE_END_DATE := l_curr_party_rec.ACTIVE_END_DATE;
2859 		  END IF;
2860 		  -- SK END ADDITION
2861 		  IF CSI_Instance_parties_vld_pvt.Is_Primary_Pty
2862 			       (l_curr_party_rec.INSTANCE_ID,
2863 				p_party_rec.RELATIONSHIP_TYPE_CODE,
2864 				p_party_rec.ACTIVE_START_DATE,
2865 				p_party_rec.ACTIVE_END_DATE) THEN
2866 		     RAISE FND_API.G_EXC_ERROR;
2867 		  END IF;
2868 	       END IF; --SK ADDED
2869 	    END IF;
2870 	 END IF;
2871       END IF;
2872    END IF;
2873    -- Call table handlers to insert into the csi_i_parties table
2874    -- Verify if the party_source_table exists in CSI_LOOKUPS
2875    IF (p_party_rec.PARTY_SOURCE_TABLE <> FND_API.G_MISS_CHAR) THEN
2876       IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Source_tab_Valid(p_party_rec.PARTY_SOURCE_TABLE)) THEN
2877 	 RAISE FND_API.G_EXC_ERROR;
2878       END IF;
2879       -- Verify if the party_id is valid based on the value of party_source_table
2880       IF (p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM) THEN
2881 	 IF NOT(CSI_Instance_parties_vld_pvt.Is_Party_Valid
2882 			 (p_party_rec.PARTY_SOURCE_TABLE ,
2883 			  p_party_rec.PARTY_ID ,
2884 			  p_party_rec.CONTACT_FLAG )) THEN
2885 	    RAISE FND_API.G_EXC_ERROR;
2886 	 END IF;
2887       END IF;
2888    ELSE
2889       IF (p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM) THEN
2890 	 IF NOT(CSI_Instance_parties_vld_pvt.Is_Party_Valid
2891 			   (l_curr_party_rec.PARTY_SOURCE_TABLE ,
2892 			    p_party_rec.PARTY_ID ,
2893 			    p_party_rec.CONTACT_FLAG )) THEN
2894 	    RAISE FND_API.G_EXC_ERROR;
2895 	 END IF;
2896       END IF;
2897    END IF;
2898    -- Grab the internal party id from csi_installed paramters
2899    IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
2900       csi_gen_utility_pvt.populate_install_param_rec;
2901    END IF;
2902    --
2903    l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
2904    --
2905    IF l_internal_party_id IS NULL THEN
2906       FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
2907       FND_MSG_PUB.ADD;
2908       RAISE FND_API.G_EXC_ERROR;
2909    END IF;
2910    -- Validate Tranfer Party rules in case of tranfer of instance
2911    IF ((p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM)
2912        AND (p_party_rec.PARTY_ID IS NOT NULL)
2913        AND (p_party_rec.PARTY_ID <> l_curr_party_rec.PARTY_ID))
2914        --AND (p_party_rec.party_id <> l_internal_party_id)) -- commented for bug 3294748
2915    THEN
2916       -- End of code comment for bug 2600000
2917       -- End commentation by sguthiva for bug 2307804
2918       CSI_Instance_parties_vld_pvt.Transfer_Party_Rules
2919            ( p_api_version                 => p_api_version
2920             ,p_commit                      => p_commit
2921             ,p_init_msg_list               => p_init_msg_list
2922             ,p_validation_level            => p_validation_level
2923             ,p_party_rec                   => l_curr_party_rec
2924             ,p_stack_err_msg               => TRUE
2925             ,p_txn_rec                     => p_txn_rec
2926             ,x_return_status               => x_return_status
2927             ,x_msg_count                   => x_msg_count
2928             ,x_msg_data                    => x_msg_data       );
2929 
2930       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2931          l_msg_index := 1;
2932          l_msg_count := x_msg_count;
2933          WHILE l_msg_count > 0 LOOP
2934                     x_msg_data := FND_MSG_PUB.GET(
2935                                                   l_msg_index,
2936                                                   FND_API.G_FALSE	);
2937                    csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
2938                    l_msg_index := l_msg_index + 1;
2939                    l_msg_count := l_msg_count - 1;
2940          END LOOP;
2941          RAISE FND_API.G_EXC_ERROR;
2942       END IF;
2943    END IF;
2944    -- Validate alternate primary key
2945    IF  ((p_party_rec.instance_id IS NULL) OR  (p_party_rec.instance_id = FND_API.G_MISS_NUM)) THEN
2946       l_alt_pk_instance_id   := l_curr_party_rec.instance_id;
2947    ELSE
2948       l_alt_pk_instance_id   := p_party_rec.instance_id;
2949    END IF;
2950    --
2951    IF  ((p_party_rec.party_source_table IS NULL) OR  (p_party_rec.party_source_table = FND_API.G_MISS_CHAR)) THEN
2952       l_alt_pk_pty_source_tab   := l_curr_party_rec.party_source_table;
2953    ELSE
2954       l_alt_pk_pty_source_tab   := p_party_rec.party_source_table;
2955    END IF;
2956    --
2957    IF  ((p_party_rec.party_id IS NULL) OR  (p_party_rec.party_id = FND_API.G_MISS_NUM)) THEN
2958       l_alt_pk_party_id   := l_curr_party_rec.party_id;
2959    ELSE
2960       l_alt_pk_party_id   := p_party_rec.party_id;
2961    END IF;
2962    --
2963    IF  ((p_party_rec.relationship_type_code IS NULL) OR
2964       (p_party_rec.relationship_type_code = FND_API.G_MISS_CHAR)) THEN
2965       l_alt_pk_rel_type_code   := l_curr_party_rec.relationship_type_code ;
2966    ELSE
2967       l_alt_pk_rel_type_code   := p_party_rec.relationship_type_code ;
2968    END IF;
2969    --
2970    IF  ((p_party_rec.contact_flag IS NULL) OR  (p_party_rec.contact_flag = FND_API.G_MISS_CHAR)) THEN
2971       l_alt_pk_contact_flag   := l_curr_party_rec.contact_flag ;
2972    ELSE
2973       l_alt_pk_contact_flag   := p_party_rec.contact_flag ;
2974    END IF;
2975    -- Verify if the Party rel combination exists
2976    IF  ((l_alt_pk_instance_id   <> l_curr_party_rec.instance_id)
2977       OR
2978       (l_alt_pk_pty_source_tab   <> l_curr_party_rec.party_source_table )
2979       OR
2980       (l_alt_pk_party_id   <> l_curr_party_rec.party_id)
2981       OR
2982       (l_alt_pk_rel_type_code   <> l_curr_party_rec.relationship_type_code )
2983       OR
2984       (l_alt_pk_contact_flag   <> l_curr_party_rec.contact_flag ))
2985    THEN
2986       -- Verify if the Party rel combination exists
2987       -- Added the following code for bug 3694434
2988       -- party rel combination check is relaxed on for party/acct merge transaction.
2989       IF p_txn_rec.transaction_type_id=7
2990       THEN
2991          BEGIN
2992 	    SELECT instance_party_id
2993             INTO l_ins_pty_found
2994             FROM csi_i_parties
2995 	    WHERE instance_id            = l_alt_pk_instance_id
2996             AND party_source_table     = l_alt_pk_pty_source_tab
2997             AND party_id               = l_alt_pk_party_id
2998             AND relationship_type_code = l_alt_pk_rel_type_code
2999             AND contact_flag           = l_alt_pk_contact_flag
3000             AND NVL(contact_ip_id,fnd_api.g_miss_num) = NVL(p_party_rec.contact_ip_id,fnd_api.g_miss_num)
3001             AND ((active_end_date IS NULL) OR (active_end_date >= sysdate));
3002             -- If found then there exists a record in csi_i_parties, Hence
3003             -- I need to expire(if active) this record.
3004             BEGIN
3005                SELECT active_end_date
3006                INTO l_pty_end_date
3007                FROM csi_i_parties
3008                WHERE instance_party_id=p_party_rec.instance_party_id
3009                AND ((active_end_date IS NULL) OR (active_end_date > sysdate));
3010                -- Active record found so make it inactive.
3011                p_party_rec.active_end_date:=sysdate;
3012             EXCEPTION
3013                WHEN OTHERS THEN
3014                   NULL;
3015             END;
3016          EXCEPTION
3017             WHEN TOO_MANY_ROWS THEN
3018                csi_gen_utility_pvt.put_line('Too many rows exist in csi_i_parties with the same party rel combination.');
3019 	       FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_PARTY_REL_COMB');
3020 	       FND_MESSAGE.SET_TOKEN('PARTY_REL_COMB',to_char(l_alt_pk_instance_id) ||','||l_alt_pk_pty_source_tab||','||to_char(l_alt_pk_party_id)||','||l_alt_pk_rel_type_code||','||to_char(p_party_rec.contact_ip_id));
3021 	       FND_MSG_PUB.Add;
3022                RAISE FND_API.G_EXC_ERROR;
3023             WHEN OTHERS THEN
3024                NULL;
3025          END;
3026       ELSE
3027          IF (CSI_Instance_parties_vld_pvt.Is_Party_Rel_Comb_Exists
3028                   (l_alt_pk_instance_id              ,
3029                    l_alt_pk_pty_source_tab           ,
3030                    l_alt_pk_party_id                 ,
3031                    l_alt_pk_rel_type_code            ,
3032                    l_alt_pk_contact_flag             ,
3033                    p_party_rec.contact_ip_id         ,
3034                    TRUE           )) THEN
3035                RAISE FND_API.G_EXC_ERROR;
3036          END IF;
3037       END IF;
3038    END IF;
3039    --
3040    IF p_party_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
3041       IF (p_party_rec.relationship_type_code = 'OWNER' ) THEN
3042          update csi_item_instances
3043          set owner_party_source_table = l_alt_pk_pty_source_tab, --p_party_rec.party_source_table,--bug 2769176
3044          owner_party_id  = l_alt_pk_party_id, --p_party_rec.party_id, --bug 2769176
3045          last_update_date = sysdate,
3046          last_updated_by = fnd_global.user_id
3047          where  instance_id     = l_curr_party_rec.instance_id;
3048       END IF;
3049    END IF;
3050    -- A contact marked as 'Primary' can also be marked as 'Preferred' or
3051    -- 'Non-Preferred' at the same time.
3052    IF p_party_rec.preferred_flag IS NULL THEN
3053       p_party_rec.preferred_flag:='N';
3054    END IF;
3055    IF (p_party_rec.preferred_flag='E' OR
3056       p_party_rec.preferred_flag='e' )
3057    THEN
3058       p_party_rec.preferred_flag:='E';
3059    END IF;
3060    -- A contact marked as Primary cannot be marked as 'Excluded'
3061    IF (p_party_rec.primary_flag='Y' AND p_party_rec.preferred_flag='E') OR
3062       (p_party_rec.primary_flag=fnd_api.g_miss_char AND nvl(l_curr_party_rec.primary_flag,'N') = 'Y' AND
3063       p_party_rec.preferred_flag='E') OR
3064       (p_party_rec.preferred_flag=fnd_api.g_miss_char AND nvl(l_curr_party_rec.preferred_flag,'N') = 'E' AND
3065       p_party_rec.primary_flag='Y')
3066    THEN
3067       fnd_message.set_name('CSI','CSI_PRIMARY_PTY_EXC');
3068       fnd_msg_pub.Add;
3069       RAISE fnd_api.g_exc_error;
3070    END IF;
3071    -- Possible values for preferred flag are
3072    -- 'N','Y' and 'E'.
3073    IF p_party_rec.preferred_flag='Y' OR
3074       p_party_rec.preferred_flag='N' OR
3075       p_party_rec.preferred_flag='E' OR
3076       p_party_rec.preferred_flag=fnd_api.g_miss_char
3077    THEN
3078       NULL;
3079    ELSE
3080       fnd_message.set_name('CSI','CSI_PREFERRED_VALUES');
3081       fnd_message.set_token('PREFERRED_FLAG',p_party_rec.preferred_flag);
3082       fnd_msg_pub.Add;
3083       RAISE fnd_api.g_exc_error;
3084    END IF;
3085    -- Call table handlers to update the  table
3086    CSI_I_PARTIES_PKG.Update_Row
3087         (
3088           p_INSTANCE_PARTY_ID      =>  p_party_rec.instance_party_id,
3089           p_INSTANCE_ID            =>  p_party_rec.instance_id,
3090           p_PARTY_SOURCE_TABLE     =>  p_party_rec.PARTY_SOURCE_TABLE,
3091           p_PARTY_ID               =>  p_party_rec.PARTY_ID,
3092           p_RELATIONSHIP_TYPE_CODE =>  p_party_rec.RELATIONSHIP_TYPE_CODE,
3093           p_CONTACT_FLAG           =>  p_party_rec.CONTACT_FLAG,
3094           p_CONTACT_IP_ID          =>  p_party_rec.CONTACT_IP_ID,
3095           p_ACTIVE_START_DATE      =>  p_party_rec.ACTIVE_START_DATE,
3096           p_ACTIVE_END_DATE        =>  p_party_rec.ACTIVE_END_DATE,
3097           p_CONTEXT                =>  p_party_rec.CONTEXT,
3098           p_ATTRIBUTE1             =>  p_party_rec.ATTRIBUTE1,
3099           p_ATTRIBUTE2             =>  p_party_rec.ATTRIBUTE2,
3100           p_ATTRIBUTE3             =>  p_party_rec.ATTRIBUTE3,
3101           p_ATTRIBUTE4             =>  p_party_rec.ATTRIBUTE4,
3102           p_ATTRIBUTE5             =>  p_party_rec.ATTRIBUTE5,
3103           p_ATTRIBUTE6             =>  p_party_rec.ATTRIBUTE6,
3104           p_ATTRIBUTE7             =>  p_party_rec.ATTRIBUTE7,
3105           p_ATTRIBUTE8             =>  p_party_rec.ATTRIBUTE8,
3106           p_ATTRIBUTE9             =>  p_party_rec.ATTRIBUTE9,
3107           p_ATTRIBUTE10            =>  p_party_rec.ATTRIBUTE10,
3108           p_ATTRIBUTE11            =>  p_party_rec.ATTRIBUTE11,
3109           p_ATTRIBUTE12            =>  p_party_rec.ATTRIBUTE12,
3110           p_ATTRIBUTE13            =>  p_party_rec.ATTRIBUTE13,
3111           p_ATTRIBUTE14            =>  p_party_rec.ATTRIBUTE14,
3112           p_ATTRIBUTE15            =>  p_party_rec.ATTRIBUTE15,
3113           p_CREATED_BY             =>  FND_API.G_MISS_NUM, -- FND_GLOBAL.USER_ID,
3114           p_CREATION_DATE          =>  FND_API.G_MISS_DATE, -- sysdate,
3115           p_LAST_UPDATED_BY        =>  FND_GLOBAL.USER_ID,
3116           p_LAST_UPDATE_DATE       =>  sysdate,
3117           p_LAST_UPDATE_LOGIN      =>  FND_GLOBAL.LOGIN_ID,
3118           p_OBJECT_VERSION_NUMBER  =>  l_OBJECT_VERSION_NUMBER,
3119           p_PRIMARY_FLAG           =>  p_party_rec.PRIMARY_FLAG,
3120           p_PREFERRED_FLAG           =>  p_party_rec.PREFERRED_FLAG);
3121 
3122          -- Call create_transaction to create txn log
3123          CSI_TRANSACTIONS_PVT.Create_transaction
3124           (
3125              p_api_version            => p_api_version
3126             ,p_commit                 => p_commit
3127             ,p_init_msg_list          => p_init_msg_list
3128             ,p_validation_level       => p_validation_level
3129             ,p_Success_If_Exists_Flag => 'Y'
3130             ,P_transaction_rec        => p_txn_rec
3131             ,x_return_status          => x_return_status
3132             ,x_msg_count              => x_msg_count
3133             ,x_msg_data               => x_msg_data         );
3134 
3135          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
3136 	      l_msg_index := 1;
3137               l_msg_count := x_msg_count;
3138     	      WHILE l_msg_count > 0 LOOP
3139      		       x_msg_data := FND_MSG_PUB.GET(
3140     	       			                 l_msg_index,
3141 	     	  		                     FND_API.G_FALSE	);
3142 	               csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
3143 	    	       l_msg_index := l_msg_index + 1;
3144 		           l_msg_count := l_msg_count - 1;
3145 	      END LOOP;
3146               RAISE FND_API.G_EXC_ERROR;
3147          END IF;
3148 
3149        -- Get the full_dump_frequency from csi_install_parameter
3150        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
3151           csi_gen_utility_pvt.populate_install_param_rec;
3152        END IF;
3153        --
3154        l_full_dump_frequency := csi_datastructures_pub.g_install_param_rec.history_full_dump_frequency;
3155        --
3156        IF l_full_dump_frequency IS NULL THEN
3157           FND_MESSAGE.SET_NAME('CSI','CSI_API_GET_FULL_DUMP_FAILED');
3158           FND_MSG_PUB.ADD;
3159           RAISE FND_API.G_EXC_ERROR;
3160        END IF;
3161        -- Generate a unique instance_party_history_id from the sequence
3162        l_inst_party_his_id := CSI_Instance_parties_vld_pvt.gen_inst_party_hist_id;
3163 
3164 
3165        select mod(l_object_version_number,l_full_dump_frequency)
3166        into   l_mod_value
3167        from   dual;
3168 
3169        -- assign the party rec
3170        l_temp_party_rec := p_party_rec;
3171        -- Start of Changes for Bug#2547034 on 09/20/02 - rtalluri
3172        BEGIN
3173         SELECT  instance_party_history_id
3174         INTO    l_party_hist_id
3175         FROM    csi_i_parties_h h
3176         WHERE   h.transaction_id = p_txn_rec.transaction_id
3177         AND     h.instance_party_id = p_party_rec.instance_party_id;
3178 
3179         OPEN   pty_hist_csr(l_party_hist_id);
3180         FETCH  pty_hist_csr INTO l_pty_hist_csr ;
3181         CLOSE  pty_hist_csr;
3182 
3183         IF l_pty_hist_csr.full_dump_flag = 'Y'
3184         THEN
3185          CSI_I_PARTIES_H_PKG.update_Row
3186         (
3187          p_INSTANCE_PARTY_HISTORY_ID    =>  l_party_hist_id                    ,
3188          p_INSTANCE_PARTY_ID             => fnd_api.g_miss_num                 ,
3189          p_TRANSACTION_ID                => fnd_api.g_miss_num                 ,
3190          p_OLD_PARTY_SOURCE_TABLE        => fnd_api.g_miss_char                ,
3191          p_NEW_PARTY_SOURCE_TABLE        => l_temp_party_rec.PARTY_SOURCE_TABLE,
3192          p_OLD_PARTY_ID                  => fnd_api.g_miss_num                 ,
3193          p_NEW_PARTY_ID                  => l_temp_party_rec.PARTY_ID          ,
3194          p_OLD_RELATIONSHIP_TYPE_CODE    => fnd_api.g_miss_char                ,
3195          p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_rec.RELATIONSHIP_TYPE_CODE,
3196          p_OLD_CONTACT_FLAG              => fnd_api.g_miss_char                ,
3197          p_NEW_CONTACT_FLAG              => l_temp_party_rec.CONTACT_FLAG      ,
3198          p_OLD_CONTACT_IP_ID             => fnd_api.g_miss_num                 ,
3199          p_NEW_CONTACT_IP_ID             => l_temp_party_rec.CONTACT_IP_ID     ,
3200          p_OLD_ACTIVE_START_DATE         => l_curr_party_rec.ACTIVE_START_DATE ,
3201          p_NEW_ACTIVE_START_DATE         => l_temp_party_rec.ACTIVE_START_DATE ,
3202          p_OLD_ACTIVE_END_DATE           => l_curr_party_rec.ACTIVE_END_DATE   ,
3203          p_NEW_ACTIVE_END_DATE           => l_temp_party_rec.ACTIVE_END_DATE   ,
3204          p_OLD_CONTEXT                   => fnd_api.g_miss_char                ,
3205          p_NEW_CONTEXT                   => l_temp_party_rec.context           ,
3206          p_OLD_ATTRIBUTE1                => fnd_api.g_miss_char                ,
3207          p_NEW_ATTRIBUTE1                => l_temp_party_rec.ATTRIBUTE1        ,
3208          p_OLD_ATTRIBUTE2                => fnd_api.g_miss_char                ,
3209          p_NEW_ATTRIBUTE2                => l_temp_party_rec.ATTRIBUTE2        ,
3210          p_OLD_ATTRIBUTE3                => fnd_api.g_miss_char                ,
3211          p_NEW_ATTRIBUTE3                => l_temp_party_rec.ATTRIBUTE3        ,
3212          p_OLD_ATTRIBUTE4                => fnd_api.g_miss_char                ,
3213          p_NEW_ATTRIBUTE4                => l_temp_party_rec.ATTRIBUTE4        ,
3214          p_OLD_ATTRIBUTE5                => fnd_api.g_miss_char                ,
3215          p_NEW_ATTRIBUTE5                => l_temp_party_rec.ATTRIBUTE5        ,
3216          p_OLD_ATTRIBUTE6                => fnd_api.g_miss_char                ,
3217          p_NEW_ATTRIBUTE6                => l_temp_party_rec.ATTRIBUTE6        ,
3218          p_OLD_ATTRIBUTE7                => fnd_api.g_miss_char                ,
3219          p_NEW_ATTRIBUTE7                => l_temp_party_rec.ATTRIBUTE7        ,
3220          p_OLD_ATTRIBUTE8                => fnd_api.g_miss_char                ,
3221          p_NEW_ATTRIBUTE8                => l_temp_party_rec.ATTRIBUTE8        ,
3222          p_OLD_ATTRIBUTE9                => fnd_api.g_miss_char                ,
3223          p_NEW_ATTRIBUTE9                => l_temp_party_rec.ATTRIBUTE9        ,
3224          p_OLD_ATTRIBUTE10               => fnd_api.g_miss_char                ,
3225          p_NEW_ATTRIBUTE10               => l_temp_party_rec.ATTRIBUTE10       ,
3226          p_OLD_ATTRIBUTE11               => fnd_api.g_miss_char                ,
3227          p_NEW_ATTRIBUTE11               => l_temp_party_rec.ATTRIBUTE11       ,
3228          p_OLD_ATTRIBUTE12               => fnd_api.g_miss_char                ,
3229          p_NEW_ATTRIBUTE12               => l_temp_party_rec.ATTRIBUTE12       ,
3230          p_OLD_ATTRIBUTE13               => fnd_api.g_miss_char                ,
3231          p_NEW_ATTRIBUTE13               => l_temp_party_rec.ATTRIBUTE13       ,
3232          p_OLD_ATTRIBUTE14               => fnd_api.g_miss_char                ,
3233          p_NEW_ATTRIBUTE14               => l_temp_party_rec.ATTRIBUTE14       ,
3234          p_OLD_ATTRIBUTE15               => fnd_api.g_miss_char                ,
3235          p_NEW_ATTRIBUTE15               => l_temp_party_rec.ATTRIBUTE15       ,
3236          p_FULL_DUMP_FLAG                => fnd_api.g_miss_char                ,
3237          p_CREATED_BY                    => FND_API.G_MISS_NUM                 ,
3238          p_CREATION_DATE                 => FND_API.G_MISS_DATE                ,
3239          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                 ,
3240          p_LAST_UPDATE_DATE              => SYSDATE                            ,
3241          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID                ,
3242          p_OBJECT_VERSION_NUMBER         => fnd_api.g_miss_num                 ,
3243          p_OLD_PRIMARY_FLAG              => fnd_api.g_miss_char                ,
3244          p_NEW_PRIMARY_FLAG              => l_temp_party_rec.PRIMARY_FLAG      ,
3245          p_OLD_PREFERRED_FLAG            => fnd_api.g_miss_char                ,
3246          p_NEW_PREFERRED_FLAG            => l_temp_party_rec.PREFERRED_FLAG      );
3247 
3248         ELSE
3249 
3250              IF    ( l_pty_hist_csr.old_party_source_table IS NULL
3251                 AND  l_pty_hist_csr.new_party_source_table IS NULL ) THEN
3252                      IF  ( l_temp_party_rec.party_source_table = l_curr_party_rec.party_source_table )
3253                       OR ( l_temp_party_rec.party_source_table = fnd_api.g_miss_char ) THEN
3254                            l_pty_hist_csr.old_party_source_table := NULL;
3255                            l_pty_hist_csr.new_party_source_table := NULL;
3256                      ELSE
3257                            l_pty_hist_csr.old_party_source_table := fnd_api.g_miss_char;
3258                            l_pty_hist_csr.new_party_source_table := l_temp_party_rec.party_source_table;
3259                      END IF;
3260              ELSE
3261                      l_pty_hist_csr.old_party_source_table := fnd_api.g_miss_char;
3262                      l_pty_hist_csr.new_party_source_table := l_temp_party_rec.party_source_table;
3263              END IF;
3264              --
3265              IF    ( l_pty_hist_csr.old_party_id IS NULL
3266                 AND  l_pty_hist_csr.new_party_id IS NULL ) THEN
3267                      IF  ( l_temp_party_rec.party_id = l_curr_party_rec.party_id )
3268                       OR ( l_temp_party_rec.party_id = fnd_api.g_miss_num ) THEN
3269                            l_pty_hist_csr.old_party_id := NULL;
3270                            l_pty_hist_csr.new_party_id := NULL;
3271                      ELSE
3272                            l_pty_hist_csr.old_party_id := fnd_api.g_miss_num;
3273                            l_pty_hist_csr.new_party_id := l_temp_party_rec.party_id;
3274                      END IF;
3275              ELSE
3276                      l_pty_hist_csr.old_party_id := fnd_api.g_miss_num;
3277                      l_pty_hist_csr.new_party_id := l_temp_party_rec.party_id;
3278              END IF;
3279              --
3280              IF    ( l_pty_hist_csr.old_relationship_type_code IS NULL
3281                 AND  l_pty_hist_csr.new_relationship_type_code IS NULL ) THEN
3282                      IF  ( l_temp_party_rec.relationship_type_code = l_curr_party_rec.relationship_type_code )
3283                       OR ( l_temp_party_rec.relationship_type_code = fnd_api.g_miss_char ) THEN
3284                            l_pty_hist_csr.old_relationship_type_code := NULL;
3285                            l_pty_hist_csr.new_relationship_type_code := NULL;
3286                      ELSE
3287                            l_pty_hist_csr.old_relationship_type_code := fnd_api.g_miss_char;
3288                            l_pty_hist_csr.new_relationship_type_code := l_temp_party_rec.relationship_type_code;
3289                      END IF;
3290              ELSE
3291                      l_pty_hist_csr.old_relationship_type_code := fnd_api.g_miss_char;
3292                      l_pty_hist_csr.new_relationship_type_code := l_temp_party_rec.relationship_type_code;
3293              END IF;
3294              --
3295              IF    ( l_pty_hist_csr.old_contact_flag IS NULL
3296                 AND  l_pty_hist_csr.new_contact_flag IS NULL ) THEN
3297                      IF  ( l_temp_party_rec.contact_flag = l_curr_party_rec.contact_flag )
3298                       OR ( l_temp_party_rec.contact_flag = fnd_api.g_miss_char ) THEN
3299                            l_pty_hist_csr.old_contact_flag := NULL;
3300                            l_pty_hist_csr.new_contact_flag := NULL;
3301                      ELSE
3302                            l_pty_hist_csr.old_contact_flag := fnd_api.g_miss_char;
3303                            l_pty_hist_csr.new_contact_flag := l_temp_party_rec.contact_flag;
3304                      END IF;
3305              ELSE
3306                      l_pty_hist_csr.old_contact_flag := fnd_api.g_miss_char;
3307                      l_pty_hist_csr.new_contact_flag := l_temp_party_rec.contact_flag;
3308              END IF;
3309              --
3310              IF    ( l_pty_hist_csr.old_contact_ip_id IS NULL
3311                 AND  l_pty_hist_csr.new_contact_ip_id IS NULL ) THEN
3312                      IF  ( l_temp_party_rec.contact_ip_id = l_curr_party_rec.contact_ip_id )
3313                       OR ( l_temp_party_rec.contact_ip_id = fnd_api.g_miss_num ) THEN
3314                            l_pty_hist_csr.old_contact_ip_id := NULL;
3315                            l_pty_hist_csr.new_contact_ip_id := NULL;
3316                      ELSE
3317                            l_pty_hist_csr.old_contact_ip_id := fnd_api.g_miss_num;
3318                            l_pty_hist_csr.new_contact_ip_id := l_temp_party_rec.contact_ip_id;
3319                      END IF;
3320              ELSE
3321                      l_pty_hist_csr.old_contact_ip_id := fnd_api.g_miss_num;
3322                      l_pty_hist_csr.new_contact_ip_id := l_temp_party_rec.contact_ip_id;
3323              END IF;
3324              --
3325              IF    ( l_pty_hist_csr.old_active_start_date IS NULL
3326                 AND  l_pty_hist_csr.new_active_start_date IS NULL ) THEN
3327                      IF  ( l_temp_party_rec.active_start_date = l_curr_party_rec.active_start_date )
3328                       OR ( l_temp_party_rec.active_start_date = fnd_api.g_miss_date ) THEN
3329                            l_pty_hist_csr.old_active_start_date := NULL;
3330                            l_pty_hist_csr.new_active_start_date := NULL;
3331                      ELSE
3332                            l_pty_hist_csr.old_active_start_date := fnd_api.g_miss_date;
3333                            l_pty_hist_csr.new_active_start_date := l_temp_party_rec.active_start_date;
3334                      END IF;
3335              ELSE
3336                      l_pty_hist_csr.old_active_start_date := fnd_api.g_miss_date;
3337                      l_pty_hist_csr.new_active_start_date := l_temp_party_rec.active_start_date;
3338              END IF;
3339              --
3340              IF    ( l_pty_hist_csr.old_active_end_date IS NULL
3341                 AND  l_pty_hist_csr.new_active_end_date IS NULL ) THEN
3342                      IF  ( l_temp_party_rec.active_end_date = l_curr_party_rec.active_end_date )
3343                       OR ( l_temp_party_rec.active_end_date = fnd_api.g_miss_date ) THEN
3344                            l_pty_hist_csr.old_active_end_date := NULL;
3345                            l_pty_hist_csr.new_active_end_date := NULL;
3346                      ELSE
3347                            l_pty_hist_csr.old_active_end_date := fnd_api.g_miss_date;
3348                            l_pty_hist_csr.new_active_end_date := l_temp_party_rec.active_end_date;
3349                      END IF;
3350              ELSE
3351                      l_pty_hist_csr.old_active_end_date := fnd_api.g_miss_date;
3352                      l_pty_hist_csr.new_active_end_date := l_temp_party_rec.active_end_date;
3353              END IF;
3354              --
3355              IF    ( l_pty_hist_csr.old_context IS NULL
3356                 AND  l_pty_hist_csr.new_context IS NULL ) THEN
3357                      IF  ( l_temp_party_rec.context = l_curr_party_rec.context )
3358                       OR ( l_temp_party_rec.context = fnd_api.g_miss_char ) THEN
3359                            l_pty_hist_csr.old_context := NULL;
3360                            l_pty_hist_csr.new_context := NULL;
3361                      ELSE
3362                            l_pty_hist_csr.old_context := fnd_api.g_miss_char;
3363                            l_pty_hist_csr.new_context := l_temp_party_rec.context;
3364                      END IF;
3365              ELSE
3366                      l_pty_hist_csr.old_context := fnd_api.g_miss_char;
3367                      l_pty_hist_csr.new_context := l_temp_party_rec.context;
3368              END IF;
3369              --
3370              IF    ( l_pty_hist_csr.old_attribute1 IS NULL
3371                 AND  l_pty_hist_csr.new_attribute1 IS NULL ) THEN
3372                      IF  ( l_temp_party_rec.attribute1 = l_curr_party_rec.attribute1 )
3373                       OR ( l_temp_party_rec.attribute1 = fnd_api.g_miss_char ) THEN
3374                            l_pty_hist_csr.old_attribute1 := NULL;
3375                            l_pty_hist_csr.new_attribute1 := NULL;
3376                      ELSE
3377                            l_pty_hist_csr.old_attribute1 := fnd_api.g_miss_char;
3378                            l_pty_hist_csr.new_attribute1 := l_temp_party_rec.attribute1;
3379                      END IF;
3380              ELSE
3381                      l_pty_hist_csr.old_attribute1 := fnd_api.g_miss_char;
3382                      l_pty_hist_csr.new_attribute1 := l_temp_party_rec.attribute1;
3383              END IF;
3384              --
3385              IF    ( l_pty_hist_csr.old_attribute2 IS NULL
3386                 AND  l_pty_hist_csr.new_attribute2 IS NULL ) THEN
3387                      IF  ( l_temp_party_rec.attribute2 = l_curr_party_rec.attribute2 )
3388                       OR ( l_temp_party_rec.attribute2 = fnd_api.g_miss_char ) THEN
3389                            l_pty_hist_csr.old_attribute2 := NULL;
3390                            l_pty_hist_csr.new_attribute2 := NULL;
3391                      ELSE
3392                            l_pty_hist_csr.old_attribute2 := fnd_api.g_miss_char;
3393                            l_pty_hist_csr.new_attribute2 := l_temp_party_rec.attribute2;
3394                      END IF;
3395              ELSE
3396                      l_pty_hist_csr.old_attribute2 := fnd_api.g_miss_char;
3397                      l_pty_hist_csr.new_attribute2 := l_temp_party_rec.attribute2;
3398              END IF;
3399              --
3400              IF    ( l_pty_hist_csr.old_attribute3 IS NULL
3401                 AND  l_pty_hist_csr.new_attribute3 IS NULL ) THEN
3402                      IF  ( l_temp_party_rec.attribute3 = l_curr_party_rec.attribute3 )
3403                       OR ( l_temp_party_rec.attribute3 = fnd_api.g_miss_char ) THEN
3404                            l_pty_hist_csr.old_attribute3 := NULL;
3405                            l_pty_hist_csr.new_attribute3 := NULL;
3406                      ELSE
3407                            l_pty_hist_csr.old_attribute3 := fnd_api.g_miss_char;
3408                            l_pty_hist_csr.new_attribute3 := l_temp_party_rec.attribute3;
3409                      END IF;
3410              ELSE
3411                      l_pty_hist_csr.old_attribute3 := fnd_api.g_miss_char;
3412                      l_pty_hist_csr.new_attribute3 := l_temp_party_rec.attribute3;
3413              END IF;
3414              --
3415              IF    ( l_pty_hist_csr.old_attribute4 IS NULL
3416                 AND  l_pty_hist_csr.new_attribute4 IS NULL ) THEN
3417                      IF  ( l_temp_party_rec.attribute4 = l_curr_party_rec.attribute4 )
3418                       OR ( l_temp_party_rec.attribute4 = fnd_api.g_miss_char ) THEN
3419                            l_pty_hist_csr.old_attribute4 := NULL;
3420                            l_pty_hist_csr.new_attribute4 := NULL;
3421                      ELSE
3422                            l_pty_hist_csr.old_attribute4 := fnd_api.g_miss_char;
3423                            l_pty_hist_csr.new_attribute4 := l_temp_party_rec.attribute4;
3424                      END IF;
3425              ELSE
3426                      l_pty_hist_csr.old_attribute4 := fnd_api.g_miss_char;
3427                      l_pty_hist_csr.new_attribute4 := l_temp_party_rec.attribute4;
3428              END IF;
3429              --
3430              IF    ( l_pty_hist_csr.old_attribute5 IS NULL
3431                 AND  l_pty_hist_csr.new_attribute5 IS NULL ) THEN
3432                      IF  ( l_temp_party_rec.attribute5 = l_curr_party_rec.attribute5 )
3433                       OR ( l_temp_party_rec.attribute5 = fnd_api.g_miss_char ) THEN
3434                            l_pty_hist_csr.old_attribute5 := NULL;
3435                            l_pty_hist_csr.new_attribute5 := NULL;
3436                      ELSE
3437                            l_pty_hist_csr.old_attribute5 := fnd_api.g_miss_char;
3438                            l_pty_hist_csr.new_attribute5 := l_temp_party_rec.attribute5;
3439                      END IF;
3440              ELSE
3441                      l_pty_hist_csr.old_attribute5 := fnd_api.g_miss_char;
3442                      l_pty_hist_csr.new_attribute5 := l_temp_party_rec.attribute5;
3443              END IF;
3444              --
3445              IF    ( l_pty_hist_csr.old_attribute6 IS NULL
3446                 AND  l_pty_hist_csr.new_attribute6 IS NULL ) THEN
3447                      IF  ( l_temp_party_rec.attribute6 = l_curr_party_rec.attribute6 )
3448                       OR ( l_temp_party_rec.attribute6 = fnd_api.g_miss_char ) THEN
3449                            l_pty_hist_csr.old_attribute6 := NULL;
3450                            l_pty_hist_csr.new_attribute6 := NULL;
3451                      ELSE
3452                            l_pty_hist_csr.old_attribute6 := fnd_api.g_miss_char;
3453                            l_pty_hist_csr.new_attribute6 := l_temp_party_rec.attribute6;
3454                      END IF;
3455              ELSE
3456                      l_pty_hist_csr.old_attribute6 := fnd_api.g_miss_char;
3457                      l_pty_hist_csr.new_attribute6 := l_temp_party_rec.attribute6;
3458              END IF;
3459              --
3460              IF    ( l_pty_hist_csr.old_attribute7 IS NULL
3461                 AND  l_pty_hist_csr.new_attribute7 IS NULL ) THEN
3462                      IF  ( l_temp_party_rec.attribute7 = l_curr_party_rec.attribute7 )
3463                       OR ( l_temp_party_rec.attribute7 = fnd_api.g_miss_char ) THEN
3464                            l_pty_hist_csr.old_attribute7 := NULL;
3465                            l_pty_hist_csr.new_attribute7 := NULL;
3466                      ELSE
3467                            l_pty_hist_csr.old_attribute7 := fnd_api.g_miss_char;
3468                            l_pty_hist_csr.new_attribute7 := l_temp_party_rec.attribute7;
3469                      END IF;
3470              ELSE
3471                      l_pty_hist_csr.old_attribute7 := fnd_api.g_miss_char;
3472                      l_pty_hist_csr.new_attribute7 := l_temp_party_rec.attribute7;
3473              END IF;
3474              --
3475              IF    ( l_pty_hist_csr.old_attribute8 IS NULL
3476                 AND  l_pty_hist_csr.new_attribute8 IS NULL ) THEN
3477                      IF  ( l_temp_party_rec.attribute8 = l_curr_party_rec.attribute8 )
3478                       OR ( l_temp_party_rec.attribute8 = fnd_api.g_miss_char ) THEN
3479                            l_pty_hist_csr.old_attribute8 := NULL;
3480                            l_pty_hist_csr.new_attribute8 := NULL;
3481                      ELSE
3482                            l_pty_hist_csr.old_attribute8 := fnd_api.g_miss_char;
3483                            l_pty_hist_csr.new_attribute8 := l_temp_party_rec.attribute8;
3484                      END IF;
3485              ELSE
3486                      l_pty_hist_csr.old_attribute8 := fnd_api.g_miss_char;
3487                      l_pty_hist_csr.new_attribute8 := l_temp_party_rec.attribute8;
3488              END IF;
3489              --
3490              IF    ( l_pty_hist_csr.old_attribute9 IS NULL
3491                 AND  l_pty_hist_csr.new_attribute9 IS NULL ) THEN
3492                      IF  ( l_temp_party_rec.attribute9 = l_curr_party_rec.attribute9 )
3493                       OR ( l_temp_party_rec.attribute9 = fnd_api.g_miss_char ) THEN
3494                            l_pty_hist_csr.old_attribute9 := NULL;
3495                            l_pty_hist_csr.new_attribute9 := NULL;
3496                      ELSE
3497                            l_pty_hist_csr.old_attribute9 := fnd_api.g_miss_char;
3498                            l_pty_hist_csr.new_attribute9 := l_temp_party_rec.attribute9;
3499                      END IF;
3500              ELSE
3501                      l_pty_hist_csr.old_attribute9 := fnd_api.g_miss_char;
3502                      l_pty_hist_csr.new_attribute9 := l_temp_party_rec.attribute9;
3503              END IF;
3504              --
3505              IF    ( l_pty_hist_csr.old_attribute10 IS NULL
3506                 AND  l_pty_hist_csr.new_attribute10 IS NULL ) THEN
3507                      IF  ( l_temp_party_rec.attribute10 = l_curr_party_rec.attribute10 )
3508                       OR ( l_temp_party_rec.attribute10 = fnd_api.g_miss_char ) THEN
3509                            l_pty_hist_csr.old_attribute10 := NULL;
3510                            l_pty_hist_csr.new_attribute10 := NULL;
3511                      ELSE
3512                            l_pty_hist_csr.old_attribute10 := fnd_api.g_miss_char;
3513                            l_pty_hist_csr.new_attribute10 := l_temp_party_rec.attribute10;
3514                      END IF;
3515              ELSE
3516                      l_pty_hist_csr.old_attribute10 := fnd_api.g_miss_char;
3517                      l_pty_hist_csr.new_attribute10 := l_temp_party_rec.attribute10;
3518              END IF;
3519              --
3520              IF    ( l_pty_hist_csr.old_attribute11 IS NULL
3521                 AND  l_pty_hist_csr.new_attribute11 IS NULL ) THEN
3522                      IF  ( l_temp_party_rec.attribute11 = l_curr_party_rec.attribute11 )
3523                       OR ( l_temp_party_rec.attribute11 = fnd_api.g_miss_char ) THEN
3524                            l_pty_hist_csr.old_attribute11 := NULL;
3525                            l_pty_hist_csr.new_attribute11 := NULL;
3526                      ELSE
3527                            l_pty_hist_csr.old_attribute11 := fnd_api.g_miss_char;
3528                            l_pty_hist_csr.new_attribute11 := l_temp_party_rec.attribute11;
3529                      END IF;
3530              ELSE
3531                      l_pty_hist_csr.old_attribute11 := fnd_api.g_miss_char;
3532                      l_pty_hist_csr.new_attribute11 := l_temp_party_rec.attribute11;
3533              END IF;
3534              --
3535              IF    ( l_pty_hist_csr.old_attribute12 IS NULL
3536                 AND  l_pty_hist_csr.new_attribute12 IS NULL ) THEN
3537                      IF  ( l_temp_party_rec.attribute12 = l_curr_party_rec.attribute12 )
3538                       OR ( l_temp_party_rec.attribute12 = fnd_api.g_miss_char ) THEN
3539                            l_pty_hist_csr.old_attribute12 := NULL;
3540                            l_pty_hist_csr.new_attribute12 := NULL;
3541                      ELSE
3542                            l_pty_hist_csr.old_attribute12 := fnd_api.g_miss_char;
3543                            l_pty_hist_csr.new_attribute12 := l_temp_party_rec.attribute12;
3544                      END IF;
3545              ELSE
3546                      l_pty_hist_csr.old_attribute12 := fnd_api.g_miss_char;
3547                      l_pty_hist_csr.new_attribute12 := l_temp_party_rec.attribute12;
3548              END IF;
3549              --
3550              IF    ( l_pty_hist_csr.old_attribute13 IS NULL
3551                 AND  l_pty_hist_csr.new_attribute13 IS NULL ) THEN
3552                      IF  ( l_temp_party_rec.attribute13 = l_curr_party_rec.attribute13 )
3553                       OR ( l_temp_party_rec.attribute13 = fnd_api.g_miss_char ) THEN
3554                            l_pty_hist_csr.old_attribute13 := NULL;
3555                            l_pty_hist_csr.new_attribute13 := NULL;
3556                      ELSE
3557                            l_pty_hist_csr.old_attribute13 := fnd_api.g_miss_char;
3558                            l_pty_hist_csr.new_attribute13 := l_temp_party_rec.attribute13;
3559                      END IF;
3560              ELSE
3561                      l_pty_hist_csr.old_attribute13 := fnd_api.g_miss_char;
3562                      l_pty_hist_csr.new_attribute13 := l_temp_party_rec.attribute13;
3563              END IF;
3564              --
3565              IF    ( l_pty_hist_csr.old_attribute14 IS NULL
3566                 AND  l_pty_hist_csr.new_attribute14 IS NULL ) THEN
3567                      IF  ( l_temp_party_rec.attribute14 = l_curr_party_rec.attribute14 )
3568                       OR ( l_temp_party_rec.attribute14 = fnd_api.g_miss_char ) THEN
3569                            l_pty_hist_csr.old_attribute14 := NULL;
3570                            l_pty_hist_csr.new_attribute14 := NULL;
3571                      ELSE
3572                            l_pty_hist_csr.old_attribute14 := fnd_api.g_miss_char;
3573                            l_pty_hist_csr.new_attribute14 := l_temp_party_rec.attribute14;
3574                      END IF;
3575              ELSE
3576                      l_pty_hist_csr.old_attribute14 := fnd_api.g_miss_char;
3577                      l_pty_hist_csr.new_attribute14 := l_temp_party_rec.attribute14;
3578              END IF;
3579              --
3580              IF    ( l_pty_hist_csr.old_attribute15 IS NULL
3581                 AND  l_pty_hist_csr.new_attribute15 IS NULL ) THEN
3582                      IF  ( l_temp_party_rec.attribute15 = l_curr_party_rec.attribute15 )
3583                       OR ( l_temp_party_rec.attribute15 = fnd_api.g_miss_char ) THEN
3584                            l_pty_hist_csr.old_attribute15 := NULL;
3585                            l_pty_hist_csr.new_attribute15 := NULL;
3586                      ELSE
3587                            l_pty_hist_csr.old_attribute15 := fnd_api.g_miss_char;
3588                            l_pty_hist_csr.new_attribute15 := l_temp_party_rec.attribute15;
3589                      END IF;
3590              ELSE
3591                      l_pty_hist_csr.old_attribute15 := fnd_api.g_miss_char;
3592                      l_pty_hist_csr.new_attribute15 := l_temp_party_rec.attribute15;
3593              END IF;
3594              --
3595              IF    ( l_pty_hist_csr.old_primary_flag IS NULL
3596                 AND  l_pty_hist_csr.new_primary_flag IS NULL ) THEN
3597                      IF  ( l_temp_party_rec.primary_flag = l_curr_party_rec.primary_flag )
3598                       OR ( l_temp_party_rec.primary_flag = fnd_api.g_miss_char ) THEN
3599                            l_pty_hist_csr.old_primary_flag := NULL;
3600                            l_pty_hist_csr.new_primary_flag := NULL;
3601                      ELSE
3602                            l_pty_hist_csr.old_primary_flag := fnd_api.g_miss_char;
3603                            l_pty_hist_csr.new_primary_flag := l_temp_party_rec.primary_flag;
3604                      END IF;
3605              ELSE
3606                      l_pty_hist_csr.old_primary_flag := fnd_api.g_miss_char;
3607                      l_pty_hist_csr.new_primary_flag := l_temp_party_rec.primary_flag;
3608              END IF;
3609              --
3610              IF    ( l_pty_hist_csr.old_preferred_flag IS NULL
3611                 AND  l_pty_hist_csr.new_preferred_flag IS NULL ) THEN
3612                      IF  ( l_temp_party_rec.preferred_flag = l_curr_party_rec.preferred_flag )
3613                       OR ( l_temp_party_rec.preferred_flag = fnd_api.g_miss_char ) THEN
3614                            l_pty_hist_csr.old_preferred_flag := NULL;
3615                            l_pty_hist_csr.new_preferred_flag := NULL;
3616                      ELSE
3617                            l_pty_hist_csr.old_preferred_flag := fnd_api.g_miss_char;
3618                            l_pty_hist_csr.new_preferred_flag := l_temp_party_rec.preferred_flag;
3619                      END IF;
3620              ELSE
3621                      l_pty_hist_csr.old_preferred_flag := fnd_api.g_miss_char;
3622                      l_pty_hist_csr.new_preferred_flag := l_temp_party_rec.preferred_flag;
3623              END IF;
3624 
3625          CSI_I_PARTIES_H_PKG.update_Row
3626         (
3627          p_INSTANCE_PARTY_HISTORY_ID     => l_party_hist_id ,
3628          p_INSTANCE_PARTY_ID             => FND_API.G_MISS_NUM ,
3629          p_TRANSACTION_ID                => FND_API.G_MISS_NUM ,
3630          p_OLD_PARTY_SOURCE_TABLE        => l_pty_hist_csr.OLD_PARTY_SOURCE_TABLE ,
3631          p_NEW_PARTY_SOURCE_TABLE        => l_pty_hist_csr.NEW_PARTY_SOURCE_TABLE ,
3632          p_OLD_PARTY_ID                  => l_pty_hist_csr.OLD_PARTY_ID ,
3633          p_NEW_PARTY_ID                  => l_pty_hist_csr.NEW_PARTY_ID ,
3634          p_OLD_RELATIONSHIP_TYPE_CODE    => l_pty_hist_csr.OLD_RELATIONSHIP_TYPE_CODE ,
3635          p_NEW_RELATIONSHIP_TYPE_CODE    => l_pty_hist_csr.NEW_RELATIONSHIP_TYPE_CODE ,
3636          p_OLD_CONTACT_FLAG              => l_pty_hist_csr.OLD_CONTACT_FLAG ,
3637          p_NEW_CONTACT_FLAG              => l_pty_hist_csr.NEW_CONTACT_FLAG ,
3638          p_OLD_CONTACT_IP_ID             => l_pty_hist_csr.OLD_CONTACT_IP_ID ,
3639          p_NEW_CONTACT_IP_ID             => l_pty_hist_csr.NEW_CONTACT_IP_ID ,
3640          p_OLD_ACTIVE_START_DATE         => l_pty_hist_csr.OLD_ACTIVE_START_DATE ,
3641          p_NEW_ACTIVE_START_DATE         => l_pty_hist_csr.NEW_ACTIVE_START_DATE ,
3642          p_OLD_ACTIVE_END_DATE           => l_pty_hist_csr.OLD_ACTIVE_END_DATE ,
3643          p_NEW_ACTIVE_END_DATE           => l_pty_hist_csr.NEW_ACTIVE_END_DATE ,
3644          p_OLD_CONTEXT                   => l_pty_hist_csr.OLD_CONTEXT ,
3645          p_NEW_CONTEXT                   => l_pty_hist_csr.NEW_CONTEXT ,
3646          p_OLD_ATTRIBUTE1                => l_pty_hist_csr.OLD_ATTRIBUTE1 ,
3647          p_NEW_ATTRIBUTE1                => l_pty_hist_csr.NEW_ATTRIBUTE1 ,
3648          p_OLD_ATTRIBUTE2                => l_pty_hist_csr.OLD_ATTRIBUTE2 ,
3649          p_NEW_ATTRIBUTE2                => l_pty_hist_csr.NEW_ATTRIBUTE2 ,
3650          p_OLD_ATTRIBUTE3                => l_pty_hist_csr.OLD_ATTRIBUTE3 ,
3651          p_NEW_ATTRIBUTE3                => l_pty_hist_csr.NEW_ATTRIBUTE3 ,
3652          p_OLD_ATTRIBUTE4                => l_pty_hist_csr.OLD_ATTRIBUTE4 ,
3653          p_NEW_ATTRIBUTE4                => l_pty_hist_csr.NEW_ATTRIBUTE4 ,
3654          p_OLD_ATTRIBUTE5                => l_pty_hist_csr.OLD_ATTRIBUTE5 ,
3655          p_NEW_ATTRIBUTE5                => l_pty_hist_csr.NEW_ATTRIBUTE5 ,
3656          p_OLD_ATTRIBUTE6                => l_pty_hist_csr.OLD_ATTRIBUTE6 ,
3657          p_NEW_ATTRIBUTE6                => l_pty_hist_csr.NEW_ATTRIBUTE6 ,
3658          p_OLD_ATTRIBUTE7                => l_pty_hist_csr.OLD_ATTRIBUTE7 ,
3659          p_NEW_ATTRIBUTE7                => l_pty_hist_csr.NEW_ATTRIBUTE7 ,
3660          p_OLD_ATTRIBUTE8                => l_pty_hist_csr.OLD_ATTRIBUTE8 ,
3661          p_NEW_ATTRIBUTE8                => l_pty_hist_csr.NEW_ATTRIBUTE8 ,
3662          p_OLD_ATTRIBUTE9                => l_pty_hist_csr.OLD_ATTRIBUTE9 ,
3663          p_NEW_ATTRIBUTE9                => l_pty_hist_csr.NEW_ATTRIBUTE9 ,
3664          p_OLD_ATTRIBUTE10               => l_pty_hist_csr.OLD_ATTRIBUTE10 ,
3665          p_NEW_ATTRIBUTE10               => l_pty_hist_csr.NEW_ATTRIBUTE10 ,
3666          p_OLD_ATTRIBUTE11               => l_pty_hist_csr.OLD_ATTRIBUTE11 ,
3667          p_NEW_ATTRIBUTE11               => l_pty_hist_csr.NEW_ATTRIBUTE11 ,
3668          p_OLD_ATTRIBUTE12               => l_pty_hist_csr.OLD_ATTRIBUTE12 ,
3669          p_NEW_ATTRIBUTE12               => l_pty_hist_csr.NEW_ATTRIBUTE12 ,
3670          p_OLD_ATTRIBUTE13               => l_pty_hist_csr.OLD_ATTRIBUTE13 ,
3671          p_NEW_ATTRIBUTE13               => l_pty_hist_csr.NEW_ATTRIBUTE13 ,
3672          p_OLD_ATTRIBUTE14               => l_pty_hist_csr.OLD_ATTRIBUTE14 ,
3673          p_NEW_ATTRIBUTE14               => l_pty_hist_csr.NEW_ATTRIBUTE14 ,
3674          p_OLD_ATTRIBUTE15               => l_pty_hist_csr.OLD_ATTRIBUTE15 ,
3675          p_NEW_ATTRIBUTE15               => l_pty_hist_csr.NEW_ATTRIBUTE15 ,
3676          p_FULL_DUMP_FLAG                => FND_API.G_MISS_CHAR ,
3677          p_CREATED_BY                    => FND_API.G_MISS_NUM ,
3678          p_CREATION_DATE                 => FND_API.G_MISS_DATE ,
3679          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID ,
3680          p_LAST_UPDATE_DATE              => SYSDATE ,
3681          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID ,
3682          p_OBJECT_VERSION_NUMBER         => FND_API.G_MISS_NUM ,
3683          p_OLD_PRIMARY_FLAG              => l_pty_hist_csr.OLD_CONTACT_FLAG ,
3684          p_NEW_PRIMARY_FLAG              => l_pty_hist_csr.NEW_PRIMARY_FLAG ,
3685          p_OLD_PREFERRED_FLAG            => l_pty_hist_csr.OLD_CONTACT_FLAG ,
3686          p_NEW_PREFERRED_FLAG            => l_pty_hist_csr.NEW_PREFERRED_FLAG );
3687 
3688         END IF;
3689      EXCEPTION
3690 
3691        WHEN NO_DATA_FOUND THEN
3692         IF (l_mod_value = 0) THEN
3693           -- If the mod value is 0 then dump all the columns both changed and unchanged
3694           -- changed columns have old and new values while the unchanged values have old and new values
3695           -- exactly same
3696           IF (p_party_rec.PARTY_SOURCE_TABLE = FND_API.G_MISS_CHAR) THEN
3697               l_temp_party_rec.PARTY_SOURCE_TABLE := l_curr_party_rec.PARTY_SOURCE_TABLE;
3698           END IF;
3699           IF (p_party_rec.PARTY_ID = FND_API.G_MISS_NUM) THEN
3700               l_temp_party_rec.PARTY_ID := l_curr_party_rec.PARTY_ID ;
3701           END IF;
3702           IF (p_party_rec.RELATIONSHIP_TYPE_CODE = FND_API.G_MISS_CHAR) THEN
3703               l_temp_party_rec.RELATIONSHIP_TYPE_CODE := l_curr_party_rec.RELATIONSHIP_TYPE_CODE ;
3704           END IF;
3705           IF (p_party_rec.CONTACT_FLAG = FND_API.G_MISS_CHAR) THEN
3706               l_temp_party_rec.CONTACT_FLAG := l_curr_party_rec.CONTACT_FLAG ;
3707           END IF;
3708           IF (p_party_rec.CONTACT_IP_ID = FND_API.G_MISS_NUM) THEN
3709               l_temp_party_rec.CONTACT_IP_ID := l_curr_party_rec.CONTACT_IP_ID ;
3710           END IF;
3711           IF (p_party_rec.ACTIVE_START_DATE = FND_API.G_MISS_DATE) THEN
3712               l_temp_party_rec.ACTIVE_START_DATE := l_curr_party_rec.ACTIVE_START_DATE ;
3713           END IF;
3714           IF  (p_party_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE) THEN
3715               l_temp_party_rec.ACTIVE_END_DATE := l_curr_party_rec.ACTIVE_END_DATE ;
3716           END IF;
3717           IF  (p_party_rec.context = FND_API.G_MISS_CHAR) THEN
3718               l_temp_party_rec.CONTEXT := l_curr_party_rec.CONTEXT ;
3719           END IF;
3720           IF  (p_party_rec.ATTRIBUTE1 = FND_API.G_MISS_CHAR) THEN
3721               l_temp_party_rec.ATTRIBUTE1 := l_curr_party_rec.ATTRIBUTE1 ;
3722           END IF;
3723           IF  (p_party_rec.ATTRIBUTE2 = FND_API.G_MISS_CHAR) THEN
3724               l_temp_party_rec.ATTRIBUTE2 := l_curr_party_rec.ATTRIBUTE2 ;
3725           END IF;
3726           IF  (p_party_rec.ATTRIBUTE3 = FND_API.G_MISS_CHAR) THEN
3727               l_temp_party_rec.ATTRIBUTE3 := l_curr_party_rec.ATTRIBUTE3 ;
3728           END IF;
3729           IF  (p_party_rec.ATTRIBUTE4 = FND_API.G_MISS_CHAR) THEN
3730               l_temp_party_rec.ATTRIBUTE4 := l_curr_party_rec.ATTRIBUTE4 ;
3731           END IF;
3732           IF  (p_party_rec.ATTRIBUTE5 = FND_API.G_MISS_CHAR) THEN
3733               l_temp_party_rec.ATTRIBUTE5 := l_curr_party_rec.ATTRIBUTE5 ;
3734           END IF;
3735           IF  (p_party_rec.ATTRIBUTE6 = FND_API.G_MISS_CHAR) THEN
3736               l_temp_party_rec.ATTRIBUTE6 := l_curr_party_rec.ATTRIBUTE6 ;
3737           END IF;
3738           IF  (p_party_rec.ATTRIBUTE7 = FND_API.G_MISS_CHAR) THEN
3739               l_temp_party_rec.ATTRIBUTE7 := l_curr_party_rec.ATTRIBUTE7 ;
3740           END IF;
3741           IF  (p_party_rec.ATTRIBUTE8 = FND_API.G_MISS_CHAR) THEN
3742               l_temp_party_rec.ATTRIBUTE8 := l_curr_party_rec.ATTRIBUTE8 ;
3743           END IF;
3744           IF  (p_party_rec.ATTRIBUTE9 = FND_API.G_MISS_CHAR) THEN
3745               l_temp_party_rec.ATTRIBUTE9 := l_curr_party_rec.ATTRIBUTE9 ;
3746           END IF;
3747           IF  (p_party_rec.ATTRIBUTE10 = FND_API.G_MISS_CHAR) THEN
3748               l_temp_party_rec.ATTRIBUTE10 := l_curr_party_rec.ATTRIBUTE10 ;
3749           END IF;
3750           IF  (p_party_rec.ATTRIBUTE11 = FND_API.G_MISS_CHAR) THEN
3751               l_temp_party_rec.ATTRIBUTE11 := l_curr_party_rec.ATTRIBUTE11 ;
3752           END IF;
3753           IF  (p_party_rec.ATTRIBUTE12 = FND_API.G_MISS_CHAR) THEN
3754               l_temp_party_rec.ATTRIBUTE12 := l_curr_party_rec.ATTRIBUTE12 ;
3755           END IF;
3756           IF  (p_party_rec.ATTRIBUTE13 = FND_API.G_MISS_CHAR) THEN
3757               l_temp_party_rec.ATTRIBUTE13 := l_curr_party_rec.ATTRIBUTE13 ;
3758           END IF;
3759           IF  (p_party_rec.ATTRIBUTE14 = FND_API.G_MISS_CHAR) THEN
3760               l_temp_party_rec.ATTRIBUTE14 := l_curr_party_rec.ATTRIBUTE14 ;
3761           END IF;
3762           IF  (p_party_rec.ATTRIBUTE15 = FND_API.G_MISS_CHAR) THEN
3763               l_temp_party_rec.ATTRIBUTE15 := l_curr_party_rec.ATTRIBUTE15 ;
3764           END IF;
3765           IF (p_party_rec.PRIMARY_FLAG = FND_API.G_MISS_CHAR) THEN
3766               l_temp_party_rec.PRIMARY_FLAG := l_curr_party_rec.PRIMARY_FLAG ;
3767           END IF;
3768           IF (p_party_rec.PREFERRED_FLAG = FND_API.G_MISS_CHAR) THEN
3769               l_temp_party_rec.PREFERRED_FLAG := l_curr_party_rec.PREFERRED_FLAG ;
3770           END IF;
3771 
3772         -- Call table handlers to insert into csi_i_parties_h table
3773         CSI_I_PARTIES_H_PKG.Insert_Row
3774         (
3775          px_INSTANCE_PARTY_HISTORY_ID    => l_inst_party_his_id                ,
3776          p_INSTANCE_PARTY_ID             => p_party_rec.INSTANCE_PARTY_ID      ,
3777          p_TRANSACTION_ID                => p_txn_rec.TRANSACTION_ID           ,
3778          p_OLD_PARTY_SOURCE_TABLE        => l_curr_party_rec.PARTY_SOURCE_TABLE,
3779          p_NEW_PARTY_SOURCE_TABLE        => l_temp_party_rec.PARTY_SOURCE_TABLE,
3780          p_OLD_PARTY_ID                  => l_curr_party_rec.PARTY_ID          ,
3781          p_NEW_PARTY_ID                  => l_temp_party_rec.PARTY_ID          ,
3782          p_OLD_RELATIONSHIP_TYPE_CODE    => l_curr_party_rec.RELATIONSHIP_TYPE_CODE,
3783          p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_rec.RELATIONSHIP_TYPE_CODE,
3784          p_OLD_CONTACT_FLAG              => l_curr_party_rec.CONTACT_FLAG     ,
3785          p_NEW_CONTACT_FLAG              => l_temp_party_rec.CONTACT_FLAG     ,
3786          p_OLD_CONTACT_IP_ID             => l_curr_party_rec.CONTACT_IP_ID    ,
3787          p_NEW_CONTACT_IP_ID             => l_temp_party_rec.CONTACT_IP_ID    ,
3788          p_OLD_ACTIVE_START_DATE         => l_curr_party_rec.ACTIVE_START_DATE,
3789          p_NEW_ACTIVE_START_DATE         => l_temp_party_rec.ACTIVE_START_DATE,
3790          p_OLD_ACTIVE_END_DATE           => l_curr_party_rec.ACTIVE_END_DATE  ,
3791          p_NEW_ACTIVE_END_DATE           => l_temp_party_rec.ACTIVE_END_DATE  ,
3792          p_OLD_CONTEXT                   => l_curr_party_rec.context          ,
3793          p_NEW_CONTEXT                   => l_temp_party_rec.context          ,
3794          p_OLD_ATTRIBUTE1                => l_curr_party_rec.ATTRIBUTE1       ,
3795          p_NEW_ATTRIBUTE1                => l_temp_party_rec.ATTRIBUTE1       ,
3796          p_OLD_ATTRIBUTE2                => l_curr_party_rec.ATTRIBUTE2       ,
3797          p_NEW_ATTRIBUTE2                => l_temp_party_rec.ATTRIBUTE2       ,
3798          p_OLD_ATTRIBUTE3                => l_curr_party_rec.ATTRIBUTE3       ,
3799          p_NEW_ATTRIBUTE3                => l_temp_party_rec.ATTRIBUTE3       ,
3800          p_OLD_ATTRIBUTE4                => l_curr_party_rec.ATTRIBUTE4       ,
3801          p_NEW_ATTRIBUTE4                => l_temp_party_rec.ATTRIBUTE4       ,
3802          p_OLD_ATTRIBUTE5                => l_curr_party_rec.ATTRIBUTE5       ,
3803          p_NEW_ATTRIBUTE5                => l_temp_party_rec.ATTRIBUTE5       ,
3804          p_OLD_ATTRIBUTE6                => l_curr_party_rec.ATTRIBUTE6       ,
3805          p_NEW_ATTRIBUTE6                => l_temp_party_rec.ATTRIBUTE6       ,
3806          p_OLD_ATTRIBUTE7                => l_curr_party_rec.ATTRIBUTE7       ,
3807          p_NEW_ATTRIBUTE7                => l_temp_party_rec.ATTRIBUTE7       ,
3808          p_OLD_ATTRIBUTE8                => l_curr_party_rec.ATTRIBUTE8       ,
3809          p_NEW_ATTRIBUTE8                => l_temp_party_rec.ATTRIBUTE8       ,
3810          p_OLD_ATTRIBUTE9                => l_curr_party_rec.ATTRIBUTE9       ,
3811          p_NEW_ATTRIBUTE9                => l_temp_party_rec.ATTRIBUTE9       ,
3812          p_OLD_ATTRIBUTE10               => l_curr_party_rec.ATTRIBUTE10      ,
3813          p_NEW_ATTRIBUTE10               => l_temp_party_rec.ATTRIBUTE10      ,
3814          p_OLD_ATTRIBUTE11               => l_curr_party_rec.ATTRIBUTE11      ,
3815          p_NEW_ATTRIBUTE11               => l_temp_party_rec.ATTRIBUTE11      ,
3816          p_OLD_ATTRIBUTE12               => l_curr_party_rec.ATTRIBUTE12      ,
3817          p_NEW_ATTRIBUTE12               => l_temp_party_rec.ATTRIBUTE12      ,
3818          p_OLD_ATTRIBUTE13               => l_curr_party_rec.ATTRIBUTE13      ,
3819          p_NEW_ATTRIBUTE13               => l_temp_party_rec.ATTRIBUTE13      ,
3820          p_OLD_ATTRIBUTE14               => l_curr_party_rec.ATTRIBUTE14      ,
3821          p_NEW_ATTRIBUTE14               => l_temp_party_rec.ATTRIBUTE14      ,
3822          p_OLD_ATTRIBUTE15               => l_curr_party_rec.ATTRIBUTE15      ,
3823          p_NEW_ATTRIBUTE15               => l_temp_party_rec.ATTRIBUTE15      ,
3824          p_FULL_DUMP_FLAG                => 'Y'                               ,
3825          p_CREATED_BY                    => FND_GLOBAL.USER_ID                ,
3826          p_CREATION_DATE                 => SYSDATE                           ,
3827          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                ,
3828          p_LAST_UPDATE_DATE              => SYSDATE                           ,
3829          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID               ,
3830          p_OBJECT_VERSION_NUMBER         => 1                                 ,
3831          p_OLD_PRIMARY_FLAG              => l_curr_party_rec.PRIMARY_FLAG     ,
3832          p_NEW_PRIMARY_FLAG              => l_temp_party_rec.PRIMARY_FLAG     ,
3833          p_OLD_PREFERRED_FLAG            => l_curr_party_rec.PREFERRED_FLAG   ,
3834          p_NEW_PREFERRED_FLAG            => l_temp_party_rec.PREFERRED_FLAG     );
3835        ELSE
3836 
3837           -- If the mod value is not equal to zero then dump only the changed columns
3838           -- while the unchanged values have old and new values as null
3839            IF (p_party_rec.party_source_table = fnd_api.g_miss_char) OR
3840                NVL(p_party_rec.party_source_table, fnd_api.g_miss_char) = NVL(l_curr_party_rec.party_source_table, fnd_api.g_miss_char) THEN
3841                 l_party_hist_rec.old_party_source_table := NULL;
3842                 l_party_hist_rec.new_party_source_table := NULL;
3843            ELSIF
3844               NVL(l_curr_party_rec.party_source_table,fnd_api.g_miss_char) <> NVL(p_party_rec.party_source_table,fnd_api.g_miss_char) THEN
3845                 l_party_hist_rec.old_party_source_table := l_curr_party_rec.party_source_table ;
3846                 l_party_hist_rec.new_party_source_table := p_party_rec.party_source_table ;
3847            END IF;
3848            --
3849            IF (p_party_rec.party_id = fnd_api.g_miss_num) OR
3850                NVL(p_party_rec.party_id, fnd_api.g_miss_num) = NVL(l_curr_party_rec.party_id, fnd_api.g_miss_num) THEN
3851                 l_party_hist_rec.old_party_id := NULL;
3852                 l_party_hist_rec.new_party_id := NULL;
3853            ELSIF
3854               NVL(l_curr_party_rec.party_id,fnd_api.g_miss_num) <> NVL(p_party_rec.party_id,fnd_api.g_miss_num) THEN
3855                 l_party_hist_rec.old_party_id := l_curr_party_rec.party_id ;
3856                 l_party_hist_rec.new_party_id := p_party_rec.party_id ;
3857            END IF;
3858            --
3859            IF (p_party_rec.relationship_type_code = fnd_api.g_miss_char) OR
3860                NVL(p_party_rec.relationship_type_code, fnd_api.g_miss_char) = NVL(l_curr_party_rec.relationship_type_code, fnd_api.g_miss_char) THEN
3861                 l_party_hist_rec.old_relationship_type_code := NULL;
3862                 l_party_hist_rec.new_relationship_type_code := NULL;
3863            ELSIF
3864               NVL(l_curr_party_rec.relationship_type_code,fnd_api.g_miss_char) <> NVL(p_party_rec.relationship_type_code,fnd_api.g_miss_char) THEN
3865                 l_party_hist_rec.old_relationship_type_code := l_curr_party_rec.relationship_type_code ;
3866                 l_party_hist_rec.new_relationship_type_code := p_party_rec.relationship_type_code ;
3867            END IF;
3868            --
3869            IF (p_party_rec.contact_flag = fnd_api.g_miss_char) OR
3870                NVL(p_party_rec.contact_flag, fnd_api.g_miss_char) = NVL(l_curr_party_rec.contact_flag, fnd_api.g_miss_char) THEN
3871                 l_party_hist_rec.old_contact_flag := NULL;
3872                 l_party_hist_rec.new_contact_flag := NULL;
3873            ELSIF
3874               NVL(l_curr_party_rec.contact_flag,fnd_api.g_miss_char) <> NVL(p_party_rec.contact_flag,fnd_api.g_miss_char) THEN
3875                 l_party_hist_rec.old_contact_flag := l_curr_party_rec.contact_flag ;
3876                 l_party_hist_rec.new_contact_flag := p_party_rec.contact_flag ;
3877            END IF;
3878            --
3879            IF (p_party_rec.contact_ip_id = fnd_api.g_miss_num) OR
3880                NVL(p_party_rec.contact_ip_id, fnd_api.g_miss_num) = NVL(l_curr_party_rec.contact_ip_id, fnd_api.g_miss_num) THEN
3881                 l_party_hist_rec.old_contact_ip_id := NULL;
3882                 l_party_hist_rec.new_contact_ip_id := NULL;
3883            ELSIF
3884               NVL(l_curr_party_rec.contact_ip_id,fnd_api.g_miss_num) <> NVL(p_party_rec.contact_ip_id,fnd_api.g_miss_num) THEN
3885                 l_party_hist_rec.old_contact_ip_id := l_curr_party_rec.contact_ip_id ;
3886                 l_party_hist_rec.new_contact_ip_id := p_party_rec.contact_ip_id ;
3887            END IF;
3888            --
3889            IF (p_party_rec.active_start_date = fnd_api.g_miss_date) OR
3890                NVL(p_party_rec.active_start_date, fnd_api.g_miss_date) = NVL(l_curr_party_rec.active_start_date, fnd_api.g_miss_date) THEN
3891                 l_party_hist_rec.old_active_start_date := NULL;
3892                 l_party_hist_rec.new_active_start_date := NULL;
3893            ELSIF
3894               NVL(l_curr_party_rec.active_start_date,fnd_api.g_miss_date) <> NVL(p_party_rec.active_start_date,fnd_api.g_miss_date) THEN
3895                 l_party_hist_rec.old_active_start_date := l_curr_party_rec.active_start_date ;
3896                 l_party_hist_rec.new_active_start_date := p_party_rec.active_start_date ;
3897            END IF;
3898            --
3899            IF (p_party_rec.active_end_date = fnd_api.g_miss_date) OR
3900                NVL(p_party_rec.active_end_date, fnd_api.g_miss_date) = NVL(l_curr_party_rec.active_end_date, fnd_api.g_miss_date) THEN
3901                 l_party_hist_rec.old_active_end_date := NULL;
3902                 l_party_hist_rec.new_active_end_date := NULL;
3903            ELSIF
3904               NVL(l_curr_party_rec.active_end_date,fnd_api.g_miss_date) <> NVL(p_party_rec.active_end_date,fnd_api.g_miss_date) THEN
3905                 l_party_hist_rec.old_active_end_date := l_curr_party_rec.active_end_date ;
3906                 l_party_hist_rec.new_active_end_date := p_party_rec.active_end_date ;
3907            END IF;
3908            --
3909            IF (p_party_rec.context = fnd_api.g_miss_char) OR
3910                NVL(p_party_rec.context, fnd_api.g_miss_char) = NVL(l_curr_party_rec.context, fnd_api.g_miss_char) THEN
3911                 l_party_hist_rec.old_context := NULL;
3912                 l_party_hist_rec.new_context := NULL;
3913            ELSIF
3914               NVL(l_curr_party_rec.context,fnd_api.g_miss_char) <> NVL(p_party_rec.context,fnd_api.g_miss_char) THEN
3915                 l_party_hist_rec.old_context := l_curr_party_rec.context ;
3916                 l_party_hist_rec.new_context := p_party_rec.context ;
3917            END IF;
3918            --
3919            IF (p_party_rec.attribute1 = fnd_api.g_miss_char) OR
3920                NVL(p_party_rec.attribute1, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute1, fnd_api.g_miss_char) THEN
3921                 l_party_hist_rec.old_attribute1 := NULL;
3922                 l_party_hist_rec.new_attribute1 := NULL;
3923            ELSIF
3924               NVL(l_curr_party_rec.attribute1,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute1,fnd_api.g_miss_char) THEN
3925                 l_party_hist_rec.old_attribute1 := l_curr_party_rec.attribute1 ;
3926                 l_party_hist_rec.new_attribute1 := p_party_rec.attribute1 ;
3927            END IF;
3928            --
3929            IF (p_party_rec.attribute2 = fnd_api.g_miss_char) OR
3930                NVL(p_party_rec.attribute2, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute2, fnd_api.g_miss_char) THEN
3931                 l_party_hist_rec.old_attribute2 := NULL;
3932                 l_party_hist_rec.new_attribute2 := NULL;
3933            ELSIF
3934               NVL(l_curr_party_rec.attribute2,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute2,fnd_api.g_miss_char) THEN
3935                 l_party_hist_rec.old_attribute2 := l_curr_party_rec.attribute2 ;
3936                 l_party_hist_rec.new_attribute2 := p_party_rec.attribute2 ;
3937            END IF;
3938            --
3939            IF (p_party_rec.attribute3 = fnd_api.g_miss_char) OR
3940                NVL(p_party_rec.attribute3, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute3, fnd_api.g_miss_char) THEN
3941                 l_party_hist_rec.old_attribute3 := NULL;
3942                 l_party_hist_rec.new_attribute3 := NULL;
3943            ELSIF
3944               NVL(l_curr_party_rec.attribute3,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute3,fnd_api.g_miss_char) THEN
3945                 l_party_hist_rec.old_attribute3 := l_curr_party_rec.attribute3 ;
3946                 l_party_hist_rec.new_attribute3 := p_party_rec.attribute3 ;
3947            END IF;
3948            --
3949            IF (p_party_rec.attribute4 = fnd_api.g_miss_char) OR
3950                NVL(p_party_rec.attribute4, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute4, fnd_api.g_miss_char) THEN
3951                 l_party_hist_rec.old_attribute4 := NULL;
3952                 l_party_hist_rec.new_attribute4 := NULL;
3953            ELSIF
3954               NVL(l_curr_party_rec.attribute4,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute4,fnd_api.g_miss_char) THEN
3955                 l_party_hist_rec.old_attribute4 := l_curr_party_rec.attribute4 ;
3956                 l_party_hist_rec.new_attribute4 := p_party_rec.attribute4 ;
3957            END IF;
3958            --
3959            IF (p_party_rec.attribute5 = fnd_api.g_miss_char) OR
3960                NVL(p_party_rec.attribute5, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute5, fnd_api.g_miss_char) THEN
3961                 l_party_hist_rec.old_attribute5 := NULL;
3962                 l_party_hist_rec.new_attribute5 := NULL;
3963            ELSIF
3964               NVL(l_curr_party_rec.attribute5,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute5,fnd_api.g_miss_char) THEN
3965                 l_party_hist_rec.old_attribute5 := l_curr_party_rec.attribute5 ;
3966                 l_party_hist_rec.new_attribute5 := p_party_rec.attribute5 ;
3967            END IF;
3968            --
3969            IF (p_party_rec.attribute6 = fnd_api.g_miss_char) OR
3970                NVL(p_party_rec.attribute6, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute6, fnd_api.g_miss_char) THEN
3971                 l_party_hist_rec.old_attribute6 := NULL;
3972                 l_party_hist_rec.new_attribute6 := NULL;
3973            ELSIF
3974               NVL(l_curr_party_rec.attribute6,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute6,fnd_api.g_miss_char) THEN
3975                 l_party_hist_rec.old_attribute6 := l_curr_party_rec.attribute6 ;
3976                 l_party_hist_rec.new_attribute6 := p_party_rec.attribute6 ;
3977            END IF;
3978            --
3979            IF (p_party_rec.attribute7 = fnd_api.g_miss_char) OR
3980                NVL(p_party_rec.attribute7, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute7, fnd_api.g_miss_char) THEN
3981                 l_party_hist_rec.old_attribute7 := NULL;
3982                 l_party_hist_rec.new_attribute7 := NULL;
3983            ELSIF
3984               NVL(l_curr_party_rec.attribute7,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute7,fnd_api.g_miss_char) THEN
3985                 l_party_hist_rec.old_attribute7 := l_curr_party_rec.attribute7 ;
3986                 l_party_hist_rec.new_attribute7 := p_party_rec.attribute7 ;
3987            END IF;
3988            --
3989            IF (p_party_rec.attribute8 = fnd_api.g_miss_char) OR
3990                NVL(p_party_rec.attribute8, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute8, fnd_api.g_miss_char) THEN
3991                 l_party_hist_rec.old_attribute8 := NULL;
3992                 l_party_hist_rec.new_attribute8 := NULL;
3993            ELSIF
3994               NVL(l_curr_party_rec.attribute8,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute8,fnd_api.g_miss_char) THEN
3995                 l_party_hist_rec.old_attribute8 := l_curr_party_rec.attribute8 ;
3996                 l_party_hist_rec.new_attribute8 := p_party_rec.attribute8 ;
3997            END IF;
3998            --
3999            IF (p_party_rec.attribute9 = fnd_api.g_miss_char) OR
4000                NVL(p_party_rec.attribute9, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute9, fnd_api.g_miss_char) THEN
4001                 l_party_hist_rec.old_attribute9 := NULL;
4002                 l_party_hist_rec.new_attribute9 := NULL;
4003            ELSIF
4004               NVL(l_curr_party_rec.attribute9,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute9,fnd_api.g_miss_char) THEN
4005                 l_party_hist_rec.old_attribute9 := l_curr_party_rec.attribute9 ;
4006                 l_party_hist_rec.new_attribute9 := p_party_rec.attribute9 ;
4007            END IF;
4008            --
4009            IF (p_party_rec.attribute10 = fnd_api.g_miss_char) OR
4010                NVL(p_party_rec.attribute10, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute10, fnd_api.g_miss_char) THEN
4011                 l_party_hist_rec.old_attribute10 := NULL;
4012                 l_party_hist_rec.new_attribute10 := NULL;
4013            ELSIF
4014               NVL(l_curr_party_rec.attribute10,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute10,fnd_api.g_miss_char) THEN
4015                 l_party_hist_rec.old_attribute10 := l_curr_party_rec.attribute10 ;
4016                 l_party_hist_rec.new_attribute10 := p_party_rec.attribute10 ;
4017            END IF;
4018            --
4019            IF (p_party_rec.attribute11 = fnd_api.g_miss_char) OR
4020                NVL(p_party_rec.attribute11, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute11, fnd_api.g_miss_char) THEN
4021                 l_party_hist_rec.old_attribute11 := NULL;
4022                 l_party_hist_rec.new_attribute11 := NULL;
4023            ELSIF
4024               NVL(l_curr_party_rec.attribute11,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute11,fnd_api.g_miss_char) THEN
4025                 l_party_hist_rec.old_attribute11 := l_curr_party_rec.attribute11 ;
4026                 l_party_hist_rec.new_attribute11 := p_party_rec.attribute11 ;
4027            END IF;
4028            --
4029            IF (p_party_rec.attribute12 = fnd_api.g_miss_char) OR
4030                NVL(p_party_rec.attribute12, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute12, fnd_api.g_miss_char) THEN
4031                 l_party_hist_rec.old_attribute12 := NULL;
4032                 l_party_hist_rec.new_attribute12 := NULL;
4033            ELSIF
4034               NVL(l_curr_party_rec.attribute12,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute12,fnd_api.g_miss_char) THEN
4035                 l_party_hist_rec.old_attribute12 := l_curr_party_rec.attribute12 ;
4036                 l_party_hist_rec.new_attribute12 := p_party_rec.attribute12 ;
4037            END IF;
4038            --
4039            IF (p_party_rec.attribute13 = fnd_api.g_miss_char) OR
4040                NVL(p_party_rec.attribute13, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute13, fnd_api.g_miss_char) THEN
4041                 l_party_hist_rec.old_attribute13 := NULL;
4042                 l_party_hist_rec.new_attribute13 := NULL;
4043            ELSIF
4044               NVL(l_curr_party_rec.attribute13,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute13,fnd_api.g_miss_char) THEN
4045                 l_party_hist_rec.old_attribute13 := l_curr_party_rec.attribute13 ;
4046                 l_party_hist_rec.new_attribute13 := p_party_rec.attribute13 ;
4047            END IF;
4048            --
4049            IF (p_party_rec.attribute14 = fnd_api.g_miss_char) OR
4050                NVL(p_party_rec.attribute14, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute14, fnd_api.g_miss_char) THEN
4051                 l_party_hist_rec.old_attribute14 := NULL;
4052                 l_party_hist_rec.new_attribute14 := NULL;
4053            ELSIF
4054               NVL(l_curr_party_rec.attribute14,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute14,fnd_api.g_miss_char) THEN
4055                 l_party_hist_rec.old_attribute14 := l_curr_party_rec.attribute14 ;
4056                 l_party_hist_rec.new_attribute14 := p_party_rec.attribute14 ;
4057            END IF;
4058            --
4059            IF (p_party_rec.attribute15 = fnd_api.g_miss_char) OR
4060                NVL(p_party_rec.attribute15, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute15, fnd_api.g_miss_char) THEN
4061                 l_party_hist_rec.old_attribute15 := NULL;
4062                 l_party_hist_rec.new_attribute15 := NULL;
4063            ELSIF
4064               NVL(l_curr_party_rec.attribute15,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute15,fnd_api.g_miss_char) THEN
4065                 l_party_hist_rec.old_attribute15 := l_curr_party_rec.attribute15 ;
4066                 l_party_hist_rec.new_attribute15 := p_party_rec.attribute15 ;
4067            END IF;
4068            --
4069            IF (p_party_rec.primary_flag = fnd_api.g_miss_char) OR
4070                NVL(p_party_rec.primary_flag, fnd_api.g_miss_char) = NVL(l_curr_party_rec.primary_flag, fnd_api.g_miss_char) THEN
4071                 l_party_hist_rec.old_primary_flag := NULL;
4072                 l_party_hist_rec.new_primary_flag := NULL;
4073            ELSIF
4074               NVL(l_curr_party_rec.primary_flag,fnd_api.g_miss_char) <> NVL(p_party_rec.primary_flag,fnd_api.g_miss_char) THEN
4075                 l_party_hist_rec.old_primary_flag := l_curr_party_rec.primary_flag ;
4076                 l_party_hist_rec.new_primary_flag := p_party_rec.primary_flag ;
4077            END IF;
4078            --
4079            IF (p_party_rec.preferred_flag = fnd_api.g_miss_char) OR
4080                NVL(p_party_rec.preferred_flag, fnd_api.g_miss_char) = NVL(l_curr_party_rec.preferred_flag, fnd_api.g_miss_char) THEN
4081                 l_party_hist_rec.old_preferred_flag := NULL;
4082                 l_party_hist_rec.new_preferred_flag := NULL;
4083            ELSIF
4084               NVL(l_curr_party_rec.preferred_flag,fnd_api.g_miss_char) <> NVL(p_party_rec.preferred_flag,fnd_api.g_miss_char) THEN
4085                 l_party_hist_rec.old_preferred_flag := l_curr_party_rec.preferred_flag ;
4086                 l_party_hist_rec.new_preferred_flag := p_party_rec.preferred_flag ;
4087            END IF;
4088 
4089         -- Call table handlers to insert into csi_i_parties_h table
4090         CSI_I_PARTIES_H_PKG.Insert_Row
4091         (
4092          px_INSTANCE_PARTY_HISTORY_ID    => l_inst_party_his_id ,
4093          p_INSTANCE_PARTY_ID             => p_party_rec.INSTANCE_PARTY_ID ,
4094          p_TRANSACTION_ID                => p_txn_rec.TRANSACTION_ID ,
4095          p_OLD_PARTY_SOURCE_TABLE        => l_party_hist_rec.OLD_PARTY_SOURCE_TABLE ,
4096          p_NEW_PARTY_SOURCE_TABLE        => l_party_hist_rec.NEW_PARTY_SOURCE_TABLE ,
4097          p_OLD_PARTY_ID                  => l_party_hist_rec.OLD_PARTY_ID ,
4098          p_NEW_PARTY_ID                  => l_party_hist_rec.NEW_PARTY_ID ,
4099          p_OLD_RELATIONSHIP_TYPE_CODE    => l_party_hist_rec.OLD_RELATIONSHIP_TYPE_CODE ,
4100          p_NEW_RELATIONSHIP_TYPE_CODE    => l_party_hist_rec.NEW_RELATIONSHIP_TYPE_CODE ,
4101          p_OLD_CONTACT_FLAG              => l_party_hist_rec.OLD_CONTACT_FLAG ,
4102          p_NEW_CONTACT_FLAG              => l_party_hist_rec.NEW_CONTACT_FLAG ,
4103          p_OLD_CONTACT_IP_ID             => l_party_hist_rec.OLD_CONTACT_IP_ID ,
4104          p_NEW_CONTACT_IP_ID             => l_party_hist_rec.NEW_CONTACT_IP_ID ,
4105          p_OLD_ACTIVE_START_DATE         => l_party_hist_rec.OLD_ACTIVE_START_DATE ,
4106          p_NEW_ACTIVE_START_DATE         => l_party_hist_rec.NEW_ACTIVE_START_DATE ,
4107          p_OLD_ACTIVE_END_DATE           => l_party_hist_rec.OLD_ACTIVE_END_DATE ,
4108          p_NEW_ACTIVE_END_DATE           => l_party_hist_rec.NEW_ACTIVE_END_DATE ,
4109          p_OLD_CONTEXT                   => l_party_hist_rec.OLD_CONTEXT ,
4110          p_NEW_CONTEXT                   => l_party_hist_rec.NEW_CONTEXT ,
4111          p_OLD_ATTRIBUTE1                => l_party_hist_rec.OLD_ATTRIBUTE1 ,
4112          p_NEW_ATTRIBUTE1                => l_party_hist_rec.NEW_ATTRIBUTE1 ,
4113          p_OLD_ATTRIBUTE2                => l_party_hist_rec.OLD_ATTRIBUTE2 ,
4114          p_NEW_ATTRIBUTE2                => l_party_hist_rec.NEW_ATTRIBUTE2 ,
4115          p_OLD_ATTRIBUTE3                => l_party_hist_rec.OLD_ATTRIBUTE3 ,
4116          p_NEW_ATTRIBUTE3                => l_party_hist_rec.NEW_ATTRIBUTE3 ,
4117          p_OLD_ATTRIBUTE4                => l_party_hist_rec.OLD_ATTRIBUTE4 ,
4118          p_NEW_ATTRIBUTE4                => l_party_hist_rec.NEW_ATTRIBUTE4 ,
4119          p_OLD_ATTRIBUTE5                => l_party_hist_rec.OLD_ATTRIBUTE5 ,
4120          p_NEW_ATTRIBUTE5                => l_party_hist_rec.NEW_ATTRIBUTE5 ,
4121          p_OLD_ATTRIBUTE6                => l_party_hist_rec.OLD_ATTRIBUTE6 ,
4122          p_NEW_ATTRIBUTE6                => l_party_hist_rec.NEW_ATTRIBUTE6 ,
4123          p_OLD_ATTRIBUTE7                => l_party_hist_rec.OLD_ATTRIBUTE7 ,
4124          p_NEW_ATTRIBUTE7                => l_party_hist_rec.NEW_ATTRIBUTE7 ,
4125          p_OLD_ATTRIBUTE8                => l_party_hist_rec.OLD_ATTRIBUTE8 ,
4126          p_NEW_ATTRIBUTE8                => l_party_hist_rec.NEW_ATTRIBUTE8 ,
4127          p_OLD_ATTRIBUTE9                => l_party_hist_rec.OLD_ATTRIBUTE9 ,
4128          p_NEW_ATTRIBUTE9                => l_party_hist_rec.NEW_ATTRIBUTE9 ,
4129          p_OLD_ATTRIBUTE10               => l_party_hist_rec.OLD_ATTRIBUTE10 ,
4130          p_NEW_ATTRIBUTE10               => l_party_hist_rec.NEW_ATTRIBUTE10 ,
4131          p_OLD_ATTRIBUTE11               => l_party_hist_rec.OLD_ATTRIBUTE11 ,
4132          p_NEW_ATTRIBUTE11               => l_party_hist_rec.NEW_ATTRIBUTE11 ,
4133          p_OLD_ATTRIBUTE12               => l_party_hist_rec.OLD_ATTRIBUTE12 ,
4134          p_NEW_ATTRIBUTE12               => l_party_hist_rec.NEW_ATTRIBUTE12 ,
4135          p_OLD_ATTRIBUTE13               => l_party_hist_rec.OLD_ATTRIBUTE13 ,
4136          p_NEW_ATTRIBUTE13               => l_party_hist_rec.NEW_ATTRIBUTE13 ,
4137          p_OLD_ATTRIBUTE14               => l_party_hist_rec.OLD_ATTRIBUTE14 ,
4138          p_NEW_ATTRIBUTE14               => l_party_hist_rec.NEW_ATTRIBUTE14 ,
4139          p_OLD_ATTRIBUTE15               => l_party_hist_rec.OLD_ATTRIBUTE15 ,
4140          p_NEW_ATTRIBUTE15               => l_party_hist_rec.NEW_ATTRIBUTE15 ,
4141          p_FULL_DUMP_FLAG                => 'N',
4142          p_CREATED_BY                    => FND_GLOBAL.USER_ID ,
4143          p_CREATION_DATE                 => SYSDATE ,
4144          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID ,
4145          p_LAST_UPDATE_DATE              => SYSDATE ,
4146          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID ,
4147          p_OBJECT_VERSION_NUMBER         => 1 ,
4148          p_OLD_PRIMARY_FLAG              => l_party_hist_rec.OLD_PRIMARY_FLAG ,
4149          p_NEW_PRIMARY_FLAG              => l_party_hist_rec.NEW_PRIMARY_FLAG ,
4150          p_OLD_PREFERRED_FLAG            => l_party_hist_rec.OLD_PREFERRED_FLAG ,
4151          p_NEW_PREFERRED_FLAG            => l_party_hist_rec.NEW_PREFERRED_FLAG );
4152 
4153         END IF;
4154 
4155      END;
4156   -- End of Changes for Bug#2547034 on 09/20/02 - rtalluri
4157 
4158       --  Update accounting class code in csi_item_instances table
4159 
4160       csi_item_instance_pvt.get_and_update_acct_class
4161          ( p_api_version         =>     p_api_version
4162           ,p_commit              =>     p_commit
4163           ,p_init_msg_list       =>     p_init_msg_list
4164           ,p_validation_level    =>     p_validation_level
4165           ,p_instance_id         =>     l_curr_party_rec.instance_id
4166           ,p_txn_rec             =>     p_txn_rec
4167           ,x_acct_class_code     =>     l_acct_class_code
4168           ,x_return_status       =>     x_return_status
4169           ,x_msg_count           =>     x_msg_count
4170           ,x_msg_data            =>     x_msg_data
4171          );
4172 
4173       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4174          FOR i in 1..x_msg_Count LOOP
4175             FND_MSG_PUB.Get(p_msg_index     => i,
4176                             p_encoded       => 'F',
4177                             p_data          => x_msg_data,
4178                             p_msg_index_out => x_msg_index_out );
4179          End LOOP;
4180          RAISE FND_API.G_EXC_ERROR;
4181       END IF;
4182       -- srramakr Bug # 2232230. Expire the Contacts incase of Xfer of Ownership.
4183       --
4184       IF ((p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM)
4185          AND (p_party_rec.PARTY_ID IS NOT NULL)
4186          AND (p_party_rec.PARTY_ID <> l_curr_party_rec.PARTY_ID))
4187       THEN
4188 	 For cont_rec in get_cont_party_rec(p_party_rec.INSTANCE_PARTY_ID)
4189          LOOP
4190             l_cont_party_rec := l_init_party_rec;
4191             l_cont_party_rec.instance_party_id := cont_rec.instance_party_id;
4192             l_cont_party_rec.object_version_number := cont_rec.object_version_number;
4193             -- Calling Expire Instance Party Relationship
4194 	    expire_inst_party_relationship
4195 	     (    p_api_version                 =>  p_api_version
4196 		 ,p_commit                      =>  fnd_api.g_false
4197 		 ,p_init_msg_list               =>  fnd_api.g_false
4198 		 ,p_validation_level            =>  fnd_api.g_valid_level_full
4199 		 ,p_instance_party_rec          =>  l_cont_party_rec
4200 		 ,p_txn_rec                     =>  p_txn_rec
4201 		 ,x_return_status               =>  x_return_status
4202 		 ,x_msg_count                   =>  x_msg_count
4203 		 ,x_msg_data                    =>  x_msg_data
4204 		);
4205 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4206 	       FOR i in 1..x_msg_Count LOOP
4207 		  FND_MSG_PUB.Get(p_msg_index     => i,
4208 				  p_encoded       => 'F',
4209 				  p_data          => x_msg_data,
4210 				  p_msg_index_out => x_msg_index_out );
4211 	       End LOOP;
4212 	       RAISE FND_API.G_EXC_ERROR;
4213 	    END IF;
4214          END LOOP;
4215       END IF;
4216       -- End of API body
4217       -- Standard check of p_commit.
4218       IF FND_API.To_Boolean( p_commit ) THEN
4219          COMMIT WORK;
4220       END IF;
4221       -- Standard call to get message count and if count is  get message info.
4222       FND_MSG_PUB.Count_And_Get
4223                 (p_count        =>      x_msg_count ,
4224                  p_data         =>      x_msg_data  );
4225 EXCEPTION
4226         WHEN FND_API.G_EXC_ERROR THEN
4227                 -- ROLLBACK TO update_inst_party_rel_pvt;
4228                 x_return_status := FND_API.G_RET_STS_ERROR ;
4229                 FND_MSG_PUB.Count_And_Get
4230                 (       p_count    =>      x_msg_count,
4231                         p_data     =>      x_msg_data );
4232         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4233                 -- ROLLBACK TO update_inst_party_rel_pvt;
4234                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4235                 FND_MSG_PUB.Count_And_Get
4236                 (       p_count   =>      x_msg_count,
4237                         p_data    =>      x_msg_data );
4238         WHEN OTHERS THEN
4239                 -- ROLLBACK TO update_inst_party_rel_pvt;
4240                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4241                 IF FND_MSG_PUB.Check_Msg_Level
4242                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4243                 THEN
4244                    FND_MSG_PUB.Add_Exc_Msg
4245                     ( g_pkg_name, l_api_name );
4246                 END IF;
4247                 FND_MSG_PUB.Count_And_Get
4248                 (       p_count  =>      x_msg_count,
4249                         p_data   =>      x_msg_data  );
4250 
4251 END update_inst_party_relationship ;
4252 
4253 /*-------------------------------------------------------*/
4254 /* Procedure name:  Expire_inst_party_relationship       */
4255 /* Description :  Procedure used to  expire an existing  */
4256 /*                instance -party relationships          */
4257 /*-------------------------------------------------------*/
4258 
4259 PROCEDURE expire_inst_party_relationship
4260  (    p_api_version                 IN  NUMBER
4261      ,p_commit                      IN  VARCHAR2
4262      ,p_init_msg_list               IN  VARCHAR2
4263      ,p_validation_level            IN  NUMBER
4264      ,p_instance_party_rec          IN  csi_datastructures_pub.party_rec
4265      ,p_txn_rec                     IN OUT NOCOPY  csi_datastructures_pub.transaction_rec
4266      ,x_return_status               OUT NOCOPY  VARCHAR2
4267      ,x_msg_count                   OUT NOCOPY  NUMBER
4268      ,x_msg_data                    OUT NOCOPY  VARCHAR2
4269     ) IS
4270 
4271      l_api_name      CONSTANT VARCHAR2(30)   := 'EXPIRE_INST_PARTY_RELATIONSHIP';
4272      l_api_version   CONSTANT NUMBER         := 1.0;
4273      l_csi_debug_level        NUMBER;
4274      l_party_rec              csi_datastructures_pub.party_rec;
4275      l_msg_index              NUMBER;
4276      l_msg_count              NUMBER;
4277      l_line_count             NUMBER;
4278      l_full_dump_frequency    NUMBER;
4279      l_mod_value              NUMBER;
4280      l_curr_party_rec         csi_datastructures_pub.party_rec;
4281      l_party_account_rec      csi_datastructures_pub.party_account_rec;
4282      l_OBJECT_VERSION_NUMBER  NUMBER;
4283      l_inst_party_his_id      NUMBER;
4284      l_temp_party_acct_rec    csi_datastructures_pub.party_account_rec;
4285      --
4286    CURSOR get_curr_party_rec (p_inst_party_id   IN  NUMBER) IS
4287      SELECT
4288      instance_party_id  ,
4289      instance_id        ,
4290      party_source_table ,
4291      party_id           ,
4292      relationship_type_code,
4293      contact_flag       ,
4294      contact_ip_id      ,
4295      active_start_date  ,
4296      active_end_date    ,
4297      context            ,
4298      attribute1         ,
4299      attribute2         ,
4300      attribute3         ,
4301      attribute4         ,
4302      attribute5         ,
4303      attribute6         ,
4304      attribute7         ,
4305      attribute8         ,
4306      attribute9         ,
4307      attribute10        ,
4308      attribute11        ,
4309      attribute12        ,
4310      attribute13        ,
4311      attribute14        ,
4312      attribute15        ,
4313      object_version_number,
4314      primary_flag       ,
4315      preferred_flag     ,
4316      null parent_tbl_index  ,
4317      null call_contracts,
4318      null interface_id,
4319      null contact_parent_tbl_index,
4320      null cascade_ownership_flag -- Added for bug 2972082
4321     FROM CSI_I_PARTIES
4322    WHERE INSTANCE_PARTY_ID = p_inst_party_id
4323     AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE))
4324      FOR UPDATE OF OBJECT_VERSION_NUMBER;
4325 
4326 BEGIN
4327    -- Standard Start of API savepoint
4328    -- SAVEPOINT  expire_inst_party_rel_pvt;
4329 
4330    -- Standard call to check for call compatibility.
4331    IF NOT FND_API.Compatible_API_Call (    l_api_version   ,
4332 					   p_api_version   ,
4333 					   l_api_name      ,
4334 					   g_pkg_name      )
4335    THEN
4336 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4337    END IF;
4338 
4339    -- Initialize message list if p_init_msg_list is set to TRUE.
4340    IF FND_API.to_Boolean( p_init_msg_list ) THEN
4341 	   FND_MSG_PUB.initialize;
4342    END IF;
4343 
4344    --  Initialize API return status to success
4345    -- Verify if the Party rel combination exists
4346    x_return_status := FND_API.G_RET_STS_SUCCESS;
4347 
4348    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
4349    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
4350 
4351    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
4352    IF (l_csi_debug_level > 0) THEN
4353        csi_gen_utility_pvt.put_line( 'expire_inst_party_relationship');
4354    END IF;
4355 
4356    -- If the debug level = 2 then dump all the parameters values.
4357    IF (l_csi_debug_level > 1) THEN
4358        csi_gen_utility_pvt.put_line( 'expire_inst_party_relationship:'||
4359 					    p_api_version           ||'-'||
4360 					    p_commit                ||'-'||
4361 					    p_init_msg_list               );
4362 
4363        -- Dump the records in the log file
4364        csi_gen_utility_pvt.dump_party_rec(p_instance_party_rec );
4365        csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
4366    END IF;
4367    -- Start API body
4368    --
4369    -- Check if all the required parameters are passed
4370     CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4371 	 (    p_instance_party_rec.instance_party_id ,
4372 	       '  p_instance_party_rec.instance_party_id  ',
4373 		  l_api_name  );
4374     CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4375 	 (    p_instance_party_rec.object_version_number ,
4376 	       '  p_instance_party_rec.object_version_number  ',
4377 		  l_api_name  );
4378 
4379    -- Check if the instance party id  is valid
4380    IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid
4381 		(p_Instance_party_id => p_instance_party_rec.instance_party_id
4382 		,p_txn_type_id       => p_txn_rec.transaction_type_id
4383 		,p_mode              => 'E'      -- Added for bug 3550541
4384 		 )
4385 	  )
4386    THEN
4387     -- Message added in the validation routine since additional validation added for bug # 2477417.
4388       --  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
4389       --  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_instance_party_rec.instance_party_id);
4390       --  FND_MSG_PUB.Add;
4391        RAISE FND_API.G_EXC_ERROR;
4392    END IF;
4393    -- check if the object_version_number passed matches with the one
4394    -- in the database else raise error
4395    OPEN get_curr_party_rec(p_instance_party_rec.instance_party_id);
4396    FETCH get_curr_party_rec INTO l_curr_party_rec;
4397    IF  (l_curr_party_rec.object_version_number <> p_instance_party_rec.OBJECT_VERSION_NUMBER) THEN
4398        FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
4399        FND_MSG_PUB.ADD;
4400        RAISE FND_API.G_EXC_ERROR;
4401    END IF;
4402    --
4403    IF get_curr_party_rec%NOTFOUND THEN
4404      FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
4405      FND_MSG_PUB.ADD;
4406      RAISE FND_API.G_EXC_ERROR;
4407    END IF;
4408    CLOSE get_curr_party_rec;
4409    -- Initialize all the parameters and call update_inst_party_relationship to expire the record
4410    l_party_rec.instance_party_id          :=   l_curr_party_rec.instance_party_id;
4411    l_party_rec.instance_id                :=   FND_API.G_MISS_NUM;
4412    l_party_rec.PARTY_SOURCE_TABLE         :=   FND_API.G_MISS_CHAR;
4413    l_party_rec.PARTY_ID                   :=   FND_API.G_MISS_NUM;
4414    l_party_rec.RELATIONSHIP_TYPE_CODE     :=   FND_API.G_MISS_CHAR;
4415    l_party_rec.CONTACT_FLAG      :=   FND_API.G_MISS_CHAR;
4416    l_party_rec.CONTACT_IP_ID     :=   FND_API.G_MISS_NUM;
4417    l_party_rec.ACTIVE_START_DATE :=   FND_API.G_MISS_DATE;
4418    l_party_rec.ACTIVE_END_DATE   := sysdate;
4419    l_party_rec.CONTEXT        :=   FND_API.G_MISS_CHAR;
4420    l_party_rec.ATTRIBUTE1     :=   FND_API.G_MISS_CHAR;
4421    l_party_rec.ATTRIBUTE2     :=   FND_API.G_MISS_CHAR;
4422    l_party_rec.ATTRIBUTE3     :=   FND_API.G_MISS_CHAR;
4423    l_party_rec.ATTRIBUTE4     :=   FND_API.G_MISS_CHAR;
4424    l_party_rec.ATTRIBUTE5     :=   FND_API.G_MISS_CHAR;
4425    l_party_rec.ATTRIBUTE6     :=   FND_API.G_MISS_CHAR;
4426    l_party_rec.ATTRIBUTE7     :=   FND_API.G_MISS_CHAR;
4427    l_party_rec.ATTRIBUTE8     :=   FND_API.G_MISS_CHAR;
4428    l_party_rec.ATTRIBUTE9     :=   FND_API.G_MISS_CHAR;
4429    l_party_rec.ATTRIBUTE10    :=   FND_API.G_MISS_CHAR;
4430    l_party_rec.ATTRIBUTE11    :=   FND_API.G_MISS_CHAR;
4431    l_party_rec.ATTRIBUTE12    :=   FND_API.G_MISS_CHAR;
4432    l_party_rec.ATTRIBUTE13    :=   FND_API.G_MISS_CHAR;
4433    l_party_rec.ATTRIBUTE14    :=   FND_API.G_MISS_CHAR;
4434    l_party_rec.ATTRIBUTE15    :=   FND_API.G_MISS_CHAR;
4435    l_party_rec.OBJECT_VERSION_NUMBER  :=  p_instance_party_rec.object_version_number;
4436    --
4437    g_expire_party_flag := 'Y';
4438    update_inst_party_relationship
4439 	   ( p_api_version      => p_api_version
4440 	    ,p_commit           => p_commit
4441 	    ,p_init_msg_list    => p_init_msg_list
4442 	    ,p_validation_level => p_validation_level
4443 	    ,p_party_rec        => l_party_rec
4444 	    ,p_txn_rec          => p_txn_rec
4445 	    ,x_return_status    => x_return_status
4446 	    ,x_msg_count        => x_msg_count
4447 	    ,x_msg_data         => x_msg_data  ) ;
4448 
4449    g_expire_party_flag := 'N';
4450    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4451       l_msg_index := 1;
4452       l_msg_count := x_msg_count;
4453       WHILE l_msg_count > 0 LOOP
4454          x_msg_data := FND_MSG_PUB.GET(
4455 				l_msg_index,
4456 				FND_API.G_FALSE );
4457          csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
4458 		      l_msg_index := l_msg_index + 1;
4459 		      l_msg_count := l_msg_count - 1;
4460       END LOOP;
4461       RAISE FND_API.G_EXC_ERROR;
4462    END IF;
4463    --
4464    -- End of API body
4465 
4466    -- Standard check of p_commit.
4467    IF FND_API.To_Boolean( p_commit ) THEN
4468 	   COMMIT WORK;
4469    END IF;
4470    -- Standard call to get message count and if count is  get message info.
4471    FND_MSG_PUB.Count_And_Get
4472 	   (p_count        =>      x_msg_count ,
4473 	    p_data         =>      x_msg_data  );
4474 EXCEPTION
4475         WHEN FND_API.G_EXC_ERROR THEN
4476                 -- ROLLBACK TO expire_inst_party_rel_pvt;
4477                 x_return_status := FND_API.G_RET_STS_ERROR ;
4478                 FND_MSG_PUB.Count_And_Get
4479                 (       p_count   =>      x_msg_count,
4480                         p_data    =>      x_msg_data  );
4481         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4482                 -- ROLLBACK TO expire_inst_party_rel_pvt;
4483                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4484                 FND_MSG_PUB.Count_And_Get
4485                 (       p_count    =>      x_msg_count,
4486                         p_data     =>      x_msg_data   );
4487         WHEN OTHERS THEN
4488                 -- ROLLBACK TO expire_inst_party_rel_pvt;
4489                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4490                 IF FND_MSG_PUB.Check_Msg_Level
4491                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4492                 THEN
4493                    FND_MSG_PUB.Add_Exc_Msg
4494                     ( g_pkg_name, l_api_name );
4495                 END IF;
4496                 FND_MSG_PUB.Count_And_Get
4497                 (       p_count  =>      x_msg_count,
4498                         p_data   =>      x_msg_data  );
4499 END  expire_inst_party_relationship;
4500 
4501 /*-----------------------------------------------------------*/
4502 /* Procedure name:  Create_inst_party_account                */
4503 /* Description :  Procedure used to  create new              */
4504 /*                instance-party account relationships       */
4505 /*-----------------------------------------------------------*/
4506 
4507 PROCEDURE create_inst_party_account
4508    (  p_api_version         IN  NUMBER
4509      ,p_commit              IN  VARCHAR2
4510      ,p_init_msg_list       IN  VARCHAR2
4511      ,p_validation_level    IN  NUMBER
4512      ,p_party_account_rec   IN OUT NOCOPY   csi_datastructures_pub.party_account_rec
4513      ,p_txn_rec             IN OUT NOCOPY   csi_datastructures_pub.transaction_rec
4514      ,x_return_status       OUT NOCOPY  VARCHAR2
4515      ,x_msg_count           OUT NOCOPY  NUMBER
4516      ,x_msg_data            OUT NOCOPY  VARCHAR2
4517      ,p_inst_party_tbl      IN OUT NOCOPY   csi_party_relationships_pvt.inst_party_tbl
4518      ,p_acct_rel_type_tbl   IN OUT NOCOPY   csi_party_relationships_pvt.acct_rel_type_tbl
4519      ,p_site_use_tbl        IN OUT NOCOPY   csi_party_relationships_pvt.site_use_tbl
4520      ,p_account_count_rec   IN OUT NOCOPY   csi_party_relationships_pvt.account_count_rec
4521      ,p_called_from_grp     IN  VARCHAR2
4522      ,p_oks_txn_inst_tbl    IN OUT NOCOPY   oks_ibint_pub.txn_instance_tbl
4523     ) IS
4524 
4525      l_api_name      CONSTANT VARCHAR2(30)   := 'CREATE_INST_PARTY_ACCOUNT';
4526      l_api_version   CONSTANT NUMBER             := 1.0;
4527      l_csi_debug_level        NUMBER;
4528      l_party_account_rec      csi_datastructures_pub.party_account_rec;
4529      l_party_rec              csi_datastructures_pub.party_rec;
4530      l_msg_index              NUMBER;
4531      l_msg_count              NUMBER;
4532      l_process_flag           BOOLEAN := TRUE;
4533      l_ip_account_history_id  NUMBER;
4534 
4535       l_transaction_type              VARCHAR2(10);
4536       l_old_oks_cp_rec                oks_ibint_pub.cp_rec_type;
4537       l_new_oks_cp_rec                oks_ibint_pub.cp_rec_type;
4538       l_contracts_status              VARCHAR2(3);
4539       l_internal_party_id             NUMBER;
4540       l_party_id                      NUMBER;
4541       l_record_found           BOOLEAN := FALSE;
4542       l_update_record          BOOLEAN := FALSE;
4543       l_exists_flag            VARCHAR2(1);
4544       l_valid_flag             VARCHAR2(1);
4545 
4546     CURSOR instance_csr (p_ins_id IN NUMBER) IS
4547       SELECT  *
4548       FROM    csi_item_instances
4549       WHERE   instance_id = p_ins_id;
4550     l_instance_csr    instance_csr%ROWTYPE;
4551     l_last_vld_org    NUMBER;      -- Added by sguthiva for bug 2307804
4552 BEGIN
4553    -- Standard Start of API savepoint
4554    SAVEPOINT  create_inst_party_acct_pvt;
4555 
4556    -- Standard call to check for call compatibility.
4557    IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
4558 					   p_api_version           ,
4559 					   l_api_name              ,
4560 					   g_pkg_name              )
4561    THEN
4562 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4563    END IF;
4564 
4565    -- Initialize message list if p_init_msg_list is set to TRUE.
4566    IF FND_API.to_Boolean( p_init_msg_list ) THEN
4567 	   FND_MSG_PUB.initialize;
4568    END IF;
4569 
4570    --  Initialize API return status to success
4571    x_return_status := FND_API.G_RET_STS_SUCCESS;
4572 
4573    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
4574    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
4575 
4576    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
4577    IF (l_csi_debug_level > 0) THEN
4578        csi_gen_utility_pvt.put_line( 'create_inst_party_account');
4579    END IF;
4580 
4581    -- If the debug level = 2 then dump all the parameters values.
4582    IF (l_csi_debug_level > 1) THEN
4583 	  csi_gen_utility_pvt.put_line( 'create_inst_party_account:'||
4584 					  p_api_version           ||'-'||
4585 					  p_commit                ||'-'||
4586 					  p_init_msg_list                );
4587 	  -- Dump the records in the log file
4588 	  csi_gen_utility_pvt.dump_party_account_rec(p_party_account_rec);
4589 	  csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
4590    END IF;
4591    -- Start API body
4592    --
4593    -- Check if all the required parameters are passed
4594    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4595 	 (    p_party_account_rec.INSTANCE_PARTY_ID,
4596 		' p_party_account_rec.INSTANCE_PARTY_ID ',
4597 		  l_api_name           );
4598 
4599    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4600 	 (    p_party_account_rec.PARTY_ACCOUNT_ID,
4601 		' p_party_account_rec.PARTY_ACCOUNT_ID ',
4602 		  l_api_name           );
4603    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_char
4604 	 (     p_party_account_rec.RELATIONSHIP_TYPE_CODE,
4605 		  'p_party_account_rec.RELATIONSHIP_TYPE_CODE',
4606 		   l_api_name           );
4607 
4608    -- Initialize the counts
4609    IF p_account_count_rec.inst_party_count is NULL OR
4610       p_account_count_rec.inst_party_count = FND_API.G_MISS_NUM THEN
4611       p_account_count_rec.inst_party_count := 0;
4612    END IF;
4613    --
4614    IF p_account_count_rec.rel_type_count is NULL OR
4615       p_account_count_rec.rel_type_count = FND_API.G_MISS_NUM THEN
4616       p_account_count_rec.rel_type_count := 0;
4617    END IF;
4618    --
4619    IF p_account_count_rec.site_use_count is NULL OR
4620       p_account_count_rec.site_use_count = FND_API.G_MISS_NUM THEN
4621       p_account_count_rec.site_use_count := 0;
4622    END IF;
4623    --
4624    -- Added by sk for fixing bug 2110790
4625    l_update_record := FALSE;
4626    IF p_called_from_grp <> FND_API.G_TRUE THEN
4627       IF     p_party_account_rec.relationship_type_code = 'OWNER'
4628 	AND ( p_party_account_rec.ip_account_id IS NULL OR
4629 	      p_party_account_rec.ip_account_id = fnd_api.g_miss_num )
4630       THEN
4631 	 BEGIN
4632 	    SELECT ip_account_id,
4633 	           active_start_date,
4634 		    object_version_number
4635 	    INTO   p_party_account_rec.ip_account_id,
4636 		    p_party_account_rec.active_start_date,
4637 		    p_party_account_rec.object_version_number
4638 	    FROM   csi_ip_accounts
4639 	    WHERE  instance_party_id = p_party_account_rec.instance_party_id
4640 	    AND    relationship_type_code = 'OWNER'
4641 	    AND   (active_end_date IS NULL OR active_end_date > SYSDATE)
4642 	    AND    ROWNUM = 1;
4643 
4644 	    IF p_party_account_rec.active_end_date = fnd_api.g_miss_date
4645 	    THEN
4646 	       p_party_account_rec.active_end_date := NULL ;
4647 	    END IF;
4648             --
4649 	    l_update_record := TRUE;
4650 	 EXCEPTION
4651 	    WHEN NO_DATA_FOUND THEN
4652 	       BEGIN
4653 		  SELECT ip_account_id,
4654 			 active_start_date,
4655 			 object_version_number
4656 		  INTO   p_party_account_rec.ip_account_id,
4657 			 p_party_account_rec.active_start_date,
4658 			 p_party_account_rec.object_version_number
4659 		  FROM   csi_ip_accounts
4660 		  WHERE  instance_party_id = p_party_account_rec.instance_party_id
4661 		  AND    relationship_type_code = 'OWNER'
4662 		  AND    ROWNUM = 1;
4663 
4664 		  IF p_party_account_rec.active_end_date = fnd_api.g_miss_date
4665 		  THEN
4666 		     p_party_account_rec.active_end_date := NULL ;
4667 		  END IF;
4668 		     l_update_record := TRUE;
4669 	       EXCEPTION
4670 		  WHEN OTHERS THEN
4671 	             NULL;
4672 	       END;
4673 	    WHEN OTHERS THEN
4674 	       NULL;
4675 	 END;
4676          --
4677 	 IF l_update_record
4678 	 THEN
4679 	    update_inst_party_account
4680 		(     p_api_version         => p_api_version
4681 		     ,p_commit              => p_commit
4682 		     ,p_init_msg_list       => p_init_msg_list
4683 		     ,p_validation_level    => p_validation_level
4684 		     ,p_party_account_rec   => p_party_account_rec
4685 		     ,p_txn_rec             => p_txn_rec
4686                      ,p_oks_txn_inst_tbl    => p_oks_txn_inst_tbl
4687 		     ,x_return_status       => x_return_status
4688 		     ,x_msg_count           => x_msg_count
4689 		     ,x_msg_data            => x_msg_data);
4690 
4691 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4692 			  l_msg_index := 1;
4693 			  l_msg_count := x_msg_count;
4694 	       WHILE l_msg_count > 0 LOOP
4695 				   x_msg_data := FND_MSG_PUB.GET(
4696 					       l_msg_index,
4697 					       FND_API.G_FALSE  );
4698 			csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
4699 				  l_msg_index := l_msg_index + 1;
4700 				  l_msg_count := l_msg_count - 1;
4701 	       END LOOP;
4702 	       RAISE FND_API.G_EXC_ERROR;
4703 	    END IF;
4704          END IF;
4705       END IF;
4706    END IF; -- Called from group check
4707    -- End addition by sk for fixing bug 2110790
4708    -- Check if the account is already expired
4709    -- If so unexpire the account
4710    l_record_found := FALSE;
4711    IF p_called_from_grp <> FND_API.G_TRUE THEN
4712       IF p_party_account_rec.ip_account_id IS NULL OR
4713          p_party_account_rec.ip_account_id = fnd_api.g_miss_num
4714       THEN
4715          BEGIN
4716             SELECT ip_account_id ,
4717                    object_version_number
4718             INTO  p_party_account_rec.ip_account_id,
4719                   p_party_account_rec.object_version_number
4720             FROM  csi_ip_accounts
4721             WHERE instance_party_id    = p_party_account_rec.instance_party_id
4722             AND party_account_id       = p_party_account_rec.party_account_id
4723             AND relationship_type_code = p_party_account_rec.relationship_type_code
4724             AND active_end_date        < sysdate
4725             AND ROWNUM                 = 1;
4726             l_record_found := TRUE ;
4727          EXCEPTION
4728             WHEN OTHERS THEN
4729                NULL;
4730          END;
4731       END IF;
4732    END IF; -- called from group check
4733    /*          --  Commented by sk for fixing the bug 2232880
4734          IF CSI_Instance_parties_vld_pvt.Is_Account_Expired
4735                        (p_party_account_rec) THEN
4736             IF (p_party_account_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE ) THEN
4737                 p_party_account_rec.active_end_date := NULL;
4738              END IF;
4739   */          -- Commented by sk for fixing the bug 2232880
4740    -- Unexpire the account
4741    IF NOT(l_update_record)
4742    THEN      -- Added for bug 2110790
4743       IF l_record_found THEN
4744          -- Added by sk for fixing the bug 2232880
4745          IF   p_party_account_rec.active_end_date = fnd_api.g_miss_date
4746          THEN
4747             p_party_account_rec.active_end_date := NULL;
4748          END IF;
4749          -- End additon by sk for fixing the bug 2232880
4750          update_inst_party_account
4751                 (     p_api_version         => p_api_version
4752                      ,p_commit              => p_commit
4753                      ,p_init_msg_list       => p_init_msg_list
4754                      ,p_validation_level    => p_validation_level
4755                      ,p_party_account_rec   => p_party_account_rec
4756                      ,p_txn_rec             => p_txn_rec
4757                      ,p_oks_txn_inst_tbl    => p_oks_txn_inst_tbl
4758                      ,x_return_status       => x_return_status
4759                      ,x_msg_count           => x_msg_count
4760                      ,x_msg_data            => x_msg_data);
4761 
4762          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4763             l_msg_index := 1;
4764             l_msg_count := x_msg_count;
4765     	    WHILE l_msg_count > 0 LOOP
4766 		        x_msg_data := FND_MSG_PUB.GET(
4767    	      		    		      l_msg_index,
4768 				              FND_API.G_FALSE 	);
4769                         csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
4770 		        l_msg_index := l_msg_index + 1;
4771 	                l_msg_count := l_msg_count - 1;
4772     	    END LOOP;
4773             RAISE FND_API.G_EXC_ERROR;
4774          END IF;
4775         -- END IF; -- commented by sk for fixing the bug 2232880
4776       ELSE  -- Added by sk for fixing the bug 2232880
4777          -- Verify if the party account combination exists
4778          IF p_called_from_grp <> FND_API.G_TRUE THEN
4779             IF CSI_Instance_parties_vld_pvt.Is_Pty_Acct_Comb_Exists
4780                           (p_party_account_rec.instance_party_id   ,
4781                            p_party_account_rec.party_account_id    ,
4782                            p_party_account_rec.relationship_type_code ) THEN
4783                 RAISE FND_API.G_EXC_ERROR;
4784             END IF;
4785          END IF;
4786 
4787          IF  p_party_account_rec.IP_ACCOUNT_ID is  NULL OR
4788              p_party_account_rec.IP_ACCOUNT_ID = FND_API.G_MISS_NUM THEN
4789             -- If ip_account_id passed is null then generate from sequence
4790             -- and check if the value exists . If exists then generate again
4791             -- from the sequence till we get a value that does not exist
4792             while l_process_flag loop
4793                p_party_account_rec.IP_ACCOUNT_ID := CSI_Instance_parties_vld_pvt.gen_ip_account_id;
4794                IF NOT(CSI_Instance_parties_vld_pvt.Is_IP_account_Exists(p_party_account_rec.IP_ACCOUNT_ID,
4795                                                                      FALSE            )) THEN
4796                   l_process_flag := FALSE;
4797                END IF;
4798             end loop;
4799          ELSE
4800             -- Validate the instance_party_id if exist then raise CSI_API_INVALID_PRIMARY_KEY error
4801             IF CSI_Instance_parties_vld_pvt.Is_IP_account_Exists(p_party_account_rec.IP_ACCOUNT_ID ,
4802                                                                  TRUE                 ) THEN
4803                RAISE FND_API.G_EXC_ERROR;
4804             END IF;
4805          END IF;
4806          -- Verify if the instance_party_id is valid
4807          -- Check the cache before hitting the Database.
4808          IF p_called_from_grp <> FND_API.G_TRUE THEN
4809 	    l_exists_flag := 'N';
4810 	    l_valid_flag := 'Y';
4811 	    IF p_inst_party_tbl.count > 0 THEN
4812 	       For tab_row in p_inst_party_tbl.FIRST .. p_inst_party_tbl.LAST
4813 	       LOOP
4814 		  IF p_inst_party_tbl(tab_row).instance_party_id = p_party_account_rec.INSTANCE_PARTY_ID THEN
4815 		     l_valid_flag := p_inst_party_tbl(tab_row).valid_flag;
4816 		     l_exists_flag := 'Y';
4817 		     exit;
4818 		  END IF;
4819 	       END LOOP;
4820 	       --
4821 	       IF l_valid_flag <> 'Y' THEN
4822 		  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
4823 		  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_party_account_rec.INSTANCE_PARTY_ID);
4824 		  FND_MSG_PUB.Add;
4825 		  RAISE FND_API.G_EXC_ERROR;
4826 	       END IF;
4827 	    END IF;
4828 	    --
4829 	    IF l_exists_flag <> 'Y' THEN
4830 	       p_account_count_rec.inst_party_count := p_account_count_rec.inst_party_count + 1;
4831 	       p_inst_party_tbl(p_account_count_rec.inst_party_count).instance_party_id := p_party_account_rec.INSTANCE_PARTY_ID;
4832 	       IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid(
4833                                                  p_Instance_party_id => p_party_account_rec.INSTANCE_PARTY_ID
4834                                                 ,p_txn_type_id       => p_txn_rec.transaction_type_id
4835                                                 ,p_mode              => 'C' )      -- Added for bug 3550541
4836                   )
4837                THEN
4838 	          p_inst_party_tbl(p_account_count_rec.inst_party_count).valid_flag := 'N';
4839 	      -- Message added in the validation routine since additional validation added for bug # 2477417.
4840 		--  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
4841 		--  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_party_account_rec.INSTANCE_PARTY_ID);
4842 		--  FND_MSG_PUB.Add;
4843 		--  RAISE FND_API.G_EXC_ERROR;
4844 	       ELSE
4845 		  p_inst_party_tbl(p_account_count_rec.inst_party_count).valid_flag := 'Y';
4846 	       END IF;
4847 	    END IF;
4848          END IF; -- called from group check
4849          -- Verify Party Account ID is Valid
4850          IF p_called_from_grp <> FND_API.G_TRUE THEN
4851             IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_accountID_Valid
4852                           (p_party_account_rec.PARTY_ACCOUNT_ID,
4853                            p_party_account_rec.INSTANCE_PARTY_ID,
4854                            p_party_account_rec.RELATIONSHIP_TYPE_CODE,
4855                            p_txn_rec.transaction_type_id, -- Added for bug 3550541
4856                            'C'))                          -- Added for bug 3550541
4857             THEN
4858                RAISE FND_API.G_EXC_ERROR;
4859             END IF;
4860          END IF;
4861 
4862          -- Verify the relationship_type_code is valid
4863          -- Check the cache before hitting the Database.
4864          l_exists_flag := 'N';
4865          l_valid_flag := 'Y';
4866          IF p_acct_rel_type_tbl.count > 0 THEN
4867             For tab_row in p_acct_rel_type_tbl.FIRST .. p_acct_rel_type_tbl.LAST
4868             LOOP
4869               IF p_acct_rel_type_tbl(tab_row).rel_type_code = p_party_account_rec.RELATIONSHIP_TYPE_CODE THEN
4870                  l_valid_flag := p_acct_rel_type_tbl(tab_row).valid_flag;
4871                  l_exists_flag := 'Y';
4872                  exit;
4873               END IF;
4874             END LOOP;
4875             --
4876             IF l_valid_flag <> 'Y' THEN
4877 	       FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_ACCOUNT_TYPE');
4878 	       FND_MESSAGE.SET_TOKEN('IP_RELATIONSHIP_TYPE_CODE',p_party_account_rec.RELATIONSHIP_TYPE_CODE);
4879 	       FND_MSG_PUB.Add;
4880                RAISE FND_API.G_EXC_ERROR;
4881             END IF;
4882          END IF;
4883          IF l_exists_flag <> 'Y' THEN
4884             p_account_count_rec.rel_type_count := p_account_count_rec.rel_type_count + 1;
4885             p_acct_rel_type_tbl(p_account_count_rec.rel_type_count).rel_type_code :=
4886                                                 p_party_account_rec.RELATIONSHIP_TYPE_CODE;
4887             IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_Rel_type_Valid
4888                                    (p_party_account_rec.RELATIONSHIP_TYPE_CODE)) THEN
4889                p_acct_rel_type_tbl(p_account_count_rec.rel_type_count).valid_flag := 'N';
4890                RAISE FND_API.G_EXC_ERROR;
4891             ELSE
4892                p_acct_rel_type_tbl(p_account_count_rec.rel_type_count).valid_flag := 'Y';
4893             END IF;
4894          END IF;
4895 
4896           -- If active_start_date is null or G_MISS value then assign sysdate
4897          IF ((p_party_account_rec.ACTIVE_START_DATE IS NULL ) OR
4898             ( p_party_account_rec.ACTIVE_START_DATE = FND_API.G_MISS_DATE)) THEN
4899               p_party_account_rec.ACTIVE_START_DATE := SYSDATE;
4900          END IF;
4901 
4902          -- verify if the active_start_date is valid
4903          IF p_called_from_grp <> FND_API.G_TRUE THEN
4904             IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_StartDate_Valid
4905                                             (p_party_account_rec.ACTIVE_START_DATE,
4906                                              p_party_account_rec.ACTIVE_END_DATE ,
4907                                              p_party_account_rec.INSTANCE_PARTY_ID  )) THEN
4908                RAISE FND_API.G_EXC_ERROR;
4909             END IF;
4910 
4911             -- Verify if the active_end_date is valid
4912             IF ((p_party_account_rec.ACTIVE_END_DATE is NOT NULL) AND
4913                 (p_party_account_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE )) THEN
4914                 IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_EndDate_Valid
4915                                     (p_party_account_rec.ACTIVE_START_DATE,
4916                                      p_party_account_rec.ACTIVE_END_DATE ,
4917                                      p_party_account_rec.INSTANCE_PARTY_ID ,
4918 		      	             p_party_account_rec.IP_ACCOUNT_ID ,
4919 			             p_txn_rec.TRANSACTION_ID))  THEN
4920                    RAISE FND_API.G_EXC_ERROR;
4921                 END IF;
4922             END IF;
4923          END IF; -- Called from group check
4924 
4925        -- Verify if bill to address is correct
4926          IF ((p_party_account_rec.bill_to_address IS NOT NULL) AND
4927              (p_party_account_rec.bill_to_address <> FND_API.G_MISS_NUM )) THEN
4928             -- Check the cache before hitting the Database.
4929             l_exists_flag := 'N';
4930             l_valid_flag := 'Y';
4931             IF p_site_use_tbl.count > 0 THEN
4932                For tab_row in p_site_use_tbl.FIRST .. p_site_use_tbl.LAST
4933                LOOP
4934                   IF p_site_use_tbl(tab_row).site_use_id = p_party_account_rec.bill_to_address AND
4935                      p_site_use_tbl(tab_row).site_use_code = 'BILL_TO' THEN
4936                      l_valid_flag := p_site_use_tbl(tab_row).valid_flag;
4937                      l_exists_flag := 'Y';
4938                      exit;
4939                   END IF;
4940                END LOOP;
4941                --
4942                IF l_valid_flag <> 'Y' THEN
4943                   FND_MESSAGE.SET_NAME('CSI','CSI_INVALID_BILL_TO_ADD_ID');
4944 	          FND_MESSAGE.SET_TOKEN('BILL_TO_ADD_ID',p_party_account_rec.bill_to_address);
4945 	          FND_MSG_PUB.Add;
4946                   RAISE FND_API.G_EXC_ERROR;
4947                END IF;
4948             END IF;
4949             --
4950             IF l_exists_flag <> 'Y' THEN
4951                p_account_count_rec.site_use_count := p_account_count_rec.site_use_count + 1;
4952                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_id :=
4953                                                 p_party_account_rec.bill_to_address;
4954                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_code := 'BILL_TO';
4955                IF NOT(CSI_Instance_parties_vld_pvt.Is_bill_to_add_valid
4956                    ( p_party_account_rec.bill_to_address)) THEN
4957                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'N';
4958                   RAISE FND_API.G_EXC_ERROR;
4959                ELSE
4960                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'Y';
4961                END IF;
4962             END IF;
4963          END IF;
4964 
4965        -- Verify if ship to address is correct
4966          IF ((p_party_account_rec.ship_to_address IS NOT NULL) AND
4967              (p_party_account_rec.ship_to_address <> FND_API.G_MISS_NUM )) THEN
4968             -- Check the cache before hitting the Database.
4969             l_exists_flag := 'N';
4970             l_valid_flag := 'Y';
4971             IF p_site_use_tbl.count > 0 THEN
4972                For tab_row in p_site_use_tbl.FIRST .. p_site_use_tbl.LAST
4973                LOOP
4974                   IF p_site_use_tbl(tab_row).site_use_id = p_party_account_rec.ship_to_address AND
4975                      p_site_use_tbl(tab_row).site_use_code = 'SHIP_TO' THEN
4976                      l_valid_flag := p_site_use_tbl(tab_row).valid_flag;
4977                      l_exists_flag := 'Y';
4978                      exit;
4979                   END IF;
4980                END LOOP;
4981                --
4982                IF l_valid_flag <> 'Y' THEN
4983                   FND_MESSAGE.SET_NAME('CSI','CSI_INVALID_SHIP_TO_ADD_ID');
4984 	          FND_MESSAGE.SET_TOKEN('SHIP_TO_ADD_ID',p_party_account_rec.ship_to_address);
4985 	          FND_MSG_PUB.Add;
4986                   RAISE FND_API.G_EXC_ERROR;
4987                END IF;
4988             END IF;
4989             --
4990             IF l_exists_flag <> 'Y' THEN
4991                p_account_count_rec.site_use_count := p_account_count_rec.site_use_count + 1;
4992                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_id :=
4993                                                 p_party_account_rec.ship_to_address;
4994                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_code := 'SHIP_TO';
4995                IF NOT(CSI_Instance_parties_vld_pvt.Is_ship_to_add_valid
4996                   ( p_party_account_rec.ship_to_address)) THEN
4997                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'N';
4998                   RAISE FND_API.G_EXC_ERROR;
4999                ELSE
5000                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'Y';
5001                END IF;
5002             END IF;
5003          END IF;
5004 
5005        -- Following will not be done when called from Group API.
5006        -- Verify if it meets Account Rules
5007        IF p_called_from_grp <> FND_API.G_TRUE THEN
5008 
5009           IF CSI_Instance_parties_vld_pvt.Acct_Rules_Check
5010                           (p_party_account_rec.instance_party_id   ,
5011                            p_party_account_rec.relationship_type_code ) THEN
5012                 RAISE FND_API.G_EXC_ERROR;
5013             END IF;
5014 
5015           -- Get the parent party record
5016           IF NOT(CSI_Instance_parties_vld_pvt.Get_Party_Record
5017                   ( p_party_account_rec.instance_party_id,
5018                     l_party_rec)) THEN
5019                  RAISE FND_API.G_EXC_ERROR;
5020            END IF;
5021 
5022           -- If it is an owner party and owner account then update csi_item_instances
5023           -- Account Rules check ensures that if the owner account is
5024           -- being created, the parent party is always a owner party
5025            IF ((p_party_account_rec.RELATIONSHIP_TYPE_CODE = 'OWNER')
5026                AND (l_party_rec.RELATIONSHIP_TYPE_CODE = 'OWNER')) THEN
5027 
5028                 update csi_item_instances
5029                 set   owner_party_account_id = p_party_account_rec.party_account_id
5030                 where instance_id     = l_party_rec.instance_id;
5031            END IF;
5032 
5033         -- Call table handlers to insert into csi_ip_accounts table
5034         CSI_IP_ACCOUNTS_PKG.Insert_Row(
5035           px_IP_ACCOUNT_ID      => p_party_account_rec.ip_account_id,
5036           p_INSTANCE_PARTY_ID   => p_party_account_rec.INSTANCE_PARTY_ID,
5037           p_PARTY_ACCOUNT_ID    => p_party_account_rec.PARTY_ACCOUNT_ID,
5038           p_RELATIONSHIP_TYPE_CODE => p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5039           p_ACTIVE_START_DATE   => p_party_account_rec.ACTIVE_START_DATE,
5040           p_ACTIVE_END_DATE     => p_party_account_rec.ACTIVE_END_DATE,
5041           p_CONTEXT             => p_party_account_rec.CONTEXT,
5042           p_ATTRIBUTE1          => p_party_account_rec.ATTRIBUTE1,
5043           p_ATTRIBUTE2          => p_party_account_rec.ATTRIBUTE2,
5044           p_ATTRIBUTE3          => p_party_account_rec.ATTRIBUTE3,
5045           p_ATTRIBUTE4          => p_party_account_rec.ATTRIBUTE4,
5046           p_ATTRIBUTE5          => p_party_account_rec.ATTRIBUTE5,
5047           p_ATTRIBUTE6          => p_party_account_rec.ATTRIBUTE6,
5048           p_ATTRIBUTE7          => p_party_account_rec.ATTRIBUTE7,
5049           p_ATTRIBUTE8          => p_party_account_rec.ATTRIBUTE8,
5050           p_ATTRIBUTE9          => p_party_account_rec.ATTRIBUTE9,
5051           p_ATTRIBUTE10         => p_party_account_rec.ATTRIBUTE10,
5052           p_ATTRIBUTE11         => p_party_account_rec.ATTRIBUTE11,
5053           p_ATTRIBUTE12         => p_party_account_rec.ATTRIBUTE12,
5054           p_ATTRIBUTE13         => p_party_account_rec.ATTRIBUTE13,
5055           p_ATTRIBUTE14         => p_party_account_rec.ATTRIBUTE14,
5056           p_ATTRIBUTE15         => p_party_account_rec.ATTRIBUTE15,
5057           p_CREATED_BY          => FND_GLOBAL.USER_ID             ,
5058           p_CREATION_DATE       => SYSDATE                        ,
5059           p_LAST_UPDATED_BY     => FND_GLOBAL.USER_ID             ,
5060           p_LAST_UPDATE_DATE    => SYSDATE                        ,
5061           p_LAST_UPDATE_LOGIN   => FND_GLOBAL.LOGIN_ID            ,
5062           p_OBJECT_VERSION_NUMBER  => 1                           ,
5063           p_BILL_TO_ADDRESS     => p_party_account_rec.BILL_TO_ADDRESS,
5064           p_SHIP_TO_ADDRESS     => p_party_account_rec.SHIP_TO_ADDRESS,
5065           p_REQUEST_ID          => p_party_account_rec.REQUEST_ID,
5066           p_PROGRAM_APPLICATION_ID => p_party_account_rec.PROGRAM_APPLICATION_ID,
5067           p_PROGRAM_ID          => p_party_account_rec.PROGRAM_ID,
5068           p_PROGRAM_UPDATE_DATE => p_party_account_rec.PROGRAM_UPDATE_DATE
5069           );
5070 
5071         -- Call create_transaction to create txn log
5072         CSI_TRANSACTIONS_PVT.Create_transaction
5073           (
5074              p_api_version            => p_api_version
5075             ,p_commit                 => p_commit
5076             ,p_init_msg_list          => p_init_msg_list
5077             ,p_validation_level       => p_validation_level
5078             ,p_Success_If_Exists_Flag => 'Y'
5079             ,P_transaction_rec       => p_txn_rec
5080             ,x_return_status          => x_return_status
5081             ,x_msg_count              => x_msg_count
5082             ,x_msg_data               => x_msg_data          );
5083 
5084 
5085          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
5086 	         l_msg_index := 1;
5087                  l_msg_count := x_msg_count;
5088    	         WHILE l_msg_count > 0 LOOP
5089      		       x_msg_data := FND_MSG_PUB.GET(
5090     	         		                l_msg_index,
5091 	     	     		                FND_API.G_FALSE	);
5092 	               csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
5093 	    	       l_msg_index := l_msg_index + 1;
5094 		           l_msg_count := l_msg_count - 1;
5095 	          END LOOP;
5096                   RAISE FND_API.G_EXC_ERROR;
5097          END IF;
5098 
5099          -- Generate a unique instance_party_history_id from the sequence
5100          l_ip_account_history_id := CSI_Instance_parties_vld_pvt.gen_ip_account_hist_id;
5101 
5102          CSI_IP_ACCOUNTS_H_PKG.Insert_Row
5103          (
5104           px_IP_ACCOUNT_HISTORY_ID        => l_ip_account_history_id          ,
5105           p_IP_ACCOUNT_ID                 => p_party_account_rec.ip_account_id,
5106           p_TRANSACTION_ID                => p_txn_rec.transaction_id        ,
5107           p_OLD_PARTY_ACCOUNT_ID          => NULL                            ,
5108           p_NEW_PARTY_ACCOUNT_ID          => p_party_account_rec.PARTY_ACCOUNT_ID,
5109           p_OLD_RELATIONSHIP_TYPE_CODE    => NULL                            ,
5110           p_NEW_RELATIONSHIP_TYPE_CODE    => p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5111           p_OLD_ACTIVE_START_DATE         => NULL                           ,
5112           p_NEW_ACTIVE_START_DATE         => p_party_account_rec.ACTIVE_START_DATE,
5113           p_OLD_ACTIVE_END_DATE           => NULL                           ,
5114           p_NEW_ACTIVE_END_DATE           => p_party_account_rec.ACTIVE_END_DATE,
5115           p_OLD_CONTEXT                   => NULL                           ,
5116           p_NEW_CONTEXT                   => p_party_account_rec.CONTEXT    ,
5117           p_OLD_ATTRIBUTE1                => NULL                           ,
5118           p_NEW_ATTRIBUTE1                => p_party_account_rec.ATTRIBUTE1 ,
5119           p_OLD_ATTRIBUTE2                => NULL                           ,
5120           p_NEW_ATTRIBUTE2                => p_party_account_rec.ATTRIBUTE2 ,
5121           p_OLD_ATTRIBUTE3                => NULL                           ,
5122           p_NEW_ATTRIBUTE3                => p_party_account_rec.ATTRIBUTE3 ,
5123           p_OLD_ATTRIBUTE4                => NULL                           ,
5124           p_NEW_ATTRIBUTE4                => p_party_account_rec.ATTRIBUTE4 ,
5125           p_OLD_ATTRIBUTE5                => NULL                           ,
5126           p_NEW_ATTRIBUTE5                => p_party_account_rec.ATTRIBUTE5 ,
5127           p_OLD_ATTRIBUTE6                => NULL                           ,
5128           p_NEW_ATTRIBUTE6                => p_party_account_rec.ATTRIBUTE6 ,
5129           p_OLD_ATTRIBUTE7                => NULL                           ,
5130           p_NEW_ATTRIBUTE7                => p_party_account_rec.ATTRIBUTE7 ,
5131           p_OLD_ATTRIBUTE8                => NULL                           ,
5132           p_NEW_ATTRIBUTE8                => p_party_account_rec.ATTRIBUTE8 ,
5133           p_OLD_ATTRIBUTE9                => NULL                           ,
5134           p_NEW_ATTRIBUTE9                => p_party_account_rec.ATTRIBUTE9 ,
5135           p_OLD_ATTRIBUTE10               => NULL                           ,
5136           p_NEW_ATTRIBUTE10               => p_party_account_rec.ATTRIBUTE10,
5137           p_OLD_ATTRIBUTE11               => NULL                           ,
5138           p_NEW_ATTRIBUTE11               => p_party_account_rec.ATTRIBUTE11,
5139           p_OLD_ATTRIBUTE12               => NULL                           ,
5140           p_NEW_ATTRIBUTE12               => p_party_account_rec.ATTRIBUTE12,
5141           p_OLD_ATTRIBUTE13               => NULL                           ,
5142           p_NEW_ATTRIBUTE13               => p_party_account_rec.ATTRIBUTE13,
5143           p_OLD_ATTRIBUTE14               => NULL                           ,
5144           p_NEW_ATTRIBUTE14               => p_party_account_rec.ATTRIBUTE14,
5145           p_OLD_ATTRIBUTE15               => NULL                           ,
5146           p_NEW_ATTRIBUTE15               => p_party_account_rec.ATTRIBUTE15,
5147           p_FULL_DUMP_FLAG                => 'N'                            ,
5148           p_CREATED_BY                    => FND_GLOBAL.USER_ID             ,
5149           p_CREATION_DATE                 => SYSDATE                        ,
5150           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID             ,
5151           p_LAST_UPDATE_DATE              => SYSDATE                        ,
5152           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID            ,
5153           p_OBJECT_VERSION_NUMBER         => 1                              ,
5154           p_OLD_BILL_TO_ADDRESS           => NULL                           ,
5155           p_NEW_BILL_TO_ADDRESS           => p_party_account_rec.BILL_TO_ADDRESS,
5156           p_OLD_SHIP_TO_ADDRESS           => NULL                           ,
5157           p_NEW_SHIP_TO_ADDRESS           => p_party_account_rec.SHIP_TO_ADDRESS,
5158           p_OLD_INSTANCE_PARTY_ID         => NULL                           ,
5159           p_NEW_INSTANCE_PARTY_ID         => p_party_account_rec.INSTANCE_PARTY_ID);
5160 
5161        END IF; -- p_called_from_grp check
5162        -- Call Contracts
5163        -- End commentation by sguthiva for bug 2307804
5164        -- Added by sguthiva for bug 2307804
5165        IF (    (p_party_account_rec.call_contracts <> fnd_api.g_false)
5166              AND (p_party_account_rec.relationship_type_code = 'OWNER' )
5167           )
5168        THEN
5169           -- The following code has been written to make sure
5170           -- before calling contracts we pass a valid vld_organization_id
5171           IF p_party_account_rec.vld_organization_id IS NULL OR
5172              p_party_account_rec.vld_organization_id = fnd_api.g_miss_num
5173           THEN
5174              BEGIN
5175                 SELECT last_vld_organization_id
5176                 INTO   l_last_vld_org
5177                 FROM   csi_item_instances
5178                 WHERE  instance_id = l_party_rec.instance_id;
5179              EXCEPTION
5180                 WHEN OTHERS THEN
5181                    NULL;
5182              END;
5183           ELSE
5184              l_last_vld_org := p_party_account_rec.vld_organization_id;
5185           END IF;
5186           --
5187           IF p_txn_rec.transaction_type_id <> 7   -- Added for bug 3973706
5188           THEN
5189              csi_item_instance_pvt.Call_to_Contracts(
5190                               p_transaction_type   =>   'NEW'
5191                              ,p_instance_id        =>   l_party_rec.instance_id
5192                              ,p_new_instance_id    =>   NULL
5193                              ,p_vld_org_id         =>   l_last_vld_org
5194                              ,p_quantity           =>   NULL
5195                              ,p_party_account_id1  =>   NULL         -- old party account id
5196                              ,p_party_account_id2  =>   NULL         -- new party account id
5197                              ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
5198                              ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date
5199                              ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
5200                              ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
5201                              ,x_return_status      =>   x_return_status
5202                              ,x_msg_count          =>   x_msg_count
5203                              ,x_msg_data           =>   x_msg_data
5204                               );
5205 
5206              IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS)
5207              THEN
5208                 l_msg_index := 1;
5209                 l_msg_count := x_msg_count;
5210                 WHILE l_msg_count > 0 LOOP
5211                    x_msg_data := FND_MSG_PUB.GET(
5212                                                  l_msg_index,
5213                                                  FND_API.G_FALSE   );
5214                    csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
5215                    l_msg_index := l_msg_index + 1;
5216                    l_msg_count := l_msg_count - 1;
5217                 END LOOP;
5218                 RAISE FND_API.G_EXC_ERROR;
5219              END IF;
5220           END IF; -- Added for bug 3973706
5221        END IF;
5222     END IF; -- Added by sk for fixing the bug 2232880
5223   END IF; -- Added by sk for bug 2110790
5224         -- End addition by sguthiva for bug 2307804
5225         --
5226         -- End of API body
5227         -- Standard check of p_commit.
5228 
5229         IF FND_API.To_Boolean( p_commit ) THEN
5230                 COMMIT WORK;
5231         END IF;
5232 
5233 
5234         -- Standard call to get message count and if count is  get message info.
5235         FND_MSG_PUB.Count_And_Get
5236                 (p_count        =>      x_msg_count ,
5237                  p_data         =>      x_msg_data  );
5238 EXCEPTION
5239         WHEN FND_API.G_EXC_ERROR THEN
5240                 ROLLBACK TO create_inst_party_acct_pvt;
5241                 x_return_status := FND_API.G_RET_STS_ERROR ;
5242 
5243                 FND_MSG_PUB.Count_And_Get
5244                 (       p_count      =>      x_msg_count,
5245                         p_data       =>      x_msg_data  );
5246         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5247                ROLLBACK TO create_inst_party_acct_pvt;
5248                x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5249                 FND_MSG_PUB.Count_And_Get
5250                 (       p_count   =>      x_msg_count,
5251                         p_data    =>      x_msg_data  );
5252         WHEN OTHERS THEN
5253                 ROLLBACK TO create_inst_party_acct_pvt;
5254                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5255                 IF FND_MSG_PUB.Check_Msg_Level
5256                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5257                 THEN
5258                    FND_MSG_PUB.Add_Exc_Msg
5259                     ( g_pkg_name, l_api_name );
5260                 END IF;
5261                FND_MSG_PUB.Count_And_Get
5262                 (       p_count     =>      x_msg_count,
5263                         p_data      =>      x_msg_data );
5264 
5265 END create_inst_party_account;
5266 
5267 /*-----------------------------------------------------------*/
5268 /* Procedure name:  Update_inst_party_account                */
5269 /* Description :  Procedure used to update the existing      */
5270 /*                instance-party account relationships       */
5271 /*-----------------------------------------------------------*/
5272 
5273 PROCEDURE update_inst_party_account
5274  (    p_api_version                 IN  NUMBER
5275      ,p_commit                      IN  VARCHAR2
5276      ,p_init_msg_list               IN  VARCHAR2
5277      ,p_validation_level            IN  NUMBER
5278      ,p_party_account_rec           IN  csi_datastructures_pub.party_account_rec
5279      ,p_txn_rec                     IN  OUT NOCOPY  csi_datastructures_pub.transaction_rec
5280      ,p_oks_txn_inst_tbl            IN OUT NOCOPY   oks_ibint_pub.txn_instance_tbl
5281      ,x_return_status               OUT NOCOPY  VARCHAR2
5282      ,x_msg_count                   OUT NOCOPY  NUMBER
5283      ,x_msg_data                    OUT NOCOPY  VARCHAR2
5284     ) IS
5285 
5286       l_api_name      CONSTANT VARCHAR2(30)   := 'UPDATE_INST_PARTY_ACCOUNT';
5287       l_api_version   CONSTANT NUMBER         := 1.0;
5288       l_csi_debug_level        NUMBER;
5289 --       l_curr_party_acct_rec    csi_datastructures_pub.party_account_rec;
5290       l_temp_party_account_rec csi_datastructures_pub.party_account_rec;
5291       l_party_rec              csi_datastructures_pub.party_rec;
5292       l_msg_index              NUMBER;
5293       l_msg_count              NUMBER;
5294       l_mod_value              NUMBER;
5295       l_object_version_number  NUMBER;
5296       l_ip_account_history_id  NUMBER;
5297       l_full_dump_frequency    NUMBER;
5298       x_msg_index_out          NUMBER;
5299 
5300       -- Alternate PK variables
5301       l_alt_pk_inst_pty_id     NUMBER;
5302       l_alt_pk_pty_acct_id     NUMBER;
5303       l_alt_pk_rel_type_code   VARCHAR2(30);
5304 
5305       l_party_relation                VARCHAR2(30);
5306       l_transaction_type              VARCHAR2(10);
5307       l_old_oks_cp_rec                oks_ibint_pub.cp_rec_type;
5308       l_new_oks_cp_rec                oks_ibint_pub.cp_rec_type;
5309       l_contracts_status              VARCHAR2(3);
5310       l_internal_party_id             NUMBER;
5311       l_party_id                      NUMBER;
5312       l_old_party_id                  NUMBER;
5313       l_new_party_id                  NUMBER;
5314     CURSOR instance_csr (p_ins_id IN NUMBER) IS
5315       SELECT  *
5316       FROM    csi_item_instances
5317       WHERE   instance_id = p_ins_id;
5318     l_instance_csr    instance_csr%ROWTYPE;
5319 
5320   CURSOR get_curr_party_acct_rec (p_ip_account_id   IN  NUMBER) IS
5321    SELECT
5322      ip_account_id                    ,
5323      FND_API.G_MISS_NUM parent_tbl_index,
5324      instance_party_id                ,
5325      party_account_id                 ,
5326      relationship_type_code           ,
5327      bill_to_address                  ,
5328      ship_to_address                  ,
5329      active_start_date                ,
5330      active_end_date                  ,
5331      context                          ,
5332      attribute1                       ,
5333      attribute2                       ,
5334      attribute3                       ,
5335      attribute4                       ,
5336      attribute5                       ,
5337      attribute6                       ,
5338      attribute7                       ,
5339      attribute8                       ,
5340      attribute9                       ,
5341      attribute10                      ,
5342      attribute11                      ,
5343      attribute12                      ,
5344      attribute13                      ,
5345      attribute14                      ,
5346      attribute15                      ,
5347      object_version_number
5348     FROM CSI_IP_ACCOUNTS
5349    WHERE IP_ACCOUNT_ID = p_ip_account_id
5350    FOR UPDATE OF OBJECT_VERSION_NUMBER;
5351     --AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE));
5352 
5353   l_curr_party_acct_rec    get_curr_party_acct_rec%ROWTYPE;
5354 
5355 
5356   CURSOR pty_acct_csr (p_act_hist_id NUMBER) IS
5357   SELECT  ip_account_history_id
5358          ,ip_account_id
5359          ,transaction_id
5360          ,old_party_account_id
5361          ,new_party_account_id
5362          ,old_relationship_type_code
5363          ,new_relationship_type_code
5364          ,old_active_start_date
5365          ,new_active_start_date
5366          ,old_active_end_date
5367          ,new_active_end_date
5368          ,old_context
5369          ,new_context
5370          ,old_attribute1
5371          ,new_attribute1
5372          ,old_attribute2
5373          ,new_attribute2
5374          ,old_attribute3
5375          ,new_attribute3
5376          ,old_attribute4
5377          ,new_attribute4
5378          ,old_attribute5
5379          ,new_attribute5
5380          ,old_attribute6
5381          ,new_attribute6
5382          ,old_attribute7
5383          ,new_attribute7
5384          ,old_attribute8
5385          ,new_attribute8
5386          ,old_attribute9
5387          ,new_attribute9
5388          ,old_attribute10
5389          ,new_attribute10
5390          ,old_attribute11
5391          ,new_attribute11
5392          ,old_attribute12
5393          ,new_attribute12
5394          ,old_attribute13
5395          ,new_attribute13
5396          ,old_attribute14
5397          ,new_attribute14
5398          ,old_attribute15
5399          ,new_attribute15
5400          ,object_version_number
5401          ,old_bill_to_address
5402          ,new_bill_to_address
5403          ,old_ship_to_address
5404          ,new_ship_to_address
5405          ,full_dump_flag
5406          ,old_instance_party_id
5407          ,new_instance_party_id
5408   FROM   csi_ip_accounts_h
5409   WHERE  csi_ip_accounts_h.ip_account_history_id = p_act_hist_id
5410   FOR UPDATE OF object_version_number ;
5411   l_pty_acct_csr         pty_acct_csr%ROWTYPE;
5412   l_ip_acct_hist_id      NUMBER;
5413   l_old_pty_acct_id      NUMBER; -- Added by sguthiva for bug 2307804
5414   l_new_pty_acct_id      NUMBER; -- Added by sguthiva for bug 2307804
5415   l_last_vld_org         NUMBER; -- Added by sguthiva for bug 2307804
5416   l_party_account_id     NUMBER; -- Added by sguthiva for bug 2307804
5417   l_account_hist_rec     csi_datastructures_pub.account_history_rec;
5418   l_rel_type_code        VARCHAR2(30);
5419   l_acct_end_date        DATE;
5420   l_temp_acct_date       DATE;
5421   l_found_for_update     VARCHAR2(1):='N';
5422   l_dummy                VARCHAR2(1);
5423   l_instance_party_id    NUMBER;
5424 BEGIN
5425         -- Standard Start of API savepoint
5426         -- SAVEPOINT  update_inst_party_acct_pvt;
5427 
5428 
5429         -- Standard call to check for call compatibility.
5430         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
5431                                                 p_api_version           ,
5432                                                 l_api_name              ,
5433                                                 g_pkg_name              )
5434         THEN
5435                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5436         END IF;
5437 
5438         -- Initialize message list if p_init_msg_list is set to TRUE.
5439         IF FND_API.to_Boolean( p_init_msg_list ) THEN
5440                 FND_MSG_PUB.initialize;
5441         END IF;
5442 
5443         --  Initialize API return status to success
5444         x_return_status := FND_API.G_RET_STS_SUCCESS;
5445 
5446         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
5447         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
5448 
5449         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
5450         IF (l_csi_debug_level > 0) THEN
5451             csi_gen_utility_pvt.put_line( 'update_inst_party_account');
5452         END IF;
5453 
5454         -- If the debug level = 2 then dump all the parameters values.
5455         IF (l_csi_debug_level > 1) THEN
5456                 csi_gen_utility_pvt.put_line( 'update_inst_party_account '||'-'||
5457                                                 p_api_version           ||'-'||
5458                                                 p_commit                ||'-'||
5459                                                 p_init_msg_list               );
5460             -- Dump the records in the log file
5461             csi_gen_utility_pvt.dump_party_account_rec(p_party_account_rec);
5462             csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
5463         END IF;
5464 
5465         -- Start API body
5466         --
5467         -- Check if all the required parameters are passed
5468     	 CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
5469  	      (    p_party_account_rec.ip_account_id ,
5470 		    '  p_party_account_rec.IP_ACCOUNT_ID ',
5471 		       l_api_name                 );
5472         --
5473         IF p_party_account_rec.party_account_id IS NULL THEN
5474            FND_MESSAGE.SET_NAME('CSI','CSI_API_MANDATORY_ACCOUNT');
5475            FND_MSG_PUB.Add;
5476            RAISE FND_API.G_EXC_ERROR;
5477         END IF;
5478         --
5479     	-- Check if the instance party id  is valid
5480       -- Commented by sk for bug 2232880
5481       -- End of commentation by sk for bug 2232880
5482 
5483         -- check if the object_version_number passed matches with the one
5484         -- in the database else raise error
5485         OPEN get_curr_party_acct_rec(p_party_account_rec.IP_ACCOUNT_ID);
5486         FETCH get_curr_party_acct_rec INTO l_curr_party_acct_rec;
5487         IF  (l_curr_party_acct_rec.object_version_number <> p_party_account_rec.OBJECT_VERSION_NUMBER) THEN
5488             FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
5489             FND_MSG_PUB.ADD;
5490             RAISE FND_API.G_EXC_ERROR;
5491         END IF;
5492         IF get_curr_party_acct_rec%NOTFOUND THEN
5493           FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
5494           FND_MSG_PUB.ADD;
5495           RAISE FND_API.G_EXC_ERROR;
5496         END IF;
5497         CLOSE get_curr_party_acct_rec;
5498 
5499         -- Added by sguthiva for bug 2307804
5500         IF l_curr_party_acct_rec.active_end_date IS NULL OR
5501            l_curr_party_acct_rec.active_end_date > SYSDATE
5502         THEN
5503              l_old_pty_acct_id :=l_curr_party_acct_rec.party_account_id;-- added 18apr
5504         ELSE
5505              l_old_pty_acct_id := NULL;
5506         END IF;
5507         -- End addition by sguthiva for bug 2307804
5508 
5509         IF p_party_account_rec.INSTANCE_PARTY_ID <> FND_API.G_MISS_NUM THEN
5510     	    -- Check if the instance party id  is valid
5511             IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid
5512                                      (p_Instance_party_id => p_party_account_rec.INSTANCE_PARTY_ID
5513                                      ,p_txn_type_id       => p_txn_rec.transaction_type_id
5514                                      ,p_mode              => 'U'      -- Added for bug 3550541
5515                                       )
5516                    )
5517             THEN
5518             -- Message added in the validation routine since additional validation added for bug # 2477417.
5519 	           --  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
5520 	           --  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_party_account_rec.INSTANCE_PARTY_ID);
5521 	           --  FND_MSG_PUB.Add;
5522                      RAISE FND_API.G_EXC_ERROR;
5523             END IF;
5524             IF p_party_account_rec.INSTANCE_PARTY_ID  <> l_curr_party_acct_rec.INSTANCE_PARTY_ID THEN
5525             -- Start addition
5526                IF p_txn_rec.transaction_type_id <> 7
5527                THEN
5528                   FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5529                   FND_MESSAGE.Set_Token('COLUMN', 'INSTANCE_PARTY_ID');
5530                   FND_MSG_PUB.ADD;
5531                   RAISE FND_API.G_EXC_ERROR;
5532                ELSE
5533                   BEGIN
5534                      SELECT relationship_type_code
5535                      INTO   l_rel_type_code
5536                      FROM   csi_i_parties
5537                      WHERE  instance_party_id=l_curr_party_acct_rec.instance_party_id;
5538 
5539                      IF (l_rel_type_code='OWNER' AND
5540                          l_curr_party_acct_rec.relationship_type_code='OWNER' )/* OR
5541                         (l_curr_party_acct_rec.active_end_date IS NOT NULL AND
5542                          l_curr_party_acct_rec.active_end_date < SYSDATE AND
5543                          (p_party_account_rec.active_end_date = fnd_api.g_miss_date OR
5544                           p_party_account_rec.active_end_date < SYSDATE )) */
5545                     -- Commented the above code for bug 3539990 (reported in 11.5.9)
5546                      THEN
5547                          FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5548                          FND_MESSAGE.Set_Token('COLUMN', 'INSTANCE_PARTY_ID');
5549                          FND_MSG_PUB.ADD;
5550                          RAISE FND_API.G_EXC_ERROR;
5551                      END IF;
5552                   EXCEPTION
5553                      WHEN FND_API.G_EXC_ERROR THEN
5554                           RAISE FND_API.G_EXC_ERROR;
5555                   END;
5556 
5557                END IF;
5558                -- End addition
5559             END IF;
5560         ELSE
5561            -- srramakr Updates not allowed for Expired instance. Bug # 2477417
5562            IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid
5563                                      (p_Instance_party_id => l_curr_party_acct_rec.INSTANCE_PARTY_ID
5564                                      ,p_txn_type_id       => p_txn_rec.transaction_type_id
5565                                      ,p_mode              => 'U'      -- Added for bug 3550541
5566                                       )
5567                   )
5568            THEN
5569               RAISE FND_API.G_EXC_ERROR;
5570            END IF;
5571         END IF;
5572         l_party_relation := CSI_Instance_parties_vld_pvt.Get_Party_relation
5573                          (l_curr_party_acct_rec.Instance_party_id);
5574         --
5575         IF p_party_account_rec.active_start_date IS NULL THEN
5576            FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5577            FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
5578            FND_MSG_PUB.ADD;
5579            RAISE FND_API.G_EXC_ERROR;
5580         END IF;
5581         --
5582         IF p_party_account_rec.active_start_date <> FND_API.G_MISS_DATE THEN
5583              IF p_party_account_rec.active_start_date <> l_curr_party_acct_rec.active_start_date THEN
5584                 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5585                 FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
5586                 FND_MSG_PUB.ADD;
5587                RAISE FND_API.G_EXC_ERROR;
5588              END IF;
5589         END IF;
5590 
5591         -- Verify if the active_end_date is valid
5592         -- Don't allow expiry of owner accounts
5593         IF  ( p_party_account_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE) THEN
5594            IF ((l_curr_party_acct_rec.relationship_type_code = 'OWNER')
5595               AND (l_party_relation = 'OWNER')) THEN
5596               -- Added by sguthiva for bug 2307804
5597                  IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
5598                      csi_gen_utility_pvt.populate_install_param_rec;
5599                   END IF;
5600                   --
5601                   l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
5602                   --
5603                   IF l_internal_party_id IS NULL THEN
5604                      FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
5605                      FND_MSG_PUB.ADD;
5606                      RAISE FND_API.G_EXC_ERROR;
5607                   END IF;
5608                   --
5609               -- End addition by sguthiva for bug 2307804
5610                 IF p_party_account_rec.expire_flag = fnd_api.g_false -- Added by sguthiva for bug 2307804
5611                -- IF csi_party_relationships_pvt.g_force_expire_flag   = 'N' -- Commented by sguthiva for bug 2307804
5612                 THEN
5613                    FND_MESSAGE.Set_Name('CSI', 'CSI_API_EXP_NOT_ALLOWED');
5614                    FND_MESSAGE.Set_Token('COLUMN', 'OWNER ACCOUNT');
5615                    FND_MSG_PUB.ADD;
5616                    RAISE FND_API.G_EXC_ERROR;
5617                 END IF;
5618            ELSE
5619 
5620             -- Verify if the active_end_date is valid
5621              IF p_party_account_rec.expire_flag = fnd_api.g_false  THEN    -- Added by sguthiva for bug 2307804
5622            -- IF (g_expire_account_flag <> 'Y') THEN                       -- Commented by sguthiva for bug 2307804
5623                IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_EndDate_Valid
5624                                  (l_curr_party_acct_rec.ACTIVE_START_DATE,
5625                                   p_party_account_rec.ACTIVE_END_DATE ,
5626                                   p_party_account_rec.INSTANCE_PARTY_ID ,
5627 			          p_party_account_rec.IP_ACCOUNT_ID ,
5628 			          p_txn_rec.TRANSACTION_ID))  THEN
5629                   RAISE FND_API.G_EXC_ERROR;
5630                END IF;
5631 
5632 
5633                -- Added following code for bug 3855525.
5634                IF p_party_account_rec.ACTIVE_END_DATE IS NOT NULL AND
5635                   p_party_account_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE AND                  l_curr_party_acct_rec.ACTIVE_START_DATE IS NOT NULL AND
5636                   l_curr_party_acct_rec.ACTIVE_START_DATE <> FND_API.G_MISS_DATE AND
5637                   p_party_account_rec.ACTIVE_END_DATE < l_curr_party_acct_rec.ACTIVE_START_DATE
5638                THEN
5639                    FND_MESSAGE.Set_Name('CSI', 'CSI_ENDDT_GT_STDT');
5640 
5641                    FND_MESSAGE.Set_Token('END_DATE',p_party_account_rec.ACTIVE_END_DATE);
5642                    FND_MESSAGE.Set_Token('START_DATE',l_curr_party_acct_rec.ACTIVE_START_DATE);
5643                    FND_MSG_PUB.ADD;
5644                    RAISE FND_API.G_EXC_ERROR;
5645                END IF;
5646                -- End code addition for bug 3855525.
5647 
5648              END IF;
5649            END IF;
5650         END IF;
5651 
5652 
5653         -- Verify the relationship_type_code is valid
5654         -- Don't allow change of owner accounts
5655         IF p_party_account_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
5656            IF ((p_party_account_rec.relationship_type_code <> l_curr_party_acct_rec.relationship_type_code)
5657               AND (l_curr_party_acct_rec.relationship_type_code = 'OWNER')
5658               AND (l_party_relation = 'OWNER')) THEN
5659                 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5660                 FND_MESSAGE.Set_Token('COLUMN', 'OWNER ACCOUNT');
5661                 FND_MSG_PUB.ADD;
5662                 RAISE FND_API.G_EXC_ERROR;
5663            ELSE
5664                -- Verify the relationship_type_code is valid
5665               IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_Rel_type_Valid
5666                                 (p_party_account_rec.RELATIONSHIP_TYPE_CODE)) THEN
5667                  RAISE FND_API.G_EXC_ERROR;
5668               END IF;
5669            END IF;
5670         END IF;
5671 
5672   -- Need to add the following as account/party merge transaction
5673   -- is allowed to change the instance_party_id.
5674     IF p_txn_rec.transaction_type_id=7 AND
5675       (p_party_account_rec.instance_party_id IS NOT NULL AND
5676        p_party_account_rec.instance_party_id <> fnd_api.g_miss_num)
5677     THEN
5678       l_instance_party_id := p_party_account_rec.instance_party_id;
5679     ELSE
5680       l_instance_party_id := l_curr_party_acct_rec.INSTANCE_PARTY_ID;
5681     END IF;
5682 
5683         -- verify if party_account_id  is valid
5684         IF p_party_account_rec.PARTY_ACCOUNT_ID <> FND_API.G_MISS_NUM THEN
5685          -- Added the following condition for bug 3830149 (rel 11.5.9)
5686          IF (p_party_account_rec.ACTIVE_END_DATE IS NULL OR
5687              p_party_account_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE)
5688              OR
5689             (p_party_account_rec.ACTIVE_END_DATE IS NOT NULL AND
5690              p_party_account_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE AND
5691              p_party_account_rec.ACTIVE_END_DATE > SYSDATE)
5692          THEN
5693           IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_accountID_Valid
5694                        (p_party_account_rec.PARTY_ACCOUNT_ID,
5695                         l_instance_party_id, --l_curr_party_acct_rec.INSTANCE_PARTY_ID,
5696                         p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5697                         p_txn_rec.transaction_type_id, -- Added for bug 3550541
5698                         'U'                            -- Added for bug 3550541
5699                         )
5700                  )
5701           THEN
5702                RAISE FND_API.G_EXC_ERROR;
5703           END IF;
5704          ELSE
5705            -- Since party_account_id validation is not required during expiration of accounts
5706            -- ,Hence we added the above filter condition.
5707            -- Refer bug 3830149 for more explaination.
5708            NULL;
5709          END IF;
5710         END IF;
5711 
5712        -- Verify if bill to address is correct
5713         IF p_party_account_rec.bill_to_address <> FND_API.G_MISS_NUM THEN
5714            IF NOT(CSI_Instance_parties_vld_pvt.Is_bill_to_add_valid
5715                ( p_party_account_rec.bill_to_address)) THEN
5716                RAISE FND_API.G_EXC_ERROR;
5717            END IF;
5718         END IF;
5719 
5720 
5721        -- Verify if ship to address is correct
5722         IF p_party_account_rec.ship_to_address <> FND_API.G_MISS_NUM THEN
5723             IF NOT(CSI_Instance_parties_vld_pvt.Is_ship_to_add_valid
5724                ( p_party_account_rec.ship_to_address)) THEN
5725                 RAISE FND_API.G_EXC_ERROR;
5726             END IF;
5727         END IF;
5728 
5729        -- Validate alternate primary key
5730        -- Verify if the party account combination exists
5731        IF  ((p_party_account_rec.instance_party_id   IS NULL) OR
5732             (p_party_account_rec.instance_party_id = FND_API.G_MISS_NUM)) THEN
5733           l_alt_pk_inst_pty_id := l_curr_party_acct_rec.instance_party_id;
5734        ELSE
5735           l_alt_pk_inst_pty_id := p_party_account_rec.instance_party_id;
5736        END IF;
5737 
5738        IF ((p_party_account_rec.party_account_id IS NULL) OR
5739             (p_party_account_rec.party_account_id = FND_API.G_MISS_NUM)) THEN
5740             l_alt_pk_pty_acct_id :=   l_curr_party_acct_rec.party_account_id;
5741        ELSE
5742             l_alt_pk_pty_acct_id :=   p_party_account_rec.party_account_id;
5743        END IF;
5744 
5745        IF ((p_party_account_rec.relationship_type_code IS NULL) OR
5746             (p_party_account_rec.relationship_type_code = FND_API.G_MISS_CHAR)) THEN
5747             l_alt_pk_rel_type_code := l_curr_party_acct_rec.relationship_type_code;
5748        ELSE
5749             l_alt_pk_rel_type_code := p_party_account_rec.relationship_type_code;
5750        END IF;
5751 
5752         IF  ((l_alt_pk_inst_pty_id <> l_curr_party_acct_rec.instance_party_id)
5753             OR
5754             (l_alt_pk_pty_acct_id <> l_curr_party_acct_rec.party_account_id)
5755             OR
5756             (l_alt_pk_rel_type_code <> l_curr_party_acct_rec.relationship_type_code))
5757         THEN
5758              -- Verify if the party account combination exists
5759            IF p_txn_rec.transaction_type_id=7
5760            THEN
5761            l_found_for_update:='T';
5762              BEGIN
5763               SELECT 'x'
5764                 INTO l_dummy
5765                 FROM csi_ip_accounts
5766                WHERE instance_party_id      = l_alt_pk_inst_pty_id
5767                  AND party_account_id       = l_alt_pk_pty_acct_id
5768                  AND relationship_type_code = l_alt_pk_rel_type_code
5769                  AND ((active_end_date IS NULL) OR (active_end_date >= sysdate))
5770                  AND ROWNUM=1;
5771 
5772              -- If found then there exists a record in csi_i_parties, Hence
5773             -- I need to expire(if active) this record.
5774                BEGIN
5775                   SELECT active_end_date
5776                     INTO l_temp_acct_date
5777                     FROM csi_ip_accounts
5778                    WHERE ip_account_id=p_party_account_rec.ip_account_id
5779                      AND ((active_end_date IS NULL) OR (active_end_date > sysdate));
5780                    -- Active record found so make it inactive.
5781                        l_temp_acct_date:=sysdate;
5782                EXCEPTION
5783                  WHEN NO_DATA_FOUND THEN
5784                    -- Means the record is already in inactive state.
5785                       l_temp_acct_date := p_party_account_rec.active_end_date;
5786                END;
5787 
5788              EXCEPTION
5789                WHEN OTHERS THEN
5790                -- No changes are needed.
5791                   l_temp_acct_date := p_party_account_rec.active_end_date;
5792              END;
5793 
5794            ELSE
5795              IF CSI_Instance_parties_vld_pvt.Is_Pty_Acct_Comb_Exists
5796                             (l_alt_pk_inst_pty_id ,
5797                              l_alt_pk_pty_acct_id ,
5798                              l_alt_pk_rel_type_code ) THEN
5799                     RAISE FND_API.G_EXC_ERROR;
5800              END IF;
5801            END IF;
5802          END IF;
5803 
5804        -- Verify if it meets Account Rules
5805         IF  ((l_alt_pk_inst_pty_id <> l_curr_party_acct_rec.instance_party_id)
5806             OR
5807             (l_alt_pk_rel_type_code <> l_curr_party_acct_rec.relationship_type_code))
5808         THEN
5809            IF CSI_Instance_parties_vld_pvt.Acct_Rules_Check
5810                        (l_alt_pk_inst_pty_id ,
5811                         l_alt_pk_rel_type_code ) THEN
5812              RAISE FND_API.G_EXC_ERROR;
5813            END IF;
5814          END IF;
5815 
5816         -- Get party record for later use in contaracts
5817         IF NOT(CSI_Instance_parties_vld_pvt.Get_Party_Record
5818            (l_curr_party_acct_rec.instance_party_id,
5819            l_party_rec)) THEN
5820            RAISE FND_API.G_EXC_ERROR;
5821         END IF;
5822 
5823        -- If it is an owner party and owner account then update csi_item_instances
5824         IF p_party_account_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
5825            IF ((p_party_account_rec.relationship_type_code = 'OWNER')
5826               AND (l_party_relation = 'OWNER')) THEN
5827             -- Added by sguthiva for bug 2307804
5828              IF p_party_account_rec.party_account_id <> fnd_api.g_miss_num
5829               AND p_party_account_rec.party_account_id IS NOT NULL
5830              THEN
5831                 update csi_item_instances
5832                 set   owner_party_account_id =  p_party_account_rec.party_account_id
5833                 where  instance_id     = l_party_rec.instance_id;
5834              END IF;
5835             END IF;
5836             -- End addition by sguthiva for bug 2307804
5837         END IF;
5838 
5839            IF p_txn_rec.transaction_type_id=7 AND
5840               l_found_for_update='T'
5841            THEN
5842               l_acct_end_date:=l_temp_acct_date;
5843            ELSE
5844               l_acct_end_date:=p_party_account_rec.active_end_date;
5845            END IF;
5846 
5847         -- Increment the object_version_number before updating
5848         l_OBJECT_VERSION_NUMBER := l_curr_party_acct_rec.OBJECT_VERSION_NUMBER + 1 ;
5849 
5850         -- Calling table table handler to update
5851         CSI_IP_ACCOUNTS_PKG.Update_Row
5852         (
5853           p_IP_ACCOUNT_ID       => p_party_account_rec.ip_account_id,
5854           p_INSTANCE_PARTY_ID   => p_party_account_rec.INSTANCE_PARTY_ID,
5855           p_PARTY_ACCOUNT_ID    => p_party_account_rec.PARTY_ACCOUNT_ID,
5856           p_RELATIONSHIP_TYPE_CODE => p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5857           p_ACTIVE_START_DATE   => p_party_account_rec.ACTIVE_START_DATE,
5858           p_ACTIVE_END_DATE     => l_acct_end_date, --p_party_account_rec.ACTIVE_END_DATE,
5859           p_CONTEXT             => p_party_account_rec.CONTEXT,
5860           p_ATTRIBUTE1          => p_party_account_rec.ATTRIBUTE1,
5861           p_ATTRIBUTE2          => p_party_account_rec.ATTRIBUTE2,
5862           p_ATTRIBUTE3          => p_party_account_rec.ATTRIBUTE3,
5863           p_ATTRIBUTE4          => p_party_account_rec.ATTRIBUTE4,
5864           p_ATTRIBUTE5          => p_party_account_rec.ATTRIBUTE5,
5865           p_ATTRIBUTE6          => p_party_account_rec.ATTRIBUTE6,
5866           p_ATTRIBUTE7          => p_party_account_rec.ATTRIBUTE7,
5867           p_ATTRIBUTE8          => p_party_account_rec.ATTRIBUTE8,
5868           p_ATTRIBUTE9          => p_party_account_rec.ATTRIBUTE9,
5869           p_ATTRIBUTE10         => p_party_account_rec.ATTRIBUTE10,
5870           p_ATTRIBUTE11         => p_party_account_rec.ATTRIBUTE11,
5871           p_ATTRIBUTE12         => p_party_account_rec.ATTRIBUTE12,
5872           p_ATTRIBUTE13         => p_party_account_rec.ATTRIBUTE13,
5873           p_ATTRIBUTE14         => p_party_account_rec.ATTRIBUTE14,
5874           p_ATTRIBUTE15         => p_party_account_rec.ATTRIBUTE15,
5875           p_CREATED_BY          => FND_API.G_MISS_NUM, -- FND_GLOBAL.USER_ID,
5876           p_CREATION_DATE       => FND_API.G_MISS_DATE, -- SYSDATE,
5877           p_LAST_UPDATED_BY     => FND_GLOBAL.USER_ID             ,
5878           p_LAST_UPDATE_DATE    => SYSDATE                        ,
5879           p_LAST_UPDATE_LOGIN   => FND_GLOBAL.LOGIN_ID            ,
5880           p_OBJECT_VERSION_NUMBER => l_OBJECT_VERSION_NUMBER      ,
5881           p_BILL_TO_ADDRESS     => p_party_account_rec.BILL_TO_ADDRESS,
5882           p_SHIP_TO_ADDRESS     => p_party_account_rec.SHIP_TO_ADDRESS,
5883           p_REQUEST_ID          => p_party_account_rec.REQUEST_ID,
5884           p_PROGRAM_APPLICATION_ID => p_party_account_rec.PROGRAM_APPLICATION_ID,
5885           p_PROGRAM_ID          => p_party_account_rec.PROGRAM_ID,
5886           p_PROGRAM_UPDATE_DATE => p_party_account_rec.PROGRAM_UPDATE_DATE);
5887 
5888          -- Call create_transaction to create txn log
5889          CSI_TRANSACTIONS_PVT.Create_transaction
5890           (
5891              p_api_version            => p_api_version
5892             ,p_commit                 => p_commit
5893             ,p_init_msg_list          => p_init_msg_list
5894             ,p_validation_level       => p_validation_level
5895             ,p_Success_If_Exists_Flag => 'Y'
5896             ,P_transaction_rec        => p_txn_rec
5897             ,x_return_status          => x_return_status
5898             ,x_msg_count              => x_msg_count
5899             ,x_msg_data               => x_msg_data         );
5900 
5901          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
5902 
5903               FOR i in 1..x_msg_Count LOOP
5904                 FND_MSG_PUB.Get(p_msg_index     => i,
5905                                 p_encoded       => 'F',
5906                                 p_data          => x_msg_data,
5907                                 p_msg_index_out => x_msg_index_out );
5908                 csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
5909               End LOOP;
5910               RAISE FND_API.G_EXC_ERROR;
5911          END IF;
5912 
5913 
5914 
5915          -- Generate a unique instance_party_history_id from the sequence
5916          l_ip_account_history_id := CSI_Instance_parties_vld_pvt.gen_ip_account_hist_id;
5917 
5918          -- Get the full_dump_frequency from csi_install_parameter
5919        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
5920           csi_gen_utility_pvt.populate_install_param_rec;
5921        END IF;
5922        --
5923        l_full_dump_frequency := csi_datastructures_pub.g_install_param_rec.history_full_dump_frequency;
5924        --
5925        IF l_full_dump_frequency IS NULL THEN
5926           FND_MESSAGE.SET_NAME('CSI','CSI_API_GET_FULL_DUMP_FAILED');
5927           FND_MSG_PUB.ADD;
5928           RAISE FND_API.G_EXC_ERROR;
5929        END IF;
5930        --
5931          select mod(l_object_version_number,l_full_dump_frequency)
5932          into   l_mod_value
5933          from   dual;
5934 
5935          -- assign the party rec
5936          l_temp_party_account_rec := p_party_account_rec;
5937          l_temp_party_account_rec.active_end_date:=l_acct_end_date;
5938       -- Start of changes for Bug#2547034 on 09/20/02 - rtalluri
5939        BEGIN
5940         SELECT  ip_account_history_id
5941         INTO    l_ip_acct_hist_id
5942         FROM    csi_ip_accounts_h h
5943         WHERE   h.transaction_id = p_txn_rec.transaction_id
5944         AND     h.ip_account_id = p_party_account_rec.ip_account_id;
5945 
5946         OPEN   pty_acct_csr(l_ip_acct_hist_id);
5947         FETCH  pty_acct_csr INTO l_pty_acct_csr ;
5948         CLOSE  pty_acct_csr;
5949         IF l_pty_acct_csr.full_dump_flag = 'Y'
5950         THEN
5951         CSI_IP_ACCOUNTS_H_PKG.Update_Row
5952          (
5953           p_IP_ACCOUNT_HISTORY_ID         => l_ip_acct_hist_id                        ,
5954           p_IP_ACCOUNT_ID                 => fnd_api.g_miss_num                       ,
5955           p_TRANSACTION_ID                => fnd_api.g_miss_num                       ,
5956           p_OLD_PARTY_ACCOUNT_ID          => fnd_api.g_miss_num                       ,
5957           p_NEW_PARTY_ACCOUNT_ID          => l_temp_party_account_rec.PARTY_ACCOUNT_ID,
5958           p_OLD_RELATIONSHIP_TYPE_CODE    => fnd_api.g_miss_char                      ,
5959           p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_account_rec.RELATIONSHIP_TYPE_CODE,
5960           p_OLD_ACTIVE_START_DATE         => fnd_api.g_miss_date                      ,
5961           p_NEW_ACTIVE_START_DATE         => l_temp_party_account_rec.ACTIVE_START_DATE,
5962           p_OLD_ACTIVE_END_DATE           => fnd_api.g_miss_date                      ,
5963           p_NEW_ACTIVE_END_DATE           => l_temp_party_account_rec.ACTIVE_END_DATE ,
5964           p_OLD_CONTEXT                   => fnd_api.g_miss_char                      ,
5965           p_NEW_CONTEXT                   => l_temp_party_account_rec.CONTEXT         ,
5966           p_OLD_ATTRIBUTE1                => fnd_api.g_miss_char                      ,
5967           p_NEW_ATTRIBUTE1                => l_temp_party_account_rec.ATTRIBUTE1      ,
5968           p_OLD_ATTRIBUTE2                => fnd_api.g_miss_char                      ,
5969           p_NEW_ATTRIBUTE2                => l_temp_party_account_rec.ATTRIBUTE2      ,
5970           p_OLD_ATTRIBUTE3                => fnd_api.g_miss_char                      ,
5971           p_NEW_ATTRIBUTE3                => l_temp_party_account_rec.ATTRIBUTE3      ,
5972           p_OLD_ATTRIBUTE4                => fnd_api.g_miss_char                      ,
5973           p_NEW_ATTRIBUTE4                => l_temp_party_account_rec.ATTRIBUTE4      ,
5974           p_OLD_ATTRIBUTE5                => fnd_api.g_miss_char                      ,
5975           p_NEW_ATTRIBUTE5                => l_temp_party_account_rec.ATTRIBUTE5      ,
5976           p_OLD_ATTRIBUTE6                => fnd_api.g_miss_char                      ,
5977           p_NEW_ATTRIBUTE6                => l_temp_party_account_rec.ATTRIBUTE6      ,
5978           p_OLD_ATTRIBUTE7                => fnd_api.g_miss_char                      ,
5979           p_NEW_ATTRIBUTE7                => l_temp_party_account_rec.ATTRIBUTE7      ,
5980           p_OLD_ATTRIBUTE8                => fnd_api.g_miss_char                      ,
5981           p_NEW_ATTRIBUTE8                => l_temp_party_account_rec.ATTRIBUTE8      ,
5982           p_OLD_ATTRIBUTE9                => fnd_api.g_miss_char                      ,
5983           p_NEW_ATTRIBUTE9                => l_temp_party_account_rec.ATTRIBUTE9      ,
5984           p_OLD_ATTRIBUTE10               => fnd_api.g_miss_char                      ,
5985           p_NEW_ATTRIBUTE10               => l_temp_party_account_rec.ATTRIBUTE10     ,
5986           p_OLD_ATTRIBUTE11               => fnd_api.g_miss_char                      ,
5987           p_NEW_ATTRIBUTE11               => l_temp_party_account_rec.ATTRIBUTE11     ,
5988           p_OLD_ATTRIBUTE12               => fnd_api.g_miss_char                      ,
5989           p_NEW_ATTRIBUTE12               => l_temp_party_account_rec.ATTRIBUTE12     ,
5990           p_OLD_ATTRIBUTE13               => fnd_api.g_miss_char                      ,
5991           p_NEW_ATTRIBUTE13               => l_temp_party_account_rec.ATTRIBUTE13     ,
5992           p_OLD_ATTRIBUTE14               => fnd_api.g_miss_char                      ,
5993           p_NEW_ATTRIBUTE14               => l_temp_party_account_rec.ATTRIBUTE14     ,
5994           p_OLD_ATTRIBUTE15               => fnd_api.g_miss_char                      ,
5995           p_NEW_ATTRIBUTE15               => l_temp_party_account_rec.ATTRIBUTE15     ,
5996           p_FULL_DUMP_FLAG                => fnd_api.g_miss_char                      ,
5997           p_CREATED_BY                    => FND_API.G_MISS_NUM                       ,
5998           p_CREATION_DATE                 => FND_API.G_MISS_DATE                      ,
5999           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                       ,
6000           p_LAST_UPDATE_DATE              => SYSDATE                                  ,
6001           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID                      ,
6002           p_OBJECT_VERSION_NUMBER         => fnd_api.g_miss_num                       ,
6003           p_OLD_BILL_TO_ADDRESS           => fnd_api.g_miss_num                       ,
6004           p_NEW_BILL_TO_ADDRESS           => l_temp_party_account_rec.BILL_TO_ADDRESS ,
6005           p_OLD_SHIP_TO_ADDRESS           => fnd_api.g_miss_num                       ,
6006           p_NEW_SHIP_TO_ADDRESS           => l_temp_party_account_rec.SHIP_TO_ADDRESS ,
6007           p_OLD_INSTANCE_PARTY_ID         => fnd_api.g_miss_num                       ,
6008           p_NEW_INSTANCE_PARTY_ID         => l_temp_party_account_rec.INSTANCE_PARTY_ID);
6009 
6010 
6011         ELSE
6012 
6013              IF    ( l_pty_acct_csr.old_party_account_id IS NULL
6014                 AND  l_pty_acct_csr.new_party_account_id IS NULL ) THEN
6015                      IF  ( l_temp_party_account_rec.party_account_id = l_curr_party_acct_rec.party_account_id )
6016                       OR ( l_temp_party_account_rec.party_account_id = fnd_api.g_miss_num ) THEN
6017                            l_pty_acct_csr.old_party_account_id := NULL;
6018                            l_pty_acct_csr.new_party_account_id := NULL;
6019                      ELSE
6020                            l_pty_acct_csr.old_party_account_id := fnd_api.g_miss_num;
6021                            l_pty_acct_csr.new_party_account_id := l_temp_party_account_rec.party_account_id;
6022                      END IF;
6023              ELSE
6024                      l_pty_acct_csr.old_party_account_id := fnd_api.g_miss_num;
6025                      l_pty_acct_csr.new_party_account_id := l_temp_party_account_rec.party_account_id;
6026              END IF;
6027              --
6028              IF    ( l_pty_acct_csr.old_relationship_type_code IS NULL
6029                 AND  l_pty_acct_csr.new_relationship_type_code IS NULL ) THEN
6030                      IF  ( l_temp_party_account_rec.relationship_type_code = l_curr_party_acct_rec.relationship_type_code )
6031                       OR ( l_temp_party_account_rec.relationship_type_code = fnd_api.g_miss_char ) THEN
6032                            l_pty_acct_csr.old_relationship_type_code := NULL;
6033                            l_pty_acct_csr.new_relationship_type_code := NULL;
6034                      ELSE
6035                            l_pty_acct_csr.old_relationship_type_code := fnd_api.g_miss_char;
6036                            l_pty_acct_csr.new_relationship_type_code := l_temp_party_account_rec.relationship_type_code;
6037                      END IF;
6038              ELSE
6039                      l_pty_acct_csr.old_relationship_type_code := fnd_api.g_miss_char;
6040                      l_pty_acct_csr.new_relationship_type_code := l_temp_party_account_rec.relationship_type_code;
6041              END IF;
6042              --
6043              IF    ( l_pty_acct_csr.old_bill_to_address IS NULL
6044                 AND  l_pty_acct_csr.new_bill_to_address IS NULL ) THEN
6045                      IF  ( l_temp_party_account_rec.bill_to_address = l_curr_party_acct_rec.bill_to_address )
6046                       OR ( l_temp_party_account_rec.bill_to_address = fnd_api.g_miss_num ) THEN
6047                            l_pty_acct_csr.old_bill_to_address := NULL;
6048                            l_pty_acct_csr.new_bill_to_address := NULL;
6049                      ELSE
6050                            l_pty_acct_csr.old_bill_to_address := fnd_api.g_miss_num;
6051                            l_pty_acct_csr.new_bill_to_address := l_temp_party_account_rec.bill_to_address;
6052                      END IF;
6053              ELSE
6054                      l_pty_acct_csr.old_bill_to_address := fnd_api.g_miss_num;
6055                      l_pty_acct_csr.new_bill_to_address := l_temp_party_account_rec.bill_to_address;
6056              END IF;
6057              --
6058              IF    ( l_pty_acct_csr.old_ship_to_address IS NULL
6059                 AND  l_pty_acct_csr.new_ship_to_address IS NULL ) THEN
6060                      IF  ( l_temp_party_account_rec.ship_to_address = l_curr_party_acct_rec.ship_to_address )
6061                       OR ( l_temp_party_account_rec.ship_to_address = fnd_api.g_miss_num ) THEN
6062                            l_pty_acct_csr.old_ship_to_address := NULL;
6063                            l_pty_acct_csr.new_ship_to_address := NULL;
6064                      ELSE
6065                            l_pty_acct_csr.old_ship_to_address := fnd_api.g_miss_num;
6066                            l_pty_acct_csr.new_ship_to_address := l_temp_party_account_rec.ship_to_address;
6067                      END IF;
6068              ELSE
6069                      l_pty_acct_csr.old_ship_to_address := fnd_api.g_miss_num;
6070                      l_pty_acct_csr.new_ship_to_address := l_temp_party_account_rec.ship_to_address;
6071              END IF;
6072              --
6073              IF    ( l_pty_acct_csr.old_active_start_date IS NULL
6074                 AND  l_pty_acct_csr.new_active_start_date IS NULL ) THEN
6075                      IF  ( l_temp_party_account_rec.active_start_date = l_curr_party_acct_rec.active_start_date )
6076                       OR ( l_temp_party_account_rec.active_start_date = fnd_api.g_miss_date ) THEN
6077                            l_pty_acct_csr.old_active_start_date := NULL;
6078                            l_pty_acct_csr.new_active_start_date := NULL;
6079                      ELSE
6080                            l_pty_acct_csr.old_active_start_date := fnd_api.g_miss_date;
6081                            l_pty_acct_csr.new_active_start_date := l_temp_party_account_rec.active_start_date;
6082                      END IF;
6083              ELSE
6084                      l_pty_acct_csr.old_active_start_date := fnd_api.g_miss_date;
6085                      l_pty_acct_csr.new_active_start_date := l_temp_party_account_rec.active_start_date;
6086              END IF;
6087              --
6088              IF    ( l_pty_acct_csr.old_active_end_date IS NULL
6089                 AND  l_pty_acct_csr.new_active_end_date IS NULL ) THEN
6090                      IF  ( l_temp_party_account_rec.active_end_date = l_curr_party_acct_rec.active_end_date )
6091                       OR ( l_temp_party_account_rec.active_end_date = fnd_api.g_miss_date ) THEN
6092                            l_pty_acct_csr.old_active_end_date := NULL;
6093                            l_pty_acct_csr.new_active_end_date := NULL;
6094                      ELSE
6095                            l_pty_acct_csr.old_active_end_date := fnd_api.g_miss_date;
6096                            l_pty_acct_csr.new_active_end_date := l_temp_party_account_rec.active_end_date;
6097                      END IF;
6098              ELSE
6099                      l_pty_acct_csr.old_active_end_date := fnd_api.g_miss_date;
6100                      l_pty_acct_csr.new_active_end_date := l_temp_party_account_rec.active_end_date;
6101              END IF;
6102              --
6103              IF    ( l_pty_acct_csr.old_context IS NULL
6104                 AND  l_pty_acct_csr.new_context IS NULL ) THEN
6105                      IF  ( l_temp_party_account_rec.context = l_curr_party_acct_rec.context )
6106                       OR ( l_temp_party_account_rec.context = fnd_api.g_miss_char ) THEN
6107                            l_pty_acct_csr.old_context := NULL;
6108                            l_pty_acct_csr.new_context := NULL;
6109                      ELSE
6110                            l_pty_acct_csr.old_context := fnd_api.g_miss_char;
6111                            l_pty_acct_csr.new_context := l_temp_party_account_rec.context;
6112                      END IF;
6113              ELSE
6114                      l_pty_acct_csr.old_context := fnd_api.g_miss_char;
6115                      l_pty_acct_csr.new_context := l_temp_party_account_rec.context;
6116              END IF;
6117              --
6118              IF    ( l_pty_acct_csr.old_attribute1 IS NULL
6119                 AND  l_pty_acct_csr.new_attribute1 IS NULL ) THEN
6120                      IF  ( l_temp_party_account_rec.attribute1 = l_curr_party_acct_rec.attribute1 )
6121                       OR ( l_temp_party_account_rec.attribute1 = fnd_api.g_miss_char ) THEN
6122                            l_pty_acct_csr.old_attribute1 := NULL;
6123                            l_pty_acct_csr.new_attribute1 := NULL;
6124                      ELSE
6125                            l_pty_acct_csr.old_attribute1 := fnd_api.g_miss_char;
6126                            l_pty_acct_csr.new_attribute1 := l_temp_party_account_rec.attribute1;
6127                      END IF;
6128              ELSE
6129                      l_pty_acct_csr.old_attribute1 := fnd_api.g_miss_char;
6130                      l_pty_acct_csr.new_attribute1 := l_temp_party_account_rec.attribute1;
6131              END IF;
6132              --
6133              IF    ( l_pty_acct_csr.old_attribute2 IS NULL
6134                 AND  l_pty_acct_csr.new_attribute2 IS NULL ) THEN
6135                      IF  ( l_temp_party_account_rec.attribute2 = l_curr_party_acct_rec.attribute2 )
6136                       OR ( l_temp_party_account_rec.attribute2 = fnd_api.g_miss_char ) THEN
6137                            l_pty_acct_csr.old_attribute2 := NULL;
6138                            l_pty_acct_csr.new_attribute2 := NULL;
6139                      ELSE
6140                            l_pty_acct_csr.old_attribute2 := fnd_api.g_miss_char;
6141                            l_pty_acct_csr.new_attribute2 := l_temp_party_account_rec.attribute2;
6142                      END IF;
6143              ELSE
6144                      l_pty_acct_csr.old_attribute2 := fnd_api.g_miss_char;
6145                      l_pty_acct_csr.new_attribute2 := l_temp_party_account_rec.attribute2;
6146              END IF;
6147              --
6148              IF    ( l_pty_acct_csr.old_attribute3 IS NULL
6149                 AND  l_pty_acct_csr.new_attribute3 IS NULL ) THEN
6150                      IF  ( l_temp_party_account_rec.attribute3 = l_curr_party_acct_rec.attribute3 )
6151                       OR ( l_temp_party_account_rec.attribute3 = fnd_api.g_miss_char ) THEN
6152                            l_pty_acct_csr.old_attribute3 := NULL;
6153                            l_pty_acct_csr.new_attribute3 := NULL;
6154                      ELSE
6155                            l_pty_acct_csr.old_attribute3 := fnd_api.g_miss_char;
6156                            l_pty_acct_csr.new_attribute3 := l_temp_party_account_rec.attribute3;
6157                      END IF;
6158              ELSE
6159                      l_pty_acct_csr.old_attribute3 := fnd_api.g_miss_char;
6160                      l_pty_acct_csr.new_attribute3 := l_temp_party_account_rec.attribute3;
6161              END IF;
6162              --
6163              IF    ( l_pty_acct_csr.old_attribute4 IS NULL
6164                 AND  l_pty_acct_csr.new_attribute4 IS NULL ) THEN
6165                      IF  ( l_temp_party_account_rec.attribute4 = l_curr_party_acct_rec.attribute4 )
6166                       OR ( l_temp_party_account_rec.attribute4 = fnd_api.g_miss_char ) THEN
6167                            l_pty_acct_csr.old_attribute4 := NULL;
6168                            l_pty_acct_csr.new_attribute4 := NULL;
6169                      ELSE
6170                            l_pty_acct_csr.old_attribute4 := fnd_api.g_miss_char;
6171                            l_pty_acct_csr.new_attribute4 := l_temp_party_account_rec.attribute4;
6172                      END IF;
6173              ELSE
6174                      l_pty_acct_csr.old_attribute4 := fnd_api.g_miss_char;
6175                      l_pty_acct_csr.new_attribute4 := l_temp_party_account_rec.attribute4;
6176              END IF;
6177              --
6178              IF    ( l_pty_acct_csr.old_attribute5 IS NULL
6179                 AND  l_pty_acct_csr.new_attribute5 IS NULL ) THEN
6180                      IF  ( l_temp_party_account_rec.attribute5 = l_curr_party_acct_rec.attribute5 )
6181                       OR ( l_temp_party_account_rec.attribute5 = fnd_api.g_miss_char ) THEN
6182                            l_pty_acct_csr.old_attribute5 := NULL;
6183                            l_pty_acct_csr.new_attribute5 := NULL;
6184                      ELSE
6185                            l_pty_acct_csr.old_attribute5 := fnd_api.g_miss_char;
6186                            l_pty_acct_csr.new_attribute5 := l_temp_party_account_rec.attribute5;
6187                      END IF;
6188              ELSE
6189                      l_pty_acct_csr.old_attribute5 := fnd_api.g_miss_char;
6190                      l_pty_acct_csr.new_attribute5 := l_temp_party_account_rec.attribute5;
6191              END IF;
6192              --
6193              IF    ( l_pty_acct_csr.old_attribute6 IS NULL
6194                 AND  l_pty_acct_csr.new_attribute6 IS NULL ) THEN
6195                      IF  ( l_temp_party_account_rec.attribute6 = l_curr_party_acct_rec.attribute6 )
6196                       OR ( l_temp_party_account_rec.attribute6 = fnd_api.g_miss_char ) THEN
6197                            l_pty_acct_csr.old_attribute6 := NULL;
6198                            l_pty_acct_csr.new_attribute6 := NULL;
6199                      ELSE
6200                            l_pty_acct_csr.old_attribute6 := fnd_api.g_miss_char;
6201                            l_pty_acct_csr.new_attribute6 := l_temp_party_account_rec.attribute6;
6202                      END IF;
6203              ELSE
6204                      l_pty_acct_csr.old_attribute6 := fnd_api.g_miss_char;
6205                      l_pty_acct_csr.new_attribute6 := l_temp_party_account_rec.attribute6;
6206              END IF;
6207              --
6208              IF    ( l_pty_acct_csr.old_attribute7 IS NULL
6209                 AND  l_pty_acct_csr.new_attribute7 IS NULL ) THEN
6210                      IF  ( l_temp_party_account_rec.attribute7 = l_curr_party_acct_rec.attribute7 )
6211                       OR ( l_temp_party_account_rec.attribute7 = fnd_api.g_miss_char ) THEN
6212                            l_pty_acct_csr.old_attribute7 := NULL;
6213                            l_pty_acct_csr.new_attribute7 := NULL;
6214                      ELSE
6215                            l_pty_acct_csr.old_attribute7 := fnd_api.g_miss_char;
6216                            l_pty_acct_csr.new_attribute7 := l_temp_party_account_rec.attribute7;
6217                      END IF;
6218              ELSE
6219                      l_pty_acct_csr.old_attribute7 := fnd_api.g_miss_char;
6220                      l_pty_acct_csr.new_attribute7 := l_temp_party_account_rec.attribute7;
6221              END IF;
6222              --
6223              IF    ( l_pty_acct_csr.old_attribute8 IS NULL
6224                 AND  l_pty_acct_csr.new_attribute8 IS NULL ) THEN
6225                      IF  ( l_temp_party_account_rec.attribute8 = l_curr_party_acct_rec.attribute8 )
6226                       OR ( l_temp_party_account_rec.attribute8 = fnd_api.g_miss_char ) THEN
6227                            l_pty_acct_csr.old_attribute8 := NULL;
6228                            l_pty_acct_csr.new_attribute8 := NULL;
6229                      ELSE
6230                            l_pty_acct_csr.old_attribute8 := fnd_api.g_miss_char;
6231                            l_pty_acct_csr.new_attribute8 := l_temp_party_account_rec.attribute8;
6232                      END IF;
6233              ELSE
6234                      l_pty_acct_csr.old_attribute8 := fnd_api.g_miss_char;
6235                      l_pty_acct_csr.new_attribute8 := l_temp_party_account_rec.attribute8;
6236              END IF;
6237              --
6238              IF    ( l_pty_acct_csr.old_attribute9 IS NULL
6239                 AND  l_pty_acct_csr.new_attribute9 IS NULL ) THEN
6240                      IF  ( l_temp_party_account_rec.attribute9 = l_curr_party_acct_rec.attribute9 )
6241                       OR ( l_temp_party_account_rec.attribute9 = fnd_api.g_miss_char ) THEN
6242                            l_pty_acct_csr.old_attribute9 := NULL;
6243                            l_pty_acct_csr.new_attribute9 := NULL;
6244                      ELSE
6245                            l_pty_acct_csr.old_attribute9 := fnd_api.g_miss_char;
6246                            l_pty_acct_csr.new_attribute9 := l_temp_party_account_rec.attribute9;
6247                      END IF;
6248              ELSE
6249                      l_pty_acct_csr.old_attribute9 := fnd_api.g_miss_char;
6250                      l_pty_acct_csr.new_attribute9 := l_temp_party_account_rec.attribute9;
6251              END IF;
6252              --
6253              IF    ( l_pty_acct_csr.old_attribute10 IS NULL
6254                 AND  l_pty_acct_csr.new_attribute10 IS NULL ) THEN
6255                      IF  ( l_temp_party_account_rec.attribute10 = l_curr_party_acct_rec.attribute10 )
6256                       OR ( l_temp_party_account_rec.attribute10 = fnd_api.g_miss_char ) THEN
6257                            l_pty_acct_csr.old_attribute10 := NULL;
6258                            l_pty_acct_csr.new_attribute10 := NULL;
6259                      ELSE
6260                            l_pty_acct_csr.old_attribute10 := fnd_api.g_miss_char;
6261                            l_pty_acct_csr.new_attribute10 := l_temp_party_account_rec.attribute10;
6262                      END IF;
6263              ELSE
6264                      l_pty_acct_csr.old_attribute10 := fnd_api.g_miss_char;
6265                      l_pty_acct_csr.new_attribute10 := l_temp_party_account_rec.attribute10;
6266              END IF;
6267              --
6268              IF    ( l_pty_acct_csr.old_attribute11 IS NULL
6269                 AND  l_pty_acct_csr.new_attribute11 IS NULL ) THEN
6270                      IF  ( l_temp_party_account_rec.attribute11 = l_curr_party_acct_rec.attribute11 )
6271                       OR ( l_temp_party_account_rec.attribute11 = fnd_api.g_miss_char ) THEN
6272                            l_pty_acct_csr.old_attribute11 := NULL;
6273                            l_pty_acct_csr.new_attribute11 := NULL;
6274                      ELSE
6275                            l_pty_acct_csr.old_attribute11 := fnd_api.g_miss_char;
6276                            l_pty_acct_csr.new_attribute11 := l_temp_party_account_rec.attribute11;
6277                      END IF;
6278              ELSE
6279                      l_pty_acct_csr.old_attribute11 := fnd_api.g_miss_char;
6280                      l_pty_acct_csr.new_attribute11 := l_temp_party_account_rec.attribute11;
6281              END IF;
6282              --
6283              IF    ( l_pty_acct_csr.old_attribute12 IS NULL
6284                 AND  l_pty_acct_csr.new_attribute12 IS NULL ) THEN
6285                      IF  ( l_temp_party_account_rec.attribute12 = l_curr_party_acct_rec.attribute12 )
6286                       OR ( l_temp_party_account_rec.attribute12 = fnd_api.g_miss_char ) THEN
6287                            l_pty_acct_csr.old_attribute12 := NULL;
6288                            l_pty_acct_csr.new_attribute12 := NULL;
6289                      ELSE
6290                            l_pty_acct_csr.old_attribute12 := fnd_api.g_miss_char;
6291                            l_pty_acct_csr.new_attribute12 := l_temp_party_account_rec.attribute12;
6292                      END IF;
6293              ELSE
6294                      l_pty_acct_csr.old_attribute12 := fnd_api.g_miss_char;
6295                      l_pty_acct_csr.new_attribute12 := l_temp_party_account_rec.attribute12;
6296              END IF;
6297              --
6298              IF    ( l_pty_acct_csr.old_attribute13 IS NULL
6299                 AND  l_pty_acct_csr.new_attribute13 IS NULL ) THEN
6300                      IF  ( l_temp_party_account_rec.attribute13 = l_curr_party_acct_rec.attribute13 )
6301                       OR ( l_temp_party_account_rec.attribute13 = fnd_api.g_miss_char ) THEN
6302                            l_pty_acct_csr.old_attribute13 := NULL;
6303                            l_pty_acct_csr.new_attribute13 := NULL;
6304                      ELSE
6305                            l_pty_acct_csr.old_attribute13 := fnd_api.g_miss_char;
6306                            l_pty_acct_csr.new_attribute13 := l_temp_party_account_rec.attribute13;
6307                      END IF;
6308              ELSE
6309                      l_pty_acct_csr.old_attribute13 := fnd_api.g_miss_char;
6310                      l_pty_acct_csr.new_attribute13 := l_temp_party_account_rec.attribute13;
6311              END IF;
6312              --
6313              IF    ( l_pty_acct_csr.old_attribute14 IS NULL
6314                 AND  l_pty_acct_csr.new_attribute14 IS NULL ) THEN
6315                      IF  ( l_temp_party_account_rec.attribute14 = l_curr_party_acct_rec.attribute14 )
6316                       OR ( l_temp_party_account_rec.attribute14 = fnd_api.g_miss_char ) THEN
6317                            l_pty_acct_csr.old_attribute14 := NULL;
6318                            l_pty_acct_csr.new_attribute14 := NULL;
6319                      ELSE
6320                            l_pty_acct_csr.old_attribute14 := fnd_api.g_miss_char;
6321                            l_pty_acct_csr.new_attribute14 := l_temp_party_account_rec.attribute14;
6322                      END IF;
6323              ELSE
6324                      l_pty_acct_csr.old_attribute14 := fnd_api.g_miss_char;
6325                      l_pty_acct_csr.new_attribute14 := l_temp_party_account_rec.attribute14;
6326              END IF;
6327              --
6328              IF    ( l_pty_acct_csr.old_attribute15 IS NULL
6329                 AND  l_pty_acct_csr.new_attribute15 IS NULL ) THEN
6330                      IF  ( l_temp_party_account_rec.attribute15 = l_curr_party_acct_rec.attribute15 )
6331                       OR ( l_temp_party_account_rec.attribute15 = fnd_api.g_miss_char ) THEN
6332                            l_pty_acct_csr.old_attribute15 := NULL;
6333                            l_pty_acct_csr.new_attribute15 := NULL;
6334                      ELSE
6335                            l_pty_acct_csr.old_attribute15 := fnd_api.g_miss_char;
6336                            l_pty_acct_csr.new_attribute15 := l_temp_party_account_rec.attribute15;
6337                      END IF;
6338              ELSE
6339                      l_pty_acct_csr.old_attribute15 := fnd_api.g_miss_char;
6340                      l_pty_acct_csr.new_attribute15 := l_temp_party_account_rec.attribute15;
6341              END IF;
6342              --
6343              IF    ( l_pty_acct_csr.old_instance_party_id IS NULL
6344                 AND  l_pty_acct_csr.new_instance_party_id IS NULL ) THEN
6345                      IF  ( l_temp_party_account_rec.instance_party_id = l_curr_party_acct_rec.instance_party_id )
6346                       OR ( l_temp_party_account_rec.instance_party_id = fnd_api.g_miss_num ) THEN
6347                            l_pty_acct_csr.old_instance_party_id := NULL;
6348                            l_pty_acct_csr.new_instance_party_id := NULL;
6349                      ELSE
6350                            l_pty_acct_csr.old_instance_party_id := fnd_api.g_miss_num;
6351                            l_pty_acct_csr.new_instance_party_id := l_temp_party_account_rec.instance_party_id;
6352                      END IF;
6353              ELSE
6354                      l_pty_acct_csr.old_instance_party_id := fnd_api.g_miss_num;
6355                      l_pty_acct_csr.new_instance_party_id := l_temp_party_account_rec.instance_party_id;
6356              END IF;
6357 
6358           CSI_IP_ACCOUNTS_H_PKG.Update_Row
6359          (
6360           p_IP_ACCOUNT_HISTORY_ID         => l_ip_acct_hist_id                        ,
6361           p_IP_ACCOUNT_ID                 => fnd_api.g_miss_num                       ,
6362           p_TRANSACTION_ID                => fnd_api.g_miss_num                       ,
6363           p_OLD_PARTY_ACCOUNT_ID          => l_pty_acct_csr.old_party_account_id      ,
6364           p_NEW_PARTY_ACCOUNT_ID          => l_pty_acct_csr.NEW_PARTY_ACCOUNT_ID,
6365           p_OLD_RELATIONSHIP_TYPE_CODE    => l_pty_acct_csr.old_relationship_type_code,
6366           p_NEW_RELATIONSHIP_TYPE_CODE    => l_pty_acct_csr.NEW_RELATIONSHIP_TYPE_CODE,
6367           p_OLD_ACTIVE_START_DATE         => l_pty_acct_csr.old_active_start_date     ,
6368           p_NEW_ACTIVE_START_DATE         => l_pty_acct_csr.NEW_ACTIVE_START_DATE,
6369           p_OLD_ACTIVE_END_DATE           => l_pty_acct_csr.old_active_end_date       ,
6370           p_NEW_ACTIVE_END_DATE           => l_pty_acct_csr.NEW_ACTIVE_END_DATE ,
6371           p_OLD_CONTEXT                   => l_pty_acct_csr.old_context               ,
6372           p_NEW_CONTEXT                   => l_pty_acct_csr.NEW_CONTEXT         ,
6373           p_OLD_ATTRIBUTE1                => l_pty_acct_csr.old_attribute1            ,
6374           p_NEW_ATTRIBUTE1                => l_pty_acct_csr.NEW_ATTRIBUTE1      ,
6375           p_OLD_ATTRIBUTE2                => l_pty_acct_csr.old_attribute2            ,
6376           p_NEW_ATTRIBUTE2                => l_pty_acct_csr.NEW_ATTRIBUTE2      ,
6377           p_OLD_ATTRIBUTE3                => l_pty_acct_csr.old_attribute3            ,
6378           p_NEW_ATTRIBUTE3                => l_pty_acct_csr.NEW_ATTRIBUTE3      ,
6379           p_OLD_ATTRIBUTE4                => l_pty_acct_csr.old_attribute4            ,
6380           p_NEW_ATTRIBUTE4                => l_pty_acct_csr.NEW_ATTRIBUTE4      ,
6381           p_OLD_ATTRIBUTE5                => l_pty_acct_csr.old_attribute5            ,
6382           p_NEW_ATTRIBUTE5                => l_pty_acct_csr.NEW_ATTRIBUTE5      ,
6383           p_OLD_ATTRIBUTE6                => l_pty_acct_csr.old_attribute6            ,
6384           p_NEW_ATTRIBUTE6                => l_pty_acct_csr.NEW_ATTRIBUTE6      ,
6385           p_OLD_ATTRIBUTE7                => l_pty_acct_csr.old_attribute7            ,
6386           p_NEW_ATTRIBUTE7                => l_pty_acct_csr.NEW_ATTRIBUTE7      ,
6387           p_OLD_ATTRIBUTE8                => l_pty_acct_csr.old_attribute8            ,
6388           p_NEW_ATTRIBUTE8                => l_pty_acct_csr.NEW_ATTRIBUTE8      ,
6389           p_OLD_ATTRIBUTE9                => l_pty_acct_csr.old_attribute9            ,
6390           p_NEW_ATTRIBUTE9                => l_pty_acct_csr.NEW_ATTRIBUTE9      ,
6391           p_OLD_ATTRIBUTE10               => l_pty_acct_csr.old_attribute10           ,
6392           p_NEW_ATTRIBUTE10               => l_pty_acct_csr.NEW_ATTRIBUTE10     ,
6393           p_OLD_ATTRIBUTE11               => l_pty_acct_csr.old_attribute11           ,
6394           p_NEW_ATTRIBUTE11               => l_pty_acct_csr.NEW_ATTRIBUTE11     ,
6395           p_OLD_ATTRIBUTE12               => l_pty_acct_csr.old_attribute12           ,
6396           p_NEW_ATTRIBUTE12               => l_pty_acct_csr.NEW_ATTRIBUTE12     ,
6397           p_OLD_ATTRIBUTE13               => l_pty_acct_csr.old_attribute13           ,
6398           p_NEW_ATTRIBUTE13               => l_pty_acct_csr.NEW_ATTRIBUTE13     ,
6399           p_OLD_ATTRIBUTE14               => l_pty_acct_csr.old_attribute14           ,
6400           p_NEW_ATTRIBUTE14               => l_pty_acct_csr.NEW_ATTRIBUTE14     ,
6401           p_OLD_ATTRIBUTE15               => l_pty_acct_csr.old_attribute15           ,
6402           p_NEW_ATTRIBUTE15               => l_pty_acct_csr.NEW_ATTRIBUTE15     ,
6403           p_FULL_DUMP_FLAG                => fnd_api.g_miss_char                      ,
6404           p_CREATED_BY                    => FND_API.G_MISS_NUM                 ,
6405           p_CREATION_DATE                 => FND_API.G_MISS_DATE                      ,
6406           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                       ,
6407           p_LAST_UPDATE_DATE              => SYSDATE                                  ,
6408           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID                      ,
6409           p_OBJECT_VERSION_NUMBER         => fnd_api.g_miss_num                       ,
6410           p_OLD_BILL_TO_ADDRESS           => l_pty_acct_csr.old_bill_to_address       ,
6411           p_NEW_BILL_TO_ADDRESS           => l_pty_acct_csr.NEW_BILL_TO_ADDRESS ,
6412           p_OLD_SHIP_TO_ADDRESS           => l_pty_acct_csr.old_ship_to_address       ,
6413           p_NEW_SHIP_TO_ADDRESS           => l_pty_acct_csr.NEW_SHIP_TO_ADDRESS,
6414           p_OLD_INSTANCE_PARTY_ID         => l_pty_acct_csr.old_instance_party_id     ,
6415           p_NEW_INSTANCE_PARTY_ID         => l_pty_acct_csr.new_instance_party_id     );
6416 
6417         END IF;
6418       EXCEPTION
6419 
6420         WHEN NO_DATA_FOUND THEN
6421         IF (l_mod_value = 0) THEN
6422           -- If the mod value is 0 then dump all the columns both changed and unchanged
6423           -- changed columns have old and new values while the unchanged values have old and new values
6424           -- exactly same
6425 
6426           IF (p_party_account_rec.instance_party_id = FND_API.G_MISS_NUM) THEN
6427               l_temp_party_account_rec.instance_party_id := l_curr_party_acct_rec.instance_party_id ;
6428           END IF;
6429           IF (p_party_account_rec.party_account_id = FND_API.G_MISS_NUM) THEN
6430               l_temp_party_account_rec.party_account_id := l_curr_party_acct_rec.party_account_id ;
6431           END IF;
6432           IF (p_party_account_rec.relationship_type_code = FND_API.G_MISS_CHAR) THEN
6433               l_temp_party_account_rec.relationship_type_code := l_curr_party_acct_rec.relationship_type_code ;
6434           END IF;
6435           IF (p_party_account_rec.ACTIVE_START_DATE = FND_API.G_MISS_DATE) THEN
6436               l_temp_party_account_rec.ACTIVE_START_DATE := l_curr_party_acct_rec.ACTIVE_START_DATE ;
6437           END IF;
6438           IF  --(p_party_account_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE)
6439               (l_acct_end_date = FND_API.G_MISS_DATE)
6440           THEN
6441               l_temp_party_account_rec.ACTIVE_END_DATE := l_curr_party_acct_rec.ACTIVE_END_DATE ;
6442           END IF;
6443           IF  (p_party_account_rec.context = FND_API.G_MISS_CHAR) THEN
6444               l_temp_party_account_rec.CONTEXT := l_curr_party_acct_rec.CONTEXT ;
6445           END IF;
6446           IF  (p_party_account_rec.ATTRIBUTE1 = FND_API.G_MISS_CHAR) THEN
6447               l_temp_party_account_rec.ATTRIBUTE1 := l_curr_party_acct_rec.ATTRIBUTE1 ;
6448           END IF;
6449           IF  (p_party_account_rec.ATTRIBUTE2 = FND_API.G_MISS_CHAR) THEN
6450               l_temp_party_account_rec.ATTRIBUTE2 := l_curr_party_acct_rec.ATTRIBUTE2 ;
6451           END IF;
6452           IF  (p_party_account_rec.ATTRIBUTE3 = FND_API.G_MISS_CHAR) THEN
6453               l_temp_party_account_rec.ATTRIBUTE3 := l_curr_party_acct_rec.ATTRIBUTE3 ;
6454           END IF;
6455           IF  (p_party_account_rec.ATTRIBUTE4 = FND_API.G_MISS_CHAR) THEN
6456               l_temp_party_account_rec.ATTRIBUTE4 := l_curr_party_acct_rec.ATTRIBUTE4 ;
6457           END IF;
6458           IF  (p_party_account_rec.ATTRIBUTE5 = FND_API.G_MISS_CHAR) THEN
6459               l_temp_party_account_rec.ATTRIBUTE5 := l_curr_party_acct_rec.ATTRIBUTE5 ;
6460           END IF;
6461           IF  (p_party_account_rec.ATTRIBUTE6 = FND_API.G_MISS_CHAR) THEN
6462               l_temp_party_account_rec.ATTRIBUTE6 := l_curr_party_acct_rec.ATTRIBUTE6 ;
6463           END IF;
6464           IF  (p_party_account_rec.ATTRIBUTE7 = FND_API.G_MISS_CHAR) THEN
6465               l_temp_party_account_rec.ATTRIBUTE7 := l_curr_party_acct_rec.ATTRIBUTE7 ;
6466           END IF;
6467           IF  (p_party_account_rec.ATTRIBUTE8 = FND_API.G_MISS_CHAR) THEN
6468               l_temp_party_account_rec.ATTRIBUTE8 := l_curr_party_acct_rec.ATTRIBUTE8 ;
6469           END IF;
6470           IF  (p_party_account_rec.ATTRIBUTE9 = FND_API.G_MISS_CHAR) THEN
6471               l_temp_party_account_rec.ATTRIBUTE9 := l_curr_party_acct_rec.ATTRIBUTE9 ;
6472           END IF;
6473           IF  (p_party_account_rec.ATTRIBUTE10 = FND_API.G_MISS_CHAR) THEN
6474               l_temp_party_account_rec.ATTRIBUTE10 := l_curr_party_acct_rec.ATTRIBUTE10 ;
6475           END IF;
6476           IF  (p_party_account_rec.ATTRIBUTE11 = FND_API.G_MISS_CHAR) THEN
6477               l_temp_party_account_rec.ATTRIBUTE11 := l_curr_party_acct_rec.ATTRIBUTE11 ;
6478           END IF;
6479           IF  (p_party_account_rec.ATTRIBUTE12 = FND_API.G_MISS_CHAR) THEN
6480               l_temp_party_account_rec.ATTRIBUTE12 := l_curr_party_acct_rec.ATTRIBUTE12 ;
6481           END IF;
6482           IF  (p_party_account_rec.ATTRIBUTE13 = FND_API.G_MISS_CHAR) THEN
6483               l_temp_party_account_rec.ATTRIBUTE13 := l_curr_party_acct_rec.ATTRIBUTE13 ;
6484           END IF;
6485           IF  (p_party_account_rec.ATTRIBUTE14 = FND_API.G_MISS_CHAR) THEN
6486               l_temp_party_account_rec.ATTRIBUTE14 := l_curr_party_acct_rec.ATTRIBUTE14 ;
6487           END IF;
6488           IF  (p_party_account_rec.ATTRIBUTE15 = FND_API.G_MISS_CHAR) THEN
6489               l_temp_party_account_rec.ATTRIBUTE15 := l_curr_party_acct_rec.ATTRIBUTE15 ;
6490           END IF;
6491 
6492         -- Call table handlers to insert into csi_i_parties_h table
6493         CSI_IP_ACCOUNTS_H_PKG.Insert_Row
6494          (
6495           px_IP_ACCOUNT_HISTORY_ID        => l_ip_account_history_id          ,
6496           p_IP_ACCOUNT_ID                 => p_party_account_rec.ip_account_id,
6497           p_TRANSACTION_ID                => p_txn_rec.transaction_id        ,
6498           p_OLD_PARTY_ACCOUNT_ID          => l_curr_party_acct_rec.party_account_id,
6499           p_NEW_PARTY_ACCOUNT_ID          => l_temp_party_account_rec.PARTY_ACCOUNT_ID,
6500           p_OLD_RELATIONSHIP_TYPE_CODE    => l_curr_party_acct_rec.RELATIONSHIP_TYPE_CODE,
6501           p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_account_rec.RELATIONSHIP_TYPE_CODE,
6502           p_OLD_ACTIVE_START_DATE         => l_curr_party_acct_rec.ACTIVE_START_DATE,
6503           p_NEW_ACTIVE_START_DATE         => l_temp_party_account_rec.ACTIVE_START_DATE,
6504           p_OLD_ACTIVE_END_DATE           => l_curr_party_acct_rec.ACTIVE_END_DATE,
6505           p_NEW_ACTIVE_END_DATE           => l_temp_party_account_rec.ACTIVE_END_DATE,
6506           p_OLD_CONTEXT                   => l_curr_party_acct_rec.CONTEXT,
6507           p_NEW_CONTEXT                   => l_temp_party_account_rec.CONTEXT    ,
6508           p_OLD_ATTRIBUTE1                => l_curr_party_acct_rec.ATTRIBUTE1,
6509           p_NEW_ATTRIBUTE1                => l_temp_party_account_rec.ATTRIBUTE1 ,
6510           p_OLD_ATTRIBUTE2                => l_curr_party_acct_rec.ATTRIBUTE2,
6511           p_NEW_ATTRIBUTE2                => l_temp_party_account_rec.ATTRIBUTE2 ,
6512           p_OLD_ATTRIBUTE3                => l_curr_party_acct_rec.ATTRIBUTE3,
6513           p_NEW_ATTRIBUTE3                => l_temp_party_account_rec.ATTRIBUTE3 ,
6514           p_OLD_ATTRIBUTE4                => l_curr_party_acct_rec.ATTRIBUTE4,
6515           p_NEW_ATTRIBUTE4                => l_temp_party_account_rec.ATTRIBUTE4 ,
6516           p_OLD_ATTRIBUTE5                => l_curr_party_acct_rec.ATTRIBUTE5,
6517           p_NEW_ATTRIBUTE5                => l_temp_party_account_rec.ATTRIBUTE5 ,
6518           p_OLD_ATTRIBUTE6                => l_curr_party_acct_rec.ATTRIBUTE6,
6519           p_NEW_ATTRIBUTE6                => l_temp_party_account_rec.ATTRIBUTE6 ,
6520           p_OLD_ATTRIBUTE7                => l_curr_party_acct_rec.ATTRIBUTE7,
6521           p_NEW_ATTRIBUTE7                => l_temp_party_account_rec.ATTRIBUTE7 ,
6522           p_OLD_ATTRIBUTE8                => l_curr_party_acct_rec.ATTRIBUTE8,
6523           p_NEW_ATTRIBUTE8                => l_temp_party_account_rec.ATTRIBUTE8 ,
6524           p_OLD_ATTRIBUTE9                => l_curr_party_acct_rec.ATTRIBUTE9,
6525           p_NEW_ATTRIBUTE9                => l_temp_party_account_rec.ATTRIBUTE9 ,
6526           p_OLD_ATTRIBUTE10               => l_curr_party_acct_rec.ATTRIBUTE10,
6527           p_NEW_ATTRIBUTE10               => l_temp_party_account_rec.ATTRIBUTE10,
6528           p_OLD_ATTRIBUTE11               => l_curr_party_acct_rec.ATTRIBUTE11,
6529           p_NEW_ATTRIBUTE11               => l_temp_party_account_rec.ATTRIBUTE11,
6530           p_OLD_ATTRIBUTE12               => l_curr_party_acct_rec.ATTRIBUTE12,
6531           p_NEW_ATTRIBUTE12               => l_temp_party_account_rec.ATTRIBUTE12,
6532           p_OLD_ATTRIBUTE13               => l_curr_party_acct_rec.ATTRIBUTE13,
6533           p_NEW_ATTRIBUTE13               => l_temp_party_account_rec.ATTRIBUTE13,
6534           p_OLD_ATTRIBUTE14               => l_curr_party_acct_rec.ATTRIBUTE14,
6535           p_NEW_ATTRIBUTE14               => l_temp_party_account_rec.ATTRIBUTE14,
6536           p_OLD_ATTRIBUTE15               => l_curr_party_acct_rec.ATTRIBUTE15,
6537           p_NEW_ATTRIBUTE15               => l_temp_party_account_rec.ATTRIBUTE15,
6538           p_FULL_DUMP_FLAG                => 'Y'                            ,
6539           p_CREATED_BY                    => FND_GLOBAL.USER_ID             ,
6540           p_CREATION_DATE                 => SYSDATE                        ,
6541           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID             ,
6542           p_LAST_UPDATE_DATE              => SYSDATE                        ,
6543           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID            ,
6544           p_OBJECT_VERSION_NUMBER         => 1      ,
6545           p_OLD_BILL_TO_ADDRESS           => l_curr_party_acct_rec.BILL_TO_ADDRESS,
6546           p_NEW_BILL_TO_ADDRESS           => l_temp_party_account_rec.BILL_TO_ADDRESS,
6547           p_OLD_SHIP_TO_ADDRESS           => l_curr_party_acct_rec.SHIP_TO_ADDRESS ,
6548           p_NEW_SHIP_TO_ADDRESS           => l_temp_party_account_rec.SHIP_TO_ADDRESS,
6549           p_OLD_INSTANCE_PARTY_ID         => l_curr_party_acct_rec.INSTANCE_PARTY_ID ,
6550           p_NEW_INSTANCE_PARTY_ID         => l_temp_party_account_rec.INSTANCE_PARTY_ID);
6551 
6552        ELSE
6553           -- If the mod value is not equal to zero then dump only the changed columns
6554           -- while the unchanged values have old and new values as null
6555            IF (p_party_account_rec.party_account_id = fnd_api.g_miss_num) OR
6556                NVL(p_party_account_rec.party_account_id, fnd_api.g_miss_num) = NVL(l_curr_party_acct_rec.party_account_id, fnd_api.g_miss_num) THEN
6557                 l_account_hist_rec.old_party_account_id := NULL;
6558                 l_account_hist_rec.new_party_account_id := NULL;
6559            ELSIF
6560               NVL(l_curr_party_acct_rec.party_account_id,fnd_api.g_miss_num) <> NVL(p_party_account_rec.party_account_id,fnd_api.g_miss_num) THEN
6561                 l_account_hist_rec.old_party_account_id := l_curr_party_acct_rec.party_account_id ;
6562                 l_account_hist_rec.new_party_account_id := p_party_account_rec.party_account_id ;
6563            END IF;
6564            --
6565            IF (p_party_account_rec.relationship_type_code = fnd_api.g_miss_char) OR
6566                NVL(p_party_account_rec.relationship_type_code, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.relationship_type_code, fnd_api.g_miss_char) THEN
6567                 l_account_hist_rec.old_relationship_type_code := NULL;
6568                 l_account_hist_rec.new_relationship_type_code := NULL;
6569            ELSIF
6570               NVL(l_curr_party_acct_rec.relationship_type_code,fnd_api.g_miss_char) <> NVL(p_party_account_rec.relationship_type_code,fnd_api.g_miss_char) THEN
6571                 l_account_hist_rec.old_relationship_type_code := l_curr_party_acct_rec.relationship_type_code ;
6572                 l_account_hist_rec.new_relationship_type_code := p_party_account_rec.relationship_type_code ;
6573            END IF;
6574            --
6575            IF (p_party_account_rec.bill_to_address = fnd_api.g_miss_num) OR
6576                NVL(p_party_account_rec.bill_to_address, fnd_api.g_miss_num) = NVL(l_curr_party_acct_rec.bill_to_address, fnd_api.g_miss_num) THEN
6577                 l_account_hist_rec.old_bill_to_address := NULL;
6578                 l_account_hist_rec.new_bill_to_address := NULL;
6579            ELSIF
6580               NVL(l_curr_party_acct_rec.bill_to_address,fnd_api.g_miss_num) <> NVL(p_party_account_rec.bill_to_address,fnd_api.g_miss_num) THEN
6581                 l_account_hist_rec.old_bill_to_address := l_curr_party_acct_rec.bill_to_address ;
6582                 l_account_hist_rec.new_bill_to_address := p_party_account_rec.bill_to_address ;
6583            END IF;
6584            --
6585            IF (p_party_account_rec.ship_to_address = fnd_api.g_miss_num) OR
6586                NVL(p_party_account_rec.ship_to_address, fnd_api.g_miss_num) = NVL(l_curr_party_acct_rec.ship_to_address, fnd_api.g_miss_num) THEN
6587                 l_account_hist_rec.old_ship_to_address := NULL;
6588                 l_account_hist_rec.new_ship_to_address := NULL;
6589            ELSIF
6590               NVL(l_curr_party_acct_rec.ship_to_address,fnd_api.g_miss_num) <> NVL(p_party_account_rec.ship_to_address,fnd_api.g_miss_num) THEN
6591                 l_account_hist_rec.old_ship_to_address := l_curr_party_acct_rec.ship_to_address ;
6592                 l_account_hist_rec.new_ship_to_address := p_party_account_rec.ship_to_address ;
6593            END IF;
6594            --
6595            IF (p_party_account_rec.active_start_date = fnd_api.g_miss_date) OR
6596                NVL(p_party_account_rec.active_start_date, fnd_api.g_miss_date) = NVL(l_curr_party_acct_rec.active_start_date, fnd_api.g_miss_date) THEN
6597                 l_account_hist_rec.old_active_start_date := NULL;
6598                 l_account_hist_rec.new_active_start_date := NULL;
6599            ELSIF
6600               NVL(l_curr_party_acct_rec.active_start_date,fnd_api.g_miss_date) <> NVL(p_party_account_rec.active_start_date,fnd_api.g_miss_date) THEN
6601                 l_account_hist_rec.old_active_start_date := l_curr_party_acct_rec.active_start_date ;
6602                 l_account_hist_rec.new_active_start_date := p_party_account_rec.active_start_date ;
6603            END IF;
6604            --
6605            IF --(p_party_account_rec.active_end_date = fnd_api.g_miss_date) OR
6606               (l_acct_end_date= fnd_api.g_miss_date) OR
6607                --NVL(p_party_account_rec.active_end_date, fnd_api.g_miss_date) = NVL(l_curr_party_acct_rec.active_end_date, fnd_api.g_miss_date) THEN
6608                NVL(l_acct_end_date, fnd_api.g_miss_date) = NVL(l_curr_party_acct_rec.active_end_date, fnd_api.g_miss_date) THEN
6609                 l_account_hist_rec.old_active_end_date := NULL;
6610                 l_account_hist_rec.new_active_end_date := NULL;
6611            ELSIF
6612               --NVL(l_curr_party_acct_rec.active_end_date,fnd_api.g_miss_date) <> NVL(p_party_account_rec.active_end_date,fnd_api.g_miss_date) THEN
6613               NVL(l_curr_party_acct_rec.active_end_date,fnd_api.g_miss_date) <> NVL(l_acct_end_date,fnd_api.g_miss_date) THEN
6614                 l_account_hist_rec.old_active_end_date := l_curr_party_acct_rec.active_end_date ;
6615                 l_account_hist_rec.new_active_end_date := l_acct_end_date; --p_party_account_rec.active_end_date ;
6616            END IF;
6617            --
6618            IF (p_party_account_rec.context = fnd_api.g_miss_char) OR
6619                NVL(p_party_account_rec.context, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.context, fnd_api.g_miss_char) THEN
6620                 l_account_hist_rec.old_context := NULL;
6621                 l_account_hist_rec.new_context := NULL;
6622            ELSIF
6623               NVL(l_curr_party_acct_rec.context,fnd_api.g_miss_char) <> NVL(p_party_account_rec.context,fnd_api.g_miss_char) THEN
6624                 l_account_hist_rec.old_context := l_curr_party_acct_rec.context ;
6625                 l_account_hist_rec.new_context := p_party_account_rec.context ;
6626            END IF;
6627            --
6628            IF (p_party_account_rec.attribute1 = fnd_api.g_miss_char) OR
6629                NVL(p_party_account_rec.attribute1, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute1, fnd_api.g_miss_char) THEN
6630                 l_account_hist_rec.old_attribute1 := NULL;
6631                 l_account_hist_rec.new_attribute1 := NULL;
6632            ELSIF
6633               NVL(l_curr_party_acct_rec.attribute1,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute1,fnd_api.g_miss_char) THEN
6634                 l_account_hist_rec.old_attribute1 := l_curr_party_acct_rec.attribute1 ;
6635                 l_account_hist_rec.new_attribute1 := p_party_account_rec.attribute1 ;
6636            END IF;
6637            --
6638            IF (p_party_account_rec.attribute2 = fnd_api.g_miss_char) OR
6639                NVL(p_party_account_rec.attribute2, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute2, fnd_api.g_miss_char) THEN
6640                 l_account_hist_rec.old_attribute2 := NULL;
6641                 l_account_hist_rec.new_attribute2 := NULL;
6642            ELSIF
6643               NVL(l_curr_party_acct_rec.attribute2,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute2,fnd_api.g_miss_char) THEN
6644                 l_account_hist_rec.old_attribute2 := l_curr_party_acct_rec.attribute2 ;
6645                 l_account_hist_rec.new_attribute2 := p_party_account_rec.attribute2 ;
6646            END IF;
6647            --
6648            IF (p_party_account_rec.attribute3 = fnd_api.g_miss_char) OR
6649                NVL(p_party_account_rec.attribute3, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute3, fnd_api.g_miss_char) THEN
6650                 l_account_hist_rec.old_attribute3 := NULL;
6651                 l_account_hist_rec.new_attribute3 := NULL;
6652            ELSIF
6653               NVL(l_curr_party_acct_rec.attribute3,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute3,fnd_api.g_miss_char) THEN
6654                 l_account_hist_rec.old_attribute3 := l_curr_party_acct_rec.attribute3 ;
6655                 l_account_hist_rec.new_attribute3 := p_party_account_rec.attribute3 ;
6656            END IF;
6657            --
6658            IF (p_party_account_rec.attribute4 = fnd_api.g_miss_char) OR
6659                NVL(p_party_account_rec.attribute4, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute4, fnd_api.g_miss_char) THEN
6660                 l_account_hist_rec.old_attribute4 := NULL;
6661                 l_account_hist_rec.new_attribute4 := NULL;
6662            ELSIF
6663               NVL(l_curr_party_acct_rec.attribute4,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute4,fnd_api.g_miss_char) THEN
6664                 l_account_hist_rec.old_attribute4 := l_curr_party_acct_rec.attribute4 ;
6665                 l_account_hist_rec.new_attribute4 := p_party_account_rec.attribute4 ;
6666            END IF;
6667            --
6668            IF (p_party_account_rec.attribute5 = fnd_api.g_miss_char) OR
6669                NVL(p_party_account_rec.attribute5, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute5, fnd_api.g_miss_char) THEN
6670                 l_account_hist_rec.old_attribute5 := NULL;
6671                 l_account_hist_rec.new_attribute5 := NULL;
6672            ELSIF
6673               NVL(l_curr_party_acct_rec.attribute5,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute5,fnd_api.g_miss_char) THEN
6674                 l_account_hist_rec.old_attribute5 := l_curr_party_acct_rec.attribute5 ;
6675                 l_account_hist_rec.new_attribute5 := p_party_account_rec.attribute5 ;
6676            END IF;
6677            --
6678            IF (p_party_account_rec.attribute6 = fnd_api.g_miss_char) OR
6679                NVL(p_party_account_rec.attribute6, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute6, fnd_api.g_miss_char) THEN
6680                 l_account_hist_rec.old_attribute6 := NULL;
6681                 l_account_hist_rec.new_attribute6 := NULL;
6682            ELSIF
6683               NVL(l_curr_party_acct_rec.attribute6,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute6,fnd_api.g_miss_char) THEN
6684                 l_account_hist_rec.old_attribute6 := l_curr_party_acct_rec.attribute6 ;
6685                 l_account_hist_rec.new_attribute6 := p_party_account_rec.attribute6 ;
6686            END IF;
6687            --
6688            IF (p_party_account_rec.attribute7 = fnd_api.g_miss_char) OR
6689                NVL(p_party_account_rec.attribute7, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute7, fnd_api.g_miss_char) THEN
6690                 l_account_hist_rec.old_attribute7 := NULL;
6691                 l_account_hist_rec.new_attribute7 := NULL;
6692            ELSIF
6693               NVL(l_curr_party_acct_rec.attribute7,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute7,fnd_api.g_miss_char) THEN
6694                 l_account_hist_rec.old_attribute7 := l_curr_party_acct_rec.attribute7 ;
6695                 l_account_hist_rec.new_attribute7 := p_party_account_rec.attribute7 ;
6696            END IF;
6697            --
6698            IF (p_party_account_rec.attribute8 = fnd_api.g_miss_char) OR
6699                NVL(p_party_account_rec.attribute8, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute8, fnd_api.g_miss_char) THEN
6700                 l_account_hist_rec.old_attribute8 := NULL;
6701                 l_account_hist_rec.new_attribute8 := NULL;
6702            ELSIF
6703               NVL(l_curr_party_acct_rec.attribute8,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute8,fnd_api.g_miss_char) THEN
6704                 l_account_hist_rec.old_attribute8 := l_curr_party_acct_rec.attribute8 ;
6705                 l_account_hist_rec.new_attribute8 := p_party_account_rec.attribute8 ;
6706            END IF;
6707            --
6708            IF (p_party_account_rec.attribute9 = fnd_api.g_miss_char) OR
6709                NVL(p_party_account_rec.attribute9, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute9, fnd_api.g_miss_char) THEN
6710                 l_account_hist_rec.old_attribute9 := NULL;
6711                 l_account_hist_rec.new_attribute9 := NULL;
6712            ELSIF
6713               NVL(l_curr_party_acct_rec.attribute9,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute9,fnd_api.g_miss_char) THEN
6714                 l_account_hist_rec.old_attribute9 := l_curr_party_acct_rec.attribute9 ;
6715                 l_account_hist_rec.new_attribute9 := p_party_account_rec.attribute9 ;
6716            END IF;
6717            --
6718            IF (p_party_account_rec.attribute10 = fnd_api.g_miss_char) OR
6719                NVL(p_party_account_rec.attribute10, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute10, fnd_api.g_miss_char) THEN
6720                 l_account_hist_rec.old_attribute10 := NULL;
6721                 l_account_hist_rec.new_attribute10 := NULL;
6722            ELSIF
6723               NVL(l_curr_party_acct_rec.attribute10,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute10,fnd_api.g_miss_char) THEN
6724                 l_account_hist_rec.old_attribute10 := l_curr_party_acct_rec.attribute10 ;
6725                 l_account_hist_rec.new_attribute10 := p_party_account_rec.attribute10 ;
6726            END IF;
6727            --
6728            IF (p_party_account_rec.attribute11 = fnd_api.g_miss_char) OR
6729                NVL(p_party_account_rec.attribute11, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute11, fnd_api.g_miss_char) THEN
6730                 l_account_hist_rec.old_attribute11 := NULL;
6731                 l_account_hist_rec.new_attribute11 := NULL;
6732            ELSIF
6733               NVL(l_curr_party_acct_rec.attribute11,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute11,fnd_api.g_miss_char) THEN
6734                 l_account_hist_rec.old_attribute11 := l_curr_party_acct_rec.attribute11 ;
6735                 l_account_hist_rec.new_attribute11 := p_party_account_rec.attribute11 ;
6736            END IF;
6737            --
6738            IF (p_party_account_rec.attribute12 = fnd_api.g_miss_char) OR
6739                NVL(p_party_account_rec.attribute12, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute12, fnd_api.g_miss_char) THEN
6740                 l_account_hist_rec.old_attribute12 := NULL;
6741                 l_account_hist_rec.new_attribute12 := NULL;
6742            ELSIF
6743               NVL(l_curr_party_acct_rec.attribute12,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute12,fnd_api.g_miss_char) THEN
6744                 l_account_hist_rec.old_attribute12 := l_curr_party_acct_rec.attribute12 ;
6745                 l_account_hist_rec.new_attribute12 := p_party_account_rec.attribute12 ;
6746            END IF;
6747            --
6748            IF (p_party_account_rec.attribute13 = fnd_api.g_miss_char) OR
6749                NVL(p_party_account_rec.attribute13, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute13, fnd_api.g_miss_char) THEN
6750                 l_account_hist_rec.old_attribute13 := NULL;
6751                 l_account_hist_rec.new_attribute13 := NULL;
6752            ELSIF
6753               NVL(l_curr_party_acct_rec.attribute13,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute13,fnd_api.g_miss_char) THEN
6754                 l_account_hist_rec.old_attribute13 := l_curr_party_acct_rec.attribute13 ;
6755                 l_account_hist_rec.new_attribute13 := p_party_account_rec.attribute13 ;
6756            END IF;
6757            --
6758            IF (p_party_account_rec.attribute14 = fnd_api.g_miss_char) OR
6759                NVL(p_party_account_rec.attribute14, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute14, fnd_api.g_miss_char) THEN
6760                 l_account_hist_rec.old_attribute14 := NULL;
6761                 l_account_hist_rec.new_attribute14 := NULL;
6762            ELSIF
6763               NVL(l_curr_party_acct_rec.attribute14,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute14,fnd_api.g_miss_char) THEN
6764                 l_account_hist_rec.old_attribute14 := l_curr_party_acct_rec.attribute14 ;
6765                 l_account_hist_rec.new_attribute14 := p_party_account_rec.attribute14 ;
6766            END IF;
6767            --
6768            IF (p_party_account_rec.attribute15 = fnd_api.g_miss_char) OR
6769                NVL(p_party_account_rec.attribute15, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute15, fnd_api.g_miss_char) THEN
6770                 l_account_hist_rec.old_attribute15 := NULL;
6771                 l_account_hist_rec.new_attribute15 := NULL;
6772            ELSIF
6773               NVL(l_curr_party_acct_rec.attribute15,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute15,fnd_api.g_miss_char) THEN
6774                 l_account_hist_rec.old_attribute15 := l_curr_party_acct_rec.attribute15 ;
6775                 l_account_hist_rec.new_attribute15 := p_party_account_rec.attribute15 ;
6776            END IF;
6777     -- Added
6778            IF (p_party_account_rec.instance_party_id = fnd_api.g_miss_num) OR
6779                NVL(p_party_account_rec.instance_party_id, fnd_api.g_miss_num) = NVL(l_curr_party_acct_rec.instance_party_id, fnd_api.g_miss_num) THEN
6780                 l_account_hist_rec.old_instance_party_id := NULL;
6781                 l_account_hist_rec.new_instance_party_id := NULL;
6782            ELSIF
6783               NVL(l_curr_party_acct_rec.instance_party_id,fnd_api.g_miss_num) <> NVL(p_party_account_rec.instance_party_id,fnd_api.g_miss_num) THEN
6784                 l_account_hist_rec.old_instance_party_id := l_curr_party_acct_rec.instance_party_id ;
6785                 l_account_hist_rec.new_instance_party_id := p_party_account_rec.instance_party_id ;
6786            END IF;
6787    -- End addition
6788         -- Call table handlers to insert into csi_i_parties_h table
6789          CSI_IP_ACCOUNTS_H_PKG.Insert_Row
6790          (
6791           px_IP_ACCOUNT_HISTORY_ID        => l_ip_account_history_id ,
6792           p_IP_ACCOUNT_ID                 => p_party_account_rec.IP_ACCOUNT_ID ,
6793           p_TRANSACTION_ID                => p_txn_rec.TRANSACTION_ID ,
6794           p_OLD_PARTY_ACCOUNT_ID          => l_account_hist_rec.OLD_PARTY_ACCOUNT_ID ,
6795           p_NEW_PARTY_ACCOUNT_ID          => l_account_hist_rec.NEW_PARTY_ACCOUNT_ID ,
6796           p_OLD_RELATIONSHIP_TYPE_CODE    => l_account_hist_rec.OLD_RELATIONSHIP_TYPE_CODE ,
6797           p_NEW_RELATIONSHIP_TYPE_CODE    => l_account_hist_rec.NEW_RELATIONSHIP_TYPE_CODE ,
6798           p_OLD_ACTIVE_START_DATE         => l_account_hist_rec.OLD_ACTIVE_START_DATE ,
6799           p_NEW_ACTIVE_START_DATE         => l_account_hist_rec.NEW_ACTIVE_START_DATE ,
6800           p_OLD_ACTIVE_END_DATE           => l_account_hist_rec.OLD_ACTIVE_END_DATE ,
6801           p_NEW_ACTIVE_END_DATE           => l_account_hist_rec.NEW_ACTIVE_END_DATE ,
6802           p_OLD_CONTEXT                   => l_account_hist_rec.OLD_CONTEXT ,
6803           p_NEW_CONTEXT                   => l_account_hist_rec.NEW_CONTEXT ,
6804           p_OLD_ATTRIBUTE1                => l_account_hist_rec.OLD_ATTRIBUTE1 ,
6805           p_NEW_ATTRIBUTE1                => l_account_hist_rec.NEW_ATTRIBUTE1 ,
6806           p_OLD_ATTRIBUTE2                => l_account_hist_rec.OLD_ATTRIBUTE2 ,
6807           p_NEW_ATTRIBUTE2                => l_account_hist_rec.NEW_ATTRIBUTE2 ,
6808           p_OLD_ATTRIBUTE3                => l_account_hist_rec.OLD_ATTRIBUTE3 ,
6809           p_NEW_ATTRIBUTE3                => l_account_hist_rec.NEW_ATTRIBUTE3 ,
6810           p_OLD_ATTRIBUTE4                => l_account_hist_rec.OLD_ATTRIBUTE4 ,
6811           p_NEW_ATTRIBUTE4                => l_account_hist_rec.NEW_ATTRIBUTE4 ,
6812           p_OLD_ATTRIBUTE5                => l_account_hist_rec.OLD_ATTRIBUTE5 ,
6813           p_NEW_ATTRIBUTE5                => l_account_hist_rec.NEW_ATTRIBUTE5 ,
6814           p_OLD_ATTRIBUTE6                => l_account_hist_rec.OLD_ATTRIBUTE6 ,
6815           p_NEW_ATTRIBUTE6                => l_account_hist_rec.NEW_ATTRIBUTE6 ,
6816           p_OLD_ATTRIBUTE7                => l_account_hist_rec.OLD_ATTRIBUTE7 ,
6817           p_NEW_ATTRIBUTE7                => l_account_hist_rec.NEW_ATTRIBUTE7 ,
6818           p_OLD_ATTRIBUTE8                => l_account_hist_rec.OLD_ATTRIBUTE8 ,
6819           p_NEW_ATTRIBUTE8                => l_account_hist_rec.NEW_ATTRIBUTE8 ,
6820           p_OLD_ATTRIBUTE9                => l_account_hist_rec.OLD_ATTRIBUTE9 ,
6821           p_NEW_ATTRIBUTE9                => l_account_hist_rec.NEW_ATTRIBUTE9 ,
6822           p_OLD_ATTRIBUTE10               => l_account_hist_rec.OLD_ATTRIBUTE10 ,
6823           p_NEW_ATTRIBUTE10               => l_account_hist_rec.NEW_ATTRIBUTE10 ,
6824           p_OLD_ATTRIBUTE11               => l_account_hist_rec.OLD_ATTRIBUTE11 ,
6825           p_NEW_ATTRIBUTE11               => l_account_hist_rec.NEW_ATTRIBUTE11 ,
6826           p_OLD_ATTRIBUTE12               => l_account_hist_rec.OLD_ATTRIBUTE12 ,
6827           p_NEW_ATTRIBUTE12               => l_account_hist_rec.NEW_ATTRIBUTE12 ,
6828           p_OLD_ATTRIBUTE13               => l_account_hist_rec.OLD_ATTRIBUTE13 ,
6829           p_NEW_ATTRIBUTE13               => l_account_hist_rec.NEW_ATTRIBUTE13 ,
6830           p_OLD_ATTRIBUTE14               => l_account_hist_rec.OLD_ATTRIBUTE14 ,
6831           p_NEW_ATTRIBUTE14               => l_account_hist_rec.NEW_ATTRIBUTE14 ,
6832           p_OLD_ATTRIBUTE15               => l_account_hist_rec.OLD_ATTRIBUTE15 ,
6833           p_NEW_ATTRIBUTE15               => l_account_hist_rec.NEW_ATTRIBUTE15 ,
6834           p_FULL_DUMP_FLAG                => 'N' ,
6835           p_CREATED_BY                    => FND_GLOBAL.USER_ID ,
6836           p_CREATION_DATE                 => SYSDATE ,
6837           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID ,
6838           p_LAST_UPDATE_DATE              => SYSDATE ,
6839           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID ,
6840           p_OBJECT_VERSION_NUMBER         => 1 ,
6841           p_OLD_BILL_TO_ADDRESS           => l_account_hist_rec.OLD_BILL_TO_ADDRESS ,
6842           p_NEW_BILL_TO_ADDRESS           => l_account_hist_rec.NEW_BILL_TO_ADDRESS ,
6843           p_OLD_SHIP_TO_ADDRESS           => l_account_hist_rec.OLD_SHIP_TO_ADDRESS ,
6844           p_NEW_SHIP_TO_ADDRESS           => l_account_hist_rec.NEW_SHIP_TO_ADDRESS ,
6845           p_OLD_INSTANCE_PARTY_ID         => l_account_hist_rec.OLD_INSTANCE_PARTY_ID ,
6846           p_NEW_INSTANCE_PARTY_ID         => l_account_hist_rec.NEW_INSTANCE_PARTY_ID );
6847 
6848         END IF;
6849        END;
6850        -- End of modification for Bug#2547034 on 09/20/02 - rtalluri
6851 
6852     -- Call Contracts
6853     -- Commented by sguthiva for bug 2307804
6854     -- End commentation by sguthiva for bug 2307804
6855     -- Added by sguthiva for bug 2307804
6856     IF p_party_account_rec.relationship_type_code = 'OWNER'
6857     THEN
6858        -- The following code has been written to make sure
6859        -- before calling contracts we pass a valid vld_organization_id
6860        IF p_party_account_rec.vld_organization_id IS NULL OR
6861           p_party_account_rec.vld_organization_id = fnd_api.g_miss_num
6862        THEN
6863           BEGIN
6864              SELECT last_vld_organization_id
6865              INTO   l_last_vld_org
6866              FROM   csi_item_instances
6867              WHERE  instance_id = l_party_rec.instance_id;
6868           EXCEPTION
6869              WHEN OTHERS THEN
6870                 NULL;
6871           END;
6872        ELSE
6873           l_last_vld_org := p_party_account_rec.vld_organization_id;
6874        END IF;
6875        --
6876        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
6877           csi_gen_utility_pvt.populate_install_param_rec;
6878        END IF;
6879        --
6880        l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
6881        --
6882        IF l_internal_party_id IS NULL THEN
6883           FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
6884           FND_MSG_PUB.ADD;
6885           RAISE FND_API.G_EXC_ERROR;
6886        END IF;
6887        -- Commenting as we are not using this code
6888        /*
6889        l_old_party_id := null;
6890        l_new_party_id := null;
6891        Begin
6892           select old_party_id,new_party_id
6893           into l_old_party_id,l_new_party_id
6894           from CSI_I_PARTIES_H
6895           where instance_party_id = l_party_rec.instance_party_id
6896           and   transaction_id = p_txn_rec.transaction_id;
6897        Exception
6898           when no_data_found then
6899              l_old_party_id := null;
6900              l_new_party_id := null;
6901        End;
6902        --
6903        */
6904        IF l_old_pty_acct_id IS NOT NULL AND
6905           l_party_rec.Party_id <> l_internal_party_id -- changed from p_party_account_rec.party_account_id
6906           AND p_party_account_rec.party_account_id <> l_old_pty_acct_id
6907           AND p_party_account_rec.party_account_id <> fnd_api.g_miss_num
6908        THEN
6909           l_transaction_type := 'TRF';
6910           l_new_pty_acct_id := p_party_account_rec.party_account_id;
6911        ELSIF l_old_pty_acct_id IS NULL AND
6912              l_party_rec.party_id <> l_internal_party_id -- changed from p_party_account_rec.party_account_id
6913              AND p_party_account_rec.party_account_id IS NOT NULL
6914              AND p_party_account_rec.party_account_id <> fnd_api.g_miss_num
6915        THEN
6916           l_transaction_type := 'NEW';
6917           l_new_pty_acct_id := NULL;
6918           /*  ELSIF p_party_account_rec.party_account_id = l_internal_party_id
6919               OR  ( l_old_pty_acct_id <> l_internal_party_id
6920                 AND p_party_account_rec.active_end_date <= sysdate
6921                 AND p_party_account_rec.active_end_date <> fnd_api.g_miss_date )
6922             THEN */
6923           -- srramakr commneted the above code and checked for old and new party ID
6924        ELSIF /*l_old_party_id IS NOT NULL AND
6925           l_new_party_id IS NOT NULL AND
6926           l_old_party_id <> l_internal_party_id AND
6927           l_new_party_id = l_internal_party_id */
6928           p_party_account_rec.active_end_date IS NOT NULL AND
6929           p_party_account_rec.active_end_date <> fnd_api.g_miss_date AND
6930           p_party_account_rec.active_end_date <= sysdate
6931       THEN -- external to internal
6932           IF p_txn_rec.transaction_type_id in (53,54) THEN -- RMA
6933              l_transaction_type := 'RET';
6934           ELSE
6935              l_transaction_type := 'TRM';
6936           END IF;
6937 
6938           l_old_pty_acct_id := NULL;
6939           l_new_pty_acct_id := NULL;
6940 
6941           UPDATE csi_item_instances
6942           SET    owner_party_account_id = NULL
6943           WHERE  instance_id     = l_party_rec.instance_id;
6944        END IF;
6945        --
6946        IF  l_transaction_type IS NOT NULL AND
6947            p_party_account_rec.call_contracts <> fnd_api.g_false AND
6948            p_txn_rec.transaction_type_id <> 7   -- Added for bug 3973706
6949        THEN
6950           IF l_transaction_type = 'TRF' THEN
6951              -- Added the following code for bug 2972082
6952              IF nvl(p_party_account_rec.cascade_ownership_flag,'N')='Y' THEN
6953                 csi_gen_utility_pvt.put_line('Since the transaction is a cascade ownership call ');
6954                 csi_gen_utility_pvt.put_line('(external to external ownership, component owner is different from parent),');
6955                 csi_gen_utility_pvt.put_line('Hence call contracts with TRM and NEW transaction types. ');
6956                 csi_gen_utility_pvt.put_line( 'Calling contracts with TRM transaction type for instance '||l_party_rec.instance_id);
6957 		csi_item_instance_pvt.Call_to_Contracts(
6958 		         p_transaction_type   =>   'TRM'
6959 		        ,p_instance_id        =>   l_party_rec.instance_id
6960 		        ,p_new_instance_id    =>   NULL
6961 		        ,p_vld_org_id         =>   l_last_vld_org
6962 		        ,p_quantity           =>   NULL
6963 		        ,p_party_account_id1  =>   NULL
6964 		        ,p_party_account_id2  =>   NULL
6965 		        ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
6966 			,p_txn_type_id        => p_txn_rec.transaction_type_id  --added for BUG# 5752271
6967 		        ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date
6968 		        ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
6969                         ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
6970 		        ,x_return_status      =>   x_return_status
6971 		        ,x_msg_count          =>   x_msg_count
6972 		        ,x_msg_data           =>   x_msg_data
6973 		         );
6974 
6975                 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
6976                    csi_gen_utility_pvt.put_line('Cascade Ownership - Call to contracts with TRM txn type has errored ');
6977                    l_msg_index := 1;
6978                    l_msg_count := x_msg_count;
6979                    WHILE l_msg_count > 0 LOOP
6980                      x_msg_data := FND_MSG_PUB.GET(
6981                                            l_msg_index,
6982                                            FND_API.G_FALSE   );
6983                       csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
6984                       l_msg_index := l_msg_index + 1;
6985                       l_msg_count := l_msg_count - 1;
6986                    END LOOP;
6987                    RAISE FND_API.G_EXC_ERROR;
6988                 END IF;
6989                 csi_gen_utility_pvt.put_line( 'Calling contracts with NEW transaction type for instance '||l_party_rec.instance_id);
6990 
6991 		csi_item_instance_pvt.Call_to_Contracts(
6992 		         p_transaction_type   =>   'NEW'
6993 		        ,p_instance_id        =>   l_party_rec.instance_id
6994 		        ,p_new_instance_id    =>   NULL
6995 		        ,p_vld_org_id         =>   l_last_vld_org
6996 		        ,p_quantity           =>   NULL
6997 		        ,p_party_account_id1  =>   NULL
6998 		        ,p_party_account_id2  =>   NULL
6999 		        ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
7000 		        ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date -- SYSDATE
7001 		        ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
7002 			,p_txn_type_id        => p_txn_rec.transaction_type_id  --added for BUG# 5752271
7003                         ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
7004 		        ,x_return_status      =>   x_return_status
7005 		        ,x_msg_count          =>   x_msg_count
7006 		        ,x_msg_data           =>   x_msg_data
7007 		         );
7008                 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
7009                    csi_gen_utility_pvt.put_line('Cascade Ownership - Call to contracts with NEW txn type has errored ');
7010                    l_msg_index := 1;
7011                    l_msg_count := x_msg_count;
7012                    WHILE l_msg_count > 0 LOOP
7013                      x_msg_data := FND_MSG_PUB.GET(
7014                                            l_msg_index,
7015                                            FND_API.G_FALSE   );
7016                       csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
7017                       l_msg_index := l_msg_index + 1;
7018                       l_msg_count := l_msg_count - 1;
7019                    END LOOP;
7020                    RAISE FND_API.G_EXC_ERROR;
7021                 END IF;
7022                 -- End addition for bug 2972082
7023              ELSE
7024 		csi_item_instance_pvt.Call_to_Contracts(
7025 		         p_transaction_type   =>   l_transaction_type
7026 		        ,p_instance_id        =>   l_party_rec.instance_id
7027 		        ,p_new_instance_id    =>   NULL
7028 		        ,p_vld_org_id         =>   l_last_vld_org
7029 		        ,p_quantity           =>   NULL
7030 		        ,p_party_account_id1  =>   l_old_pty_acct_id
7031 		        ,p_party_account_id2  =>   l_new_pty_acct_id
7032 		        ,p_transaction_date   =>   p_txn_rec.transaction_date       -- added by sguthiva
7033 		        ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date       -- added by jpwilson
7034 		        ,p_transaction_id     =>   p_txn_rec.transaction_id
7035 		        ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
7036 			,p_txn_type_id        => p_txn_rec.transaction_type_id  --added for BUG# 5752271
7037 		        ,p_system_id          =>   p_party_account_rec.system_id
7038                         ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
7039 		        ,x_return_status      =>   x_return_status
7040 		        ,x_msg_count          =>   x_msg_count
7041 		        ,x_msg_data           =>   x_msg_data
7042 		         );
7043              END IF;
7044 	  ELSE
7045 	     csi_item_instance_pvt.Call_to_Contracts(
7046 		      p_transaction_type   =>   l_transaction_type
7047 		     ,p_instance_id        =>   l_party_rec.instance_id
7048 		     ,p_new_instance_id    =>   NULL
7049 		     ,p_vld_org_id         =>   l_last_vld_org
7050 		     ,p_quantity           =>   NULL
7051 		     ,p_party_account_id1  =>   l_old_pty_acct_id
7052 		     ,p_party_account_id2  =>   l_new_pty_acct_id
7053 		     ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
7054 		     ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date
7055 		     ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
7056                      ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
7057 		     ,x_return_status      =>   x_return_status
7058 		     ,x_msg_count          =>   x_msg_count
7059 		     ,x_msg_data           =>   x_msg_data
7060 		      );
7061 		  END IF;
7062 	     IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
7063 		l_msg_index := 1;
7064 		l_msg_count := x_msg_count;
7065 		WHILE l_msg_count > 0 LOOP
7066 			x_msg_data := FND_MSG_PUB.GET(
7067 					       l_msg_index,
7068 					       FND_API.G_FALSE   );
7069 			csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
7070 			l_msg_index := l_msg_index + 1;
7071 			l_msg_count := l_msg_count - 1;
7072 		END LOOP;
7073 		RAISE FND_API.G_EXC_ERROR;
7074              END IF;
7075           END IF;
7076        END IF;
7077        -- End addition by sguthiva for bug 2307804
7078        --
7079        -- End of API body
7080        -- Standard check of p_commit.
7081        IF FND_API.To_Boolean( p_commit ) THEN
7082           COMMIT WORK;
7083        END IF;
7084        -- Standard call to get message count and if count is  get message info.
7085        FND_MSG_PUB.Count_And_Get
7086                 (p_count        =>      x_msg_count ,
7087                  p_data         =>      x_msg_data  );
7088 EXCEPTION
7089         WHEN FND_API.G_EXC_ERROR THEN
7090                 -- ROLLBACK TO update_inst_party_acct_pvt;
7091                 x_return_status := FND_API.G_RET_STS_ERROR ;
7092                 FND_MSG_PUB.Count_And_Get
7093                 (       p_count    =>      x_msg_count,
7094                         p_data     =>      x_msg_data  );
7095         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7096                 -- ROLLBACK TO update_inst_party_acct_pvt;
7097                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7098                 FND_MSG_PUB.Count_And_Get
7099                 (       p_count  =>      x_msg_count,
7100                         p_data   =>      x_msg_data );
7101         WHEN OTHERS THEN
7102                 -- ROLLBACK TO update_inst_party_acct_pvt;
7103                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7104                 IF FND_MSG_PUB.Check_Msg_Level
7105                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7106                 THEN
7107                    FND_MSG_PUB.Add_Exc_Msg
7108                     ( g_pkg_name, l_api_name );
7109                 END IF;
7110                 FND_MSG_PUB.Count_And_Get
7111                 (       p_count   =>      x_msg_count,
7112                         p_data    =>      x_msg_data );
7113 END update_inst_party_account ;
7114 
7115 /*--------------------------------------------------------------*/
7116 /* Procedure name: Expire_inst_party_account                    */
7117 /* Description :  Procedure used to expire an existing          */
7118 /*                    instance-party account relationships      */
7119 /*--------------------------------------------------------------*/
7120 
7121 PROCEDURE expire_inst_party_account
7122  (    p_api_version                 IN  NUMBER
7123      ,p_commit                      IN  VARCHAR2
7124      ,p_init_msg_list               IN  VARCHAR2
7125      ,p_validation_level            IN  NUMBER
7126      ,p_party_account_rec           IN  csi_datastructures_pub.party_account_rec
7127      ,p_txn_rec                     IN OUT NOCOPY  csi_datastructures_pub.transaction_rec
7128      ,x_return_status               OUT NOCOPY  VARCHAR2
7129      ,x_msg_count                   OUT NOCOPY  NUMBER
7130      ,x_msg_data                    OUT NOCOPY  VARCHAR2
7131     ) IS
7132 
7133      l_api_name      CONSTANT VARCHAR2(30)   :=  'EXPIRE_INST_PARTY_ACCOUNT';
7134      l_api_version   CONSTANT NUMBER         :=  1.0;
7135      l_csi_debug_level        NUMBER;
7136      l_party_account_rec      csi_datastructures_pub.party_account_rec;
7137     --  l_curr_party_acct_rec    csi_datastructures_pub.party_account_rec;
7138      l_msg_count              NUMBER;
7139      l_msg_data               VARCHAR2(100);
7140      l_txn_id                 NUMBER;
7141      l_msg_index              NUMBER;
7142      l_OBJECT_VERSION_NUMBER  NUMBER;
7143      x_msg_index_out          NUMBER;
7144      l_ip_account_history_id  NUMBER;
7145      l_full_dump_frequency    NUMBER;
7146      l_mod_value              NUMBER;
7147      --
7148      px_oks_txn_inst_tbl      oks_ibint_pub.txn_instance_tbl;
7149 
7150   CURSOR get_curr_party_acct_rec (p_ip_account_id   IN  NUMBER) IS
7151    SELECT
7152      ip_account_id                    ,
7153      FND_API.G_MISS_NUM parent_tbl_index,
7154      instance_party_id                ,
7155      party_account_id                 ,
7156      relationship_type_code           ,
7157      bill_to_address                  ,
7158      ship_to_address                  ,
7159      active_start_date                ,
7160      active_end_date                  ,
7161      context                          ,
7162      attribute1                       ,
7163      attribute2                       ,
7164      attribute3                       ,
7165      attribute4                       ,
7166      attribute5                       ,
7167      attribute6                       ,
7168      attribute7                       ,
7169      attribute8                       ,
7170      attribute9                       ,
7171      attribute10                      ,
7172      attribute11                      ,
7173      attribute12                      ,
7174      attribute13                      ,
7175      attribute14                      ,
7176      attribute15                      ,
7177      object_version_number
7178    FROM CSI_IP_ACCOUNTS
7179    WHERE IP_ACCOUNT_ID = p_ip_account_id
7180    AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE))
7181    FOR UPDATE OF OBJECT_VERSION_NUMBER;
7182 
7183    l_curr_party_acct_rec    get_curr_party_acct_rec%ROWTYPE;
7184 
7185 BEGIN
7186    -- Standard Start of API savepoint
7187    SAVEPOINT  expire_inst_party_acct_pvt;
7188 
7189    -- Standard call to check for call compatibility.
7190    IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
7191 					   p_api_version           ,
7192 					   l_api_name              ,
7193 					   g_pkg_name              )
7194    THEN
7195 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7196    END IF;
7197 
7198    -- Initialize message list if p_init_msg_list is set to TRUE.
7199    IF FND_API.to_Boolean( p_init_msg_list ) THEN
7200 	   FND_MSG_PUB.initialize;
7201    END IF;
7202 
7203    --  Initialize API return status to success
7204    x_return_status := FND_API.G_RET_STS_SUCCESS;
7205 
7206    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
7207    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
7208 
7209    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
7210    IF (l_csi_debug_level > 0) THEN
7211        csi_gen_utility_pvt.put_line( 'expire_inst_party_account');
7212    END IF;
7213 
7214    -- If the debug level = 2 then dump all the parameters values.
7215    IF (l_csi_debug_level > 1) THEN
7216 	 csi_gen_utility_pvt.put_line( 'expire_inst_party_account:'||
7217 					 p_api_version           ||'-'||
7218 					 p_commit                ||'-'||
7219 					 p_init_msg_list              );
7220 
7221 
7222        -- Dump the records in the log file
7223        csi_gen_utility_pvt.dump_party_account_rec(p_party_account_rec);
7224        csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
7225    END IF;
7226    -- Start API body
7227    --
7228    -- Check if all the required parameters are passed
7229    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
7230 	 (    p_party_account_rec.ip_account_id,
7231 	      '  p_party_account_rec.ip_account_id ',
7232 	      l_api_name                 );
7233 
7234    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
7235 	 (   p_party_account_rec.object_version_number,
7236 	       ' p_party_account_rec.object_version_number ',
7237 		 l_api_name                 );
7238 
7239 
7240    -- Check if the instance party id  is valid
7241    IF NOT(CSI_Instance_parties_vld_pvt.Is_Ip_account_Valid
7242 	       (p_party_account_rec.ip_account_id))THEN
7243 	      FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_IP_ACCOUNT_ID');
7244 	      FND_MESSAGE.SET_TOKEN('IP_ACCOUNT_ID',p_party_account_rec.ip_account_id);
7245 	      FND_MSG_PUB.Add;
7246 	 RAISE FND_API.G_EXC_ERROR;
7247    END IF;
7248    -- check if the object_version_number passed matches with the one
7249    -- in the database else raise error
7250    OPEN get_curr_party_acct_rec(p_party_account_rec.ip_account_id);
7251    FETCH get_curr_party_acct_rec INTO l_curr_party_acct_rec;
7252 
7253    IF  (l_curr_party_acct_rec.object_version_number <> p_party_account_rec.OBJECT_VERSION_NUMBER) THEN
7254        FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
7255        FND_MSG_PUB.ADD;
7256       RAISE FND_API.G_EXC_ERROR;
7257    END IF;
7258    --
7259    IF get_curr_party_acct_rec%NOTFOUND THEN
7260       FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
7261       FND_MSG_PUB.ADD;
7262       RAISE FND_API.G_EXC_ERROR;
7263    END IF;
7264    CLOSE get_curr_party_acct_rec;
7265    -- Initialize all the parameters and call upate_inst_party_account to expire the record
7266 
7267    l_party_account_rec.IP_ACCOUNT_ID      := l_curr_party_acct_rec.ip_account_id;
7268    l_party_account_rec.INSTANCE_PARTY_ID := FND_API.G_MISS_NUM;
7269    l_party_account_rec.PARTY_ACCOUNT_ID := l_curr_party_acct_rec.party_account_id; -- Added by sguthiva for bug 2307804
7270    l_party_account_rec.RELATIONSHIP_TYPE_CODE := l_curr_party_acct_rec.relationship_type_code;-- Added by sguthiva for bug 2307804          l_party_account_rec.ACTIVE_START_DATE   := FND_API.G_MISS_DATE;
7271     -- Bug 3804960
7272     -- srramakr Need to use the same the date used by the item instance
7273     IF p_txn_rec.src_txn_creation_date IS NULL OR
7274        p_txn_rec.src_txn_creation_date = FND_API.G_MISS_DATE THEN
7275        l_party_account_rec.active_end_date := sysdate;
7276     ELSE
7277        l_party_account_rec.active_end_date := p_txn_rec.src_txn_creation_date;
7278     END IF;
7279     -- End of 3804960
7280     l_party_account_rec.CONTEXT       := FND_API.G_MISS_CHAR;
7281     l_party_account_rec.ATTRIBUTE1    := FND_API.G_MISS_CHAR;
7282     l_party_account_rec.ATTRIBUTE2    := FND_API.G_MISS_CHAR;
7283     l_party_account_rec.ATTRIBUTE3    := FND_API.G_MISS_CHAR;
7284     l_party_account_rec.ATTRIBUTE4    := FND_API.G_MISS_CHAR;
7285     l_party_account_rec.ATTRIBUTE5    := FND_API.G_MISS_CHAR;
7286     l_party_account_rec.ATTRIBUTE6    := FND_API.G_MISS_CHAR;
7287     l_party_account_rec.ATTRIBUTE7    := FND_API.G_MISS_CHAR;
7288     l_party_account_rec.ATTRIBUTE8    := FND_API.G_MISS_CHAR;
7289     l_party_account_rec.ATTRIBUTE9    := FND_API.G_MISS_CHAR;
7290     l_party_account_rec.ATTRIBUTE10   := FND_API.G_MISS_CHAR;
7291     l_party_account_rec.ATTRIBUTE11   := FND_API.G_MISS_CHAR;
7292     l_party_account_rec.ATTRIBUTE12   := FND_API.G_MISS_CHAR;
7293     l_party_account_rec.ATTRIBUTE13   := FND_API.G_MISS_CHAR;
7294     l_party_account_rec.ATTRIBUTE14   := FND_API.G_MISS_CHAR;
7295     l_party_account_rec.ATTRIBUTE15   := FND_API.G_MISS_CHAR;
7296     l_party_account_rec.BILL_TO_ADDRESS := FND_API.G_MISS_NUM;
7297     l_party_account_rec.SHIP_TO_ADDRESS := FND_API.G_MISS_NUM;
7298     l_party_account_rec.OBJECT_VERSION_NUMBER := p_party_account_rec.OBJECT_VERSION_NUMBER;
7299     l_party_account_rec.expire_flag := p_party_account_rec.expire_flag; -- Added by sguthiva for bug 2307804
7300     l_party_account_rec.call_contracts := p_party_account_rec.call_contracts; -- Added by sguthiva for bug 2307804
7301     -- g_expire_account_flag    := 'Y'; -- Added by sguthiva for bug 2307804
7302     --
7303     update_inst_party_account
7304 	(  p_api_version         => p_api_version
7305 	  ,p_commit              => p_commit
7306 	  ,p_init_msg_list       => p_init_msg_list
7307 	  ,p_validation_level    => p_validation_level
7308 	  ,p_party_account_rec   => l_party_account_rec
7309 	  ,p_txn_rec             => p_txn_rec
7310 	  ,p_oks_txn_inst_tbl    => px_oks_txn_inst_tbl
7311 	  ,x_return_status       => x_return_status
7312 	  ,x_msg_count           => x_msg_count
7313 	  ,x_msg_data            => x_msg_data);
7314     --
7315     --g_expire_account_flag    := 'N';  -- Added by sguthiva for bug 2307804
7316     IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
7317        l_msg_index := 1;
7318        l_msg_count := x_msg_count;
7319        WHILE l_msg_count > 0 LOOP
7320 	    x_msg_data := FND_MSG_PUB.GET(
7321 					 l_msg_index,
7322 					 FND_API.G_FALSE 	);
7323 	    csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
7324 	    l_msg_index := l_msg_index + 1;
7325 	    l_msg_count := l_msg_count - 1;
7326        END LOOP;
7327        RAISE FND_API.G_EXC_ERROR;
7328     END IF;
7329     --
7330     -- Commented the tablehandler call since Update API got invoked
7331     --
7332     -- End of API body
7333     -- Standard check of p_commit.
7334     IF FND_API.To_Boolean( p_commit ) THEN
7335        COMMIT WORK;
7336     END IF;
7337     -- Standard call to get message count and if count is  get message info.
7338     FND_MSG_PUB.Count_And_Get
7339                 (p_count        =>      x_msg_count ,
7340                  p_data         =>      x_msg_data );
7341 EXCEPTION
7342         WHEN FND_API.G_EXC_ERROR THEN
7343                 ROLLBACK TO expire_inst_party_acct_pvt;
7344                 x_return_status := FND_API.G_RET_STS_ERROR ;
7345                 FND_MSG_PUB.Count_And_Get
7346                 (       p_count   =>      x_msg_count,
7347                         p_data    =>      x_msg_data );
7348 
7349         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7350                 ROLLBACK TO expire_inst_party_acct_pvt;
7351                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7352                 FND_MSG_PUB.Count_And_Get
7353                 (       p_count  =>      x_msg_count,
7354                         p_data   =>      x_msg_data );
7355         WHEN OTHERS THEN
7356                 ROLLBACK TO expire_inst_party_acct_pvt;
7357                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7358                 IF FND_MSG_PUB.Check_Msg_Level
7359                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7360                 THEN
7361                    FND_MSG_PUB.Add_Exc_Msg
7362                     ( g_pkg_name, l_api_name );
7363                 END IF;
7364                 FND_MSG_PUB.Count_And_Get
7365                 (       p_count   =>      x_msg_count,
7366                         p_data    =>      x_msg_data  );
7367 END expire_inst_party_account ;
7368 
7369 
7370 /*------------------------------------------------------------*/
7371 /* Procedure name: get_contact_details                        */
7372 /* Description :  Get the details of a contact party          */
7373 /*------------------------------------------------------------*/
7374 
7375 PROCEDURE get_contact_details
7376  (
7377       p_api_version                 IN  NUMBER
7378      ,p_commit                      IN  VARCHAR2
7379      ,p_init_msg_list               IN  VARCHAR2
7380      ,p_validation_level            IN  NUMBER
7381      ,p_contact_party_id            IN  NUMBER
7382      ,p_contact_flag                IN  VARCHAR2
7383      ,p_party_tbl                   IN  VARCHAR2
7384      ,x_contact_details             OUT NOCOPY  csi_datastructures_pub.contact_details_rec
7385      ,x_return_status               OUT NOCOPY  VARCHAR2
7386      ,x_msg_count                   OUT NOCOPY  NUMBER
7387      ,x_msg_data                    OUT NOCOPY  VARCHAR2
7388     ) IS
7389 
7390      l_api_name      CONSTANT VARCHAR2(30)   :=  'GET_CONTACT_DETAILS_PVT';
7391      l_api_version   CONSTANT NUMBER         :=  1.0;
7392      l_csi_debug_level        NUMBER;
7393 
7394 
7395 BEGIN
7396         -- Standard Start of API savepoint
7397         -- SAVEPOINT  get_contact_details_pvt;
7398 
7399         -- Standard call to check for call compatibility.
7400         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
7401                                                 p_api_version           ,
7402                                                 l_api_name              ,
7403                                                 g_pkg_name              )
7404         THEN
7405                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7406         END IF;
7407 
7408         -- Initialize message list if p_init_msg_list is set to TRUE.
7409         IF FND_API.to_Boolean( p_init_msg_list ) THEN
7410                 FND_MSG_PUB.initialize;
7411         END IF;
7412 
7413         --  Initialize API return status to success
7414         x_return_status := FND_API.G_RET_STS_SUCCESS;
7415 
7416         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
7417         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
7418 
7419         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
7420         IF (l_csi_debug_level > 0) THEN
7421             csi_gen_utility_pvt.put_line( 'get_contact_details');
7422         END IF;
7423 
7424 
7425         -- Start API body
7426 
7427         IF (   ( p_contact_party_id IS NULL OR p_contact_party_id = fnd_api.g_miss_num )
7428             OR ( p_party_tbl IS NULL OR p_party_tbl = fnd_api.g_miss_char )
7429            )
7430         THEN
7431             fnd_message.set_name('CSI', 'CSI_API_INVALID_PARAMETERS');
7432             fnd_msg_pub.add;
7433             x_return_status := fnd_api.g_ret_sts_error;
7434             RAISE fnd_api.g_exc_error;
7435         END IF;
7436 
7437 
7438         IF upper(p_party_tbl) = 'HZ_PARTIES'
7439         THEN
7440            BEGIN
7441 
7442               SELECT   hp.party_name party_name,
7443 
7444                 decode( hcp_wp.phone_country_code, null, null, hcp_wp.phone_country_code || '-'
7445     )
7446              || decode( hcp_wp.phone_area_code, null, null, '(' || hcp_wp.phone_Area_code || ')'
7447     )
7448              || hcp_wp.phone_number
7449              || decode( hcp_wp.phone_extension, null, null, ' x'|| hcp_wp.phone_extension)
7450     work_phone_number,
7451 
7452                 decode( hcp_hp.phone_country_code, null, null, hcp_hp.phone_country_code || '-'
7453     )
7454              || decode( hcp_hp.phone_area_code, null, null, '(' || hcp_hp.phone_Area_code || ')'
7455     )
7456              || hcp_hp.phone_number
7457              || decode( hcp_hp.phone_extension, null, null, ' x'|| hcp_hp.phone_extension)
7458     home_phone_number,
7459 
7460                 decode( hcp_mb.phone_country_code, null, null, hcp_mb.phone_country_code || '-'
7461     )
7462              || decode( hcp_mb.phone_area_code, null, null, '(' || hcp_mb.phone_Area_code || ')'
7463     )
7464              || hcp_mb.phone_number
7465              || decode( hcp_mb.phone_extension, null, null, ' x'|| hcp_mb.phone_extension)
7466     mobile_number,
7467 
7468                 decode( hcp_pg.phone_country_code, null, null, hcp_pg.phone_country_code || '-'
7469     )
7470              || decode( hcp_pg.phone_area_code, null, null, '(' || hcp_pg.phone_Area_code || ')'
7471     )
7472              || hcp_pg.phone_number
7473              || decode( hcp_pg.phone_extension, null, null, ' x'|| hcp_pg.phone_extension)
7474     pager_number,
7475 
7476                 decode( hcp_fx.phone_country_code, null, null, hcp_fx.phone_country_code || '-'
7477     )
7478              || decode( hcp_fx.phone_area_code, null, null, '(' || hcp_fx.phone_Area_code || ')'
7479     )
7480              || hcp_fx.phone_number
7481              || decode( hcp_fx.phone_extension, null, null, ' x'|| hcp_fx.phone_extension)
7482     fax_number,
7483 
7484                 HP.ADDRESS1, HP.ADDRESS2, HP.ADDRESS3, HP.ADDRESS4, HP.CITY, HP.POSTAL_CODE,
7485                 HP.STATE, HP.COUNTRY,
7486                 hcp_em.email_address
7487 
7488             INTO   x_contact_details.party_name,
7489                    x_contact_details.officephone,
7490                    x_contact_details.homephone,
7491                    x_contact_details.mobile,
7492                    x_contact_details.page,
7493                    x_contact_details.fax,
7494                    x_contact_details.address1,
7495                    x_contact_details.address2,
7496                    x_contact_details.address3,
7497                    x_contact_details.address4,
7498                    x_contact_details.city,
7499                    x_contact_details.postal_code,
7500                    x_contact_details.state,
7501                    x_contact_details.country,
7502                    x_contact_details.email
7503 
7504              FROM
7505                    HZ_PARTIES HP,
7506                    CSI_I_PARTIES CIP,
7507                  --  CSI_IPA_RELATION_TYPES CIR,
7508                    HZ_CONTACT_POINTS HCP_WP,
7509                    HZ_CONTACT_POINTS HCP_HP,
7510                    HZ_CONTACT_POINTS HCP_PG,
7511                    HZ_CONTACT_POINTS HCP_EM,
7512                    HZ_CONTACT_POINTS HCP_FX,
7513                    HZ_CONTACT_POINTS HCP_MB,
7514                  --  CSI_LOOKUPS CL,
7515                    HZ_RELATIONSHIPS HR,
7516                    CSI_I_PARTIES CIPO
7517              WHERE CIP.INSTANCE_PARTY_ID =  p_contact_party_id -- party_id for the contact
7518                AND CIP.PARTY_ID = HR.SUBJECT_ID
7519                AND CIP.CONTACT_IP_ID = CIPO.INSTANCE_PARTY_ID
7520                AND CIPO.PARTY_ID = HR.OBJECT_ID
7521                AND HR.SUBJECT_ID = HP.PARTY_ID
7522                AND CIP.CONTACT_FLAG = 'Y'
7523                AND CIP.PARTY_SOURCE_TABLE = 'HZ_PARTIES'
7524             --   AND CIP.RELATIONSHIP_TYPE_CODE = CIR.IPA_RELATION_TYPE_CODE(+)
7525             --   AND CL.LOOKUP_CODE(+) = CIP.PARTY_SOURCE_TABLE
7526                AND HR.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
7527                AND HR.OBJECT_TABLE_NAME = 'HZ_PARTIES'
7528 
7529                AND HCP_WP.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7530                AND HCP_WP.OWNER_TABLE_ID(+) = HR.PARTY_ID
7531                AND HCP_WP.CONTACT_POINT_TYPE(+) = 'PHONE'
7532                AND HCP_WP.PHONE_LINE_TYPE(+) = 'GEN'
7533                AND HCP_WP.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7534 
7535                AND HCP_HP.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7536                AND HCP_HP.OWNER_TABLE_ID(+) = HR.PARTY_ID
7537                AND HCP_HP.CONTACT_POINT_TYPE(+) = 'PHONE'
7538                AND HCP_HP.PHONE_LINE_TYPE(+) = 'GEN'
7539                AND HCP_HP.CONTACT_POINT_PURPOSE(+) = 'PERSONAL'
7540 
7541                AND HCP_MB.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7542                AND HCP_MB.OWNER_TABLE_ID(+) = HR.PARTY_ID
7543                AND HCP_MB.CONTACT_POINT_TYPE(+) = 'PHONE'
7544                AND HCP_MB.PHONE_LINE_TYPE(+) = 'MOBILE'
7545                AND HCP_MB.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7546 
7547                AND HCP_PG.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7548                AND HCP_PG.OWNER_TABLE_ID(+) = HR.PARTY_ID
7549                AND HCP_PG.CONTACT_POINT_TYPE(+) = 'PHONE'
7550                AND HCP_PG.PHONE_LINE_TYPE(+) = 'PAGER'
7551                AND HCP_PG.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7552 
7553                AND HCP_FX.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7554                AND HCP_FX.OWNER_TABLE_ID(+) = HR.PARTY_ID
7555                AND HCP_FX.CONTACT_POINT_TYPE(+) = 'PHONE'
7556                AND HCP_FX.PHONE_LINE_TYPE(+) = 'FAX'
7557                AND HCP_FX.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7558 
7559                AND HCP_EM.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7560                AND HCP_EM.OWNER_TABLE_ID(+) = HR.PARTY_ID
7561                AND HCP_EM.CONTACT_POINT_TYPE(+) = 'EMAIL'
7562                AND HCP_EM.PRIMARY_FLAG(+) = 'Y'
7563                AND ROWNUM < 2;
7564            EXCEPTION
7565                WHEN NO_DATA_FOUND THEN
7566                 NULL;
7567            END;
7568 
7569 
7570         ELSIF upper(p_party_tbl) = 'PO_VENDORS'
7571         THEN
7572            IF p_contact_flag = 'Y' THEN
7573               BEGIN
7574 
7575                 SELECT   PVC.PREFIX || ' ' || PVC.FIRST_NAME || ' ' || PVC.MIDDLE_NAME || ' '|| PVC.LAST_NAME PARTY_NAME,
7576                          PVC.area_code||'-'||PVC.phone, --WORKPHONE,
7577                          NULL, --HOMEPHONE
7578                          NULL, --MOBILE
7579                          NULL, --PAGE
7580                          NULL, --FAX,
7581                          PVS.ADDRESS_LINE1 ADDRESS1, --address_line1
7582                          PVS.ADDRESS_LINE2 ADDRESS2, --address_line2
7583                          PVS.ADDRESS_LINE3 ADDRESS3, --address_line3
7584                          NULL, --address_line4
7585                          PVS.CITY, --city,
7586                          PVS.ZIP POSTAL_CODE, --zip
7587                          PVS.STATE STATE, --state
7588                          PVS.COUNTRY COUNTRY, --country
7589                          PVC.mail_stop --EMAIL ADDRESS
7590                  INTO    x_contact_details.party_name,
7591                          x_contact_details.officephone,
7592                          x_contact_details.homephone,
7593                          x_contact_details.mobile,
7594                          x_contact_details.page,
7595                          x_contact_details.fax,
7596                          x_contact_details.address1,
7597                          x_contact_details.address2,
7598                          x_contact_details.address3,
7599                          x_contact_details.address4,
7600                          x_contact_details.city,
7601                          x_contact_details.postal_code,
7602                          x_contact_details.state,
7603                          x_contact_details.country,
7604                          x_contact_details.email
7605                  FROM    CSI_I_PARTIES CIP,
7606                          PO_VENDOR_CONTACTS PVC,
7607                          PO_VENDOR_SITES_ALL PVS
7608                  WHERE   CIP.INSTANCE_PARTY_ID = p_contact_party_id
7609                    AND   CIP.PARTY_ID = PVC.VENDOR_CONTACT_ID
7610                    AND   PVS.VENDOR_SITE_ID = PVC.VENDOR_SITE_ID
7611                  AND     rownum < 2;
7612               EXCEPTION
7613                WHEN NO_DATA_FOUND THEN
7614                 NULL;
7615               END;
7616             END IF;
7617 
7618         ELSIF upper(p_party_tbl) = 'EMPLOYEE'
7619         THEN
7620               BEGIN
7621                  SELECT  distinct PAP.full_name, --PARTY NAME
7622                          PAP.work_telephone, --WORK PHONE
7623                          NULL , -- HOME_PHONE_NUMBER
7624                          NULL , --MOBILE
7625                          NULL , --PAGE
7626                          NULL , --FAX
7627                          NULL , --ADDRESS1
7628                          NULL , --ADDRESS2
7629                          NULL , --ADDRESS3
7630                          NULL , --ADDRESS4
7631                          NULL , --CITY
7632                          NULL , --POSTAL CODE
7633                          NULL , --STATE
7634                          NULL , --COUNTRY
7635                          PAP.email_address --EMAIL
7636                  INTO    x_contact_details.party_name,
7637                          x_contact_details.officephone,
7638                          x_contact_details.homephone,
7639                          x_contact_details.mobile,
7640                          x_contact_details.page,
7641                          x_contact_details.fax,
7642                          x_contact_details.address1,
7643                          x_contact_details.address2,
7644                          x_contact_details.address3,
7645                          x_contact_details.address4,
7646                          x_contact_details.city,
7647                          x_contact_details.postal_code,
7648                          x_contact_details.state,
7649                          x_contact_details.country,
7650                          x_contact_details.email
7651                   FROM   CSI_I_PARTIES CIP,
7652                          PER_ALL_PEOPLE_F PAP
7653                   WHERE  CIP.INSTANCE_PARTY_ID = p_contact_party_id
7654                   AND    CIP.PARTY_ID = PAP.PERSON_ID
7655                   AND    PAP.EFFECTIVE_START_DATE <= SYSDATE
7656                   AND    PAP.EFFECTIVE_END_DATE >= SYSDATE
7657                   AND    rownum < 2;
7658               EXCEPTION
7659                 WHEN NO_DATA_FOUND THEN
7660                  NULL;
7661               END;
7662 
7663         ELSIF upper(p_party_tbl) = 'GROUP'
7664         THEN
7665             BEGIN
7666                SELECT    distinct JG.group_name,
7667                          NULL , --WORK PHONE
7668                          NULL , --HOME_PHONE_NUMBER
7669                          NULL , --MOBILE
7670                          NULL , --PAGE
7671                          NULL , --FAX
7672                          NULL , --ADDRESS1
7673                          NULL , --ADDRESS2
7674                          NULL , --ADDRESS3
7675                          NULL , --ADDRESS4
7676                          NULL , --CITY
7677                          NULL , --POSTAL CODE
7678                          NULL , --STATE
7679                          NULL , --COUNTRY
7680                          JG.email_address --EMAIL
7681                  INTO    x_contact_details.party_name,
7682                          x_contact_details.officephone,
7683                          x_contact_details.homephone,
7684                          x_contact_details.mobile,
7685                          x_contact_details.page,
7686                          x_contact_details.fax,
7687                          x_contact_details.address1,
7688                          x_contact_details.address2,
7689                          x_contact_details.address3,
7690                          x_contact_details.address4,
7691                          x_contact_details.city,
7692                          x_contact_details.postal_code,
7693                          x_contact_details.state,
7694                          x_contact_details.country,
7695                          x_contact_details.email
7696                   FROM   CSI_I_PARTIES CIP,
7697                          JTF_RS_GROUPS_VL JG
7698                   WHERE  CIP.INSTANCE_PARTY_ID = p_contact_party_id
7699                     AND  CIP.PARTY_ID = JG.GROUP_ID
7700                     AND  rownum < 2;
7701               EXCEPTION
7702                  WHEN NO_DATA_FOUND THEN
7703                    NULL;
7704               END;
7705 
7706         ELSIF upper(p_party_tbl) = 'TEAM'
7707         THEN
7708             BEGIN
7709                SELECT    distinct JT.TEAM_NAME,
7710                          NULL , --WORK PHONE
7711                          NULL , --HOME_PHONE_NUMBER
7712                          NULL , --MOBILE
7713                          NULL , --PAGE
7714                          NULL , --FAX
7715                          NULL , --ADDRESS1
7716                          NULL , --ADDRESS2
7717                          NULL , --ADDRESS3
7718                          NULL , --ADDRESS4
7719                          NULL , --CITY
7720                          NULL , --POSTAL CODE
7721                          NULL , --STATE
7722                          NULL , --COUNTRY
7723                          JT.email_address --EMAIL
7724                  INTO    x_contact_details.party_name,
7725                          x_contact_details.officephone,
7726                          x_contact_details.homephone,
7727                          x_contact_details.mobile,
7728                          x_contact_details.page,
7729                          x_contact_details.fax,
7730                          x_contact_details.address1,
7731                          x_contact_details.address2,
7732                          x_contact_details.address3,
7733                          x_contact_details.address4,
7734                          x_contact_details.city,
7735                          x_contact_details.postal_code,
7736                          x_contact_details.state,
7737                          x_contact_details.country,
7738                          x_contact_details.email
7739                  FROM    CSI_I_PARTIES CIP,
7740                          JTF_RS_TEAMS_VL JT
7741                  WHERE   CIP.INSTANCE_PARTY_ID = p_contact_party_id
7742                  AND     CIP.PARTY_ID = JT.TEAM_ID
7743                  AND     rownum < 2;
7744              EXCEPTION
7745                  WHEN NO_DATA_FOUND THEN
7746                   NULL;
7747              END;
7748         END IF;
7749         x_contact_details.contact_party_id := p_contact_party_id;
7750         --
7751         -- End of API body
7752 
7753         -- Standard check of p_commit.
7754         /*
7755         IF FND_API.To_Boolean( p_commit ) THEN
7756                 COMMIT WORK;
7757         END IF;
7758         */
7759 
7760         -- Standard call to get message count and if count is  get message info.
7761         FND_MSG_PUB.Count_And_Get
7762                 (p_count        =>      x_msg_count ,
7763                  p_data         =>      x_msg_data );
7764 EXCEPTION
7765         WHEN FND_API.G_EXC_ERROR THEN
7766               --  ROLLBACK TO get_contact_details_pvt;
7767                 x_return_status := FND_API.G_RET_STS_ERROR ;
7768                 FND_MSG_PUB.Count_And_Get
7769                 (       p_count   =>      x_msg_count,
7770                         p_data    =>      x_msg_data );
7771         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7772               --  ROLLBACK TO get_contact_details_pvt;
7773                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7774                 FND_MSG_PUB.Count_And_Get
7775                 (       p_count  =>      x_msg_count,
7776                         p_data   =>      x_msg_data );
7777         WHEN OTHERS THEN
7778               --  ROLLBACK TO get_contact_details_pvt;
7779                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7780                 IF FND_MSG_PUB.Check_Msg_Level
7781                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7782                 THEN
7783                    FND_MSG_PUB.Add_Exc_Msg
7784                     ( g_pkg_name, l_api_name );
7785                 END IF;
7786                 FND_MSG_PUB.Count_And_Get
7787                 (       p_count   =>      x_msg_count,
7788                         p_data    =>      x_msg_data  );
7789 
7790 END get_contact_details ;
7791 
7792 
7793 
7794 /*------------------------------------------------------------*/
7795 /* Procedure name:  get_inst_party_rel_hist                   */
7796 /* Description :   Procedure used to  get party relationships */
7797 /*                  from history given a transaction_id       */
7798 /*------------------------------------------------------------*/
7799 
7800 PROCEDURE get_inst_party_rel_hist
7801  (    p_api_version             IN  NUMBER
7802      ,p_commit                  IN  VARCHAR2
7803      ,p_init_msg_list           IN  VARCHAR2
7804      ,p_validation_level        IN  NUMBER
7805      ,p_transaction_id          IN  NUMBER
7806      ,x_party_history_tbl       OUT NOCOPY  csi_datastructures_pub.party_history_tbl
7807      ,x_return_status           OUT NOCOPY  VARCHAR2
7808      ,x_msg_count               OUT NOCOPY  NUMBER
7809      ,x_msg_data                OUT NOCOPY  VARCHAR2
7810     ) IS
7811 
7812      l_api_name      CONSTANT VARCHAR2(30)   := 'GET_INST_PARTY_REL_HIST' ;
7813      l_api_version   CONSTANT NUMBER         := 1.0                       ;
7814      l_csi_debug_level        NUMBER                                      ;
7815      x_msg_index_out          NUMBER;
7816      l_count                  NUMBER         := 0                         ;
7817      l_flag                   VARCHAR2(1)  :='N'                          ;
7818      l_instance_party_id      NUMBER                                          ;
7819      l_old_contact_party_id       NUMBER                                          ;
7820      l_new_contact_party_id       NUMBER                                      ;
7821      l_contact_details        csi_datastructures_pub.contact_details_rec ;
7822      i                       NUMBER :=1;
7823      l_old_party_source_tbl  VARCHAR2(30);
7824      l_new_party_source_tbl  VARCHAR2(30);
7825      l_old_contact_flag      VARCHAR2(1);
7826      l_new_contact_flag      VARCHAR2(1);
7827 
7828 
7829 
7830      CURSOR get_party_hist(i_transaction_id NUMBER)
7831      IS
7832      SELECT   ciph.INSTANCE_PARTY_ID,
7833               ciph.INSTANCE_PARTY_HISTORY_ID,
7834               ciph.TRANSACTION_ID,
7835               ciph.OLD_PARTY_SOURCE_TABLE,
7836               ciph.NEW_PARTY_SOURCE_TABLE,
7837               ciph.OLD_PARTY_ID,
7838               ciph.NEW_PARTY_ID,
7839               ciph.OLD_RELATIONSHIP_TYPE_CODE,
7840               ciph.NEW_RELATIONSHIP_TYPE_CODE,
7841               ciph.OLD_CONTACT_FLAG,
7842               ciph.NEW_CONTACT_FLAG,
7843               ciph.OLD_CONTACT_IP_ID,
7844               ciph.NEW_CONTACT_IP_ID,
7845               ciph.OLD_ACTIVE_START_DATE,
7846               ciph.NEW_ACTIVE_START_DATE,
7847               ciph.OLD_ACTIVE_END_DATE,
7848               ciph.NEW_ACTIVE_END_DATE,
7849               ciph.OLD_CONTEXT,
7850               ciph.NEW_CONTEXT,
7851               ciph.OLD_ATTRIBUTE1,
7852               ciph.NEW_ATTRIBUTE1,
7853               ciph.OLD_ATTRIBUTE2,
7854               ciph.NEW_ATTRIBUTE2,
7855               ciph.OLD_ATTRIBUTE3,
7856               ciph.NEW_ATTRIBUTE3,
7857               ciph.OLD_ATTRIBUTE4,
7858               ciph.NEW_ATTRIBUTE4,
7859               ciph.OLD_ATTRIBUTE5,
7860               ciph.NEW_ATTRIBUTE5,
7861               ciph.OLD_ATTRIBUTE6,
7862               ciph.NEW_ATTRIBUTE6,
7863               ciph.OLD_ATTRIBUTE7,
7864               ciph.NEW_ATTRIBUTE7,
7865               ciph.OLD_ATTRIBUTE8,
7866               ciph.NEW_ATTRIBUTE8,
7867               ciph.OLD_ATTRIBUTE9,
7868               ciph.NEW_ATTRIBUTE9,
7869               ciph.OLD_ATTRIBUTE10,
7870               ciph.NEW_ATTRIBUTE10,
7871               ciph.OLD_ATTRIBUTE11,
7872               ciph.NEW_ATTRIBUTE11,
7873               ciph.OLD_ATTRIBUTE12,
7874               ciph.NEW_ATTRIBUTE12,
7875               ciph.OLD_ATTRIBUTE13,
7876               ciph.NEW_ATTRIBUTE13,
7877               ciph.OLD_ATTRIBUTE14,
7878               ciph.NEW_ATTRIBUTE14,
7879               ciph.OLD_ATTRIBUTE15,
7880               ciph.NEW_ATTRIBUTE15,
7881               ciph.FULL_DUMP_FLAG,
7882               ciph.OBJECT_VERSION_NUMBER,
7883               ciph.OLD_PREFERRED_FLAG,
7884               ciph.NEW_PREFERRED_FLAG,
7885               ciph.OLD_PRIMARY_FLAG,
7886               ciph.NEW_PRIMARY_FLAG,
7887               cip.INSTANCE_ID,
7888               ciph.creation_date  --Added for bug 2781480
7889      FROM     csi_i_parties_h ciph,
7890               csi_i_parties cip
7891      WHERE    ciph.transaction_id = i_transaction_id
7892      AND      ciph.instance_party_id = cip.instance_party_id; -- Added by sk on 08-APR for fixing bug
7893                                                               -- 2304649 .
7894 -- Added for bug 2781480
7895 l_time_stamp          DATE;
7896 l_party_query_rec     csi_datastructures_pub.party_query_rec;
7897 l_party_header_tbl    csi_datastructures_pub.party_header_tbl;
7898 -- End addition for bug 2781480
7899 BEGIN
7900         -- Standard Start of API savepoint
7901      --   SAVEPOINT   get_inst_party_rel_hist;
7902 
7903 
7904         -- Standard call to check for call compatibility.
7905         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
7906                                                 p_api_version           ,
7907                                                 l_api_name              ,
7908                                                 g_pkg_name              )
7909         THEN
7910            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7911         END IF;
7912 
7913         -- Initialize message list if p_init_msg_list is set to TRUE.
7914         IF FND_API.to_Boolean( p_init_msg_list ) THEN
7915                 FND_MSG_PUB.initialize;
7916         END IF;
7917 
7918         --  Initialize API return status to success
7919         x_return_status := FND_API.G_RET_STS_SUCCESS;
7920 
7921         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
7922         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
7923 
7924         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
7925         IF (l_csi_debug_level > 0) THEN
7926             csi_gen_utility_pvt.put_line( 'get_inst_party_rel_hist');
7927         END IF;
7928 
7929         -- If the debug level = 2 then dump all the parameters values.
7930         IF (l_csi_debug_level > 1) THEN
7931             csi_gen_utility_pvt.put_line(  'get_inst_party_rel_hist'   ||
7932                                                  p_api_version           ||'-'||
7933                                                  p_commit                ||'-'||
7934                                                  p_init_msg_list         ||'-'||
7935                                                  p_validation_level      ||'-'||
7936                                                  p_transaction_id               );
7937              -- dump the in parameter in the log file
7938 
7939         END IF;
7940 
7941         /***** srramakr commented for bug # 3304439
7942         -- Check for the profile option and enable trace
7943         l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
7944         -- End enable trace
7945         ****/
7946 
7947         -- Start API body
7948 
7949         FOR C1 IN get_party_hist(p_transaction_id) LOOP
7950               x_party_history_tbl(i).INSTANCE_PARTY_ID := C1.INSTANCE_PARTY_ID;
7951               x_party_history_tbl(i).INSTANCE_PARTY_HISTORY_ID := C1.INSTANCE_PARTY_HISTORY_ID;
7952               x_party_history_tbl(i).TRANSACTION_ID := C1.TRANSACTION_ID;
7953               x_party_history_tbl(i).OLD_PARTY_SOURCE_TABLE := C1.OLD_PARTY_SOURCE_TABLE;
7954               x_party_history_tbl(i).NEW_PARTY_SOURCE_TABLE := C1.NEW_PARTY_SOURCE_TABLE;
7955               x_party_history_tbl(i).OLD_PARTY_ID := C1.OLD_PARTY_ID;
7956               x_party_history_tbl(i).NEW_PARTY_ID := C1.NEW_PARTY_ID;
7957               x_party_history_tbl(i).OLD_RELATIONSHIP_TYPE_CODE := C1.OLD_RELATIONSHIP_TYPE_CODE;
7958               x_party_history_tbl(i).NEW_RELATIONSHIP_TYPE_CODE:= C1.NEW_RELATIONSHIP_TYPE_CODE;
7959               x_party_history_tbl(i).OLD_CONTACT_FLAG := C1.OLD_CONTACT_FLAG;
7960               x_party_history_tbl(i).NEW_CONTACT_FLAG := C1.NEW_CONTACT_FLAG;
7961               x_party_history_tbl(i).OLD_CONTACT_IP_ID := C1.OLD_CONTACT_IP_ID;
7962               x_party_history_tbl(i).NEW_CONTACT_IP_ID := C1.NEW_CONTACT_IP_ID;
7963               x_party_history_tbl(i).OLD_ACTIVE_START_DATE:= C1.OLD_ACTIVE_START_DATE;
7964               x_party_history_tbl(i).NEW_ACTIVE_START_DATE:= C1.NEW_ACTIVE_START_DATE;
7965               x_party_history_tbl(i).OLD_ACTIVE_END_DATE:= C1.OLD_ACTIVE_END_DATE;
7966               x_party_history_tbl(i).NEW_ACTIVE_END_DATE:= C1.NEW_ACTIVE_END_DATE;
7967               x_party_history_tbl(i).OLD_CONTEXT:= C1.OLD_CONTEXT;
7968               x_party_history_tbl(i).NEW_CONTEXT:= C1.NEW_CONTEXT;
7969               x_party_history_tbl(i).OLD_ATTRIBUTE1:= C1.OLD_ATTRIBUTE1;
7970               x_party_history_tbl(i).NEW_ATTRIBUTE1:= C1.NEW_ATTRIBUTE1;
7971               x_party_history_tbl(i).OLD_ATTRIBUTE2:= C1.OLD_ATTRIBUTE2;
7972               x_party_history_tbl(i).NEW_ATTRIBUTE2:= C1.NEW_ATTRIBUTE2;
7973               x_party_history_tbl(i).OLD_ATTRIBUTE3:= C1.OLD_ATTRIBUTE3;
7974               x_party_history_tbl(i).OLD_ATTRIBUTE3:= C1.OLD_ATTRIBUTE3;
7975               x_party_history_tbl(i).OLD_ATTRIBUTE4:= C1.OLD_ATTRIBUTE4;
7976               x_party_history_tbl(i).NEW_ATTRIBUTE4:= C1.NEW_ATTRIBUTE4;
7977               x_party_history_tbl(i).OLD_ATTRIBUTE5:= C1.OLD_ATTRIBUTE5;
7978               x_party_history_tbl(i).NEW_ATTRIBUTE5:= C1.NEW_ATTRIBUTE5;
7979               x_party_history_tbl(i).OLD_ATTRIBUTE6:= C1.OLD_ATTRIBUTE6;
7980               x_party_history_tbl(i).NEW_ATTRIBUTE6:= C1.NEW_ATTRIBUTE6;
7981               x_party_history_tbl(i).OLD_ATTRIBUTE7:= C1.OLD_ATTRIBUTE7;
7982               x_party_history_tbl(i).NEW_ATTRIBUTE7:= C1.NEW_ATTRIBUTE7;
7983               x_party_history_tbl(i).OLD_ATTRIBUTE8:= C1.OLD_ATTRIBUTE8;
7984               x_party_history_tbl(i).NEW_ATTRIBUTE8:= C1.NEW_ATTRIBUTE8;
7985               x_party_history_tbl(i).OLD_ATTRIBUTE9:= C1.OLD_ATTRIBUTE9;
7986               x_party_history_tbl(i).NEW_ATTRIBUTE9:= C1.NEW_ATTRIBUTE9;
7987               x_party_history_tbl(i).OLD_ATTRIBUTE10:= C1.OLD_ATTRIBUTE10;
7988               x_party_history_tbl(i).NEW_ATTRIBUTE10:= C1.NEW_ATTRIBUTE10;
7989               x_party_history_tbl(i).OLD_ATTRIBUTE11:= C1.OLD_ATTRIBUTE11;
7990               x_party_history_tbl(i).NEW_ATTRIBUTE11:= C1.NEW_ATTRIBUTE11;
7991               x_party_history_tbl(i).OLD_ATTRIBUTE12:= C1.OLD_ATTRIBUTE12;
7992               x_party_history_tbl(i).NEW_ATTRIBUTE12:= C1.NEW_ATTRIBUTE12;
7993               x_party_history_tbl(i).OLD_ATTRIBUTE13:= C1.OLD_ATTRIBUTE13;
7994               x_party_history_tbl(i).NEW_ATTRIBUTE13:= C1.NEW_ATTRIBUTE13;
7995               x_party_history_tbl(i).OLD_ATTRIBUTE14:= C1.OLD_ATTRIBUTE14;
7996               x_party_history_tbl(i).NEW_ATTRIBUTE14:= C1.NEW_ATTRIBUTE14;
7997               x_party_history_tbl(i).OLD_ATTRIBUTE15:= C1.OLD_ATTRIBUTE15;
7998               x_party_history_tbl(i).NEW_ATTRIBUTE15:= C1.NEW_ATTRIBUTE15;
7999               x_party_history_tbl(i).FULL_DUMP_FLAG:= C1.FULL_DUMP_FLAG;
8000               x_party_history_tbl(i).OBJECT_VERSION_NUMBER := C1.OBJECT_VERSION_NUMBER;
8001               x_party_history_tbl(i).OLD_PREFERRED_FLAG :=  C1.OLD_PREFERRED_FLAG;
8002               x_party_history_tbl(i).NEW_PREFERRED_FLAG :=  C1.NEW_PREFERRED_FLAG;
8003               x_party_history_tbl(i).OLD_PRIMARY_FLAG:= C1.OLD_PRIMARY_FLAG;
8004               x_party_history_tbl(i).NEW_PRIMARY_FLAG := C1.NEW_PRIMARY_FLAG;
8005               x_party_history_tbl(i).INSTANCE_ID := C1.INSTANCE_ID; -- Added by sk on 08-APR for fixing bug
8006                                                                     -- 2304649 .
8007 -- Added for bug 2781480
8008              IF  (x_party_history_tbl(i).old_party_source_table IS NULL AND
8009                   x_party_history_tbl(i).new_party_source_table IS NULL ) OR
8010                  (x_party_history_tbl(i).old_party_id IS NULL AND
8011                   x_party_history_tbl(i).new_party_id IS NULL ) OR
8012                  (x_party_history_tbl(i).old_relationship_type_code IS NULL AND
8013                   x_party_history_tbl(i).new_relationship_type_code IS NULL)
8014              --AND (nvl(x_party_history_tbl(i).old_party_id,fnd_api.g_miss_num) <> nvl(x_party_history_tbl(i).new_party_id,fnd_api.g_miss_num)  )
8015              THEN
8016                  l_party_query_rec.instance_party_id := x_party_history_tbl(i).instance_party_id;
8017                  l_time_stamp:=c1.creation_date;
8018                 csi_party_relationships_pub.get_inst_party_relationships
8019                    (    p_api_version             => 1.0
8020                        ,p_commit                  => fnd_api.g_false
8021                        ,p_init_msg_list           => fnd_api.g_false
8022                        ,p_validation_level        => fnd_api.g_valid_level_full
8023                        ,p_party_query_rec         => l_party_query_rec
8024                        ,p_resolve_id_columns      => fnd_api.g_false
8025                        ,p_time_stamp              => l_time_stamp
8026                        ,x_party_header_tbl        => l_party_header_tbl
8027                        ,x_return_status           => x_return_status
8028                        ,x_msg_count               => x_msg_count
8029                        ,x_msg_data                => x_msg_data
8030                      );
8031 
8032                  IF NOT(x_return_status = fnd_api.g_ret_sts_success)
8033                  THEN
8034                     RAISE fnd_api.g_exc_error;
8035                  END IF;
8036 
8037                IF (x_party_history_tbl(i).old_party_source_table IS NULL AND
8038                    x_party_history_tbl(i).new_party_source_table IS NULL )
8039                THEN
8040                    x_party_history_tbl(i).old_party_source_table:=l_party_header_tbl(1).party_source_table;
8041                    x_party_history_tbl(i).new_party_source_table:=l_party_header_tbl(1).party_source_table;
8042                END IF;
8043                -- Added for bug 2179142
8044                IF (x_party_history_tbl(i).old_party_id IS NULL AND
8045                    x_party_history_tbl(i).new_party_id IS NULL )
8046                THEN
8047                    x_party_history_tbl(i).old_party_id:=l_party_header_tbl(1).party_id;
8048                    x_party_history_tbl(i).new_party_id:=l_party_header_tbl(1).party_id;
8049                END IF;
8050 
8051                IF (x_party_history_tbl(i).old_relationship_type_code IS NULL AND
8052                    x_party_history_tbl(i).new_relationship_type_code IS NULL)
8053                THEN
8054                    x_party_history_tbl(i).old_relationship_type_code := l_party_header_tbl(1).relationship_type_code;
8055                    x_party_history_tbl(i).new_relationship_type_code := l_party_header_tbl(1).relationship_type_code;
8056                END IF;
8057 
8058                IF (x_party_history_tbl(i).old_contact_flag IS NULL AND
8059                    x_party_history_tbl(i).new_contact_flag IS NULL )
8060                THEN
8061                    x_party_history_tbl(i).old_contact_flag:=l_party_header_tbl(1).contact_flag;
8062                    x_party_history_tbl(i).new_contact_flag:=l_party_header_tbl(1).contact_flag;
8063                END IF;
8064                -- End addition for bug 2179142
8065              END IF;
8066 -- End addition for bug 2781480
8067 
8068 
8069 --start of the code for  resolve_id_columns for old tbl(i)ords
8070 
8071        l_old_contact_party_id := x_party_history_tbl(i).old_party_id;
8072        l_old_contact_flag     := x_party_history_tbl(i).old_contact_flag;
8073        l_old_party_source_tbl := x_party_history_tbl(i).old_party_source_table;
8074 
8075     IF ((l_old_contact_party_id IS NOT NULL )
8076        AND ( l_old_party_source_tbl IS NOT NULL )
8077        AND ( l_old_contact_flag = 'Y')   -- Added for bug 2179142
8078        )
8079     THEN
8080           csi_party_relationships_pvt.get_contact_details
8081           (
8082            p_api_version              =>  p_api_version
8083           ,p_commit                   =>  p_commit
8084           ,p_init_msg_list            =>  p_init_msg_list
8085           ,p_validation_level         =>  p_validation_level
8086           ,p_contact_party_id         =>  l_old_contact_party_id
8087           ,p_contact_flag             =>  l_old_contact_flag
8088           ,p_party_tbl                =>  l_old_party_source_tbl
8089           ,x_contact_details          =>  l_contact_details
8090           ,x_return_status            =>  x_return_status
8091           ,x_msg_count                =>  x_msg_count
8092           ,x_msg_data                 =>  x_msg_data
8093           );
8094 
8095 
8096           IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
8097               FOR i in 1..x_msg_Count LOOP
8098                    FND_MSG_PUB.Get(p_msg_index     => i,
8099                                    p_encoded       => 'F',
8100                                    p_data          => x_msg_data,
8101                                    p_msg_index_out => x_msg_index_out );
8102                    csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
8103               End LOOP;
8104               RAISE FND_API.G_EXC_ERROR;
8105           END IF;
8106 
8107            x_party_history_tbl(i).old_contact_party_name        :=  l_contact_details.party_name;
8108            -- Added for bug 2179142
8109             IF x_party_history_tbl(i).old_party_source_table = 'EMPLOYEE' THEN
8110               BEGIN
8111                 SELECT employee_number,
8112                        'EMPLYOEE'
8113                 INTO   x_party_history_tbl(i).old_contact_party_number,
8114                        x_party_history_tbl(i).old_contact_party_type
8115                 FROM   per_all_people_f
8116                 WHERE  person_id = l_old_contact_party_id
8117                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8118               EXCEPTION
8119                 WHEN OTHERS THEN
8120                   NULL;
8121               END;
8122             ELSIF x_party_history_tbl(i).old_party_source_table = 'HZ_PARTIES' THEN
8123               BEGIN
8124                 SELECT party_number,
8125                        'PARTY'
8126                 INTO   x_party_history_tbl(i).old_contact_party_number,
8127                        x_party_history_tbl(i).old_contact_party_type
8128                 FROM   hz_parties
8129                 WHERE  party_id = l_old_contact_party_id;
8130               EXCEPTION
8131                 WHEN OTHERS THEN
8132                   NULL;
8133               END;
8134             ELSIF x_party_history_tbl(i).old_party_source_table = 'PO_VENDORS' THEN
8135               BEGIN
8136                 SELECT segment1,
8137                        'VENDOR'
8138                 INTO   x_party_history_tbl(i).old_contact_party_number,
8139                        x_party_history_tbl(i).old_contact_party_type
8140                 FROM   po_vendors
8141                 WHERE  vendor_id = l_old_contact_party_id;
8142               EXCEPTION
8143                 WHEN OTHERS THEN
8144                   NULL;
8145               END;
8146             ELSIF x_party_history_tbl(i).old_party_source_table = 'GROUP' THEN
8147               BEGIN
8148                 SELECT group_number,
8149                        'GROUP'
8150                 INTO   x_party_history_tbl(i).old_contact_party_number,
8151                        x_party_history_tbl(i).old_contact_party_type
8152                FROM    jtf_rs_groups_vl
8153                WHERE   group_id = l_old_contact_party_id;
8154               EXCEPTION
8155                 WHEN OTHERS THEN
8156                   NULL;
8157               END;
8158             ELSIF x_party_history_tbl(i).old_party_source_table = 'TEAM' THEN
8159               BEGIN
8160                 SELECT team_number,
8161                        'TEAM'
8162                 INTO   x_party_history_tbl(i).old_contact_party_number,
8163                        x_party_history_tbl(i).old_contact_party_type
8164                 FROM   jtf_rs_teams_vl
8165                 WHERE  team_id = l_old_contact_party_id;
8166               EXCEPTION
8167                 WHEN OTHERS THEN
8168                   NULL;
8169               END;
8170 
8171             END IF;
8172            -- End addition for bug 2179142
8173          IF NVL(l_old_contact_party_id,fnd_api.g_miss_num) <> NVL(l_new_contact_party_id,fnd_api.g_miss_num)
8174          THEN
8175            x_party_history_tbl(i).old_contact_work_phone_num    :=  l_contact_details.officephone;
8176            x_party_history_tbl(i).old_contact_address1          :=  l_contact_details.address1;
8177            x_party_history_tbl(i).old_contact_address2          :=  l_contact_details.address2;
8178            x_party_history_tbl(i).old_contact_address3          :=  l_contact_details.address3;
8179            x_party_history_tbl(i).old_contact_address4          :=  l_contact_details.address4;
8180            x_party_history_tbl(i).old_contact_city              :=  l_contact_details.city;
8181            x_party_history_tbl(i).old_contact_postal_code       :=  l_contact_details.postal_code;
8182            x_party_history_tbl(i).old_contact_state             :=  l_contact_details.state;
8183            x_party_history_tbl(i).old_contact_country           :=  l_contact_details.country;
8184            x_party_history_tbl(i).old_contact_email_address     :=  l_contact_details.email;
8185          END IF;
8186        END IF;
8187 
8188             IF x_party_history_tbl(i).old_party_source_table = 'EMPLOYEE' THEN
8189               BEGIN
8190                 SELECT employee_number,
8191                        'EMPLYOEE',
8192                        full_name
8193                 INTO   x_party_history_tbl(i).old_party_number,
8194                        x_party_history_tbl(i).old_party_type,
8195                         x_party_history_tbl(i).old_party_name
8196                 FROM   per_all_people_f
8197                 WHERE  person_id = x_party_history_tbl(i).old_party_id
8198                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8199               EXCEPTION
8200                 WHEN OTHERS THEN
8201                   NULL;
8202               END;
8203             ELSIF x_party_history_tbl(i).old_party_source_table = 'HZ_PARTIES' THEN
8204               BEGIN
8205                 SELECT party_number,
8206                        'PARTY',
8207                        party_name
8208                 INTO   x_party_history_tbl(i).old_party_number,
8209                        x_party_history_tbl(i).old_party_type,
8210                        x_party_history_tbl(i).old_party_name
8211                 FROM   hz_parties
8212                 WHERE  party_id = x_party_history_tbl(i).old_party_id;
8213               EXCEPTION
8214                 WHEN OTHERS THEN
8215                   NULL;
8216               END;
8217             ELSIF x_party_history_tbl(i).old_party_source_table = 'PO_VENDORS' THEN
8218               BEGIN
8219                 SELECT segment1,
8220                        'VENDOR',
8221                        vendor_name
8222                 INTO   x_party_history_tbl(i).old_party_number,
8223                        x_party_history_tbl(i).old_party_type,
8224                        x_party_history_tbl(i).old_party_name
8225                 FROM   po_vendors
8226                 WHERE  vendor_id = x_party_history_tbl(i).old_party_id;
8227               EXCEPTION
8228                 WHEN OTHERS THEN
8229                   NULL;
8230               END;
8231             ELSIF x_party_history_tbl(i).old_party_source_table = 'GROUP' THEN
8232               BEGIN
8233                 SELECT group_number,
8234                        'GROUP',
8235                        group_name
8236                 INTO   x_party_history_tbl(i).old_party_number,
8237                        x_party_history_tbl(i).old_party_type,
8238                        x_party_history_tbl(i).old_party_name
8239                FROM    jtf_rs_groups_vl
8240                WHERE   group_id = x_party_history_tbl(i).old_party_id;
8241               EXCEPTION
8242                 WHEN OTHERS THEN
8243                   NULL;
8244               END;
8245             ELSIF x_party_history_tbl(i).old_party_source_table = 'TEAM' THEN
8246               BEGIN
8247                 SELECT team_number,
8248                        'TEAM',
8249                        team_name
8250                 INTO   x_party_history_tbl(i).old_party_number,
8251                        x_party_history_tbl(i).old_party_type,
8252                        x_party_history_tbl(i).old_party_name
8253                 FROM   jtf_rs_teams_vl
8254                 WHERE  team_id = x_party_history_tbl(i).old_party_id;
8255               EXCEPTION
8256                 WHEN OTHERS THEN
8257                   NULL;
8258               END;
8259 
8260             END IF;
8261 
8262    --start of the code for resolve_id_columns for new records
8263        l_new_contact_party_id := x_party_history_tbl(i).new_party_id;
8264        l_new_contact_flag      := x_party_history_tbl(i).new_contact_flag;
8265        l_new_party_source_tbl := x_party_history_tbl(i).new_party_source_table;
8266 
8267       IF ((l_new_contact_party_id IS NOT NULL )
8268             AND ( l_new_party_source_tbl IS NOT NULL )
8269             AND ( l_new_contact_flag = 'Y')  -- Added for bug 2179142
8270           )
8271       THEN
8272            csi_party_relationships_pvt.get_contact_details
8273           (
8274            p_api_version              =>  p_api_version
8275           ,p_commit                   =>  p_commit
8276           ,p_init_msg_list            =>  p_init_msg_list
8277           ,p_validation_level         =>  p_validation_level
8278           ,p_contact_party_id         =>  l_new_contact_party_id
8279           ,p_contact_flag             =>  l_new_contact_flag
8280           ,p_party_tbl                =>  l_new_party_source_tbl
8281           ,x_contact_details          =>  l_contact_details
8282           ,x_return_status            =>  x_return_status
8283           ,x_msg_count                =>  x_msg_count
8284           ,x_msg_data                 =>  x_msg_data
8285           );
8286 
8287 
8288          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
8289               FOR i in 1..x_msg_Count LOOP
8290                    FND_MSG_PUB.Get(p_msg_index     => i,
8291                                    p_encoded       => 'F',
8292                                    p_data          => x_msg_data,
8293                                    p_msg_index_out => x_msg_index_out );
8294                    csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
8295               End LOOP;
8296               RAISE FND_API.G_EXC_ERROR;
8297          END IF;
8298 
8299            x_party_history_tbl(i).new_contact_party_name        :=  l_contact_details.party_name;
8300            -- Added for bug 2179142
8301             IF x_party_history_tbl(i).new_party_source_table = 'EMPLOYEE' THEN
8302               BEGIN
8303                 SELECT employee_number,
8304                        'EMPLYOEE'
8305                 INTO   x_party_history_tbl(i).new_contact_party_number,
8306                        x_party_history_tbl(i).new_contact_party_type
8307                 FROM   per_all_people_f
8308                 WHERE  person_id = l_new_contact_party_id
8309                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8310               EXCEPTION
8311                 WHEN OTHERS THEN
8312                   NULL;
8313               END;
8314             ELSIF x_party_history_tbl(i).new_party_source_table = 'HZ_PARTIES' THEN
8315               BEGIN
8316                 SELECT party_number,
8317                        'PARTY'
8318                 INTO   x_party_history_tbl(i).new_contact_party_number,
8319                        x_party_history_tbl(i).new_contact_party_type
8320                 FROM   hz_parties
8321                 WHERE  party_id = l_new_contact_party_id;
8322               EXCEPTION
8323                 WHEN OTHERS THEN
8324                   NULL;
8325               END;
8326             ELSIF x_party_history_tbl(i).new_party_source_table = 'PO_VENDORS' THEN
8327               BEGIN
8328                 SELECT segment1,
8329                        'VENDOR'
8330                 INTO   x_party_history_tbl(i).new_contact_party_number,
8331                        x_party_history_tbl(i).new_contact_party_type
8332                 FROM   po_vendors
8333                 WHERE  vendor_id = l_new_contact_party_id;
8334               EXCEPTION
8335                 WHEN OTHERS THEN
8336                   NULL;
8337               END;
8338             ELSIF x_party_history_tbl(i).new_party_source_table = 'GROUP' THEN
8339               BEGIN
8340                 SELECT group_number,
8341                        'GROUP'
8342                 INTO   x_party_history_tbl(i).new_contact_party_number,
8343                        x_party_history_tbl(i).new_contact_party_type
8344                FROM    jtf_rs_groups_vl
8345                WHERE   group_id = l_new_contact_party_id;
8346               EXCEPTION
8347                 WHEN OTHERS THEN
8348                   NULL;
8349               END;
8350             ELSIF x_party_history_tbl(i).new_party_source_table = 'TEAM' THEN
8351               BEGIN
8352                 SELECT team_number,
8353                        'TEAM'
8354                 INTO   x_party_history_tbl(i).new_contact_party_number,
8355                        x_party_history_tbl(i).new_contact_party_type
8356                 FROM   jtf_rs_teams_vl
8357                 WHERE  team_id = x_party_history_tbl(i).new_party_id;
8358               EXCEPTION
8359                 WHEN OTHERS THEN
8360                   NULL;
8361               END;
8362 
8363             END IF;
8364            -- End addition for bug 2179142
8365          IF NVL(l_old_contact_party_id,fnd_api.g_miss_num) <> NVL(l_new_contact_party_id,fnd_api.g_miss_num)
8366          THEN
8367            x_party_history_tbl(i).new_contact_work_phone_num    :=  l_contact_details.officephone;
8368            x_party_history_tbl(i).new_contact_address1          :=  l_contact_details.address1;
8369            x_party_history_tbl(i).new_contact_address2          :=  l_contact_details.address2;
8370            x_party_history_tbl(i).new_contact_address3          :=  l_contact_details.address3;
8371            x_party_history_tbl(i).new_contact_address4          :=  l_contact_details.address4;
8372            x_party_history_tbl(i).new_contact_city              :=  l_contact_details.city;
8373            x_party_history_tbl(i).new_contact_postal_code       :=  l_contact_details.postal_code;
8374            x_party_history_tbl(i).new_contact_state             :=  l_contact_details.state;
8375            x_party_history_tbl(i).new_contact_country           :=  l_contact_details.country;
8376            x_party_history_tbl(i).new_contact_email_address     :=  l_contact_details.email;
8377          END IF;
8378 
8379        END IF;
8380 
8381            IF x_party_history_tbl(i).new_party_source_table = 'EMPLOYEE' THEN
8382               BEGIN
8383                 SELECT employee_number,
8384                        'EMPLYOEE',
8385                        full_name
8386                 INTO   x_party_history_tbl(i).new_party_number,
8387                        x_party_history_tbl(i).new_party_type,
8388                         x_party_history_tbl(i).new_party_name
8389                 FROM   per_all_people_f
8390                 WHERE  person_id = x_party_history_tbl(i).new_party_id
8391                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8392               EXCEPTION
8393                 WHEN OTHERS THEN
8394                   NULL;
8395               END;
8396             ELSIF x_party_history_tbl(i).new_party_source_table = 'HZ_PARTIES' THEN
8397               BEGIN
8398                 SELECT party_number,
8399                        'PARTY',
8400                        party_name
8401                 INTO   x_party_history_tbl(i).new_party_number,
8402                        x_party_history_tbl(i).new_party_type,
8403                         x_party_history_tbl(i).new_party_name
8404                 FROM   hz_parties
8405                 WHERE  party_id = x_party_history_tbl(i).new_party_id;
8406               EXCEPTION
8407                 WHEN OTHERS THEN
8408                   NULL;
8409               END;
8410             ELSIF x_party_history_tbl(i).new_party_source_table = 'PO_VENDORS' THEN
8411               BEGIN
8412                 SELECT segment1,
8413                        'VENDOR',
8414                        vendor_name
8415                 INTO   x_party_history_tbl(i).new_party_number,
8416                        x_party_history_tbl(i).new_party_type,
8417                        x_party_history_tbl(i).new_party_name
8418                 FROM   po_vendors
8419                 WHERE  vendor_id = x_party_history_tbl(i).new_party_id;
8420               EXCEPTION
8421                 WHEN OTHERS THEN
8422                   NULL;
8423               END;
8424             ELSIF x_party_history_tbl(i).new_party_source_table = 'GROUP' THEN
8425               BEGIN
8426                 SELECT group_number,
8427                        'GROUP',
8428                        group_name
8429                 INTO   x_party_history_tbl(i).new_party_number,
8430                        x_party_history_tbl(i).new_party_type,
8431                        x_party_history_tbl(i).new_party_name
8432                FROM    jtf_rs_groups_vl
8433                WHERE   group_id = x_party_history_tbl(i).new_party_id;
8434               EXCEPTION
8435                 WHEN OTHERS THEN
8436                   NULL;
8437               END;
8438             ELSIF x_party_history_tbl(i).new_party_source_table = 'TEAM' THEN
8439               BEGIN
8440                 SELECT team_number,
8441                        'TEAM',
8442                        team_name
8443                 INTO   x_party_history_tbl(i).new_party_number,
8444                        x_party_history_tbl(i).new_party_type,
8445                        x_party_history_tbl(i).new_party_name
8446                 FROM   jtf_rs_teams_vl
8447                 WHERE  team_id = x_party_history_tbl(i).new_party_id;
8448               EXCEPTION
8449                 WHEN OTHERS THEN
8450                   NULL;
8451               END;
8452             END IF;
8453          -- Added for bug 2781480
8454          /* Commented for bug 2179142
8455             IF  NVL(x_party_history_tbl(i).old_party_source_table,fnd_api.g_miss_char) = NVL(x_party_history_tbl(i).new_party_source_table,fnd_api.g_miss_char)
8456             THEN
8457                x_party_history_tbl(i).old_party_source_table:=NULL;
8458                x_party_history_tbl(i).new_party_source_table:=NULL;
8459             END IF;
8460           */
8461          -- End addition for bug 2781480
8462 
8463          -- Added for bug 2179142
8464 
8465                IF NVL(x_party_history_tbl(i).old_party_id,fnd_api.g_miss_num)=NVL(x_party_history_tbl(i).new_party_id,fnd_api.g_miss_num)
8466                THEN
8467                    x_party_history_tbl(i).old_party_id:=NULL;
8468                    x_party_history_tbl(i).new_party_id:=NULL;
8469                END IF;
8470 
8471          -- End addition for bug 2179142
8472             i := i + 1;
8473               --IF get_party_hist%NOTFOUND THEN
8474                 --FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_TXN_ID');
8475                 --FND_MSG_PUB.Add;
8476                 --RAISE FND_API.G_EXC_ERROR;
8477      	      --END IF;
8478         END LOOP;
8479 
8480        -- End of API body
8481 
8482        -- Standard check of p_commit.
8483        /*
8484        IF FND_API.To_Boolean( p_commit ) THEN
8485              COMMIT WORK;
8486        END IF;
8487        */
8488 
8489        /***** srramakr commented for bug # 3304439
8490        -- Check for the profile option and disable the trace
8491        IF (l_flag = 'Y') THEN
8492             dbms_session.set_sql_trace(false);
8493        END IF;
8494        -- End disable trace
8495        ****/
8496 
8497        -- Standard call to get message count and if count is  get message info.
8498        FND_MSG_PUB.Count_And_Get
8499                 (p_count        =>      x_msg_count ,
8500                  p_data         =>      x_msg_data   );
8501 EXCEPTION
8502         WHEN FND_API.G_EXC_ERROR THEN
8503               --  ROLLBACK TO get_inst_party_rel_hist;
8504                 x_return_status := FND_API.G_RET_STS_ERROR ;
8505                 FND_MSG_PUB.Count_And_Get
8506                 (   p_count   =>      x_msg_count,
8507                     p_data    =>      x_msg_data );
8508         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8509               --  ROLLBACK TO get_inst_party_rel_hist;
8510                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8511                 FND_MSG_PUB.Count_And_Get
8512                 (   p_count   =>      x_msg_count,
8513                     p_data    =>      x_msg_data  );
8514         WHEN OTHERS THEN
8515               --  ROLLBACK TO get_inst_party_rel_hist;
8516                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8517                 IF      FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8518                 FND_MSG_PUB.Add_Exc_Msg
8519                 (       g_pkg_name          ,
8520                         l_api_name           );
8521                 END IF;
8522                 FND_MSG_PUB.Count_And_Get
8523                 ( p_count     =>      x_msg_count,
8524                   p_data      =>      x_msg_data  );
8525 
8526 END get_inst_party_rel_hist;
8527 
8528 
8529 
8530 /*------------------------------------------------------------*/
8531 /* Procedure name:  get_inst_party_rel_hist                   */
8532 /* Description :   Procedure used to  get party relationships */
8533 /*                  from history given a transaction_id       */
8534 /*------------------------------------------------------------*/
8535 
8536 PROCEDURE get_inst_party_account_hist
8537  (    p_api_version             IN  NUMBER
8538      ,p_commit                  IN  VARCHAR2
8539      ,p_init_msg_list           IN  VARCHAR2
8540      ,p_validation_level        IN  NUMBER
8541      ,p_transaction_id          IN  NUMBER
8542      ,x_account_history_tbl     OUT NOCOPY  csi_datastructures_pub.account_history_tbl
8543      ,x_return_status           OUT NOCOPY  VARCHAR2
8544      ,x_msg_count               OUT NOCOPY  NUMBER
8545      ,x_msg_data                OUT NOCOPY  VARCHAR2
8546     )IS
8547 
8548      l_api_name        CONSTANT VARCHAR2(30)   := 'get_inst_party_account_hist' ;
8549      l_api_version     CONSTANT NUMBER         := 1.0                           ;
8550      l_csi_debug_level          NUMBER                                          ;
8551      x_msg_index_out            NUMBER                                          ;
8552      l_count                    NUMBER         := 0                             ;
8553      l_flag                     VARCHAR2(1)    :='N'                            ;
8554       i                         NUMBER         :=1                              ;
8555      l_account_header_tbl       csi_datastructures_pub.party_account_header_tbl ;
8556      l_time_stamp               DATE;
8557      l_party_account_query_rec  csi_datastructures_pub.party_account_query_rec;
8558      CURSOR get_account_hist(i_transaction_id NUMBER)
8559      IS
8560      SELECT      cah.IP_ACCOUNT_HISTORY_ID ,
8561                  cah.IP_ACCOUNT_ID ,
8562                  cah.TRANSACTION_ID ,
8563                  cah.OLD_PARTY_ACCOUNT_ID ,
8564                  cah.NEW_PARTY_ACCOUNT_ID ,
8565                  cah.OLD_RELATIONSHIP_TYPE_CODE ,
8566                  cah.NEW_RELATIONSHIP_TYPE_CODE ,
8567                  cah.OLD_ACTIVE_START_DATE ,
8568                  cah.NEW_ACTIVE_START_DATE ,
8569                  cah.OLD_ACTIVE_END_DATE ,
8570                  cah.NEW_ACTIVE_END_DATE ,
8571                  cah.OLD_CONTEXT ,
8572                  cah.NEW_CONTEXT ,
8573                  cah.OLD_ATTRIBUTE1 ,
8574                  cah.NEW_ATTRIBUTE1 ,
8575                  cah.OLD_ATTRIBUTE2 ,
8576                  cah.NEW_ATTRIBUTE2 ,
8577                  cah.OLD_ATTRIBUTE3 ,
8578                  cah.NEW_ATTRIBUTE3 ,
8579                  cah.OLD_ATTRIBUTE4 ,
8580                  cah.NEW_ATTRIBUTE4 ,
8581                  cah.OLD_ATTRIBUTE5 ,
8582                  cah.NEW_ATTRIBUTE5 ,
8583                  cah.OLD_ATTRIBUTE6 ,
8584                  cah.NEW_ATTRIBUTE6 ,
8585                  cah.OLD_ATTRIBUTE7 ,
8586                  cah.NEW_ATTRIBUTE7 ,
8587                  cah.OLD_ATTRIBUTE8 ,
8588                  cah.NEW_ATTRIBUTE8 ,
8589                  cah.OLD_ATTRIBUTE9 ,
8590                  cah.NEW_ATTRIBUTE9 ,
8591                  cah.OLD_ATTRIBUTE10 ,
8592                  cah.NEW_ATTRIBUTE10 ,
8593                  cah.OLD_ATTRIBUTE11 ,
8594                  cah.NEW_ATTRIBUTE11 ,
8595                  cah.OLD_ATTRIBUTE12 ,
8596                  cah.NEW_ATTRIBUTE12 ,
8597                  cah.OLD_ATTRIBUTE13 ,
8598                  cah.NEW_ATTRIBUTE13 ,
8599                  cah.OLD_ATTRIBUTE14 ,
8600                  cah.NEW_ATTRIBUTE14 ,
8601                  cah.OLD_ATTRIBUTE15 ,
8602                  cah.NEW_ATTRIBUTE15 ,
8603                  cah.FULL_DUMP_FLAG  ,
8604                  cah.OBJECT_VERSION_NUMBER ,
8605                  cah.OLD_BILL_TO_ADDRESS ,
8606                  cah.NEW_BILL_TO_ADDRESS ,
8607                  cah.OLD_SHIP_TO_ADDRESS ,
8608                  cah.NEW_SHIP_TO_ADDRESS ,
8609                  cip.INSTANCE_ID,
8610                  cah.OLD_INSTANCE_PARTY_ID ,
8611                  cah.NEW_INSTANCE_PARTY_ID,
8612                  cah.creation_date
8613      FROM     csi_ip_accounts_h cah,
8614               csi_ip_accounts   ca,
8615               csi_i_parties     cip
8616      WHERE    cah.transaction_id   = i_transaction_id
8617      AND      cah.ip_account_id    = ca.ip_account_id
8618      AND      ca.instance_party_id = cip.instance_party_id;    -- Added by sguthiva on 9-APR for bug 2304649
8619 
8620 BEGIN
8621         -- Standard Start of API savepoint
8622       --  SAVEPOINT   get_inst_party_account_hist;
8623 
8624 
8625         -- Standard call to check for call compatibility.
8626         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
8627                                                 p_api_version           ,
8628                                                 l_api_name              ,
8629                                                 g_pkg_name              )
8630         THEN
8631            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8632         END IF;
8633 
8634         -- Initialize message list if p_init_msg_list is set to TRUE.
8635         IF FND_API.to_Boolean( p_init_msg_list ) THEN
8636                 FND_MSG_PUB.initialize;
8637         END IF;
8638 
8639         --  Initialize API return status to success
8640         x_return_status := FND_API.G_RET_STS_SUCCESS;
8641 
8642         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
8643         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
8644 
8645         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
8646         IF (l_csi_debug_level > 0) THEN
8647             csi_gen_utility_pvt.put_line( 'get_inst_party_account_hist');
8648         END IF;
8649 
8650         -- If the debug level = 2 then dump all the parameters values.
8651         IF (l_csi_debug_level > 1) THEN
8652             csi_gen_utility_pvt.put_line(  'get_inst_party_account_hist'   ||
8653                                                  p_api_version           ||'-'||
8654                                                  p_commit                ||'-'||
8655                                                  p_init_msg_list         ||'-'||
8656                                                  p_validation_level      ||'-'||
8657                                                  p_transaction_id               );
8658              -- dump the in parameter in the log file
8659 
8660         END IF;
8661 
8662         /***** srramakr commented for bug # 3304439
8663         -- Check for the profile option and enable trace
8664         l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
8665         -- End enable trace
8666         ****/
8667 
8668         -- Start API body
8669 
8670        FOR l_acct_hist_csr IN get_account_hist(p_transaction_id)
8671        LOOP
8672           x_account_history_tbl(i).ip_account_id := l_acct_hist_csr.ip_account_id;
8673           x_account_history_tbl(i).ip_account_history_id := l_acct_hist_csr.ip_account_history_id;
8674           x_account_history_tbl(i).transaction_id := l_acct_hist_csr.transaction_id;
8675 
8676           IF NVL(l_acct_hist_csr.old_party_account_id,fnd_api.g_miss_num) = NVL(l_acct_hist_csr.new_party_account_id,fnd_api.g_miss_num)
8677           THEN
8678             x_account_history_tbl(i).old_party_account_id := NULL;
8679             x_account_history_tbl(i).new_party_account_id := NULL;
8680           ELSE
8681             x_account_history_tbl(i).old_party_account_id := l_acct_hist_csr.old_party_account_id;
8682             x_account_history_tbl(i).new_party_account_id := l_acct_hist_csr.new_party_account_id;
8683           END IF;
8684 
8685           IF NVL(l_acct_hist_csr.old_relationship_type_code,fnd_api.g_miss_char) =
8686                                     NVL(l_acct_hist_csr.new_relationship_type_code,fnd_api.g_miss_num)
8687           THEN
8688             x_account_history_tbl(i).old_relationship_type_code := NULL;
8689             x_account_history_tbl(i).new_relationship_type_code := NULL;
8690           ELSE
8691             x_account_history_tbl(i).old_relationship_type_code := l_acct_hist_csr.old_relationship_type_code;
8692             x_account_history_tbl(i).new_relationship_type_code := l_acct_hist_csr.new_relationship_type_code;
8693           END IF;
8694 
8695           IF NVL(l_acct_hist_csr.old_active_start_date,fnd_api.g_miss_date) = NVL(l_acct_hist_csr.new_active_start_date,fnd_api.g_miss_date)
8696           THEN
8697             x_account_history_tbl(i).old_active_start_date := NULL;
8698             x_account_history_tbl(i).new_active_start_date := NULL;
8699           ELSE
8700             x_account_history_tbl(i).old_active_start_date := l_acct_hist_csr.old_active_start_date;
8701             x_account_history_tbl(i).new_active_start_date := l_acct_hist_csr.new_active_start_date;
8702           END IF;
8703 
8704           IF NVL(l_acct_hist_csr.old_active_end_date,fnd_api.g_miss_date) = NVL(l_acct_hist_csr.new_active_end_date,fnd_api.g_miss_date)
8705           THEN
8706             x_account_history_tbl(i).old_active_end_date := NULL;
8707             x_account_history_tbl(i).new_active_end_date := NULL;
8708           ELSE
8709             x_account_history_tbl(i).old_active_end_date := l_acct_hist_csr.old_active_end_date;
8710             x_account_history_tbl(i).new_active_end_date := l_acct_hist_csr.new_active_end_date;
8711           END IF;
8712 
8713           IF NVL(l_acct_hist_csr.old_context,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_context,fnd_api.g_miss_char)
8714           THEN
8715             x_account_history_tbl(i).old_context := NULL;
8716             x_account_history_tbl(i).new_context := NULL;
8717           ELSE
8718             x_account_history_tbl(i).old_context := l_acct_hist_csr.old_context;
8719             x_account_history_tbl(i).new_context := l_acct_hist_csr.new_context;
8720           END IF;
8721 
8722           IF NVL(l_acct_hist_csr.old_attribute1,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute1,fnd_api.g_miss_char)
8723           THEN
8724             x_account_history_tbl(i).old_attribute1 := NULL;
8725             x_account_history_tbl(i).new_attribute1 := NULL;
8726           ELSE
8727             x_account_history_tbl(i).old_attribute1 := l_acct_hist_csr.old_attribute1;
8728             x_account_history_tbl(i).new_attribute1 := l_acct_hist_csr.new_attribute1;
8729           END IF;
8730 
8731           IF NVL(l_acct_hist_csr.old_attribute2,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute2,fnd_api.g_miss_char)
8732           THEN
8733             x_account_history_tbl(i).old_attribute2 := NULL;
8734             x_account_history_tbl(i).new_attribute2 := NULL;
8735           ELSE
8736             x_account_history_tbl(i).old_attribute2 := l_acct_hist_csr.old_attribute2;
8737             x_account_history_tbl(i).new_attribute2 := l_acct_hist_csr.new_attribute2;
8738           END IF;
8739 
8740           IF NVL(l_acct_hist_csr.old_attribute3,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute3,fnd_api.g_miss_char)
8741           THEN
8742             x_account_history_tbl(i).old_attribute3 := NULL;
8743             x_account_history_tbl(i).new_attribute3 := NULL;
8744           ELSE
8745             x_account_history_tbl(i).old_attribute3 := l_acct_hist_csr.old_attribute3;
8746             x_account_history_tbl(i).new_attribute3 := l_acct_hist_csr.new_attribute3;
8747           END IF;
8748 
8749 
8750           IF NVL(l_acct_hist_csr.old_attribute4,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute4,fnd_api.g_miss_char)
8751           THEN
8752             x_account_history_tbl(i).old_attribute4 := NULL;
8753             x_account_history_tbl(i).new_attribute4 := NULL;
8754           ELSE
8755             x_account_history_tbl(i).old_attribute4 := l_acct_hist_csr.old_attribute4;
8756             x_account_history_tbl(i).new_attribute4 := l_acct_hist_csr.new_attribute4;
8757           END IF;
8758 
8759           IF NVL(l_acct_hist_csr.old_attribute5,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute5,fnd_api.g_miss_char)
8760           THEN
8761             x_account_history_tbl(i).old_attribute5 := NULL;
8762             x_account_history_tbl(i).new_attribute5 := NULL;
8763           ELSE
8764             x_account_history_tbl(i).old_attribute5 := l_acct_hist_csr.old_attribute5;
8765             x_account_history_tbl(i).new_attribute5 := l_acct_hist_csr.new_attribute5;
8766           END IF;
8767 
8768           IF NVL(l_acct_hist_csr.old_attribute6,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute6,fnd_api.g_miss_char)
8769           THEN
8770             x_account_history_tbl(i).old_attribute6 := NULL;
8771             x_account_history_tbl(i).new_attribute6 := NULL;
8772           ELSE
8773             x_account_history_tbl(i).old_attribute6 := l_acct_hist_csr.old_attribute6;
8774             x_account_history_tbl(i).new_attribute6 := l_acct_hist_csr.new_attribute6;
8775           END IF;
8776 
8777           IF NVL(l_acct_hist_csr.old_attribute7,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute7,fnd_api.g_miss_char)
8778           THEN
8779             x_account_history_tbl(i).old_attribute7 := NULL;
8780             x_account_history_tbl(i).new_attribute7 := NULL;
8781           ELSE
8782             x_account_history_tbl(i).old_attribute7 := l_acct_hist_csr.old_attribute7;
8783             x_account_history_tbl(i).new_attribute7 := l_acct_hist_csr.new_attribute7;
8784           END IF;
8785 
8786           IF NVL(l_acct_hist_csr.old_attribute8,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute8,fnd_api.g_miss_char)
8787           THEN
8788             x_account_history_tbl(i).old_attribute8 := NULL;
8789             x_account_history_tbl(i).new_attribute8 := NULL;
8790           ELSE
8791             x_account_history_tbl(i).old_attribute8 := l_acct_hist_csr.old_attribute8;
8792             x_account_history_tbl(i).new_attribute8 := l_acct_hist_csr.new_attribute8;
8793           END IF;
8794 
8795           IF NVL(l_acct_hist_csr.old_attribute9,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute9,fnd_api.g_miss_char)
8796           THEN
8797             x_account_history_tbl(i).old_attribute9 := NULL;
8798             x_account_history_tbl(i).new_attribute9 := NULL;
8799           ELSE
8800             x_account_history_tbl(i).old_attribute9 := l_acct_hist_csr.old_attribute9;
8801             x_account_history_tbl(i).new_attribute9 := l_acct_hist_csr.new_attribute9;
8802           END IF;
8803 
8804           IF NVL(l_acct_hist_csr.old_attribute10,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute10,fnd_api.g_miss_char)
8805           THEN
8806             x_account_history_tbl(i).old_attribute10 := NULL;
8807             x_account_history_tbl(i).new_attribute10 := NULL;
8808           ELSE
8809             x_account_history_tbl(i).old_attribute10 := l_acct_hist_csr.old_attribute10;
8810             x_account_history_tbl(i).new_attribute10 := l_acct_hist_csr.new_attribute10;
8811           END IF;
8812 
8813           IF NVL(l_acct_hist_csr.old_attribute11,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute11,fnd_api.g_miss_char)
8814           THEN
8815             x_account_history_tbl(i).old_attribute11 := NULL;
8816             x_account_history_tbl(i).new_attribute11 := NULL;
8817           ELSE
8818             x_account_history_tbl(i).old_attribute11 := l_acct_hist_csr.old_attribute11;
8819             x_account_history_tbl(i).new_attribute11 := l_acct_hist_csr.new_attribute11;
8820           END IF;
8821 
8822           IF NVL(l_acct_hist_csr.old_attribute12,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute12,fnd_api.g_miss_char)
8823           THEN
8824             x_account_history_tbl(i).old_attribute12 := NULL;
8825             x_account_history_tbl(i).new_attribute12 := NULL;
8826           ELSE
8827             x_account_history_tbl(i).old_attribute12 := l_acct_hist_csr.old_attribute12;
8828             x_account_history_tbl(i).new_attribute12 := l_acct_hist_csr.new_attribute12;
8829           END IF;
8830 
8831           IF NVL(l_acct_hist_csr.old_attribute13,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute13,fnd_api.g_miss_char)
8832           THEN
8833             x_account_history_tbl(i).old_attribute13 := NULL;
8834             x_account_history_tbl(i).new_attribute13 := NULL;
8835           ELSE
8836             x_account_history_tbl(i).old_attribute13 := l_acct_hist_csr.old_attribute13;
8837             x_account_history_tbl(i).new_attribute13 := l_acct_hist_csr.new_attribute13;
8838           END IF;
8839 
8840           IF NVL(l_acct_hist_csr.old_attribute14,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute14,fnd_api.g_miss_char)
8841           THEN
8842             x_account_history_tbl(i).old_attribute14 := NULL;
8843             x_account_history_tbl(i).new_attribute14 := NULL;
8844           ELSE
8845             x_account_history_tbl(i).old_attribute14 := l_acct_hist_csr.old_attribute14;
8846             x_account_history_tbl(i).new_attribute14 := l_acct_hist_csr.new_attribute14;
8847           END IF;
8848 
8849           IF NVL(l_acct_hist_csr.old_attribute15,fnd_api.g_miss_char) = NVL(l_acct_hist_csr.new_attribute15,fnd_api.g_miss_char)
8850           THEN
8851             x_account_history_tbl(i).old_attribute15 := NULL;
8852             x_account_history_tbl(i).new_attribute15 := NULL;
8853           ELSE
8854             x_account_history_tbl(i).old_attribute15 := l_acct_hist_csr.old_attribute15;
8855             x_account_history_tbl(i).new_attribute15 := l_acct_hist_csr.new_attribute15;
8856           END IF;
8857 
8858           IF NVL(l_acct_hist_csr.old_bill_to_address,fnd_api.g_miss_num) = NVL(l_acct_hist_csr.new_bill_to_address,fnd_api.g_miss_num)
8859           THEN
8860             x_account_history_tbl(i).old_bill_to_address := NULL;
8861             x_account_history_tbl(i).new_bill_to_address := NULL;
8862           ELSE
8863             x_account_history_tbl(i).old_bill_to_address := l_acct_hist_csr.old_bill_to_address;
8864             x_account_history_tbl(i).new_bill_to_address := l_acct_hist_csr.new_bill_to_address;
8865           END IF;
8866 
8867           IF NVL(l_acct_hist_csr.old_ship_to_address,fnd_api.g_miss_num) = NVL(l_acct_hist_csr.new_ship_to_address,fnd_api.g_miss_num)
8868           THEN
8869             x_account_history_tbl(i).old_ship_to_address := NULL;
8870             x_account_history_tbl(i).new_ship_to_address := NULL;
8871           ELSE
8872             x_account_history_tbl(i).old_ship_to_address := l_acct_hist_csr.old_ship_to_address;
8873             x_account_history_tbl(i).new_ship_to_address := l_acct_hist_csr.new_ship_to_address;
8874           END IF;
8875 
8876           IF NVL(l_acct_hist_csr.old_instance_party_id,fnd_api.g_miss_num) = NVL(l_acct_hist_csr.new_instance_party_id,fnd_api.g_miss_num)
8877           THEN
8878             x_account_history_tbl(i).old_instance_party_id := NULL;
8879             x_account_history_tbl(i).new_instance_party_id := NULL;
8880           ELSE
8881             x_account_history_tbl(i).old_instance_party_id := l_acct_hist_csr.old_instance_party_id;
8882             x_account_history_tbl(i).new_instance_party_id := l_acct_hist_csr.new_instance_party_id;
8883           END IF;
8884 
8885             x_account_history_tbl(i).object_version_number := l_acct_hist_csr.object_version_number;
8886             x_account_history_tbl(i).instance_id           := l_acct_hist_csr.instance_id; -- added by sguthiva on 9-apr for bug 2304649
8887             x_account_history_tbl(i).full_dump_flag        := l_acct_hist_csr.full_dump_flag;
8888 
8889             IF (x_account_history_tbl(i).old_relationship_type_code IS NULL AND
8890                 x_account_history_tbl(i).new_relationship_type_code IS NULL ) OR
8891                (x_account_history_tbl(i).old_party_account_id IS NULL AND
8892                 x_account_history_tbl(i).new_party_account_id IS NULL)
8893             THEN
8894                  l_party_account_query_rec.ip_account_id := x_account_history_tbl(i).ip_account_id;
8895                  l_time_stamp:=l_acct_hist_csr.creation_date;
8896                       csi_party_relationships_pub.get_inst_party_accounts
8897                           ( p_api_version                 => p_api_version
8898                            ,p_commit                      => p_commit
8899                            ,p_init_msg_list               => p_init_msg_list
8900                            ,p_validation_level            => p_validation_level
8901                            ,p_account_query_rec           => l_party_account_query_rec
8902                            ,p_resolve_id_columns          => fnd_api.g_false
8903                            ,p_time_stamp                  => l_time_stamp
8904                            ,x_account_header_tbl          => l_account_header_tbl
8905                            ,x_return_status               => x_return_status
8906                            ,x_msg_count                   => x_msg_count
8907                            ,x_msg_data                    => x_msg_data);
8908 
8909               IF (x_account_history_tbl(i).old_relationship_type_code IS NULL AND
8910                   x_account_history_tbl(i).new_relationship_type_code IS NULL )
8911               THEN
8912                   x_account_history_tbl(i).old_relationship_type_code := l_account_header_tbl(1).relationship_type_code;
8913                   x_account_history_tbl(i).new_relationship_type_code := l_account_header_tbl(1).relationship_type_code;
8914               END IF;
8915 
8916               IF (x_account_history_tbl(i).old_party_account_id IS NULL AND
8917                   x_account_history_tbl(i).new_party_account_id IS NULL)
8918               THEN
8919                   x_account_history_tbl(i).old_party_account_id := l_account_header_tbl(1).party_account_id;
8920                   x_account_history_tbl(i).new_party_account_id := l_account_header_tbl(1).party_account_id;
8921               END IF;
8922 
8923             END IF;
8924 
8925               -- Resolve old history columns;
8926               l_account_header_tbl(1).party_account_id     := x_account_history_tbl(i).OLD_PARTY_ACCOUNT_ID;
8927               l_account_header_tbl(1).bill_to_address      := x_account_history_tbl(i).OLD_BILL_TO_ADDRESS;
8928               l_account_header_tbl(1).ship_to_address      := x_account_history_tbl(i).OLD_SHIP_TO_ADDRESS;
8929               l_account_header_tbl(1).party_account_number := NULL;
8930               l_account_header_tbl(1).party_account_name   := NULL;
8931               l_account_header_tbl(1).bill_to_location     := NULL;
8932               l_account_header_tbl(1).ship_to_location     := NULL;
8933               -- Following columns were added for bug 2670371
8934               l_account_header_tbl(1).bill_to_address1     := NULL;
8935               l_account_header_tbl(1).bill_to_address2     := NULL;
8936               l_account_header_tbl(1).bill_to_address3     := NULL;
8937               l_account_header_tbl(1).bill_to_address4     := NULL;
8938               l_account_header_tbl(1).bill_to_city         := NULL;
8939               l_account_header_tbl(1).bill_to_state        := NULL;
8940               l_account_header_tbl(1).bill_to_postal_code  := NULL;
8941               l_account_header_tbl(1).bill_to_country      := NULL;
8942               l_account_header_tbl(1).ship_to_address1     := NULL;
8943               l_account_header_tbl(1).ship_to_address2     := NULL;
8944               l_account_header_tbl(1).ship_to_address3     := NULL;
8945               l_account_header_tbl(1).ship_to_address4     := NULL;
8946               l_account_header_tbl(1).ship_to_city         := NULL;
8947               l_account_header_tbl(1).ship_to_state        := NULL;
8948               l_account_header_tbl(1).ship_to_postal_code  := NULL;
8949               l_account_header_tbl(1).ship_to_country      := NULL;
8950 
8951 
8952               csi_party_relationships_pvt.Resolve_id_columns(l_account_header_tbl);
8953 
8954               x_account_history_tbl(i).old_party_account_number  :=  l_account_header_tbl(1).party_account_number;
8955               x_account_history_tbl(i).old_party_account_name    :=  l_account_header_tbl(1).party_account_name;
8956               x_account_history_tbl(i).old_bill_to_location      :=  l_account_header_tbl(1).bill_to_location;
8957               x_account_history_tbl(i).old_ship_to_location      :=  l_account_header_tbl(1).ship_to_location;
8958 
8959               -- Following columns were added for bug 2670371
8960               x_account_history_tbl(i).old_bill_to_address1      :=  l_account_header_tbl(1).bill_to_address1;
8961               x_account_history_tbl(i).old_bill_to_address2      :=  l_account_header_tbl(1).bill_to_address2;
8962               x_account_history_tbl(i).old_bill_to_address3      :=  l_account_header_tbl(1).bill_to_address3;
8963               x_account_history_tbl(i).old_bill_to_address4      :=  l_account_header_tbl(1).bill_to_address4;
8964               x_account_history_tbl(i).old_bill_to_city          :=  l_account_header_tbl(1).bill_to_city;
8965               x_account_history_tbl(i).old_bill_to_state         :=  l_account_header_tbl(1).bill_to_state;
8966               x_account_history_tbl(i).old_bill_to_postal_code   :=  l_account_header_tbl(1).bill_to_postal_code;
8967               x_account_history_tbl(i).old_bill_to_country       :=  l_account_header_tbl(1).bill_to_country;
8968               x_account_history_tbl(i).old_ship_to_address1      :=  l_account_header_tbl(1).ship_to_address1;
8969               x_account_history_tbl(i).old_ship_to_address2      :=  l_account_header_tbl(1).ship_to_address2;
8970               x_account_history_tbl(i).old_ship_to_address3      :=  l_account_header_tbl(1).ship_to_address3;
8971               x_account_history_tbl(i).old_ship_to_address4      :=  l_account_header_tbl(1).ship_to_address4;
8972               x_account_history_tbl(i).old_ship_to_city          :=  l_account_header_tbl(1).ship_to_city;
8973               x_account_history_tbl(i).old_ship_to_state         :=  l_account_header_tbl(1).ship_to_state;
8974               x_account_history_tbl(i).old_ship_to_postal_code   :=  l_account_header_tbl(1).ship_to_postal_code;
8975               x_account_history_tbl(i).old_ship_to_country       :=  l_account_header_tbl(1).ship_to_country;
8976               -- Resolve new history columns;
8977               l_account_header_tbl(1).party_account_id     := x_account_history_tbl(i).NEW_PARTY_ACCOUNT_ID;
8978               l_account_header_tbl(1).bill_to_address      := x_account_history_tbl(i).NEW_BILL_TO_ADDRESS;
8979               l_account_header_tbl(1).ship_to_address      := x_account_history_tbl(i).NEW_SHIP_TO_ADDRESS;
8980               l_account_header_tbl(1).party_account_number := NULL;
8981               l_account_header_tbl(1).party_account_name   := NULL;
8982               l_account_header_tbl(1).bill_to_location     := NULL;
8983               l_account_header_tbl(1).ship_to_location     := NULL;
8984 
8985               -- Following columns were added for bug 2670371
8986               l_account_header_tbl(1).bill_to_address1     := NULL;
8987               l_account_header_tbl(1).bill_to_address2     := NULL;
8988               l_account_header_tbl(1).bill_to_address3     := NULL;
8989               l_account_header_tbl(1).bill_to_address4     := NULL;
8990               l_account_header_tbl(1).bill_to_city         := NULL;
8991               l_account_header_tbl(1).bill_to_state        := NULL;
8992               l_account_header_tbl(1).bill_to_postal_code  := NULL;
8993               l_account_header_tbl(1).bill_to_country      := NULL;
8994               l_account_header_tbl(1).ship_to_address1     := NULL;
8995               l_account_header_tbl(1).ship_to_address2     := NULL;
8996               l_account_header_tbl(1).ship_to_address3     := NULL;
8997               l_account_header_tbl(1).ship_to_address4     := NULL;
8998               l_account_header_tbl(1).ship_to_city         := NULL;
8999               l_account_header_tbl(1).ship_to_state        := NULL;
9000               l_account_header_tbl(1).ship_to_postal_code  := NULL;
9001               l_account_header_tbl(1).ship_to_country      := NULL;
9002 
9003               csi_party_relationships_pvt.Resolve_id_columns(l_account_header_tbl);
9004 
9005               x_account_history_tbl(i).new_party_account_number  :=  l_account_header_tbl(1).party_account_number;
9006               x_account_history_tbl(i).new_party_account_name    :=  l_account_header_tbl(1).party_account_name;
9007               x_account_history_tbl(i).new_bill_to_location      :=  l_account_header_tbl(1).bill_to_location;
9008               x_account_history_tbl(i).new_ship_to_location      :=  l_account_header_tbl(1).ship_to_location;
9009 
9010               -- Following columns were added for bug 2670371
9011 
9012               x_account_history_tbl(i).new_bill_to_address1      :=  l_account_header_tbl(1).bill_to_address1;
9013               x_account_history_tbl(i).new_bill_to_address2      :=  l_account_header_tbl(1).bill_to_address2;
9014               x_account_history_tbl(i).new_bill_to_address3      :=  l_account_header_tbl(1).bill_to_address3;
9015               x_account_history_tbl(i).new_bill_to_address4      :=  l_account_header_tbl(1).bill_to_address4;
9016               x_account_history_tbl(i).new_bill_to_city          :=  l_account_header_tbl(1).bill_to_city;
9017               x_account_history_tbl(i).new_bill_to_state         :=  l_account_header_tbl(1).bill_to_state;
9018               x_account_history_tbl(i).new_bill_to_postal_code   :=  l_account_header_tbl(1).bill_to_postal_code;
9019               x_account_history_tbl(i).new_bill_to_country       :=  l_account_header_tbl(1).bill_to_country;
9020               x_account_history_tbl(i).new_ship_to_address1      :=  l_account_header_tbl(1).ship_to_address1;
9021               x_account_history_tbl(i).new_ship_to_address2      :=  l_account_header_tbl(1).ship_to_address2;
9022               x_account_history_tbl(i).new_ship_to_address3      :=  l_account_header_tbl(1).ship_to_address3;
9023               x_account_history_tbl(i).new_ship_to_address4      :=  l_account_header_tbl(1).ship_to_address4;
9024               x_account_history_tbl(i).new_ship_to_city          :=  l_account_header_tbl(1).ship_to_city;
9025               x_account_history_tbl(i).new_ship_to_state         :=  l_account_header_tbl(1).ship_to_state;
9026               x_account_history_tbl(i).new_ship_to_postal_code   :=  l_account_header_tbl(1).ship_to_postal_code;
9027               x_account_history_tbl(i).new_ship_to_country       :=  l_account_header_tbl(1).ship_to_country;
9028 
9029               IF NVL(x_account_history_tbl(i).old_party_account_id,fnd_api.g_miss_num)=
9030                  NVL(x_account_history_tbl(i).new_party_account_id,fnd_api.g_miss_num)
9031               THEN
9032                   x_account_history_tbl(i).old_party_account_id := NULL;
9033                   x_account_history_tbl(i).new_party_account_id := NULL;
9034               END IF;
9035 
9036 
9037               i := i + 1;
9038 
9039        END LOOP;
9040 
9041        -- End of API body
9042 
9043        -- Standard check of p_commit.
9044        /*
9045        IF FND_API.To_Boolean( p_commit ) THEN
9046              COMMIT WORK;
9047        END IF;
9048        */
9049 
9050        /***** srramakr commented for bug # 3304439
9051        -- Check for the profile option and disable the trace
9052        IF (l_flag = 'Y') THEN
9053             dbms_session.set_sql_trace(false);
9054        END IF;
9055        -- End disable trace
9056        ****/
9057 
9058        -- Standard call to get message count and if count is  get message info.
9059        FND_MSG_PUB.Count_And_Get
9060                 (p_count        =>      x_msg_count ,
9061                  p_data         =>      x_msg_data   );
9062 EXCEPTION
9063         WHEN FND_API.G_EXC_ERROR THEN
9064                -- ROLLBACK TO get_inst_party_account_hist;
9065                 x_return_status := FND_API.G_RET_STS_ERROR ;
9066                 FND_MSG_PUB.Count_And_Get
9067                 (   p_count   =>      x_msg_count,
9068                     p_data    =>      x_msg_data );
9069         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9070                -- ROLLBACK TO get_inst_party_account_hist;
9071                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9072                 FND_MSG_PUB.Count_And_Get
9073                 (   p_count   =>      x_msg_count,
9074                     p_data    =>      x_msg_data  );
9075         WHEN OTHERS THEN
9076                -- ROLLBACK TO get_inst_party_account_hist;
9077                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9078                 IF      FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9079                 FND_MSG_PUB.Add_Exc_Msg
9080                 (       g_pkg_name          ,
9081                         l_api_name           );
9082                 END IF;
9083                 FND_MSG_PUB.Count_And_Get
9084                 ( p_count     =>      x_msg_count,
9085                   p_data      =>      x_msg_data  );
9086 
9087 END get_inst_party_account_hist;
9088 
9089 END  csi_party_relationships_pvt ;