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.17.12020000.3 2012/11/05 09:58:22 aabmishr 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      NULL REC_INDEX
2490     FROM  csi_item_instances
2491     WHERE instance_id = p_instance_id;
2492 
2493     l_curr_instance_rec  csi_datastructures_pub.instance_rec;
2494 
2495 
2496    CURSOR pty_hist_csr (p_party_hist_id NUMBER) IS
2497    SELECT  instance_party_history_id
2498           ,instance_party_id
2499           ,transaction_id
2500           ,old_party_source_table
2501           ,new_party_source_table
2502           ,old_party_id
2503           ,new_party_id
2504           ,old_relationship_type_code
2505           ,new_relationship_type_code
2506           ,old_contact_flag
2507           ,new_contact_flag
2508           ,old_contact_ip_id
2509           ,new_contact_ip_id
2510           ,old_active_start_date
2511           ,new_active_start_date
2512           ,old_active_end_date
2513           ,new_active_end_date
2514           ,old_context
2515           ,new_context
2516           ,old_attribute1
2517           ,new_attribute1
2518           ,old_attribute2
2519           ,new_attribute2
2520           ,old_attribute3
2521           ,new_attribute3
2522           ,old_attribute4
2523           ,new_attribute4
2524           ,old_attribute5
2525           ,new_attribute5
2526           ,old_attribute6
2527           ,new_attribute6
2528           ,old_attribute7
2529           ,new_attribute7
2530           ,old_attribute8
2531           ,new_attribute8
2532           ,old_attribute9
2533           ,new_attribute9
2534           ,old_attribute10
2535           ,new_attribute10
2536           ,old_attribute11
2537           ,new_attribute11
2538           ,old_attribute12
2539           ,new_attribute12
2540           ,old_attribute13
2541           ,new_attribute13
2542           ,old_attribute14
2543           ,new_attribute14
2544           ,old_attribute15
2545           ,new_attribute15
2546           ,full_dump_flag
2547           ,object_version_number
2548           ,old_primary_flag
2549           ,new_primary_flag
2550           ,old_preferred_flag
2551           ,new_preferred_flag
2552    FROM   csi_i_parties_h
2553    WHERE  csi_i_parties_h.instance_party_history_id = p_party_hist_id
2554    FOR UPDATE OF object_version_number ;
2555    l_pty_hist_csr    pty_hist_csr%rowtype;
2556    l_party_hist_id   NUMBER;
2557    l_open_service    VARCHAR2(1);
2558    l_party_hist_rec  csi_datastructures_pub.party_history_rec;
2559    l_ins_pty_found   NUMBER;
2560    l_pty_end_date    DATE;
2561 
2562    l_inst_just_expired    VARCHAR2(1) := FND_API.G_FALSE;  --Added for bug 7517240
2563 BEGIN
2564    -- Standard Start of API savepoint
2565    -- SAVEPOINT    update_inst_party_rel_pvt  ;
2566 
2567    -- Standard call to check for call compatibility.
2568    IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
2569 					   p_api_version           ,
2570 					   l_api_name              ,
2571 					   g_pkg_name              )
2572    THEN
2573 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2574    END IF;
2575 
2576    -- Initialize message list if p_init_msg_list is set to TRUE.
2577    IF FND_API.to_Boolean( p_init_msg_list ) THEN
2578 	   FND_MSG_PUB.initialize;
2579    END IF;
2580 
2581    --  Initialize API return status to success
2582    x_return_status := FND_API.G_RET_STS_SUCCESS;
2583 
2584    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
2585    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2586 
2587    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
2588    IF (l_csi_debug_level > 0) THEN
2589        csi_gen_utility_pvt.put_line( 'update_inst_party_relationship ');
2590    END IF;
2591 
2592    -- If the debug level = 2 then dump all the parameters values.
2593    IF (l_csi_debug_level> 1) THEN
2594        csi_gen_utility_pvt.put_line( 'update_inst_party_relationship:' ||
2595 						    p_api_version    ||'-'||
2596 						    p_commit         ||'-'||
2597 						    p_init_msg_list        );
2598        -- Dump the records in the log file
2599        csi_gen_utility_pvt.dump_party_rec(p_party_rec);
2600        csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
2601    END IF;
2602    -- Start API body
2603    --
2604    -- Check if all the required parameters are passed
2605    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
2606 	 (    p_party_rec.INSTANCE_PARTY_ID ,
2607 	       '  p_party_rec.INSTANCE_PARTY_ID ',
2608 		  l_api_name                 );
2609    --
2610    IF p_party_rec.party_id IS NULL THEN
2611       FND_MESSAGE.SET_NAME('CSI','CSI_API_MANDATORY_PARTY');
2612       FND_MSG_PUB.Add;
2613       RAISE FND_API.G_EXC_ERROR;
2614    END IF;
2615    --
2616    -- Check if the instance party id  is valid
2617    -- End commentation by sk for bug 2232880
2618    -- Verify if the instance_id exists in csi_item_instances
2619    IF p_party_rec.INSTANCE_ID <> FND_API.G_MISS_NUM THEN
2620       --Added query for bug 7517240
2621       IF p_party_rec.ACTIVE_END_DATE IS NOT NULL AND p_party_rec.ACTIVE_END_DATE < SYSDATE THEN
2622         BEGIN
2623           SELECT 'T'
2624           INTO  l_inst_just_expired
2625           FROM  CSI_ITEM_INSTANCES_H
2626           WHERE INSTANCE_ID = p_party_rec.INSTANCE_ID
2627           AND   TRANSACTION_ID = p_txn_rec.TRANSACTION_ID
2628           AND   OLD_ACTIVE_END_DATE IS NULL
2629           AND   NEW_ACTIVE_END_DATE < SYSDATE
2630           AND   ROWNUM = 1;
2631         EXCEPTION
2632           WHEN NO_DATA_FOUND THEN
2633             l_inst_just_expired := FND_API.G_FALSE;
2634         END;
2635       END IF;
2636       IF l_inst_just_expired = FND_API.G_FALSE
2637         AND NOT(CSI_Instance_parties_vld_pvt.Is_InstanceID_Valid(p_party_rec.INSTANCE_ID)) THEN
2638          RAISE FND_API.G_EXC_ERROR;
2639       END IF;
2640    END IF;
2641    -- Verify the instance owner exists already if exists then raise error
2642    IF p_party_rec.RELATIONSHIP_TYPE_CODE = 'OWNER' THEN
2643       IF CSI_Instance_parties_vld_pvt.Is_Inst_Owner_exists
2644                                   (p_instance_id   => p_party_rec.INSTANCE_ID,
2645                                    p_instance_party_id => p_party_rec.instance_party_id ) THEN
2646          RAISE FND_API.G_EXC_ERROR;
2647       END IF;
2648    END IF;
2649    -- start of addition of code by rtalluri for bugfix 2324745 on 04/23/02
2650    -- validating the owner
2651    IF l_curr_party_rec.instance_party_id = p_party_rec.instance_party_id
2652        AND l_curr_party_rec.party_id <> p_party_rec.party_id
2653        AND (p_party_rec.party_id is not null and p_party_rec.party_id <> fnd_api.g_miss_num)
2654        AND l_curr_party_rec.relationship_type_code = 'OWNER'
2655    THEN
2656       OPEN curr_instance_rec(p_party_rec.instance_id);
2657       FETCH curr_instance_rec INTO l_curr_instance_rec;
2658       IF NOT (csi_item_instance_vld_pvt.Validate_Uniqueness(p_instance_rec     => l_curr_instance_rec,
2659                                                             p_party_rec        => p_party_rec,
2660                                                             p_csi_txn_type_id  => p_txn_rec.transaction_type_id
2661 															)) THEN
2662          RAISE FND_API.G_EXC_ERROR;
2663       END IF;
2664       CLOSE curr_instance_rec;
2665    END IF;
2666    -- end of addition of code by rtalluri for bugfix 2324745 on 04/23/02
2667    -- The following code has been added for the following scenario...
2668    -- For the customer merge/account merge, all the parent and the child instances
2669    -- were selected before calling update_item_instance.
2670    -- In this case the child records object_version numbers will be updated
2671    -- if the child owner party is same as the parent.
2672    IF p_txn_rec.transaction_type_id=7
2673    THEN
2674       BEGIN
2675          SELECT object_version_number
2676          INTO   p_party_rec.object_version_number
2677          FROM   csi_i_parties
2678          WHERE  instance_party_id=p_party_rec.instance_party_id;
2679       EXCEPTION
2680          WHEN NO_DATA_FOUND THEN
2681             csi_gen_utility_pvt.put_line('Passed instance_party_id : '||p_party_rec.instance_party_id||' is not found.');
2682             RAISE FND_API.G_EXC_ERROR;
2683       END;
2684    END IF;
2685    -- check if the object_version_number passed matches with the one
2686    -- in the database else raise error
2687    OPEN get_curr_party_rec(p_party_rec.INSTANCE_PARTY_ID);
2688    FETCH get_curr_party_rec INTO l_curr_party_rec;
2689    IF (l_curr_party_rec.object_version_number <> p_party_rec.OBJECT_VERSION_NUMBER) THEN
2690       FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
2691       FND_MSG_PUB.ADD;
2692       RAISE FND_API.G_EXC_ERROR;
2693    END IF;
2694    --
2695    IF get_curr_party_rec%NOTFOUND THEN
2696       FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
2697       FND_MSG_PUB.ADD;
2698       RAISE FND_API.G_EXC_ERROR;
2699    END IF;
2700    CLOSE get_curr_party_rec;
2701    --
2702    IF p_party_rec.instance_id <> FND_API.G_MISS_NUM THEN
2703       IF p_party_rec.instance_id <> l_curr_party_rec.instance_id THEN
2704 	 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2705 	 FND_MESSAGE.Set_Token('COLUMN', 'INSTANCE_ID');
2706 	 FND_MSG_PUB.ADD;
2707 	 RAISE FND_API.G_EXC_ERROR;
2708       END IF;
2709    END IF;
2710    --
2711    IF p_party_rec.active_start_date IS NULL THEN
2712       FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2713       FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
2714       FND_MSG_PUB.ADD;
2715       RAISE FND_API.G_EXC_ERROR;
2716    END IF;
2717    --
2718    IF p_party_rec.active_start_date <> FND_API.G_MISS_DATE THEN
2719       IF p_party_rec.active_start_date <> l_curr_party_rec.active_start_date THEN
2720 	 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2721 	 FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
2722 	 FND_MSG_PUB.ADD;
2723 	RAISE FND_API.G_EXC_ERROR;
2724       END IF;
2725    END IF;
2726    -- Increment the object_version_number before updating
2727    l_OBJECT_VERSION_NUMBER := l_curr_party_rec.OBJECT_VERSION_NUMBER + 1 ;
2728    -- Verify if the active_end_date is valid
2729    -- Don't allow expiry of owner parties
2730    IF p_party_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE THEN
2731       IF l_curr_party_rec.relationship_type_code = 'OWNER'  THEN
2732 	 FND_MESSAGE.Set_Name('CSI', 'CSI_API_EXP_NOT_ALLOWED');
2733 	 FND_MESSAGE.Set_Token('COLUMN', 'OWNER PARTY');
2734 	 FND_MSG_PUB.ADD;
2735 	 RAISE FND_API.G_EXC_ERROR;
2736       ELSE
2737 	 -- Verify if the active_end_date is valid
2738 	 IF (g_expire_party_flag <> 'Y') THEN
2739 	    IF NOT(CSI_Instance_parties_vld_pvt.Is_EndDate_Valid
2740 			    (l_curr_party_rec.ACTIVE_START_DATE,
2741 			     p_party_rec.ACTIVE_END_DATE ,
2742 			     p_party_rec.INSTANCE_ID,
2743 			     p_party_rec.INSTANCE_PARTY_ID,
2744 			     p_txn_rec.TRANSACTION_ID))  THEN
2745 	       RAISE FND_API.G_EXC_ERROR;
2746 	    END IF;
2747 	 END IF;
2748       END IF;
2749    END IF;
2750    --
2751    IF p_party_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
2752       IF ((p_party_rec.relationship_type_code <> l_curr_party_rec.relationship_type_code)
2753 	      AND l_curr_party_rec.relationship_type_code = 'OWNER' ) THEN
2754 	   FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
2755 	   FND_MESSAGE.Set_Token('COLUMN', 'OWNER PARTY');
2756 
2757 	   FND_MSG_PUB.ADD;
2758 	   RAISE FND_API.G_EXC_ERROR;
2759       ELSE
2760 
2761 
2762      IF (l_csi_debug_level > 0) THEN
2763             csi_gen_utility_pvt.put_line( 'Added line of code...');
2764       END IF;
2765         --bug 7015558 fix...Contact_flag is missing.
2766 	IF p_party_rec.RELATIONSHIP_TYPE_CODE <> 'OWNER' THEN
2767 	    select contact_flag into p_party_rec.contact_flag FROM csi_i_parties where instance_id=p_party_rec.instance_id and instance_party_id=p_party_rec.instance_party_id;
2768         END IF;
2769       IF (l_csi_debug_level > 0) THEN
2770             csi_gen_utility_pvt.put_line( 'Added line of code ends...');
2771             csi_gen_utility_pvt.put_line('Contact flag'|| p_party_rec.contact_flag);
2772             csi_gen_utility_pvt.put_line('Instance id'|| p_party_rec.instance_id);
2773             csi_gen_utility_pvt.put_line('Instance party id'|| p_party_rec.instance_party_id);
2774       END IF;
2775 
2776 	 -- Verify the relationship_type_code is valid
2777 	 IF p_party_rec.contact_flag = 'Y' THEN
2778 	     IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Rel_type_Valid
2779 					     (p_party_rec.RELATIONSHIP_TYPE_CODE,
2780 					      'C'    )) THEN
2781 		 RAISE FND_API.G_EXC_ERROR;
2782 	     END IF;
2783 	 ELSE
2784 	      -- Verify the relationship_type_code is valid
2785 	      IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Rel_type_Valid
2786 					     (p_party_rec.RELATIONSHIP_TYPE_CODE,
2787 					      'P'    )) THEN
2788 		 RAISE FND_API.G_EXC_ERROR;
2789 	      END IF;
2790 	 END IF;
2791       END IF;
2792    END IF;
2793 
2794    -- Verify that there is only one Preferred Party for a
2795    -- given instance party relationship
2796    -- Bug 9286516
2797    IF p_party_rec.preferred_flag <> FND_API.G_MISS_CHAR THEN
2798            IF ( ((p_party_rec.preferred_flag IS NULL AND l_curr_party_rec.preferred_flag IS NOT NULL)
2799 	 OR (p_party_rec.preferred_flag IS NOT NULL AND l_curr_party_rec.preferred_flag IS NULL)
2800               OR  (p_party_rec.preferred_flag <> l_curr_party_rec.preferred_flag))
2801 	 AND (p_party_rec.preferred_flag = 'Y')) THEN
2802 	   IF p_party_rec.CONTACT_FLAG <> 'Y' THEN
2803 		IF (((p_party_rec.PARTY_SOURCE_TABLE <> FND_API.G_MISS_CHAR)
2804 		   AND (p_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM')))
2805 		  OR (l_curr_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM'))) THEN
2806 		  FND_MESSAGE.SET_NAME('CSI','CSI_PREFERRED_PTY_TYPE');
2807 		  FND_MESSAGE.SET_TOKEN('PARTY_TYPE',l_curr_party_rec.PARTY_SOURCE_TABLE);
2808 		  FND_MESSAGE.SET_TOKEN('INSTANCE_ID',l_curr_party_rec.INSTANCE_ID);
2809 		  FND_MSG_PUB.Add;
2810 		  RAISE FND_API.G_EXC_ERROR;
2811 	       END IF;
2812 	   END IF;
2813 	END IF;
2814    END IF;
2815    -- Verify that there is only one Primary Party for a
2816    -- given instance party relationship
2817    IF ((nvl(p_party_rec.primary_flag,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR)
2818       OR (nvl(p_party_rec.relationship_type_code,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR)) THEN
2819       IF (((p_party_rec.primary_flag IS NULL AND l_curr_party_rec.primary_flag IS NOT NULL)
2820 	  OR (p_party_rec.primary_flag IS NOT NULL AND l_curr_party_rec.primary_flag IS NULL)
2821 	  OR  (p_party_rec.primary_flag <> l_curr_party_rec.primary_flag)
2822 	  AND (p_party_rec.primary_flag = 'Y'))
2823 	  OR (p_party_rec.relationship_type_code <> l_curr_party_rec.relationship_type_code)) THEN
2824 	 IF (((p_party_rec.CONTACT_FLAG <> FND_API.G_MISS_CHAR)
2825 	       AND (p_party_rec.CONTACT_FLAG = 'Y'))
2826 	       OR (l_curr_party_rec.CONTACT_FLAG = 'Y')) THEN
2827 	       -- SK ADDED
2828 	       -- following code 10 lines needs to be removed once
2829 	       -- html code is fixed
2830 	    IF p_party_rec.PARTY_SOURCE_TABLE IS NULL
2831 	    THEN
2832 	       p_party_rec.PARTY_SOURCE_TABLE:=fnd_api.g_miss_char;
2833 	    END IF;
2834 	    IF  p_party_rec.primary_flag IS NULL THEN
2835 		p_party_rec.primary_flag:='N';
2836 	    END IF;
2837 	    --
2838 	    IF  nvl(l_curr_party_rec.primary_flag,'N') = 'Y'
2839 		AND p_party_rec.primary_flag = 'N'
2840 	    THEN
2841 	       NULL;
2842 	    ELSIF ((nvl(l_curr_party_rec.primary_flag,'N') = 'Y') OR (p_party_rec.primary_flag = 'Y')) THEN
2843 	       IF p_party_rec.ACTIVE_START_DATE IS NULL
2844 		  OR p_party_rec.ACTIVE_START_DATE = fnd_api.g_miss_date THEN
2845 		  p_party_rec.ACTIVE_START_DATE := l_curr_party_rec.ACTIVE_START_DATE;
2846 	       END IF;
2847 	       --
2848 	       IF  /* p_party_rec.ACTIVE_END_DATE IS NULL
2849 	       -- Commenting for Bug 14772562
2850 		   OR */ p_party_rec.ACTIVE_END_DATE = fnd_api.g_miss_date
2851 	       THEN
2852 		  p_party_rec.ACTIVE_END_DATE := l_curr_party_rec.ACTIVE_END_DATE;
2853 	       END IF;
2854 	       -- SK END ADDITION
2855 	       IF CSI_Instance_parties_vld_pvt.Is_Primary_Contact_Pty
2856 		       (l_curr_party_rec.INSTANCE_ID,
2857 			l_curr_party_rec.CONTACT_IP_ID,
2858 			p_party_rec.RELATIONSHIP_TYPE_CODE,
2859 			p_party_rec.ACTIVE_START_DATE,
2860 			p_party_rec.ACTIVE_END_DATE) THEN
2861 		  RAISE FND_API.G_EXC_ERROR;
2862 	       END IF;
2863 	    END IF; --SK ADDED
2864 	 ELSE
2865 	    IF (((p_party_rec.PARTY_SOURCE_TABLE <> FND_API.G_MISS_CHAR)
2866 		   AND (p_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM')))
2867 		  OR (l_curr_party_rec.PARTY_SOURCE_TABLE NOT IN ('GROUP','TEAM'))) THEN
2868 		   -- following code is commented by sk
2869 		  /*FND_MESSAGE.SET_NAME('CSI','CSI_HAHA2');
2870 		   --FND_MESSAGE.SET_NAME('CSI','CSI_PRIMARY_PTY_TYPE');
2871 		   FND_MESSAGE.SET_TOKEN('PARTY_TYPE',l_curr_party_rec.PARTY_SOURCE_TABLE);
2872 		   FND_MESSAGE.SET_TOKEN('INSTANCE_ID',l_curr_party_rec.INSTANCE_ID);
2873 		   FND_MSG_PUB.Add;
2874 		   RAISE FND_API.G_EXC_ERROR; */
2875 		  NULL; --added by sk
2876 	    ELSE
2877 	       -- SK ADDED
2878 	       IF  p_party_rec.primary_flag IS NULL
2879 	       THEN
2880 		   p_party_rec.primary_flag:='N';
2881 	       END IF;
2882 	       --
2883 	       IF  nvl(l_curr_party_rec.primary_flag,'N') = 'Y'
2884 		   AND p_party_rec.primary_flag = 'N'
2885 	       THEN
2886 		  NULL;
2887 	       ELSIF ((nvl(l_curr_party_rec.primary_flag,'N') = 'Y') OR (p_party_rec.primary_flag = 'Y')) THEN
2888 		  IF  p_party_rec.ACTIVE_START_DATE IS NULL
2889 		     OR p_party_rec.ACTIVE_START_DATE = fnd_api.g_miss_date
2890 		  THEN
2891 		     p_party_rec.ACTIVE_START_DATE := l_curr_party_rec.ACTIVE_START_DATE;
2892 		  END IF;
2893 		  IF  /* p_party_rec.ACTIVE_END_DATE IS NULL
2894 		  -- Commenting for Bug 14772562
2895 		     OR */ p_party_rec.ACTIVE_END_DATE = fnd_api.g_miss_date
2896 		  THEN
2897 		     p_party_rec.ACTIVE_END_DATE := l_curr_party_rec.ACTIVE_END_DATE;
2898 		  END IF;
2899 		  -- SK END ADDITION
2900 		  IF CSI_Instance_parties_vld_pvt.Is_Primary_Pty
2901 			       (l_curr_party_rec.INSTANCE_ID,
2902 				p_party_rec.RELATIONSHIP_TYPE_CODE,
2903 				p_party_rec.ACTIVE_START_DATE,
2904 				p_party_rec.ACTIVE_END_DATE) THEN
2905 		     RAISE FND_API.G_EXC_ERROR;
2906 		  END IF;
2907 	       END IF; --SK ADDED
2908 	    END IF;
2909 	 END IF;
2910       END IF;
2911    END IF;
2912    -- Call table handlers to insert into the csi_i_parties table
2913    -- Verify if the party_source_table exists in CSI_LOOKUPS
2914    IF (p_party_rec.PARTY_SOURCE_TABLE <> FND_API.G_MISS_CHAR) THEN
2915       IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_Source_tab_Valid(p_party_rec.PARTY_SOURCE_TABLE)) THEN
2916 	 RAISE FND_API.G_EXC_ERROR;
2917       END IF;
2918       -- Verify if the party_id is valid based on the value of party_source_table
2919       IF (p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM) THEN
2920 	 IF NOT(CSI_Instance_parties_vld_pvt.Is_Party_Valid
2921 			 (p_party_rec.PARTY_SOURCE_TABLE ,
2922 			  p_party_rec.PARTY_ID ,
2923 			  p_party_rec.CONTACT_FLAG )) THEN
2924 	    RAISE FND_API.G_EXC_ERROR;
2925 	 END IF;
2926       END IF;
2927    ELSE
2928       IF (p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM) THEN
2929 	 IF NOT(CSI_Instance_parties_vld_pvt.Is_Party_Valid
2930 			   (l_curr_party_rec.PARTY_SOURCE_TABLE ,
2931 			    p_party_rec.PARTY_ID ,
2932 			    p_party_rec.CONTACT_FLAG )) THEN
2933 	    RAISE FND_API.G_EXC_ERROR;
2934 	 END IF;
2935       END IF;
2936    END IF;
2937    -- Grab the internal party id from csi_installed paramters
2938    IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
2939       csi_gen_utility_pvt.populate_install_param_rec;
2940    END IF;
2941    --
2942    l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
2943    --
2944    IF l_internal_party_id IS NULL THEN
2945       FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
2946       FND_MSG_PUB.ADD;
2947       RAISE FND_API.G_EXC_ERROR;
2948    END IF;
2949    -- Validate Tranfer Party rules in case of tranfer of instance
2950    IF ((p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM)
2951        AND (p_party_rec.PARTY_ID IS NOT NULL)
2952        AND (p_party_rec.PARTY_ID <> l_curr_party_rec.PARTY_ID))
2953        --AND (p_party_rec.party_id <> l_internal_party_id)) -- commented for bug 3294748
2954    THEN
2955       -- End of code comment for bug 2600000
2956       -- End commentation by sguthiva for bug 2307804
2957       CSI_Instance_parties_vld_pvt.Transfer_Party_Rules
2958            ( p_api_version                 => p_api_version
2959             ,p_commit                      => p_commit
2960             ,p_init_msg_list               => p_init_msg_list
2961             ,p_validation_level            => p_validation_level
2962             ,p_party_rec                   => l_curr_party_rec
2963             ,p_stack_err_msg               => TRUE
2964             ,p_txn_rec                     => p_txn_rec
2965             ,x_return_status               => x_return_status
2966             ,x_msg_count                   => x_msg_count
2967             ,x_msg_data                    => x_msg_data       );
2968 
2969       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2970          l_msg_index := 1;
2971          l_msg_count := x_msg_count;
2972          WHILE l_msg_count > 0 LOOP
2973                     x_msg_data := FND_MSG_PUB.GET(
2974                                                   l_msg_index,
2975                                                   FND_API.G_FALSE	);
2976                    csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
2977                    l_msg_index := l_msg_index + 1;
2978                    l_msg_count := l_msg_count - 1;
2979          END LOOP;
2980          RAISE FND_API.G_EXC_ERROR;
2981       END IF;
2982    END IF;
2983    -- Validate alternate primary key
2984    IF  ((p_party_rec.instance_id IS NULL) OR  (p_party_rec.instance_id = FND_API.G_MISS_NUM)) THEN
2985       l_alt_pk_instance_id   := l_curr_party_rec.instance_id;
2986    ELSE
2987       l_alt_pk_instance_id   := p_party_rec.instance_id;
2988    END IF;
2989    --
2990    IF  ((p_party_rec.party_source_table IS NULL) OR  (p_party_rec.party_source_table = FND_API.G_MISS_CHAR)) THEN
2991       l_alt_pk_pty_source_tab   := l_curr_party_rec.party_source_table;
2992    ELSE
2993       l_alt_pk_pty_source_tab   := p_party_rec.party_source_table;
2994    END IF;
2995    --
2996    IF  ((p_party_rec.party_id IS NULL) OR  (p_party_rec.party_id = FND_API.G_MISS_NUM)) THEN
2997       l_alt_pk_party_id   := l_curr_party_rec.party_id;
2998    ELSE
2999       l_alt_pk_party_id   := p_party_rec.party_id;
3000    END IF;
3001    --
3002    IF  ((p_party_rec.relationship_type_code IS NULL) OR
3003       (p_party_rec.relationship_type_code = FND_API.G_MISS_CHAR)) THEN
3004       l_alt_pk_rel_type_code   := l_curr_party_rec.relationship_type_code ;
3005    ELSE
3006       l_alt_pk_rel_type_code   := p_party_rec.relationship_type_code ;
3007    END IF;
3008    --
3009    IF  ((p_party_rec.contact_flag IS NULL) OR  (p_party_rec.contact_flag = FND_API.G_MISS_CHAR)) THEN
3010       l_alt_pk_contact_flag   := l_curr_party_rec.contact_flag ;
3011    ELSE
3012       l_alt_pk_contact_flag   := p_party_rec.contact_flag ;
3013    END IF;
3014    -- Verify if the Party rel combination exists
3015    IF  ((l_alt_pk_instance_id   <> l_curr_party_rec.instance_id)
3016       OR
3017       (l_alt_pk_pty_source_tab   <> l_curr_party_rec.party_source_table )
3018       OR
3019       (l_alt_pk_party_id   <> l_curr_party_rec.party_id)
3020       OR
3021       (l_alt_pk_rel_type_code   <> l_curr_party_rec.relationship_type_code )
3022       OR
3023       (l_alt_pk_contact_flag   <> l_curr_party_rec.contact_flag ))
3024    THEN
3025       -- Verify if the Party rel combination exists
3026       -- Added the following code for bug 3694434
3027       -- party rel combination check is relaxed on for party/acct merge transaction.
3028       IF p_txn_rec.transaction_type_id=7
3029       THEN
3030          BEGIN
3031 	    SELECT instance_party_id
3032             INTO l_ins_pty_found
3033             FROM csi_i_parties
3034 	    WHERE instance_id            = l_alt_pk_instance_id
3035             AND party_source_table     = l_alt_pk_pty_source_tab
3036             AND party_id               = l_alt_pk_party_id
3037             AND relationship_type_code = l_alt_pk_rel_type_code
3038             AND contact_flag           = l_alt_pk_contact_flag
3039             AND NVL(contact_ip_id,fnd_api.g_miss_num) = NVL(p_party_rec.contact_ip_id,fnd_api.g_miss_num)
3040             AND ((active_end_date IS NULL) OR (active_end_date >= sysdate));
3041             -- If found then there exists a record in csi_i_parties, Hence
3042             -- I need to expire(if active) this record.
3043             BEGIN
3044                SELECT active_end_date
3045                INTO l_pty_end_date
3046                FROM csi_i_parties
3047                WHERE instance_party_id=p_party_rec.instance_party_id
3048                AND ((active_end_date IS NULL) OR (active_end_date > sysdate));
3049                -- Active record found so make it inactive.
3050                p_party_rec.active_end_date:=sysdate;
3051             EXCEPTION
3052                WHEN OTHERS THEN
3053                   NULL;
3054             END;
3055          EXCEPTION
3056             WHEN TOO_MANY_ROWS THEN
3057                csi_gen_utility_pvt.put_line('Too many rows exist in csi_i_parties with the same party rel combination.');
3058 	       FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_PARTY_REL_COMB');
3059 	       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));
3060 	       FND_MSG_PUB.Add;
3061                RAISE FND_API.G_EXC_ERROR;
3062             WHEN OTHERS THEN
3063                NULL;
3064          END;
3065       ELSE
3066          IF (CSI_Instance_parties_vld_pvt.Is_Party_Rel_Comb_Exists
3067                   (l_alt_pk_instance_id              ,
3068                    l_alt_pk_pty_source_tab           ,
3069                    l_alt_pk_party_id                 ,
3070                    l_alt_pk_rel_type_code            ,
3071                    l_alt_pk_contact_flag             ,
3072                    p_party_rec.contact_ip_id         ,
3073                    TRUE           )) THEN
3074                RAISE FND_API.G_EXC_ERROR;
3075          END IF;
3076       END IF;
3077    END IF;
3078    --
3079    IF p_party_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
3080       IF (p_party_rec.relationship_type_code = 'OWNER' ) THEN
3081          update csi_item_instances
3082          set owner_party_source_table = l_alt_pk_pty_source_tab, --p_party_rec.party_source_table,--bug 2769176
3083          owner_party_id  = l_alt_pk_party_id, --p_party_rec.party_id, --bug 2769176
3084          last_update_date = sysdate,
3085          last_updated_by = fnd_global.user_id
3086          where  instance_id     = l_curr_party_rec.instance_id;
3087       END IF;
3088    END IF;
3089    -- A contact marked as 'Primary' can also be marked as 'Preferred' or
3090    -- 'Non-Preferred' at the same time.
3091    IF p_party_rec.preferred_flag IS NULL THEN
3092       p_party_rec.preferred_flag:='N';
3093    END IF;
3094    IF (p_party_rec.preferred_flag='E' OR
3095       p_party_rec.preferred_flag='e' )
3096    THEN
3097       p_party_rec.preferred_flag:='E';
3098    END IF;
3099    -- A contact marked as Primary cannot be marked as 'Excluded'
3100    IF (p_party_rec.primary_flag='Y' AND p_party_rec.preferred_flag='E') OR
3101       (p_party_rec.primary_flag=fnd_api.g_miss_char AND nvl(l_curr_party_rec.primary_flag,'N') = 'Y' AND
3102       p_party_rec.preferred_flag='E') OR
3103       (p_party_rec.preferred_flag=fnd_api.g_miss_char AND nvl(l_curr_party_rec.preferred_flag,'N') = 'E' AND
3104       p_party_rec.primary_flag='Y')
3105    THEN
3106       fnd_message.set_name('CSI','CSI_PRIMARY_PTY_EXC');
3107       fnd_msg_pub.Add;
3108       RAISE fnd_api.g_exc_error;
3109    END IF;
3110    -- Possible values for preferred flag are
3111    -- 'N','Y' and 'E'.
3112    IF p_party_rec.preferred_flag='Y' OR
3113       p_party_rec.preferred_flag='N' OR
3114       p_party_rec.preferred_flag='E' OR
3115       p_party_rec.preferred_flag=fnd_api.g_miss_char
3116    THEN
3117       NULL;
3118    ELSE
3119       fnd_message.set_name('CSI','CSI_PREFERRED_VALUES');
3120       fnd_message.set_token('PREFERRED_FLAG',p_party_rec.preferred_flag);
3121       fnd_msg_pub.Add;
3122       RAISE fnd_api.g_exc_error;
3123    END IF;
3124    -- Call table handlers to update the  table
3125    CSI_I_PARTIES_PKG.Update_Row
3126         (
3127           p_INSTANCE_PARTY_ID      =>  p_party_rec.instance_party_id,
3128           p_INSTANCE_ID            =>  p_party_rec.instance_id,
3129           p_PARTY_SOURCE_TABLE     =>  p_party_rec.PARTY_SOURCE_TABLE,
3130           p_PARTY_ID               =>  p_party_rec.PARTY_ID,
3131           p_RELATIONSHIP_TYPE_CODE =>  p_party_rec.RELATIONSHIP_TYPE_CODE,
3132           p_CONTACT_FLAG           =>  p_party_rec.CONTACT_FLAG,
3133           p_CONTACT_IP_ID          =>  p_party_rec.CONTACT_IP_ID,
3134           p_ACTIVE_START_DATE      =>  p_party_rec.ACTIVE_START_DATE,
3135           p_ACTIVE_END_DATE        =>  p_party_rec.ACTIVE_END_DATE,
3136           p_CONTEXT                =>  p_party_rec.CONTEXT,
3137           p_ATTRIBUTE1             =>  p_party_rec.ATTRIBUTE1,
3138           p_ATTRIBUTE2             =>  p_party_rec.ATTRIBUTE2,
3139           p_ATTRIBUTE3             =>  p_party_rec.ATTRIBUTE3,
3140           p_ATTRIBUTE4             =>  p_party_rec.ATTRIBUTE4,
3141           p_ATTRIBUTE5             =>  p_party_rec.ATTRIBUTE5,
3142           p_ATTRIBUTE6             =>  p_party_rec.ATTRIBUTE6,
3143           p_ATTRIBUTE7             =>  p_party_rec.ATTRIBUTE7,
3144           p_ATTRIBUTE8             =>  p_party_rec.ATTRIBUTE8,
3145           p_ATTRIBUTE9             =>  p_party_rec.ATTRIBUTE9,
3146           p_ATTRIBUTE10            =>  p_party_rec.ATTRIBUTE10,
3147           p_ATTRIBUTE11            =>  p_party_rec.ATTRIBUTE11,
3148           p_ATTRIBUTE12            =>  p_party_rec.ATTRIBUTE12,
3149           p_ATTRIBUTE13            =>  p_party_rec.ATTRIBUTE13,
3150           p_ATTRIBUTE14            =>  p_party_rec.ATTRIBUTE14,
3151           p_ATTRIBUTE15            =>  p_party_rec.ATTRIBUTE15,
3152           p_CREATED_BY             =>  FND_API.G_MISS_NUM, -- FND_GLOBAL.USER_ID,
3153           p_CREATION_DATE          =>  FND_API.G_MISS_DATE, -- sysdate,
3154           p_LAST_UPDATED_BY        =>  FND_GLOBAL.USER_ID,
3155           p_LAST_UPDATE_DATE       =>  sysdate,
3156           p_LAST_UPDATE_LOGIN      =>  FND_GLOBAL.LOGIN_ID,
3157           p_OBJECT_VERSION_NUMBER  =>  l_OBJECT_VERSION_NUMBER,
3158           p_PRIMARY_FLAG           =>  p_party_rec.PRIMARY_FLAG,
3159           p_PREFERRED_FLAG           =>  p_party_rec.PREFERRED_FLAG);
3160 
3161          -- Call create_transaction to create txn log
3162          CSI_TRANSACTIONS_PVT.Create_transaction
3163           (
3164              p_api_version            => p_api_version
3165             ,p_commit                 => p_commit
3166             ,p_init_msg_list          => p_init_msg_list
3167             ,p_validation_level       => p_validation_level
3168             ,p_Success_If_Exists_Flag => 'Y'
3169             ,P_transaction_rec        => p_txn_rec
3170             ,x_return_status          => x_return_status
3171             ,x_msg_count              => x_msg_count
3172             ,x_msg_data               => x_msg_data         );
3173 
3174          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
3175 	      l_msg_index := 1;
3176               l_msg_count := x_msg_count;
3177     	      WHILE l_msg_count > 0 LOOP
3178      		       x_msg_data := FND_MSG_PUB.GET(
3179     	       			                 l_msg_index,
3180 	     	  		                     FND_API.G_FALSE	);
3181 	               csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
3182 	    	       l_msg_index := l_msg_index + 1;
3183 		           l_msg_count := l_msg_count - 1;
3184 	      END LOOP;
3185               RAISE FND_API.G_EXC_ERROR;
3186          END IF;
3187 
3188        -- Get the full_dump_frequency from csi_install_parameter
3189        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
3190           csi_gen_utility_pvt.populate_install_param_rec;
3191        END IF;
3192        --
3193        l_full_dump_frequency := csi_datastructures_pub.g_install_param_rec.history_full_dump_frequency;
3194        --
3195        IF l_full_dump_frequency IS NULL THEN
3196           FND_MESSAGE.SET_NAME('CSI','CSI_API_GET_FULL_DUMP_FAILED');
3197           FND_MSG_PUB.ADD;
3198           RAISE FND_API.G_EXC_ERROR;
3199        END IF;
3200        -- Generate a unique instance_party_history_id from the sequence
3201        l_inst_party_his_id := CSI_Instance_parties_vld_pvt.gen_inst_party_hist_id;
3202 
3203 
3204        select mod(l_object_version_number,l_full_dump_frequency)
3205        into   l_mod_value
3206        from   dual;
3207 
3208        -- assign the party rec
3209        l_temp_party_rec := p_party_rec;
3210        -- Start of Changes for Bug#2547034 on 09/20/02 - rtalluri
3211        BEGIN
3212         SELECT  instance_party_history_id
3213         INTO    l_party_hist_id
3214         FROM    csi_i_parties_h h
3215         WHERE   h.transaction_id = p_txn_rec.transaction_id
3216         AND     h.instance_party_id = p_party_rec.instance_party_id;
3217 
3218         OPEN   pty_hist_csr(l_party_hist_id);
3219         FETCH  pty_hist_csr INTO l_pty_hist_csr ;
3220         CLOSE  pty_hist_csr;
3221 
3222         IF l_pty_hist_csr.full_dump_flag = 'Y'
3223         THEN
3224          CSI_I_PARTIES_H_PKG.update_Row
3225         (
3226          p_INSTANCE_PARTY_HISTORY_ID    =>  l_party_hist_id                    ,
3227          p_INSTANCE_PARTY_ID             => fnd_api.g_miss_num                 ,
3228          p_TRANSACTION_ID                => fnd_api.g_miss_num                 ,
3229          p_OLD_PARTY_SOURCE_TABLE        => fnd_api.g_miss_char                ,
3230          p_NEW_PARTY_SOURCE_TABLE        => l_temp_party_rec.PARTY_SOURCE_TABLE,
3231          p_OLD_PARTY_ID                  => fnd_api.g_miss_num                 ,
3232          p_NEW_PARTY_ID                  => l_temp_party_rec.PARTY_ID          ,
3233          p_OLD_RELATIONSHIP_TYPE_CODE    => fnd_api.g_miss_char                ,
3234          p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_rec.RELATIONSHIP_TYPE_CODE,
3235          p_OLD_CONTACT_FLAG              => fnd_api.g_miss_char                ,
3236          p_NEW_CONTACT_FLAG              => l_temp_party_rec.CONTACT_FLAG      ,
3237          p_OLD_CONTACT_IP_ID             => fnd_api.g_miss_num                 ,
3238          p_NEW_CONTACT_IP_ID             => l_temp_party_rec.CONTACT_IP_ID     ,
3239          p_OLD_ACTIVE_START_DATE         => l_curr_party_rec.ACTIVE_START_DATE ,
3240          p_NEW_ACTIVE_START_DATE         => l_temp_party_rec.ACTIVE_START_DATE ,
3241          p_OLD_ACTIVE_END_DATE           => l_curr_party_rec.ACTIVE_END_DATE   ,
3242          p_NEW_ACTIVE_END_DATE           => l_temp_party_rec.ACTIVE_END_DATE   ,
3243          p_OLD_CONTEXT                   => fnd_api.g_miss_char                ,
3244          p_NEW_CONTEXT                   => l_temp_party_rec.context           ,
3245          p_OLD_ATTRIBUTE1                => fnd_api.g_miss_char                ,
3246          p_NEW_ATTRIBUTE1                => l_temp_party_rec.ATTRIBUTE1        ,
3247          p_OLD_ATTRIBUTE2                => fnd_api.g_miss_char                ,
3248          p_NEW_ATTRIBUTE2                => l_temp_party_rec.ATTRIBUTE2        ,
3249          p_OLD_ATTRIBUTE3                => fnd_api.g_miss_char                ,
3250          p_NEW_ATTRIBUTE3                => l_temp_party_rec.ATTRIBUTE3        ,
3251          p_OLD_ATTRIBUTE4                => fnd_api.g_miss_char                ,
3252          p_NEW_ATTRIBUTE4                => l_temp_party_rec.ATTRIBUTE4        ,
3253          p_OLD_ATTRIBUTE5                => fnd_api.g_miss_char                ,
3254          p_NEW_ATTRIBUTE5                => l_temp_party_rec.ATTRIBUTE5        ,
3255          p_OLD_ATTRIBUTE6                => fnd_api.g_miss_char                ,
3256          p_NEW_ATTRIBUTE6                => l_temp_party_rec.ATTRIBUTE6        ,
3257          p_OLD_ATTRIBUTE7                => fnd_api.g_miss_char                ,
3258          p_NEW_ATTRIBUTE7                => l_temp_party_rec.ATTRIBUTE7        ,
3259          p_OLD_ATTRIBUTE8                => fnd_api.g_miss_char                ,
3260          p_NEW_ATTRIBUTE8                => l_temp_party_rec.ATTRIBUTE8        ,
3261          p_OLD_ATTRIBUTE9                => fnd_api.g_miss_char                ,
3262          p_NEW_ATTRIBUTE9                => l_temp_party_rec.ATTRIBUTE9        ,
3263          p_OLD_ATTRIBUTE10               => fnd_api.g_miss_char                ,
3264          p_NEW_ATTRIBUTE10               => l_temp_party_rec.ATTRIBUTE10       ,
3265          p_OLD_ATTRIBUTE11               => fnd_api.g_miss_char                ,
3266          p_NEW_ATTRIBUTE11               => l_temp_party_rec.ATTRIBUTE11       ,
3267          p_OLD_ATTRIBUTE12               => fnd_api.g_miss_char                ,
3268          p_NEW_ATTRIBUTE12               => l_temp_party_rec.ATTRIBUTE12       ,
3269          p_OLD_ATTRIBUTE13               => fnd_api.g_miss_char                ,
3270          p_NEW_ATTRIBUTE13               => l_temp_party_rec.ATTRIBUTE13       ,
3271          p_OLD_ATTRIBUTE14               => fnd_api.g_miss_char                ,
3272          p_NEW_ATTRIBUTE14               => l_temp_party_rec.ATTRIBUTE14       ,
3273          p_OLD_ATTRIBUTE15               => fnd_api.g_miss_char                ,
3274          p_NEW_ATTRIBUTE15               => l_temp_party_rec.ATTRIBUTE15       ,
3275          p_FULL_DUMP_FLAG                => fnd_api.g_miss_char                ,
3276          p_CREATED_BY                    => FND_API.G_MISS_NUM                 ,
3277          p_CREATION_DATE                 => FND_API.G_MISS_DATE                ,
3278          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                 ,
3279          p_LAST_UPDATE_DATE              => SYSDATE                            ,
3280          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID                ,
3281          p_OBJECT_VERSION_NUMBER         => fnd_api.g_miss_num                 ,
3282          p_OLD_PRIMARY_FLAG              => fnd_api.g_miss_char                ,
3283          p_NEW_PRIMARY_FLAG              => l_temp_party_rec.PRIMARY_FLAG      ,
3284          p_OLD_PREFERRED_FLAG            => fnd_api.g_miss_char                ,
3285          p_NEW_PREFERRED_FLAG            => l_temp_party_rec.PREFERRED_FLAG      );
3286 
3287         ELSE
3288 
3289              IF    ( l_pty_hist_csr.old_party_source_table IS NULL
3290                 AND  l_pty_hist_csr.new_party_source_table IS NULL ) THEN
3291                      IF  ( l_temp_party_rec.party_source_table = l_curr_party_rec.party_source_table )
3292                       OR ( l_temp_party_rec.party_source_table = fnd_api.g_miss_char ) THEN
3293                            l_pty_hist_csr.old_party_source_table := NULL;
3294                            l_pty_hist_csr.new_party_source_table := NULL;
3295                      ELSE
3296                            l_pty_hist_csr.old_party_source_table := fnd_api.g_miss_char;
3297                            l_pty_hist_csr.new_party_source_table := l_temp_party_rec.party_source_table;
3298                      END IF;
3299              ELSE
3300                      l_pty_hist_csr.old_party_source_table := fnd_api.g_miss_char;
3301                      l_pty_hist_csr.new_party_source_table := l_temp_party_rec.party_source_table;
3302              END IF;
3303              --
3304              IF    ( l_pty_hist_csr.old_party_id IS NULL
3305                 AND  l_pty_hist_csr.new_party_id IS NULL ) THEN
3306                      IF  ( l_temp_party_rec.party_id = l_curr_party_rec.party_id )
3307                       OR ( l_temp_party_rec.party_id = fnd_api.g_miss_num ) THEN
3308                            l_pty_hist_csr.old_party_id := NULL;
3309                            l_pty_hist_csr.new_party_id := NULL;
3310                      ELSE
3311                            l_pty_hist_csr.old_party_id := fnd_api.g_miss_num;
3312                            l_pty_hist_csr.new_party_id := l_temp_party_rec.party_id;
3313                      END IF;
3314              ELSE
3315                      l_pty_hist_csr.old_party_id := fnd_api.g_miss_num;
3316                      l_pty_hist_csr.new_party_id := l_temp_party_rec.party_id;
3317              END IF;
3318              --
3319              IF    ( l_pty_hist_csr.old_relationship_type_code IS NULL
3320                 AND  l_pty_hist_csr.new_relationship_type_code IS NULL ) THEN
3321                      IF  ( l_temp_party_rec.relationship_type_code = l_curr_party_rec.relationship_type_code )
3322                       OR ( l_temp_party_rec.relationship_type_code = fnd_api.g_miss_char ) THEN
3323                            l_pty_hist_csr.old_relationship_type_code := NULL;
3324                            l_pty_hist_csr.new_relationship_type_code := NULL;
3325                      ELSE
3326                            l_pty_hist_csr.old_relationship_type_code := fnd_api.g_miss_char;
3327                            l_pty_hist_csr.new_relationship_type_code := l_temp_party_rec.relationship_type_code;
3328                      END IF;
3329              ELSE
3330                      l_pty_hist_csr.old_relationship_type_code := fnd_api.g_miss_char;
3331                      l_pty_hist_csr.new_relationship_type_code := l_temp_party_rec.relationship_type_code;
3332              END IF;
3333              --
3334              IF    ( l_pty_hist_csr.old_contact_flag IS NULL
3335                 AND  l_pty_hist_csr.new_contact_flag IS NULL ) THEN
3336                      IF  ( l_temp_party_rec.contact_flag = l_curr_party_rec.contact_flag )
3337                       OR ( l_temp_party_rec.contact_flag = fnd_api.g_miss_char ) THEN
3338                            l_pty_hist_csr.old_contact_flag := NULL;
3339                            l_pty_hist_csr.new_contact_flag := NULL;
3340                      ELSE
3341                            l_pty_hist_csr.old_contact_flag := fnd_api.g_miss_char;
3342                            l_pty_hist_csr.new_contact_flag := l_temp_party_rec.contact_flag;
3343                      END IF;
3344              ELSE
3345                      l_pty_hist_csr.old_contact_flag := fnd_api.g_miss_char;
3346                      l_pty_hist_csr.new_contact_flag := l_temp_party_rec.contact_flag;
3347              END IF;
3348              --
3349              IF    ( l_pty_hist_csr.old_contact_ip_id IS NULL
3350                 AND  l_pty_hist_csr.new_contact_ip_id IS NULL ) THEN
3351                      IF  ( l_temp_party_rec.contact_ip_id = l_curr_party_rec.contact_ip_id )
3352                       OR ( l_temp_party_rec.contact_ip_id = fnd_api.g_miss_num ) THEN
3353                            l_pty_hist_csr.old_contact_ip_id := NULL;
3354                            l_pty_hist_csr.new_contact_ip_id := NULL;
3355                      ELSE
3356                            l_pty_hist_csr.old_contact_ip_id := fnd_api.g_miss_num;
3357                            l_pty_hist_csr.new_contact_ip_id := l_temp_party_rec.contact_ip_id;
3358                      END IF;
3359              ELSE
3360                      l_pty_hist_csr.old_contact_ip_id := fnd_api.g_miss_num;
3361                      l_pty_hist_csr.new_contact_ip_id := l_temp_party_rec.contact_ip_id;
3362              END IF;
3363              --
3364              IF    ( l_pty_hist_csr.old_active_start_date IS NULL
3365                 AND  l_pty_hist_csr.new_active_start_date IS NULL ) THEN
3366                      IF  ( l_temp_party_rec.active_start_date = l_curr_party_rec.active_start_date )
3367                       OR ( l_temp_party_rec.active_start_date = fnd_api.g_miss_date ) THEN
3368                            l_pty_hist_csr.old_active_start_date := NULL;
3369                            l_pty_hist_csr.new_active_start_date := NULL;
3370                      ELSE
3371                            l_pty_hist_csr.old_active_start_date := fnd_api.g_miss_date;
3372                            l_pty_hist_csr.new_active_start_date := l_temp_party_rec.active_start_date;
3373                      END IF;
3374              ELSE
3375                      l_pty_hist_csr.old_active_start_date := fnd_api.g_miss_date;
3376                      l_pty_hist_csr.new_active_start_date := l_temp_party_rec.active_start_date;
3377              END IF;
3378              --
3379              IF    ( l_pty_hist_csr.old_active_end_date IS NULL
3380                 AND  l_pty_hist_csr.new_active_end_date IS NULL ) THEN
3381                      IF  ( l_temp_party_rec.active_end_date = l_curr_party_rec.active_end_date )
3382                       OR ( l_temp_party_rec.active_end_date = fnd_api.g_miss_date ) THEN
3383                            l_pty_hist_csr.old_active_end_date := NULL;
3384                            l_pty_hist_csr.new_active_end_date := NULL;
3385                      ELSE
3386                            l_pty_hist_csr.old_active_end_date := fnd_api.g_miss_date;
3387                            l_pty_hist_csr.new_active_end_date := l_temp_party_rec.active_end_date;
3388                      END IF;
3389              ELSE
3390                      l_pty_hist_csr.old_active_end_date := fnd_api.g_miss_date;
3391                      l_pty_hist_csr.new_active_end_date := l_temp_party_rec.active_end_date;
3392              END IF;
3393              --
3394              IF    ( l_pty_hist_csr.old_context IS NULL
3395                 AND  l_pty_hist_csr.new_context IS NULL ) THEN
3396                      IF  ( l_temp_party_rec.context = l_curr_party_rec.context )
3397                       OR ( l_temp_party_rec.context = fnd_api.g_miss_char ) THEN
3398                            l_pty_hist_csr.old_context := NULL;
3399                            l_pty_hist_csr.new_context := NULL;
3400                      ELSE
3401                            l_pty_hist_csr.old_context := fnd_api.g_miss_char;
3402                            l_pty_hist_csr.new_context := l_temp_party_rec.context;
3403                      END IF;
3404              ELSE
3405                      l_pty_hist_csr.old_context := fnd_api.g_miss_char;
3406                      l_pty_hist_csr.new_context := l_temp_party_rec.context;
3407              END IF;
3408              --
3409              IF    ( l_pty_hist_csr.old_attribute1 IS NULL
3410                 AND  l_pty_hist_csr.new_attribute1 IS NULL ) THEN
3411                      IF  ( l_temp_party_rec.attribute1 = l_curr_party_rec.attribute1 )
3412                       OR ( l_temp_party_rec.attribute1 = fnd_api.g_miss_char ) THEN
3413                            l_pty_hist_csr.old_attribute1 := NULL;
3414                            l_pty_hist_csr.new_attribute1 := NULL;
3415                      ELSE
3416                            l_pty_hist_csr.old_attribute1 := fnd_api.g_miss_char;
3417                            l_pty_hist_csr.new_attribute1 := l_temp_party_rec.attribute1;
3418                      END IF;
3419              ELSE
3420                      l_pty_hist_csr.old_attribute1 := fnd_api.g_miss_char;
3421                      l_pty_hist_csr.new_attribute1 := l_temp_party_rec.attribute1;
3422              END IF;
3423              --
3424              IF    ( l_pty_hist_csr.old_attribute2 IS NULL
3425                 AND  l_pty_hist_csr.new_attribute2 IS NULL ) THEN
3426                      IF  ( l_temp_party_rec.attribute2 = l_curr_party_rec.attribute2 )
3427                       OR ( l_temp_party_rec.attribute2 = fnd_api.g_miss_char ) THEN
3428                            l_pty_hist_csr.old_attribute2 := NULL;
3429                            l_pty_hist_csr.new_attribute2 := NULL;
3430                      ELSE
3431                            l_pty_hist_csr.old_attribute2 := fnd_api.g_miss_char;
3432                            l_pty_hist_csr.new_attribute2 := l_temp_party_rec.attribute2;
3433                      END IF;
3434              ELSE
3435                      l_pty_hist_csr.old_attribute2 := fnd_api.g_miss_char;
3436                      l_pty_hist_csr.new_attribute2 := l_temp_party_rec.attribute2;
3437              END IF;
3438              --
3439              IF    ( l_pty_hist_csr.old_attribute3 IS NULL
3440                 AND  l_pty_hist_csr.new_attribute3 IS NULL ) THEN
3441                      IF  ( l_temp_party_rec.attribute3 = l_curr_party_rec.attribute3 )
3442                       OR ( l_temp_party_rec.attribute3 = fnd_api.g_miss_char ) THEN
3443                            l_pty_hist_csr.old_attribute3 := NULL;
3444                            l_pty_hist_csr.new_attribute3 := NULL;
3445                      ELSE
3446                            l_pty_hist_csr.old_attribute3 := fnd_api.g_miss_char;
3447                            l_pty_hist_csr.new_attribute3 := l_temp_party_rec.attribute3;
3448                      END IF;
3449              ELSE
3450                      l_pty_hist_csr.old_attribute3 := fnd_api.g_miss_char;
3451                      l_pty_hist_csr.new_attribute3 := l_temp_party_rec.attribute3;
3452              END IF;
3453              --
3454              IF    ( l_pty_hist_csr.old_attribute4 IS NULL
3455                 AND  l_pty_hist_csr.new_attribute4 IS NULL ) THEN
3456                      IF  ( l_temp_party_rec.attribute4 = l_curr_party_rec.attribute4 )
3457                       OR ( l_temp_party_rec.attribute4 = fnd_api.g_miss_char ) THEN
3458                            l_pty_hist_csr.old_attribute4 := NULL;
3459                            l_pty_hist_csr.new_attribute4 := NULL;
3460                      ELSE
3461                            l_pty_hist_csr.old_attribute4 := fnd_api.g_miss_char;
3462                            l_pty_hist_csr.new_attribute4 := l_temp_party_rec.attribute4;
3463                      END IF;
3464              ELSE
3465                      l_pty_hist_csr.old_attribute4 := fnd_api.g_miss_char;
3466                      l_pty_hist_csr.new_attribute4 := l_temp_party_rec.attribute4;
3467              END IF;
3468              --
3469              IF    ( l_pty_hist_csr.old_attribute5 IS NULL
3470                 AND  l_pty_hist_csr.new_attribute5 IS NULL ) THEN
3471                      IF  ( l_temp_party_rec.attribute5 = l_curr_party_rec.attribute5 )
3472                       OR ( l_temp_party_rec.attribute5 = fnd_api.g_miss_char ) THEN
3473                            l_pty_hist_csr.old_attribute5 := NULL;
3474                            l_pty_hist_csr.new_attribute5 := NULL;
3475                      ELSE
3476                            l_pty_hist_csr.old_attribute5 := fnd_api.g_miss_char;
3477                            l_pty_hist_csr.new_attribute5 := l_temp_party_rec.attribute5;
3478                      END IF;
3479              ELSE
3480                      l_pty_hist_csr.old_attribute5 := fnd_api.g_miss_char;
3481                      l_pty_hist_csr.new_attribute5 := l_temp_party_rec.attribute5;
3482              END IF;
3483              --
3484              IF    ( l_pty_hist_csr.old_attribute6 IS NULL
3485                 AND  l_pty_hist_csr.new_attribute6 IS NULL ) THEN
3486                      IF  ( l_temp_party_rec.attribute6 = l_curr_party_rec.attribute6 )
3487                       OR ( l_temp_party_rec.attribute6 = fnd_api.g_miss_char ) THEN
3488                            l_pty_hist_csr.old_attribute6 := NULL;
3489                            l_pty_hist_csr.new_attribute6 := NULL;
3490                      ELSE
3491                            l_pty_hist_csr.old_attribute6 := fnd_api.g_miss_char;
3492                            l_pty_hist_csr.new_attribute6 := l_temp_party_rec.attribute6;
3493                      END IF;
3494              ELSE
3495                      l_pty_hist_csr.old_attribute6 := fnd_api.g_miss_char;
3496                      l_pty_hist_csr.new_attribute6 := l_temp_party_rec.attribute6;
3497              END IF;
3498              --
3499              IF    ( l_pty_hist_csr.old_attribute7 IS NULL
3500                 AND  l_pty_hist_csr.new_attribute7 IS NULL ) THEN
3501                      IF  ( l_temp_party_rec.attribute7 = l_curr_party_rec.attribute7 )
3502                       OR ( l_temp_party_rec.attribute7 = fnd_api.g_miss_char ) THEN
3503                            l_pty_hist_csr.old_attribute7 := NULL;
3504                            l_pty_hist_csr.new_attribute7 := NULL;
3505                      ELSE
3506                            l_pty_hist_csr.old_attribute7 := fnd_api.g_miss_char;
3507                            l_pty_hist_csr.new_attribute7 := l_temp_party_rec.attribute7;
3508                      END IF;
3509              ELSE
3510                      l_pty_hist_csr.old_attribute7 := fnd_api.g_miss_char;
3511                      l_pty_hist_csr.new_attribute7 := l_temp_party_rec.attribute7;
3512              END IF;
3513              --
3514              IF    ( l_pty_hist_csr.old_attribute8 IS NULL
3515                 AND  l_pty_hist_csr.new_attribute8 IS NULL ) THEN
3516                      IF  ( l_temp_party_rec.attribute8 = l_curr_party_rec.attribute8 )
3517                       OR ( l_temp_party_rec.attribute8 = fnd_api.g_miss_char ) THEN
3518                            l_pty_hist_csr.old_attribute8 := NULL;
3519                            l_pty_hist_csr.new_attribute8 := NULL;
3520                      ELSE
3521                            l_pty_hist_csr.old_attribute8 := fnd_api.g_miss_char;
3522                            l_pty_hist_csr.new_attribute8 := l_temp_party_rec.attribute8;
3523                      END IF;
3524              ELSE
3525                      l_pty_hist_csr.old_attribute8 := fnd_api.g_miss_char;
3526                      l_pty_hist_csr.new_attribute8 := l_temp_party_rec.attribute8;
3527              END IF;
3528              --
3529              IF    ( l_pty_hist_csr.old_attribute9 IS NULL
3530                 AND  l_pty_hist_csr.new_attribute9 IS NULL ) THEN
3531                      IF  ( l_temp_party_rec.attribute9 = l_curr_party_rec.attribute9 )
3532                       OR ( l_temp_party_rec.attribute9 = fnd_api.g_miss_char ) THEN
3533                            l_pty_hist_csr.old_attribute9 := NULL;
3534                            l_pty_hist_csr.new_attribute9 := NULL;
3535                      ELSE
3536                            l_pty_hist_csr.old_attribute9 := fnd_api.g_miss_char;
3537                            l_pty_hist_csr.new_attribute9 := l_temp_party_rec.attribute9;
3538                      END IF;
3539              ELSE
3540                      l_pty_hist_csr.old_attribute9 := fnd_api.g_miss_char;
3541                      l_pty_hist_csr.new_attribute9 := l_temp_party_rec.attribute9;
3542              END IF;
3543              --
3544              IF    ( l_pty_hist_csr.old_attribute10 IS NULL
3545                 AND  l_pty_hist_csr.new_attribute10 IS NULL ) THEN
3546                      IF  ( l_temp_party_rec.attribute10 = l_curr_party_rec.attribute10 )
3547                       OR ( l_temp_party_rec.attribute10 = fnd_api.g_miss_char ) THEN
3548                            l_pty_hist_csr.old_attribute10 := NULL;
3549                            l_pty_hist_csr.new_attribute10 := NULL;
3550                      ELSE
3551                            l_pty_hist_csr.old_attribute10 := fnd_api.g_miss_char;
3552                            l_pty_hist_csr.new_attribute10 := l_temp_party_rec.attribute10;
3553                      END IF;
3554              ELSE
3555                      l_pty_hist_csr.old_attribute10 := fnd_api.g_miss_char;
3556                      l_pty_hist_csr.new_attribute10 := l_temp_party_rec.attribute10;
3557              END IF;
3558              --
3559              IF    ( l_pty_hist_csr.old_attribute11 IS NULL
3560                 AND  l_pty_hist_csr.new_attribute11 IS NULL ) THEN
3561                      IF  ( l_temp_party_rec.attribute11 = l_curr_party_rec.attribute11 )
3562                       OR ( l_temp_party_rec.attribute11 = fnd_api.g_miss_char ) THEN
3563                            l_pty_hist_csr.old_attribute11 := NULL;
3564                            l_pty_hist_csr.new_attribute11 := NULL;
3565                      ELSE
3566                            l_pty_hist_csr.old_attribute11 := fnd_api.g_miss_char;
3567                            l_pty_hist_csr.new_attribute11 := l_temp_party_rec.attribute11;
3568                      END IF;
3569              ELSE
3570                      l_pty_hist_csr.old_attribute11 := fnd_api.g_miss_char;
3571                      l_pty_hist_csr.new_attribute11 := l_temp_party_rec.attribute11;
3572              END IF;
3573              --
3574              IF    ( l_pty_hist_csr.old_attribute12 IS NULL
3575                 AND  l_pty_hist_csr.new_attribute12 IS NULL ) THEN
3576                      IF  ( l_temp_party_rec.attribute12 = l_curr_party_rec.attribute12 )
3577                       OR ( l_temp_party_rec.attribute12 = fnd_api.g_miss_char ) THEN
3578                            l_pty_hist_csr.old_attribute12 := NULL;
3579                            l_pty_hist_csr.new_attribute12 := NULL;
3580                      ELSE
3581                            l_pty_hist_csr.old_attribute12 := fnd_api.g_miss_char;
3582                            l_pty_hist_csr.new_attribute12 := l_temp_party_rec.attribute12;
3583                      END IF;
3584              ELSE
3585                      l_pty_hist_csr.old_attribute12 := fnd_api.g_miss_char;
3586                      l_pty_hist_csr.new_attribute12 := l_temp_party_rec.attribute12;
3587              END IF;
3588              --
3589              IF    ( l_pty_hist_csr.old_attribute13 IS NULL
3590                 AND  l_pty_hist_csr.new_attribute13 IS NULL ) THEN
3591                      IF  ( l_temp_party_rec.attribute13 = l_curr_party_rec.attribute13 )
3592                       OR ( l_temp_party_rec.attribute13 = fnd_api.g_miss_char ) THEN
3593                            l_pty_hist_csr.old_attribute13 := NULL;
3594                            l_pty_hist_csr.new_attribute13 := NULL;
3595                      ELSE
3596                            l_pty_hist_csr.old_attribute13 := fnd_api.g_miss_char;
3597                            l_pty_hist_csr.new_attribute13 := l_temp_party_rec.attribute13;
3598                      END IF;
3599              ELSE
3600                      l_pty_hist_csr.old_attribute13 := fnd_api.g_miss_char;
3601                      l_pty_hist_csr.new_attribute13 := l_temp_party_rec.attribute13;
3602              END IF;
3603              --
3604              IF    ( l_pty_hist_csr.old_attribute14 IS NULL
3605                 AND  l_pty_hist_csr.new_attribute14 IS NULL ) THEN
3606                      IF  ( l_temp_party_rec.attribute14 = l_curr_party_rec.attribute14 )
3607                       OR ( l_temp_party_rec.attribute14 = fnd_api.g_miss_char ) THEN
3608                            l_pty_hist_csr.old_attribute14 := NULL;
3609                            l_pty_hist_csr.new_attribute14 := NULL;
3610                      ELSE
3611                            l_pty_hist_csr.old_attribute14 := fnd_api.g_miss_char;
3612                            l_pty_hist_csr.new_attribute14 := l_temp_party_rec.attribute14;
3613                      END IF;
3614              ELSE
3615                      l_pty_hist_csr.old_attribute14 := fnd_api.g_miss_char;
3616                      l_pty_hist_csr.new_attribute14 := l_temp_party_rec.attribute14;
3617              END IF;
3618              --
3619              IF    ( l_pty_hist_csr.old_attribute15 IS NULL
3620                 AND  l_pty_hist_csr.new_attribute15 IS NULL ) THEN
3621                      IF  ( l_temp_party_rec.attribute15 = l_curr_party_rec.attribute15 )
3622                       OR ( l_temp_party_rec.attribute15 = fnd_api.g_miss_char ) THEN
3623                            l_pty_hist_csr.old_attribute15 := NULL;
3624                            l_pty_hist_csr.new_attribute15 := NULL;
3625                      ELSE
3626                            l_pty_hist_csr.old_attribute15 := fnd_api.g_miss_char;
3627                            l_pty_hist_csr.new_attribute15 := l_temp_party_rec.attribute15;
3628                      END IF;
3629              ELSE
3630                      l_pty_hist_csr.old_attribute15 := fnd_api.g_miss_char;
3631                      l_pty_hist_csr.new_attribute15 := l_temp_party_rec.attribute15;
3632              END IF;
3633              --
3634              IF    ( l_pty_hist_csr.old_primary_flag IS NULL
3635                 AND  l_pty_hist_csr.new_primary_flag IS NULL ) THEN
3636                      IF  ( l_temp_party_rec.primary_flag = l_curr_party_rec.primary_flag )
3637                       OR ( l_temp_party_rec.primary_flag = fnd_api.g_miss_char ) THEN
3638                            l_pty_hist_csr.old_primary_flag := NULL;
3639                            l_pty_hist_csr.new_primary_flag := NULL;
3640                      ELSE
3641                            l_pty_hist_csr.old_primary_flag := fnd_api.g_miss_char;
3642                            l_pty_hist_csr.new_primary_flag := l_temp_party_rec.primary_flag;
3643                      END IF;
3644              ELSE
3645                      l_pty_hist_csr.old_primary_flag := fnd_api.g_miss_char;
3646                      l_pty_hist_csr.new_primary_flag := l_temp_party_rec.primary_flag;
3647              END IF;
3648              --
3649              IF    ( l_pty_hist_csr.old_preferred_flag IS NULL
3650                 AND  l_pty_hist_csr.new_preferred_flag IS NULL ) THEN
3651                      IF  ( l_temp_party_rec.preferred_flag = l_curr_party_rec.preferred_flag )
3652                       OR ( l_temp_party_rec.preferred_flag = fnd_api.g_miss_char ) THEN
3653                            l_pty_hist_csr.old_preferred_flag := NULL;
3654                            l_pty_hist_csr.new_preferred_flag := NULL;
3655                      ELSE
3656                            l_pty_hist_csr.old_preferred_flag := fnd_api.g_miss_char;
3657                            l_pty_hist_csr.new_preferred_flag := l_temp_party_rec.preferred_flag;
3658                      END IF;
3659              ELSE
3660                      l_pty_hist_csr.old_preferred_flag := fnd_api.g_miss_char;
3661                      l_pty_hist_csr.new_preferred_flag := l_temp_party_rec.preferred_flag;
3662              END IF;
3663 
3664          CSI_I_PARTIES_H_PKG.update_Row
3665         (
3666          p_INSTANCE_PARTY_HISTORY_ID     => l_party_hist_id ,
3667          p_INSTANCE_PARTY_ID             => FND_API.G_MISS_NUM ,
3668          p_TRANSACTION_ID                => FND_API.G_MISS_NUM ,
3669          p_OLD_PARTY_SOURCE_TABLE        => l_pty_hist_csr.OLD_PARTY_SOURCE_TABLE ,
3670          p_NEW_PARTY_SOURCE_TABLE        => l_pty_hist_csr.NEW_PARTY_SOURCE_TABLE ,
3671          p_OLD_PARTY_ID                  => l_pty_hist_csr.OLD_PARTY_ID ,
3672          p_NEW_PARTY_ID                  => l_pty_hist_csr.NEW_PARTY_ID ,
3673          p_OLD_RELATIONSHIP_TYPE_CODE    => l_pty_hist_csr.OLD_RELATIONSHIP_TYPE_CODE ,
3674          p_NEW_RELATIONSHIP_TYPE_CODE    => l_pty_hist_csr.NEW_RELATIONSHIP_TYPE_CODE ,
3675          p_OLD_CONTACT_FLAG              => l_pty_hist_csr.OLD_CONTACT_FLAG ,
3676          p_NEW_CONTACT_FLAG              => l_pty_hist_csr.NEW_CONTACT_FLAG ,
3677          p_OLD_CONTACT_IP_ID             => l_pty_hist_csr.OLD_CONTACT_IP_ID ,
3678          p_NEW_CONTACT_IP_ID             => l_pty_hist_csr.NEW_CONTACT_IP_ID ,
3679          p_OLD_ACTIVE_START_DATE         => l_pty_hist_csr.OLD_ACTIVE_START_DATE ,
3680          p_NEW_ACTIVE_START_DATE         => l_pty_hist_csr.NEW_ACTIVE_START_DATE ,
3681          p_OLD_ACTIVE_END_DATE           => l_pty_hist_csr.OLD_ACTIVE_END_DATE ,
3682          p_NEW_ACTIVE_END_DATE           => l_pty_hist_csr.NEW_ACTIVE_END_DATE ,
3683          p_OLD_CONTEXT                   => l_pty_hist_csr.OLD_CONTEXT ,
3684          p_NEW_CONTEXT                   => l_pty_hist_csr.NEW_CONTEXT ,
3685          p_OLD_ATTRIBUTE1                => l_pty_hist_csr.OLD_ATTRIBUTE1 ,
3686          p_NEW_ATTRIBUTE1                => l_pty_hist_csr.NEW_ATTRIBUTE1 ,
3687          p_OLD_ATTRIBUTE2                => l_pty_hist_csr.OLD_ATTRIBUTE2 ,
3688          p_NEW_ATTRIBUTE2                => l_pty_hist_csr.NEW_ATTRIBUTE2 ,
3689          p_OLD_ATTRIBUTE3                => l_pty_hist_csr.OLD_ATTRIBUTE3 ,
3690          p_NEW_ATTRIBUTE3                => l_pty_hist_csr.NEW_ATTRIBUTE3 ,
3691          p_OLD_ATTRIBUTE4                => l_pty_hist_csr.OLD_ATTRIBUTE4 ,
3692          p_NEW_ATTRIBUTE4                => l_pty_hist_csr.NEW_ATTRIBUTE4 ,
3693          p_OLD_ATTRIBUTE5                => l_pty_hist_csr.OLD_ATTRIBUTE5 ,
3694          p_NEW_ATTRIBUTE5                => l_pty_hist_csr.NEW_ATTRIBUTE5 ,
3695          p_OLD_ATTRIBUTE6                => l_pty_hist_csr.OLD_ATTRIBUTE6 ,
3696          p_NEW_ATTRIBUTE6                => l_pty_hist_csr.NEW_ATTRIBUTE6 ,
3697          p_OLD_ATTRIBUTE7                => l_pty_hist_csr.OLD_ATTRIBUTE7 ,
3698          p_NEW_ATTRIBUTE7                => l_pty_hist_csr.NEW_ATTRIBUTE7 ,
3699          p_OLD_ATTRIBUTE8                => l_pty_hist_csr.OLD_ATTRIBUTE8 ,
3700          p_NEW_ATTRIBUTE8                => l_pty_hist_csr.NEW_ATTRIBUTE8 ,
3701          p_OLD_ATTRIBUTE9                => l_pty_hist_csr.OLD_ATTRIBUTE9 ,
3702          p_NEW_ATTRIBUTE9                => l_pty_hist_csr.NEW_ATTRIBUTE9 ,
3703          p_OLD_ATTRIBUTE10               => l_pty_hist_csr.OLD_ATTRIBUTE10 ,
3704          p_NEW_ATTRIBUTE10               => l_pty_hist_csr.NEW_ATTRIBUTE10 ,
3705          p_OLD_ATTRIBUTE11               => l_pty_hist_csr.OLD_ATTRIBUTE11 ,
3706          p_NEW_ATTRIBUTE11               => l_pty_hist_csr.NEW_ATTRIBUTE11 ,
3707          p_OLD_ATTRIBUTE12               => l_pty_hist_csr.OLD_ATTRIBUTE12 ,
3708          p_NEW_ATTRIBUTE12               => l_pty_hist_csr.NEW_ATTRIBUTE12 ,
3709          p_OLD_ATTRIBUTE13               => l_pty_hist_csr.OLD_ATTRIBUTE13 ,
3710          p_NEW_ATTRIBUTE13               => l_pty_hist_csr.NEW_ATTRIBUTE13 ,
3711          p_OLD_ATTRIBUTE14               => l_pty_hist_csr.OLD_ATTRIBUTE14 ,
3712          p_NEW_ATTRIBUTE14               => l_pty_hist_csr.NEW_ATTRIBUTE14 ,
3713          p_OLD_ATTRIBUTE15               => l_pty_hist_csr.OLD_ATTRIBUTE15 ,
3714          p_NEW_ATTRIBUTE15               => l_pty_hist_csr.NEW_ATTRIBUTE15 ,
3715          p_FULL_DUMP_FLAG                => FND_API.G_MISS_CHAR ,
3716          p_CREATED_BY                    => FND_API.G_MISS_NUM ,
3717          p_CREATION_DATE                 => FND_API.G_MISS_DATE ,
3718          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID ,
3719          p_LAST_UPDATE_DATE              => SYSDATE ,
3720          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID ,
3721          p_OBJECT_VERSION_NUMBER         => FND_API.G_MISS_NUM ,
3722          p_OLD_PRIMARY_FLAG              => l_pty_hist_csr.OLD_CONTACT_FLAG ,
3723          p_NEW_PRIMARY_FLAG              => l_pty_hist_csr.NEW_PRIMARY_FLAG ,
3724          p_OLD_PREFERRED_FLAG            => l_pty_hist_csr.OLD_CONTACT_FLAG ,
3725          p_NEW_PREFERRED_FLAG            => l_pty_hist_csr.NEW_PREFERRED_FLAG );
3726 
3727         END IF;
3728      EXCEPTION
3729 
3730        WHEN NO_DATA_FOUND THEN
3731         IF (l_mod_value = 0) THEN
3732           -- If the mod value is 0 then dump all the columns both changed and unchanged
3733           -- changed columns have old and new values while the unchanged values have old and new values
3734           -- exactly same
3735           IF (p_party_rec.PARTY_SOURCE_TABLE = FND_API.G_MISS_CHAR) THEN
3736               l_temp_party_rec.PARTY_SOURCE_TABLE := l_curr_party_rec.PARTY_SOURCE_TABLE;
3737           END IF;
3738           IF (p_party_rec.PARTY_ID = FND_API.G_MISS_NUM) THEN
3739               l_temp_party_rec.PARTY_ID := l_curr_party_rec.PARTY_ID ;
3740           END IF;
3741           IF (p_party_rec.RELATIONSHIP_TYPE_CODE = FND_API.G_MISS_CHAR) THEN
3742               l_temp_party_rec.RELATIONSHIP_TYPE_CODE := l_curr_party_rec.RELATIONSHIP_TYPE_CODE ;
3743           END IF;
3744           IF (p_party_rec.CONTACT_FLAG = FND_API.G_MISS_CHAR) THEN
3745               l_temp_party_rec.CONTACT_FLAG := l_curr_party_rec.CONTACT_FLAG ;
3746           END IF;
3747           IF (p_party_rec.CONTACT_IP_ID = FND_API.G_MISS_NUM) THEN
3748               l_temp_party_rec.CONTACT_IP_ID := l_curr_party_rec.CONTACT_IP_ID ;
3749           END IF;
3750           IF (p_party_rec.ACTIVE_START_DATE = FND_API.G_MISS_DATE) THEN
3751               l_temp_party_rec.ACTIVE_START_DATE := l_curr_party_rec.ACTIVE_START_DATE ;
3752           END IF;
3753           IF  (p_party_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE) THEN
3754               l_temp_party_rec.ACTIVE_END_DATE := l_curr_party_rec.ACTIVE_END_DATE ;
3755           END IF;
3756           IF  (p_party_rec.context = FND_API.G_MISS_CHAR) THEN
3757               l_temp_party_rec.CONTEXT := l_curr_party_rec.CONTEXT ;
3758           END IF;
3759           IF  (p_party_rec.ATTRIBUTE1 = FND_API.G_MISS_CHAR) THEN
3760               l_temp_party_rec.ATTRIBUTE1 := l_curr_party_rec.ATTRIBUTE1 ;
3761           END IF;
3762           IF  (p_party_rec.ATTRIBUTE2 = FND_API.G_MISS_CHAR) THEN
3763               l_temp_party_rec.ATTRIBUTE2 := l_curr_party_rec.ATTRIBUTE2 ;
3764           END IF;
3765           IF  (p_party_rec.ATTRIBUTE3 = FND_API.G_MISS_CHAR) THEN
3766               l_temp_party_rec.ATTRIBUTE3 := l_curr_party_rec.ATTRIBUTE3 ;
3767           END IF;
3768           IF  (p_party_rec.ATTRIBUTE4 = FND_API.G_MISS_CHAR) THEN
3769               l_temp_party_rec.ATTRIBUTE4 := l_curr_party_rec.ATTRIBUTE4 ;
3770           END IF;
3771           IF  (p_party_rec.ATTRIBUTE5 = FND_API.G_MISS_CHAR) THEN
3772               l_temp_party_rec.ATTRIBUTE5 := l_curr_party_rec.ATTRIBUTE5 ;
3773           END IF;
3774           IF  (p_party_rec.ATTRIBUTE6 = FND_API.G_MISS_CHAR) THEN
3775               l_temp_party_rec.ATTRIBUTE6 := l_curr_party_rec.ATTRIBUTE6 ;
3776           END IF;
3777           IF  (p_party_rec.ATTRIBUTE7 = FND_API.G_MISS_CHAR) THEN
3778               l_temp_party_rec.ATTRIBUTE7 := l_curr_party_rec.ATTRIBUTE7 ;
3779           END IF;
3780           IF  (p_party_rec.ATTRIBUTE8 = FND_API.G_MISS_CHAR) THEN
3781               l_temp_party_rec.ATTRIBUTE8 := l_curr_party_rec.ATTRIBUTE8 ;
3782           END IF;
3783           IF  (p_party_rec.ATTRIBUTE9 = FND_API.G_MISS_CHAR) THEN
3784               l_temp_party_rec.ATTRIBUTE9 := l_curr_party_rec.ATTRIBUTE9 ;
3785           END IF;
3786           IF  (p_party_rec.ATTRIBUTE10 = FND_API.G_MISS_CHAR) THEN
3787               l_temp_party_rec.ATTRIBUTE10 := l_curr_party_rec.ATTRIBUTE10 ;
3788           END IF;
3789           IF  (p_party_rec.ATTRIBUTE11 = FND_API.G_MISS_CHAR) THEN
3790               l_temp_party_rec.ATTRIBUTE11 := l_curr_party_rec.ATTRIBUTE11 ;
3791           END IF;
3792           IF  (p_party_rec.ATTRIBUTE12 = FND_API.G_MISS_CHAR) THEN
3793               l_temp_party_rec.ATTRIBUTE12 := l_curr_party_rec.ATTRIBUTE12 ;
3794           END IF;
3795           IF  (p_party_rec.ATTRIBUTE13 = FND_API.G_MISS_CHAR) THEN
3796               l_temp_party_rec.ATTRIBUTE13 := l_curr_party_rec.ATTRIBUTE13 ;
3797           END IF;
3798           IF  (p_party_rec.ATTRIBUTE14 = FND_API.G_MISS_CHAR) THEN
3799               l_temp_party_rec.ATTRIBUTE14 := l_curr_party_rec.ATTRIBUTE14 ;
3800           END IF;
3801           IF  (p_party_rec.ATTRIBUTE15 = FND_API.G_MISS_CHAR) THEN
3802               l_temp_party_rec.ATTRIBUTE15 := l_curr_party_rec.ATTRIBUTE15 ;
3803           END IF;
3804           IF (p_party_rec.PRIMARY_FLAG = FND_API.G_MISS_CHAR) THEN
3805               l_temp_party_rec.PRIMARY_FLAG := l_curr_party_rec.PRIMARY_FLAG ;
3806           END IF;
3807           IF (p_party_rec.PREFERRED_FLAG = FND_API.G_MISS_CHAR) THEN
3808               l_temp_party_rec.PREFERRED_FLAG := l_curr_party_rec.PREFERRED_FLAG ;
3809           END IF;
3810 
3811         -- Call table handlers to insert into csi_i_parties_h table
3812         CSI_I_PARTIES_H_PKG.Insert_Row
3813         (
3814          px_INSTANCE_PARTY_HISTORY_ID    => l_inst_party_his_id                ,
3815          p_INSTANCE_PARTY_ID             => p_party_rec.INSTANCE_PARTY_ID      ,
3816          p_TRANSACTION_ID                => p_txn_rec.TRANSACTION_ID           ,
3817          p_OLD_PARTY_SOURCE_TABLE        => l_curr_party_rec.PARTY_SOURCE_TABLE,
3818          p_NEW_PARTY_SOURCE_TABLE        => l_temp_party_rec.PARTY_SOURCE_TABLE,
3819          p_OLD_PARTY_ID                  => l_curr_party_rec.PARTY_ID          ,
3820          p_NEW_PARTY_ID                  => l_temp_party_rec.PARTY_ID          ,
3821          p_OLD_RELATIONSHIP_TYPE_CODE    => l_curr_party_rec.RELATIONSHIP_TYPE_CODE,
3822          p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_rec.RELATIONSHIP_TYPE_CODE,
3823          p_OLD_CONTACT_FLAG              => l_curr_party_rec.CONTACT_FLAG     ,
3824          p_NEW_CONTACT_FLAG              => l_temp_party_rec.CONTACT_FLAG     ,
3825          p_OLD_CONTACT_IP_ID             => l_curr_party_rec.CONTACT_IP_ID    ,
3826          p_NEW_CONTACT_IP_ID             => l_temp_party_rec.CONTACT_IP_ID    ,
3827          p_OLD_ACTIVE_START_DATE         => l_curr_party_rec.ACTIVE_START_DATE,
3828          p_NEW_ACTIVE_START_DATE         => l_temp_party_rec.ACTIVE_START_DATE,
3829          p_OLD_ACTIVE_END_DATE           => l_curr_party_rec.ACTIVE_END_DATE  ,
3830          p_NEW_ACTIVE_END_DATE           => l_temp_party_rec.ACTIVE_END_DATE  ,
3831          p_OLD_CONTEXT                   => l_curr_party_rec.context          ,
3832          p_NEW_CONTEXT                   => l_temp_party_rec.context          ,
3833          p_OLD_ATTRIBUTE1                => l_curr_party_rec.ATTRIBUTE1       ,
3834          p_NEW_ATTRIBUTE1                => l_temp_party_rec.ATTRIBUTE1       ,
3835          p_OLD_ATTRIBUTE2                => l_curr_party_rec.ATTRIBUTE2       ,
3836          p_NEW_ATTRIBUTE2                => l_temp_party_rec.ATTRIBUTE2       ,
3837          p_OLD_ATTRIBUTE3                => l_curr_party_rec.ATTRIBUTE3       ,
3838          p_NEW_ATTRIBUTE3                => l_temp_party_rec.ATTRIBUTE3       ,
3839          p_OLD_ATTRIBUTE4                => l_curr_party_rec.ATTRIBUTE4       ,
3840          p_NEW_ATTRIBUTE4                => l_temp_party_rec.ATTRIBUTE4       ,
3841          p_OLD_ATTRIBUTE5                => l_curr_party_rec.ATTRIBUTE5       ,
3842          p_NEW_ATTRIBUTE5                => l_temp_party_rec.ATTRIBUTE5       ,
3843          p_OLD_ATTRIBUTE6                => l_curr_party_rec.ATTRIBUTE6       ,
3844          p_NEW_ATTRIBUTE6                => l_temp_party_rec.ATTRIBUTE6       ,
3845          p_OLD_ATTRIBUTE7                => l_curr_party_rec.ATTRIBUTE7       ,
3846          p_NEW_ATTRIBUTE7                => l_temp_party_rec.ATTRIBUTE7       ,
3847          p_OLD_ATTRIBUTE8                => l_curr_party_rec.ATTRIBUTE8       ,
3848          p_NEW_ATTRIBUTE8                => l_temp_party_rec.ATTRIBUTE8       ,
3849          p_OLD_ATTRIBUTE9                => l_curr_party_rec.ATTRIBUTE9       ,
3850          p_NEW_ATTRIBUTE9                => l_temp_party_rec.ATTRIBUTE9       ,
3851          p_OLD_ATTRIBUTE10               => l_curr_party_rec.ATTRIBUTE10      ,
3852          p_NEW_ATTRIBUTE10               => l_temp_party_rec.ATTRIBUTE10      ,
3853          p_OLD_ATTRIBUTE11               => l_curr_party_rec.ATTRIBUTE11      ,
3854          p_NEW_ATTRIBUTE11               => l_temp_party_rec.ATTRIBUTE11      ,
3855          p_OLD_ATTRIBUTE12               => l_curr_party_rec.ATTRIBUTE12      ,
3856          p_NEW_ATTRIBUTE12               => l_temp_party_rec.ATTRIBUTE12      ,
3857          p_OLD_ATTRIBUTE13               => l_curr_party_rec.ATTRIBUTE13      ,
3858          p_NEW_ATTRIBUTE13               => l_temp_party_rec.ATTRIBUTE13      ,
3859          p_OLD_ATTRIBUTE14               => l_curr_party_rec.ATTRIBUTE14      ,
3860          p_NEW_ATTRIBUTE14               => l_temp_party_rec.ATTRIBUTE14      ,
3861          p_OLD_ATTRIBUTE15               => l_curr_party_rec.ATTRIBUTE15      ,
3862          p_NEW_ATTRIBUTE15               => l_temp_party_rec.ATTRIBUTE15      ,
3863          p_FULL_DUMP_FLAG                => 'Y'                               ,
3864          p_CREATED_BY                    => FND_GLOBAL.USER_ID                ,
3865          p_CREATION_DATE                 => SYSDATE                           ,
3866          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                ,
3867          p_LAST_UPDATE_DATE              => SYSDATE                           ,
3868          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID               ,
3869          p_OBJECT_VERSION_NUMBER         => 1                                 ,
3870          p_OLD_PRIMARY_FLAG              => l_curr_party_rec.PRIMARY_FLAG     ,
3871          p_NEW_PRIMARY_FLAG              => l_temp_party_rec.PRIMARY_FLAG     ,
3872          p_OLD_PREFERRED_FLAG            => l_curr_party_rec.PREFERRED_FLAG   ,
3873          p_NEW_PREFERRED_FLAG            => l_temp_party_rec.PREFERRED_FLAG     );
3874        ELSE
3875 
3876           -- If the mod value is not equal to zero then dump only the changed columns
3877           -- while the unchanged values have old and new values as null
3878            IF (p_party_rec.party_source_table = fnd_api.g_miss_char) OR
3879                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
3880                 l_party_hist_rec.old_party_source_table := NULL;
3881                 l_party_hist_rec.new_party_source_table := NULL;
3882            ELSIF
3883               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
3884                 l_party_hist_rec.old_party_source_table := l_curr_party_rec.party_source_table ;
3885                 l_party_hist_rec.new_party_source_table := p_party_rec.party_source_table ;
3886            END IF;
3887            --
3888            IF (p_party_rec.party_id = fnd_api.g_miss_num) OR
3889                NVL(p_party_rec.party_id, fnd_api.g_miss_num) = NVL(l_curr_party_rec.party_id, fnd_api.g_miss_num) THEN
3890                 l_party_hist_rec.old_party_id := NULL;
3891                 l_party_hist_rec.new_party_id := NULL;
3892            ELSIF
3893               NVL(l_curr_party_rec.party_id,fnd_api.g_miss_num) <> NVL(p_party_rec.party_id,fnd_api.g_miss_num) THEN
3894                 l_party_hist_rec.old_party_id := l_curr_party_rec.party_id ;
3895                 l_party_hist_rec.new_party_id := p_party_rec.party_id ;
3896            END IF;
3897            --
3898            IF (p_party_rec.relationship_type_code = fnd_api.g_miss_char) OR
3899                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
3900                 l_party_hist_rec.old_relationship_type_code := NULL;
3901                 l_party_hist_rec.new_relationship_type_code := NULL;
3902            ELSIF
3903               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
3904                 l_party_hist_rec.old_relationship_type_code := l_curr_party_rec.relationship_type_code ;
3905                 l_party_hist_rec.new_relationship_type_code := p_party_rec.relationship_type_code ;
3906            END IF;
3907            --
3908            IF (p_party_rec.contact_flag = fnd_api.g_miss_char) OR
3909                NVL(p_party_rec.contact_flag, fnd_api.g_miss_char) = NVL(l_curr_party_rec.contact_flag, fnd_api.g_miss_char) THEN
3910                 l_party_hist_rec.old_contact_flag := NULL;
3911                 l_party_hist_rec.new_contact_flag := NULL;
3912            ELSIF
3913               NVL(l_curr_party_rec.contact_flag,fnd_api.g_miss_char) <> NVL(p_party_rec.contact_flag,fnd_api.g_miss_char) THEN
3914                 l_party_hist_rec.old_contact_flag := l_curr_party_rec.contact_flag ;
3915                 l_party_hist_rec.new_contact_flag := p_party_rec.contact_flag ;
3916            END IF;
3917            --
3918            IF (p_party_rec.contact_ip_id = fnd_api.g_miss_num) OR
3919                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
3920                 l_party_hist_rec.old_contact_ip_id := NULL;
3921                 l_party_hist_rec.new_contact_ip_id := NULL;
3922            ELSIF
3923               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
3924                 l_party_hist_rec.old_contact_ip_id := l_curr_party_rec.contact_ip_id ;
3925                 l_party_hist_rec.new_contact_ip_id := p_party_rec.contact_ip_id ;
3926            END IF;
3927            --
3928            IF (p_party_rec.active_start_date = fnd_api.g_miss_date) OR
3929                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
3930                 l_party_hist_rec.old_active_start_date := NULL;
3931                 l_party_hist_rec.new_active_start_date := NULL;
3932            ELSIF
3933               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
3934                 l_party_hist_rec.old_active_start_date := l_curr_party_rec.active_start_date ;
3935                 l_party_hist_rec.new_active_start_date := p_party_rec.active_start_date ;
3936            END IF;
3937            --
3938            IF (p_party_rec.active_end_date = fnd_api.g_miss_date) OR
3939                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
3940                 l_party_hist_rec.old_active_end_date := NULL;
3941                 l_party_hist_rec.new_active_end_date := NULL;
3942            ELSIF
3943               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
3944                 l_party_hist_rec.old_active_end_date := l_curr_party_rec.active_end_date ;
3945                 l_party_hist_rec.new_active_end_date := p_party_rec.active_end_date ;
3946            END IF;
3947            --
3948            IF (p_party_rec.context = fnd_api.g_miss_char) OR
3949                NVL(p_party_rec.context, fnd_api.g_miss_char) = NVL(l_curr_party_rec.context, fnd_api.g_miss_char) THEN
3950                 l_party_hist_rec.old_context := NULL;
3951                 l_party_hist_rec.new_context := NULL;
3952            ELSIF
3953               NVL(l_curr_party_rec.context,fnd_api.g_miss_char) <> NVL(p_party_rec.context,fnd_api.g_miss_char) THEN
3954                 l_party_hist_rec.old_context := l_curr_party_rec.context ;
3955                 l_party_hist_rec.new_context := p_party_rec.context ;
3956            END IF;
3957            --
3958            IF (p_party_rec.attribute1 = fnd_api.g_miss_char) OR
3959                NVL(p_party_rec.attribute1, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute1, fnd_api.g_miss_char) THEN
3960                 l_party_hist_rec.old_attribute1 := NULL;
3961                 l_party_hist_rec.new_attribute1 := NULL;
3962            ELSIF
3963               NVL(l_curr_party_rec.attribute1,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute1,fnd_api.g_miss_char) THEN
3964                 l_party_hist_rec.old_attribute1 := l_curr_party_rec.attribute1 ;
3965                 l_party_hist_rec.new_attribute1 := p_party_rec.attribute1 ;
3966            END IF;
3967            --
3968            IF (p_party_rec.attribute2 = fnd_api.g_miss_char) OR
3969                NVL(p_party_rec.attribute2, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute2, fnd_api.g_miss_char) THEN
3970                 l_party_hist_rec.old_attribute2 := NULL;
3971                 l_party_hist_rec.new_attribute2 := NULL;
3972            ELSIF
3973               NVL(l_curr_party_rec.attribute2,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute2,fnd_api.g_miss_char) THEN
3974                 l_party_hist_rec.old_attribute2 := l_curr_party_rec.attribute2 ;
3975                 l_party_hist_rec.new_attribute2 := p_party_rec.attribute2 ;
3976            END IF;
3977            --
3978            IF (p_party_rec.attribute3 = fnd_api.g_miss_char) OR
3979                NVL(p_party_rec.attribute3, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute3, fnd_api.g_miss_char) THEN
3980                 l_party_hist_rec.old_attribute3 := NULL;
3981                 l_party_hist_rec.new_attribute3 := NULL;
3982            ELSIF
3983               NVL(l_curr_party_rec.attribute3,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute3,fnd_api.g_miss_char) THEN
3984                 l_party_hist_rec.old_attribute3 := l_curr_party_rec.attribute3 ;
3985                 l_party_hist_rec.new_attribute3 := p_party_rec.attribute3 ;
3986            END IF;
3987            --
3988            IF (p_party_rec.attribute4 = fnd_api.g_miss_char) OR
3989                NVL(p_party_rec.attribute4, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute4, fnd_api.g_miss_char) THEN
3990                 l_party_hist_rec.old_attribute4 := NULL;
3991                 l_party_hist_rec.new_attribute4 := NULL;
3992            ELSIF
3993               NVL(l_curr_party_rec.attribute4,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute4,fnd_api.g_miss_char) THEN
3994                 l_party_hist_rec.old_attribute4 := l_curr_party_rec.attribute4 ;
3995                 l_party_hist_rec.new_attribute4 := p_party_rec.attribute4 ;
3996            END IF;
3997            --
3998            IF (p_party_rec.attribute5 = fnd_api.g_miss_char) OR
3999                NVL(p_party_rec.attribute5, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute5, fnd_api.g_miss_char) THEN
4000                 l_party_hist_rec.old_attribute5 := NULL;
4001                 l_party_hist_rec.new_attribute5 := NULL;
4002            ELSIF
4003               NVL(l_curr_party_rec.attribute5,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute5,fnd_api.g_miss_char) THEN
4004                 l_party_hist_rec.old_attribute5 := l_curr_party_rec.attribute5 ;
4005                 l_party_hist_rec.new_attribute5 := p_party_rec.attribute5 ;
4006            END IF;
4007            --
4008            IF (p_party_rec.attribute6 = fnd_api.g_miss_char) OR
4009                NVL(p_party_rec.attribute6, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute6, fnd_api.g_miss_char) THEN
4010                 l_party_hist_rec.old_attribute6 := NULL;
4011                 l_party_hist_rec.new_attribute6 := NULL;
4012            ELSIF
4013               NVL(l_curr_party_rec.attribute6,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute6,fnd_api.g_miss_char) THEN
4014                 l_party_hist_rec.old_attribute6 := l_curr_party_rec.attribute6 ;
4015                 l_party_hist_rec.new_attribute6 := p_party_rec.attribute6 ;
4016            END IF;
4017            --
4018            IF (p_party_rec.attribute7 = fnd_api.g_miss_char) OR
4019                NVL(p_party_rec.attribute7, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute7, fnd_api.g_miss_char) THEN
4020                 l_party_hist_rec.old_attribute7 := NULL;
4021                 l_party_hist_rec.new_attribute7 := NULL;
4022            ELSIF
4023               NVL(l_curr_party_rec.attribute7,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute7,fnd_api.g_miss_char) THEN
4024                 l_party_hist_rec.old_attribute7 := l_curr_party_rec.attribute7 ;
4025                 l_party_hist_rec.new_attribute7 := p_party_rec.attribute7 ;
4026            END IF;
4027            --
4028            IF (p_party_rec.attribute8 = fnd_api.g_miss_char) OR
4029                NVL(p_party_rec.attribute8, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute8, fnd_api.g_miss_char) THEN
4030                 l_party_hist_rec.old_attribute8 := NULL;
4031                 l_party_hist_rec.new_attribute8 := NULL;
4032            ELSIF
4033               NVL(l_curr_party_rec.attribute8,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute8,fnd_api.g_miss_char) THEN
4034                 l_party_hist_rec.old_attribute8 := l_curr_party_rec.attribute8 ;
4035                 l_party_hist_rec.new_attribute8 := p_party_rec.attribute8 ;
4036            END IF;
4037            --
4038            IF (p_party_rec.attribute9 = fnd_api.g_miss_char) OR
4039                NVL(p_party_rec.attribute9, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute9, fnd_api.g_miss_char) THEN
4040                 l_party_hist_rec.old_attribute9 := NULL;
4041                 l_party_hist_rec.new_attribute9 := NULL;
4042            ELSIF
4043               NVL(l_curr_party_rec.attribute9,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute9,fnd_api.g_miss_char) THEN
4044                 l_party_hist_rec.old_attribute9 := l_curr_party_rec.attribute9 ;
4045                 l_party_hist_rec.new_attribute9 := p_party_rec.attribute9 ;
4046            END IF;
4047            --
4048            IF (p_party_rec.attribute10 = fnd_api.g_miss_char) OR
4049                NVL(p_party_rec.attribute10, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute10, fnd_api.g_miss_char) THEN
4050                 l_party_hist_rec.old_attribute10 := NULL;
4051                 l_party_hist_rec.new_attribute10 := NULL;
4052            ELSIF
4053               NVL(l_curr_party_rec.attribute10,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute10,fnd_api.g_miss_char) THEN
4054                 l_party_hist_rec.old_attribute10 := l_curr_party_rec.attribute10 ;
4055                 l_party_hist_rec.new_attribute10 := p_party_rec.attribute10 ;
4056            END IF;
4057            --
4058            IF (p_party_rec.attribute11 = fnd_api.g_miss_char) OR
4059                NVL(p_party_rec.attribute11, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute11, fnd_api.g_miss_char) THEN
4060                 l_party_hist_rec.old_attribute11 := NULL;
4061                 l_party_hist_rec.new_attribute11 := NULL;
4062            ELSIF
4063               NVL(l_curr_party_rec.attribute11,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute11,fnd_api.g_miss_char) THEN
4064                 l_party_hist_rec.old_attribute11 := l_curr_party_rec.attribute11 ;
4065                 l_party_hist_rec.new_attribute11 := p_party_rec.attribute11 ;
4066            END IF;
4067            --
4068            IF (p_party_rec.attribute12 = fnd_api.g_miss_char) OR
4069                NVL(p_party_rec.attribute12, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute12, fnd_api.g_miss_char) THEN
4070                 l_party_hist_rec.old_attribute12 := NULL;
4071                 l_party_hist_rec.new_attribute12 := NULL;
4072            ELSIF
4073               NVL(l_curr_party_rec.attribute12,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute12,fnd_api.g_miss_char) THEN
4074                 l_party_hist_rec.old_attribute12 := l_curr_party_rec.attribute12 ;
4075                 l_party_hist_rec.new_attribute12 := p_party_rec.attribute12 ;
4076            END IF;
4077            --
4078            IF (p_party_rec.attribute13 = fnd_api.g_miss_char) OR
4079                NVL(p_party_rec.attribute13, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute13, fnd_api.g_miss_char) THEN
4080                 l_party_hist_rec.old_attribute13 := NULL;
4081                 l_party_hist_rec.new_attribute13 := NULL;
4082            ELSIF
4083               NVL(l_curr_party_rec.attribute13,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute13,fnd_api.g_miss_char) THEN
4084                 l_party_hist_rec.old_attribute13 := l_curr_party_rec.attribute13 ;
4085                 l_party_hist_rec.new_attribute13 := p_party_rec.attribute13 ;
4086            END IF;
4087            --
4088            IF (p_party_rec.attribute14 = fnd_api.g_miss_char) OR
4089                NVL(p_party_rec.attribute14, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute14, fnd_api.g_miss_char) THEN
4090                 l_party_hist_rec.old_attribute14 := NULL;
4091                 l_party_hist_rec.new_attribute14 := NULL;
4092            ELSIF
4093               NVL(l_curr_party_rec.attribute14,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute14,fnd_api.g_miss_char) THEN
4094                 l_party_hist_rec.old_attribute14 := l_curr_party_rec.attribute14 ;
4095                 l_party_hist_rec.new_attribute14 := p_party_rec.attribute14 ;
4096            END IF;
4097            --
4098            IF (p_party_rec.attribute15 = fnd_api.g_miss_char) OR
4099                NVL(p_party_rec.attribute15, fnd_api.g_miss_char) = NVL(l_curr_party_rec.attribute15, fnd_api.g_miss_char) THEN
4100                 l_party_hist_rec.old_attribute15 := NULL;
4101                 l_party_hist_rec.new_attribute15 := NULL;
4102            ELSIF
4103               NVL(l_curr_party_rec.attribute15,fnd_api.g_miss_char) <> NVL(p_party_rec.attribute15,fnd_api.g_miss_char) THEN
4104                 l_party_hist_rec.old_attribute15 := l_curr_party_rec.attribute15 ;
4105                 l_party_hist_rec.new_attribute15 := p_party_rec.attribute15 ;
4106            END IF;
4107            --
4108            IF (p_party_rec.primary_flag = fnd_api.g_miss_char) OR
4109                NVL(p_party_rec.primary_flag, fnd_api.g_miss_char) = NVL(l_curr_party_rec.primary_flag, fnd_api.g_miss_char) THEN
4110                 l_party_hist_rec.old_primary_flag := NULL;
4111                 l_party_hist_rec.new_primary_flag := NULL;
4112            ELSIF
4113               NVL(l_curr_party_rec.primary_flag,fnd_api.g_miss_char) <> NVL(p_party_rec.primary_flag,fnd_api.g_miss_char) THEN
4114                 l_party_hist_rec.old_primary_flag := l_curr_party_rec.primary_flag ;
4115                 l_party_hist_rec.new_primary_flag := p_party_rec.primary_flag ;
4116            END IF;
4117            --
4118            IF (p_party_rec.preferred_flag = fnd_api.g_miss_char) OR
4119                NVL(p_party_rec.preferred_flag, fnd_api.g_miss_char) = NVL(l_curr_party_rec.preferred_flag, fnd_api.g_miss_char) THEN
4120                 l_party_hist_rec.old_preferred_flag := NULL;
4121                 l_party_hist_rec.new_preferred_flag := NULL;
4122            ELSIF
4123               NVL(l_curr_party_rec.preferred_flag,fnd_api.g_miss_char) <> NVL(p_party_rec.preferred_flag,fnd_api.g_miss_char) THEN
4124                 l_party_hist_rec.old_preferred_flag := l_curr_party_rec.preferred_flag ;
4125                 l_party_hist_rec.new_preferred_flag := p_party_rec.preferred_flag ;
4126            END IF;
4127 
4128         -- Call table handlers to insert into csi_i_parties_h table
4129         CSI_I_PARTIES_H_PKG.Insert_Row
4130         (
4131          px_INSTANCE_PARTY_HISTORY_ID    => l_inst_party_his_id ,
4132          p_INSTANCE_PARTY_ID             => p_party_rec.INSTANCE_PARTY_ID ,
4133          p_TRANSACTION_ID                => p_txn_rec.TRANSACTION_ID ,
4134          p_OLD_PARTY_SOURCE_TABLE        => l_party_hist_rec.OLD_PARTY_SOURCE_TABLE ,
4135          p_NEW_PARTY_SOURCE_TABLE        => l_party_hist_rec.NEW_PARTY_SOURCE_TABLE ,
4136          p_OLD_PARTY_ID                  => l_party_hist_rec.OLD_PARTY_ID ,
4137          p_NEW_PARTY_ID                  => l_party_hist_rec.NEW_PARTY_ID ,
4138          p_OLD_RELATIONSHIP_TYPE_CODE    => l_party_hist_rec.OLD_RELATIONSHIP_TYPE_CODE ,
4139          p_NEW_RELATIONSHIP_TYPE_CODE    => l_party_hist_rec.NEW_RELATIONSHIP_TYPE_CODE ,
4140          p_OLD_CONTACT_FLAG              => l_party_hist_rec.OLD_CONTACT_FLAG ,
4141          p_NEW_CONTACT_FLAG              => l_party_hist_rec.NEW_CONTACT_FLAG ,
4142          p_OLD_CONTACT_IP_ID             => l_party_hist_rec.OLD_CONTACT_IP_ID ,
4143          p_NEW_CONTACT_IP_ID             => l_party_hist_rec.NEW_CONTACT_IP_ID ,
4144          p_OLD_ACTIVE_START_DATE         => l_party_hist_rec.OLD_ACTIVE_START_DATE ,
4145          p_NEW_ACTIVE_START_DATE         => l_party_hist_rec.NEW_ACTIVE_START_DATE ,
4146          p_OLD_ACTIVE_END_DATE           => l_party_hist_rec.OLD_ACTIVE_END_DATE ,
4147          p_NEW_ACTIVE_END_DATE           => l_party_hist_rec.NEW_ACTIVE_END_DATE ,
4148          p_OLD_CONTEXT                   => l_party_hist_rec.OLD_CONTEXT ,
4149          p_NEW_CONTEXT                   => l_party_hist_rec.NEW_CONTEXT ,
4150          p_OLD_ATTRIBUTE1                => l_party_hist_rec.OLD_ATTRIBUTE1 ,
4151          p_NEW_ATTRIBUTE1                => l_party_hist_rec.NEW_ATTRIBUTE1 ,
4152          p_OLD_ATTRIBUTE2                => l_party_hist_rec.OLD_ATTRIBUTE2 ,
4153          p_NEW_ATTRIBUTE2                => l_party_hist_rec.NEW_ATTRIBUTE2 ,
4154          p_OLD_ATTRIBUTE3                => l_party_hist_rec.OLD_ATTRIBUTE3 ,
4155          p_NEW_ATTRIBUTE3                => l_party_hist_rec.NEW_ATTRIBUTE3 ,
4156          p_OLD_ATTRIBUTE4                => l_party_hist_rec.OLD_ATTRIBUTE4 ,
4157          p_NEW_ATTRIBUTE4                => l_party_hist_rec.NEW_ATTRIBUTE4 ,
4158          p_OLD_ATTRIBUTE5                => l_party_hist_rec.OLD_ATTRIBUTE5 ,
4159          p_NEW_ATTRIBUTE5                => l_party_hist_rec.NEW_ATTRIBUTE5 ,
4160          p_OLD_ATTRIBUTE6                => l_party_hist_rec.OLD_ATTRIBUTE6 ,
4161          p_NEW_ATTRIBUTE6                => l_party_hist_rec.NEW_ATTRIBUTE6 ,
4162          p_OLD_ATTRIBUTE7                => l_party_hist_rec.OLD_ATTRIBUTE7 ,
4163          p_NEW_ATTRIBUTE7                => l_party_hist_rec.NEW_ATTRIBUTE7 ,
4164          p_OLD_ATTRIBUTE8                => l_party_hist_rec.OLD_ATTRIBUTE8 ,
4165          p_NEW_ATTRIBUTE8                => l_party_hist_rec.NEW_ATTRIBUTE8 ,
4166          p_OLD_ATTRIBUTE9                => l_party_hist_rec.OLD_ATTRIBUTE9 ,
4167          p_NEW_ATTRIBUTE9                => l_party_hist_rec.NEW_ATTRIBUTE9 ,
4168          p_OLD_ATTRIBUTE10               => l_party_hist_rec.OLD_ATTRIBUTE10 ,
4169          p_NEW_ATTRIBUTE10               => l_party_hist_rec.NEW_ATTRIBUTE10 ,
4170          p_OLD_ATTRIBUTE11               => l_party_hist_rec.OLD_ATTRIBUTE11 ,
4171          p_NEW_ATTRIBUTE11               => l_party_hist_rec.NEW_ATTRIBUTE11 ,
4172          p_OLD_ATTRIBUTE12               => l_party_hist_rec.OLD_ATTRIBUTE12 ,
4173          p_NEW_ATTRIBUTE12               => l_party_hist_rec.NEW_ATTRIBUTE12 ,
4174          p_OLD_ATTRIBUTE13               => l_party_hist_rec.OLD_ATTRIBUTE13 ,
4175          p_NEW_ATTRIBUTE13               => l_party_hist_rec.NEW_ATTRIBUTE13 ,
4176          p_OLD_ATTRIBUTE14               => l_party_hist_rec.OLD_ATTRIBUTE14 ,
4177          p_NEW_ATTRIBUTE14               => l_party_hist_rec.NEW_ATTRIBUTE14 ,
4178          p_OLD_ATTRIBUTE15               => l_party_hist_rec.OLD_ATTRIBUTE15 ,
4179          p_NEW_ATTRIBUTE15               => l_party_hist_rec.NEW_ATTRIBUTE15 ,
4180          p_FULL_DUMP_FLAG                => 'N',
4181          p_CREATED_BY                    => FND_GLOBAL.USER_ID ,
4182          p_CREATION_DATE                 => SYSDATE ,
4183          p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID ,
4184          p_LAST_UPDATE_DATE              => SYSDATE ,
4185          p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID ,
4186          p_OBJECT_VERSION_NUMBER         => 1 ,
4187          p_OLD_PRIMARY_FLAG              => l_party_hist_rec.OLD_PRIMARY_FLAG ,
4188          p_NEW_PRIMARY_FLAG              => l_party_hist_rec.NEW_PRIMARY_FLAG ,
4189          p_OLD_PREFERRED_FLAG            => l_party_hist_rec.OLD_PREFERRED_FLAG ,
4190          p_NEW_PREFERRED_FLAG            => l_party_hist_rec.NEW_PREFERRED_FLAG );
4191 
4192         END IF;
4193 
4194      END;
4195   -- End of Changes for Bug#2547034 on 09/20/02 - rtalluri
4196 
4197       --  Update accounting class code in csi_item_instances table
4198 
4199       csi_item_instance_pvt.get_and_update_acct_class
4200          ( p_api_version         =>     p_api_version
4201           ,p_commit              =>     p_commit
4202           ,p_init_msg_list       =>     p_init_msg_list
4203           ,p_validation_level    =>     p_validation_level
4204           ,p_instance_id         =>     l_curr_party_rec.instance_id
4205           ,p_txn_rec             =>     p_txn_rec
4206           ,x_acct_class_code     =>     l_acct_class_code
4207           ,x_return_status       =>     x_return_status
4208           ,x_msg_count           =>     x_msg_count
4209           ,x_msg_data            =>     x_msg_data
4210          );
4211 
4212       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4213          FOR i in 1..x_msg_Count LOOP
4214             FND_MSG_PUB.Get(p_msg_index     => i,
4215                             p_encoded       => 'F',
4216                             p_data          => x_msg_data,
4217                             p_msg_index_out => x_msg_index_out );
4218          End LOOP;
4219          RAISE FND_API.G_EXC_ERROR;
4220       END IF;
4221       -- srramakr Bug # 2232230. Expire the Contacts incase of Xfer of Ownership.
4222       --
4223       IF ((p_party_rec.PARTY_ID <> FND_API.G_MISS_NUM)
4224          AND (p_party_rec.PARTY_ID IS NOT NULL)
4225          AND (p_party_rec.PARTY_ID <> l_curr_party_rec.PARTY_ID))
4226       THEN
4227 	 For cont_rec in get_cont_party_rec(p_party_rec.INSTANCE_PARTY_ID)
4228          LOOP
4229             l_cont_party_rec := l_init_party_rec;
4230             l_cont_party_rec.instance_party_id := cont_rec.instance_party_id;
4231             l_cont_party_rec.object_version_number := cont_rec.object_version_number;
4232             -- Calling Expire Instance Party Relationship
4233 	    expire_inst_party_relationship
4234 	     (    p_api_version                 =>  p_api_version
4235 		 ,p_commit                      =>  fnd_api.g_false
4236 		 ,p_init_msg_list               =>  fnd_api.g_false
4237 		 ,p_validation_level            =>  fnd_api.g_valid_level_full
4238 		 ,p_instance_party_rec          =>  l_cont_party_rec
4239 		 ,p_txn_rec                     =>  p_txn_rec
4240 		 ,x_return_status               =>  x_return_status
4241 		 ,x_msg_count                   =>  x_msg_count
4242 		 ,x_msg_data                    =>  x_msg_data
4243 		);
4244 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4245 	       FOR i in 1..x_msg_Count LOOP
4246 		  FND_MSG_PUB.Get(p_msg_index     => i,
4247 				  p_encoded       => 'F',
4248 				  p_data          => x_msg_data,
4249 				  p_msg_index_out => x_msg_index_out );
4250 	       End LOOP;
4251 	       RAISE FND_API.G_EXC_ERROR;
4252 	    END IF;
4253          END LOOP;
4254       END IF;
4255       -- End of API body
4256       -- Standard check of p_commit.
4257       IF FND_API.To_Boolean( p_commit ) THEN
4258          COMMIT WORK;
4259       END IF;
4260       -- Standard call to get message count and if count is  get message info.
4261       FND_MSG_PUB.Count_And_Get
4262                 (p_count        =>      x_msg_count ,
4263                  p_data         =>      x_msg_data  );
4264 EXCEPTION
4265         WHEN FND_API.G_EXC_ERROR THEN
4266                 -- ROLLBACK TO update_inst_party_rel_pvt;
4267                 x_return_status := FND_API.G_RET_STS_ERROR ;
4268                 FND_MSG_PUB.Count_And_Get
4269                 (       p_count    =>      x_msg_count,
4270                         p_data     =>      x_msg_data );
4271         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4272                 -- ROLLBACK TO update_inst_party_rel_pvt;
4273                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4274                 FND_MSG_PUB.Count_And_Get
4275                 (       p_count   =>      x_msg_count,
4276                         p_data    =>      x_msg_data );
4277         WHEN OTHERS THEN
4278                 -- ROLLBACK TO update_inst_party_rel_pvt;
4279                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4280                 IF FND_MSG_PUB.Check_Msg_Level
4281                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4282                 THEN
4283                    FND_MSG_PUB.Add_Exc_Msg
4284                     ( g_pkg_name, l_api_name );
4285                 END IF;
4286                 FND_MSG_PUB.Count_And_Get
4287                 (       p_count  =>      x_msg_count,
4288                         p_data   =>      x_msg_data  );
4289 
4290 END update_inst_party_relationship ;
4291 
4292 /*-------------------------------------------------------*/
4293 /* Procedure name:  Expire_inst_party_relationship       */
4294 /* Description :  Procedure used to  expire an existing  */
4295 /*                instance -party relationships          */
4296 /*-------------------------------------------------------*/
4297 
4298 PROCEDURE expire_inst_party_relationship
4299  (    p_api_version                 IN  NUMBER
4300      ,p_commit                      IN  VARCHAR2
4301      ,p_init_msg_list               IN  VARCHAR2
4302      ,p_validation_level            IN  NUMBER
4303      ,p_instance_party_rec          IN  csi_datastructures_pub.party_rec
4304      ,p_txn_rec                     IN OUT NOCOPY  csi_datastructures_pub.transaction_rec
4305      ,x_return_status               OUT NOCOPY  VARCHAR2
4306      ,x_msg_count                   OUT NOCOPY  NUMBER
4307      ,x_msg_data                    OUT NOCOPY  VARCHAR2
4308     ) IS
4309 
4310      l_api_name      CONSTANT VARCHAR2(30)   := 'EXPIRE_INST_PARTY_RELATIONSHIP';
4311      l_api_version   CONSTANT NUMBER         := 1.0;
4312      l_csi_debug_level        NUMBER;
4313      l_party_rec              csi_datastructures_pub.party_rec;
4314      l_msg_index              NUMBER;
4315      l_msg_count              NUMBER;
4316      l_line_count             NUMBER;
4317      l_full_dump_frequency    NUMBER;
4318      l_mod_value              NUMBER;
4319      l_curr_party_rec         csi_datastructures_pub.party_rec;
4320      l_party_account_rec      csi_datastructures_pub.party_account_rec;
4321      l_OBJECT_VERSION_NUMBER  NUMBER;
4322      l_inst_party_his_id      NUMBER;
4323      l_temp_party_acct_rec    csi_datastructures_pub.party_account_rec;
4324      --
4325    CURSOR get_curr_party_rec (p_inst_party_id   IN  NUMBER) IS
4326      SELECT
4327      instance_party_id  ,
4328      instance_id        ,
4329      party_source_table ,
4330      party_id           ,
4331      relationship_type_code,
4332      contact_flag       ,
4333      contact_ip_id      ,
4334      active_start_date  ,
4335      active_end_date    ,
4336      context            ,
4337      attribute1         ,
4338      attribute2         ,
4339      attribute3         ,
4340      attribute4         ,
4341      attribute5         ,
4342      attribute6         ,
4343      attribute7         ,
4344      attribute8         ,
4345      attribute9         ,
4346      attribute10        ,
4347      attribute11        ,
4348      attribute12        ,
4349      attribute13        ,
4350      attribute14        ,
4351      attribute15        ,
4352      object_version_number,
4353      primary_flag       ,
4354      preferred_flag     ,
4355      null parent_tbl_index  ,
4356      null call_contracts,
4357      null interface_id,
4358      null contact_parent_tbl_index,
4359      null cascade_ownership_flag -- Added for bug 2972082
4360     FROM CSI_I_PARTIES
4361    WHERE INSTANCE_PARTY_ID = p_inst_party_id
4362     AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE))
4363      FOR UPDATE OF OBJECT_VERSION_NUMBER;
4364 
4365 BEGIN
4366    -- Standard Start of API savepoint
4367    -- SAVEPOINT  expire_inst_party_rel_pvt;
4368 
4369    -- Standard call to check for call compatibility.
4370    IF NOT FND_API.Compatible_API_Call (    l_api_version   ,
4371 					   p_api_version   ,
4372 					   l_api_name      ,
4373 					   g_pkg_name      )
4374    THEN
4375 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4376    END IF;
4377 
4378    -- Initialize message list if p_init_msg_list is set to TRUE.
4379    IF FND_API.to_Boolean( p_init_msg_list ) THEN
4380 	   FND_MSG_PUB.initialize;
4381    END IF;
4382 
4383    --  Initialize API return status to success
4384    -- Verify if the Party rel combination exists
4385    x_return_status := FND_API.G_RET_STS_SUCCESS;
4386 
4387    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
4388    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
4389 
4390    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
4391    IF (l_csi_debug_level > 0) THEN
4392        csi_gen_utility_pvt.put_line( 'expire_inst_party_relationship');
4393    END IF;
4394 
4395    -- If the debug level = 2 then dump all the parameters values.
4396    IF (l_csi_debug_level > 1) THEN
4397        csi_gen_utility_pvt.put_line( 'expire_inst_party_relationship:'||
4398 					    p_api_version           ||'-'||
4399 					    p_commit                ||'-'||
4400 					    p_init_msg_list               );
4401 
4402        -- Dump the records in the log file
4403        csi_gen_utility_pvt.dump_party_rec(p_instance_party_rec );
4404        csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
4405    END IF;
4406    -- Start API body
4407    --
4408    -- Check if all the required parameters are passed
4409     CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4410 	 (    p_instance_party_rec.instance_party_id ,
4411 	       '  p_instance_party_rec.instance_party_id  ',
4412 		  l_api_name  );
4413     CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4414 	 (    p_instance_party_rec.object_version_number ,
4415 	       '  p_instance_party_rec.object_version_number  ',
4416 		  l_api_name  );
4417 
4418    -- Check if the instance party id  is valid
4419    IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid
4420 		(p_Instance_party_id => p_instance_party_rec.instance_party_id
4421 		,p_txn_type_id       => p_txn_rec.transaction_type_id
4422 		,p_mode              => 'E'      -- Added for bug 3550541
4423 		 )
4424 	  )
4425    THEN
4426     -- Message added in the validation routine since additional validation added for bug # 2477417.
4427       --  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
4428       --  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_instance_party_rec.instance_party_id);
4429       --  FND_MSG_PUB.Add;
4430        RAISE FND_API.G_EXC_ERROR;
4431    END IF;
4432    -- check if the object_version_number passed matches with the one
4433    -- in the database else raise error
4434    OPEN get_curr_party_rec(p_instance_party_rec.instance_party_id);
4435    FETCH get_curr_party_rec INTO l_curr_party_rec;
4436    IF  (l_curr_party_rec.object_version_number <> p_instance_party_rec.OBJECT_VERSION_NUMBER) THEN
4437        FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
4438        FND_MSG_PUB.ADD;
4439        RAISE FND_API.G_EXC_ERROR;
4440    END IF;
4441    --
4442    IF get_curr_party_rec%NOTFOUND THEN
4443      FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
4444      FND_MSG_PUB.ADD;
4445      RAISE FND_API.G_EXC_ERROR;
4446    END IF;
4447    CLOSE get_curr_party_rec;
4448    -- Initialize all the parameters and call update_inst_party_relationship to expire the record
4449    l_party_rec.instance_party_id          :=   l_curr_party_rec.instance_party_id;
4450    l_party_rec.instance_id                :=   FND_API.G_MISS_NUM;
4451    l_party_rec.PARTY_SOURCE_TABLE         :=   FND_API.G_MISS_CHAR;
4452    l_party_rec.PARTY_ID                   :=   FND_API.G_MISS_NUM;
4453    l_party_rec.RELATIONSHIP_TYPE_CODE     :=   FND_API.G_MISS_CHAR;
4454    l_party_rec.CONTACT_FLAG      :=   FND_API.G_MISS_CHAR;
4455    l_party_rec.CONTACT_IP_ID     :=   FND_API.G_MISS_NUM;
4456    l_party_rec.ACTIVE_START_DATE :=   FND_API.G_MISS_DATE;
4457    l_party_rec.ACTIVE_END_DATE   := sysdate;
4458    l_party_rec.CONTEXT        :=   FND_API.G_MISS_CHAR;
4459    l_party_rec.ATTRIBUTE1     :=   FND_API.G_MISS_CHAR;
4460    l_party_rec.ATTRIBUTE2     :=   FND_API.G_MISS_CHAR;
4461    l_party_rec.ATTRIBUTE3     :=   FND_API.G_MISS_CHAR;
4462    l_party_rec.ATTRIBUTE4     :=   FND_API.G_MISS_CHAR;
4463    l_party_rec.ATTRIBUTE5     :=   FND_API.G_MISS_CHAR;
4464    l_party_rec.ATTRIBUTE6     :=   FND_API.G_MISS_CHAR;
4465    l_party_rec.ATTRIBUTE7     :=   FND_API.G_MISS_CHAR;
4466    l_party_rec.ATTRIBUTE8     :=   FND_API.G_MISS_CHAR;
4467    l_party_rec.ATTRIBUTE9     :=   FND_API.G_MISS_CHAR;
4468    l_party_rec.ATTRIBUTE10    :=   FND_API.G_MISS_CHAR;
4469    l_party_rec.ATTRIBUTE11    :=   FND_API.G_MISS_CHAR;
4470    l_party_rec.ATTRIBUTE12    :=   FND_API.G_MISS_CHAR;
4471    l_party_rec.ATTRIBUTE13    :=   FND_API.G_MISS_CHAR;
4472    l_party_rec.ATTRIBUTE14    :=   FND_API.G_MISS_CHAR;
4473    l_party_rec.ATTRIBUTE15    :=   FND_API.G_MISS_CHAR;
4474    l_party_rec.OBJECT_VERSION_NUMBER  :=  p_instance_party_rec.object_version_number;
4475    --
4476    g_expire_party_flag := 'Y';
4477    update_inst_party_relationship
4478 	   ( p_api_version      => p_api_version
4479 	    ,p_commit           => p_commit
4480 	    ,p_init_msg_list    => p_init_msg_list
4481 	    ,p_validation_level => p_validation_level
4482 	    ,p_party_rec        => l_party_rec
4483 	    ,p_txn_rec          => p_txn_rec
4484 	    ,x_return_status    => x_return_status
4485 	    ,x_msg_count        => x_msg_count
4486 	    ,x_msg_data         => x_msg_data  ) ;
4487 
4488    g_expire_party_flag := 'N';
4489    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4490       l_msg_index := 1;
4491       l_msg_count := x_msg_count;
4492       WHILE l_msg_count > 0 LOOP
4493          x_msg_data := FND_MSG_PUB.GET(
4494 				l_msg_index,
4495 				FND_API.G_FALSE );
4496          csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
4497 		      l_msg_index := l_msg_index + 1;
4498 		      l_msg_count := l_msg_count - 1;
4499       END LOOP;
4500       RAISE FND_API.G_EXC_ERROR;
4501    END IF;
4502    --
4503    -- End of API body
4504 
4505    -- Standard check of p_commit.
4506    IF FND_API.To_Boolean( p_commit ) THEN
4507 	   COMMIT WORK;
4508    END IF;
4509    -- Standard call to get message count and if count is  get message info.
4510    FND_MSG_PUB.Count_And_Get
4511 	   (p_count        =>      x_msg_count ,
4512 	    p_data         =>      x_msg_data  );
4513 EXCEPTION
4514         WHEN FND_API.G_EXC_ERROR THEN
4515                 -- ROLLBACK TO expire_inst_party_rel_pvt;
4516                 x_return_status := FND_API.G_RET_STS_ERROR ;
4517                 FND_MSG_PUB.Count_And_Get
4518                 (       p_count   =>      x_msg_count,
4519                         p_data    =>      x_msg_data  );
4520         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4521                 -- ROLLBACK TO expire_inst_party_rel_pvt;
4522                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4523                 FND_MSG_PUB.Count_And_Get
4524                 (       p_count    =>      x_msg_count,
4525                         p_data     =>      x_msg_data   );
4526         WHEN OTHERS THEN
4527                 -- ROLLBACK TO expire_inst_party_rel_pvt;
4528                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4529                 IF FND_MSG_PUB.Check_Msg_Level
4530                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4531                 THEN
4532                    FND_MSG_PUB.Add_Exc_Msg
4533                     ( g_pkg_name, l_api_name );
4534                 END IF;
4535                 FND_MSG_PUB.Count_And_Get
4536                 (       p_count  =>      x_msg_count,
4537                         p_data   =>      x_msg_data  );
4538 END  expire_inst_party_relationship;
4539 
4540 /*-----------------------------------------------------------*/
4541 /* Procedure name:  Create_inst_party_account                */
4542 /* Description :  Procedure used to  create new              */
4543 /*                instance-party account relationships       */
4544 /*-----------------------------------------------------------*/
4545 
4546 PROCEDURE create_inst_party_account
4547    (  p_api_version         IN  NUMBER
4548      ,p_commit              IN  VARCHAR2
4549      ,p_init_msg_list       IN  VARCHAR2
4550      ,p_validation_level    IN  NUMBER
4551      ,p_party_account_rec   IN OUT NOCOPY   csi_datastructures_pub.party_account_rec
4552      ,p_txn_rec             IN OUT NOCOPY   csi_datastructures_pub.transaction_rec
4553      ,x_return_status       OUT NOCOPY  VARCHAR2
4554      ,x_msg_count           OUT NOCOPY  NUMBER
4555      ,x_msg_data            OUT NOCOPY  VARCHAR2
4556      ,p_inst_party_tbl      IN OUT NOCOPY   csi_party_relationships_pvt.inst_party_tbl
4557      ,p_acct_rel_type_tbl   IN OUT NOCOPY   csi_party_relationships_pvt.acct_rel_type_tbl
4558      ,p_site_use_tbl        IN OUT NOCOPY   csi_party_relationships_pvt.site_use_tbl
4559      ,p_account_count_rec   IN OUT NOCOPY   csi_party_relationships_pvt.account_count_rec
4560      ,p_called_from_grp     IN  VARCHAR2
4561      ,p_oks_txn_inst_tbl    IN OUT NOCOPY   oks_ibint_pub.txn_instance_tbl
4562     ) IS
4563 
4564      l_api_name      CONSTANT VARCHAR2(30)   := 'CREATE_INST_PARTY_ACCOUNT';
4565      l_api_version   CONSTANT NUMBER             := 1.0;
4566      l_csi_debug_level        NUMBER;
4567      l_party_account_rec      csi_datastructures_pub.party_account_rec;
4568      l_party_rec              csi_datastructures_pub.party_rec;
4569      l_msg_index              NUMBER;
4570      l_msg_count              NUMBER;
4571      l_process_flag           BOOLEAN := TRUE;
4572      l_ip_account_history_id  NUMBER;
4573 
4574       l_transaction_type              VARCHAR2(10);
4575       l_old_oks_cp_rec                oks_ibint_pub.cp_rec_type;
4576       l_new_oks_cp_rec                oks_ibint_pub.cp_rec_type;
4577       l_contracts_status              VARCHAR2(3);
4578       l_internal_party_id             NUMBER;
4579       l_party_id                      NUMBER;
4580       l_record_found           BOOLEAN := FALSE;
4581       l_update_record          BOOLEAN := FALSE;
4582       l_exists_flag            VARCHAR2(1);
4583       l_valid_flag             VARCHAR2(1);
4584 
4585     CURSOR instance_csr (p_ins_id IN NUMBER) IS
4586       SELECT  *
4587       FROM    csi_item_instances
4588       WHERE   instance_id = p_ins_id;
4589     l_instance_csr    instance_csr%ROWTYPE;
4590     l_last_vld_org    NUMBER;      -- Added by sguthiva for bug 2307804
4591 BEGIN
4592    -- Standard Start of API savepoint
4593    SAVEPOINT  create_inst_party_acct_pvt;
4594 
4595    -- Standard call to check for call compatibility.
4596    IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
4597 					   p_api_version           ,
4598 					   l_api_name              ,
4599 					   g_pkg_name              )
4600    THEN
4601 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4602    END IF;
4603 
4604    -- Initialize message list if p_init_msg_list is set to TRUE.
4605    IF FND_API.to_Boolean( p_init_msg_list ) THEN
4606 	   FND_MSG_PUB.initialize;
4607    END IF;
4608 
4609    --  Initialize API return status to success
4610    x_return_status := FND_API.G_RET_STS_SUCCESS;
4611 
4612    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
4613    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
4614 
4615    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
4616    IF (l_csi_debug_level > 0) THEN
4617        csi_gen_utility_pvt.put_line( 'create_inst_party_account');
4618    END IF;
4619 
4620    -- If the debug level = 2 then dump all the parameters values.
4621    IF (l_csi_debug_level > 1) THEN
4622 	  csi_gen_utility_pvt.put_line( 'create_inst_party_account:'||
4623 					  p_api_version           ||'-'||
4624 					  p_commit                ||'-'||
4625 					  p_init_msg_list                );
4626 	  -- Dump the records in the log file
4627 	  csi_gen_utility_pvt.dump_party_account_rec(p_party_account_rec);
4628 	  csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
4629    END IF;
4630    -- Start API body
4631    --
4632    -- Check if all the required parameters are passed
4633    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4634 	 (    p_party_account_rec.INSTANCE_PARTY_ID,
4635 		' p_party_account_rec.INSTANCE_PARTY_ID ',
4636 		  l_api_name           );
4637 
4638    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
4639 	 (    p_party_account_rec.PARTY_ACCOUNT_ID,
4640 		' p_party_account_rec.PARTY_ACCOUNT_ID ',
4641 		  l_api_name           );
4642    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_char
4643 	 (     p_party_account_rec.RELATIONSHIP_TYPE_CODE,
4644 		  'p_party_account_rec.RELATIONSHIP_TYPE_CODE',
4645 		   l_api_name           );
4646 
4647    -- Initialize the counts
4648    IF p_account_count_rec.inst_party_count is NULL OR
4649       p_account_count_rec.inst_party_count = FND_API.G_MISS_NUM THEN
4650       p_account_count_rec.inst_party_count := 0;
4651    END IF;
4652    --
4653    IF p_account_count_rec.rel_type_count is NULL OR
4654       p_account_count_rec.rel_type_count = FND_API.G_MISS_NUM THEN
4655       p_account_count_rec.rel_type_count := 0;
4656    END IF;
4657    --
4658    IF p_account_count_rec.site_use_count is NULL OR
4659       p_account_count_rec.site_use_count = FND_API.G_MISS_NUM THEN
4660       p_account_count_rec.site_use_count := 0;
4661    END IF;
4662    --
4663    -- Added by sk for fixing bug 2110790
4664    l_update_record := FALSE;
4665    IF p_called_from_grp <> FND_API.G_TRUE THEN
4666       IF     p_party_account_rec.relationship_type_code = 'OWNER'
4667 	AND ( p_party_account_rec.ip_account_id IS NULL OR
4668 	      p_party_account_rec.ip_account_id = fnd_api.g_miss_num )
4669       THEN
4670 	 BEGIN
4671 	    SELECT ip_account_id,
4672 	           active_start_date,
4673 		    object_version_number
4674 	    INTO   p_party_account_rec.ip_account_id,
4675 		    p_party_account_rec.active_start_date,
4676 		    p_party_account_rec.object_version_number
4677 	    FROM   csi_ip_accounts
4678 	    WHERE  instance_party_id = p_party_account_rec.instance_party_id
4679 	    AND    relationship_type_code = 'OWNER'
4680 	    AND   (active_end_date IS NULL OR active_end_date > SYSDATE)
4681 	    AND    ROWNUM = 1;
4682 
4683 	    IF p_party_account_rec.active_end_date = fnd_api.g_miss_date
4684 	    THEN
4685 	       p_party_account_rec.active_end_date := NULL ;
4686 	    END IF;
4687             --
4688 	    l_update_record := TRUE;
4689 	 EXCEPTION
4690 	    WHEN NO_DATA_FOUND THEN
4691 	       BEGIN
4692 		  SELECT ip_account_id,
4693 			 active_start_date,
4694 			 object_version_number
4695 		  INTO   p_party_account_rec.ip_account_id,
4696 			 p_party_account_rec.active_start_date,
4697 			 p_party_account_rec.object_version_number
4698 		  FROM   csi_ip_accounts
4699 		  WHERE  instance_party_id = p_party_account_rec.instance_party_id
4700 		  AND    relationship_type_code = 'OWNER'
4701 		  AND    ROWNUM = 1;
4702 
4703 		  IF p_party_account_rec.active_end_date = fnd_api.g_miss_date
4704 		  THEN
4705 		     p_party_account_rec.active_end_date := NULL ;
4706 		  END IF;
4707 		     l_update_record := TRUE;
4708 	       EXCEPTION
4709 		  WHEN OTHERS THEN
4710 	             NULL;
4711 	       END;
4712 	    WHEN OTHERS THEN
4713 	       NULL;
4714 	 END;
4715          --
4716 	 IF l_update_record
4717 	 THEN
4718 	    update_inst_party_account
4719 		(     p_api_version         => p_api_version
4720 		     ,p_commit              => p_commit
4721 		     ,p_init_msg_list       => p_init_msg_list
4722 		     ,p_validation_level    => p_validation_level
4723 		     ,p_party_account_rec   => p_party_account_rec
4724 		     ,p_txn_rec             => p_txn_rec
4725                      ,p_oks_txn_inst_tbl    => p_oks_txn_inst_tbl
4726 		     ,x_return_status       => x_return_status
4727 		     ,x_msg_count           => x_msg_count
4728 		     ,x_msg_data            => x_msg_data);
4729 
4730 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4731 			  l_msg_index := 1;
4732 			  l_msg_count := x_msg_count;
4733 	       WHILE l_msg_count > 0 LOOP
4734 				   x_msg_data := FND_MSG_PUB.GET(
4735 					       l_msg_index,
4736 					       FND_API.G_FALSE  );
4737 			csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
4738 				  l_msg_index := l_msg_index + 1;
4739 				  l_msg_count := l_msg_count - 1;
4740 	       END LOOP;
4741 	       RAISE FND_API.G_EXC_ERROR;
4742 	    END IF;
4743          END IF;
4744       END IF;
4745    END IF; -- Called from group check
4746    -- End addition by sk for fixing bug 2110790
4747    -- Check if the account is already expired
4748    -- If so unexpire the account
4749    l_record_found := FALSE;
4750    IF p_called_from_grp <> FND_API.G_TRUE THEN
4751       IF p_party_account_rec.ip_account_id IS NULL OR
4752          p_party_account_rec.ip_account_id = fnd_api.g_miss_num
4753       THEN
4754          BEGIN
4755             SELECT ip_account_id ,
4756                    object_version_number
4757             INTO  p_party_account_rec.ip_account_id,
4758                   p_party_account_rec.object_version_number
4759             FROM  csi_ip_accounts
4760             WHERE instance_party_id    = p_party_account_rec.instance_party_id
4761             AND party_account_id       = p_party_account_rec.party_account_id
4762             AND relationship_type_code = p_party_account_rec.relationship_type_code
4763             AND active_end_date        < sysdate
4764             AND ROWNUM                 = 1;
4765             l_record_found := TRUE ;
4766          EXCEPTION
4767             WHEN OTHERS THEN
4768                NULL;
4769          END;
4770       END IF;
4771    END IF; -- called from group check
4772    /*          --  Commented by sk for fixing the bug 2232880
4773          IF CSI_Instance_parties_vld_pvt.Is_Account_Expired
4774                        (p_party_account_rec) THEN
4775             IF (p_party_account_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE ) THEN
4776                 p_party_account_rec.active_end_date := NULL;
4777              END IF;
4778   */          -- Commented by sk for fixing the bug 2232880
4779    -- Unexpire the account
4780    IF NOT(l_update_record)
4781    THEN      -- Added for bug 2110790
4782       IF l_record_found THEN
4783          -- Added by sk for fixing the bug 2232880
4784          IF   p_party_account_rec.active_end_date = fnd_api.g_miss_date
4785          THEN
4786             p_party_account_rec.active_end_date := NULL;
4787          END IF;
4788          -- End additon by sk for fixing the bug 2232880
4789          update_inst_party_account
4790                 (     p_api_version         => p_api_version
4791                      ,p_commit              => p_commit
4792                      ,p_init_msg_list       => p_init_msg_list
4793                      ,p_validation_level    => p_validation_level
4794                      ,p_party_account_rec   => p_party_account_rec
4795                      ,p_txn_rec             => p_txn_rec
4796                      ,p_oks_txn_inst_tbl    => p_oks_txn_inst_tbl
4797                      ,x_return_status       => x_return_status
4798                      ,x_msg_count           => x_msg_count
4799                      ,x_msg_data            => x_msg_data);
4800 
4801          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
4802             l_msg_index := 1;
4803             l_msg_count := x_msg_count;
4804     	    WHILE l_msg_count > 0 LOOP
4805 		        x_msg_data := FND_MSG_PUB.GET(
4806    	      		    		      l_msg_index,
4807 				              FND_API.G_FALSE 	);
4808                         csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
4809 		        l_msg_index := l_msg_index + 1;
4810 	                l_msg_count := l_msg_count - 1;
4811     	    END LOOP;
4812             RAISE FND_API.G_EXC_ERROR;
4813          END IF;
4814         -- END IF; -- commented by sk for fixing the bug 2232880
4815       ELSE  -- Added by sk for fixing the bug 2232880
4816          -- Verify if the party account combination exists
4817          IF p_called_from_grp <> FND_API.G_TRUE THEN
4818             IF CSI_Instance_parties_vld_pvt.Is_Pty_Acct_Comb_Exists
4819                           (p_party_account_rec.instance_party_id   ,
4820                            p_party_account_rec.party_account_id    ,
4821                            p_party_account_rec.relationship_type_code ) THEN
4822                 RAISE FND_API.G_EXC_ERROR;
4823             END IF;
4824          END IF;
4825 
4826          IF  p_party_account_rec.IP_ACCOUNT_ID is  NULL OR
4827              p_party_account_rec.IP_ACCOUNT_ID = FND_API.G_MISS_NUM THEN
4828             -- If ip_account_id passed is null then generate from sequence
4829             -- and check if the value exists . If exists then generate again
4830             -- from the sequence till we get a value that does not exist
4831             while l_process_flag loop
4832                p_party_account_rec.IP_ACCOUNT_ID := CSI_Instance_parties_vld_pvt.gen_ip_account_id;
4833                IF NOT(CSI_Instance_parties_vld_pvt.Is_IP_account_Exists(p_party_account_rec.IP_ACCOUNT_ID,
4834                                                                      FALSE            )) THEN
4835                   l_process_flag := FALSE;
4836                END IF;
4837             end loop;
4838          ELSE
4839             -- Validate the instance_party_id if exist then raise CSI_API_INVALID_PRIMARY_KEY error
4840             IF CSI_Instance_parties_vld_pvt.Is_IP_account_Exists(p_party_account_rec.IP_ACCOUNT_ID ,
4841                                                                  TRUE                 ) THEN
4842                RAISE FND_API.G_EXC_ERROR;
4843             END IF;
4844          END IF;
4845          -- Verify if the instance_party_id is valid
4846          -- Check the cache before hitting the Database.
4847          IF p_called_from_grp <> FND_API.G_TRUE THEN
4848 	    l_exists_flag := 'N';
4849 	    l_valid_flag := 'Y';
4850 	    IF p_inst_party_tbl.count > 0 THEN
4851 	       For tab_row in p_inst_party_tbl.FIRST .. p_inst_party_tbl.LAST
4852 	       LOOP
4853 		  IF p_inst_party_tbl(tab_row).instance_party_id = p_party_account_rec.INSTANCE_PARTY_ID THEN
4854 		     l_valid_flag := p_inst_party_tbl(tab_row).valid_flag;
4855 		     l_exists_flag := 'Y';
4856 		     exit;
4857 		  END IF;
4858 	       END LOOP;
4859 	       --
4860 	       IF l_valid_flag <> 'Y' THEN
4861 		  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
4862 		  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_party_account_rec.INSTANCE_PARTY_ID);
4863 		  FND_MSG_PUB.Add;
4864 		  RAISE FND_API.G_EXC_ERROR;
4865 	       END IF;
4866 	    END IF;
4867 	    --
4868 	    IF l_exists_flag <> 'Y' THEN
4869 	       p_account_count_rec.inst_party_count := p_account_count_rec.inst_party_count + 1;
4870 	       p_inst_party_tbl(p_account_count_rec.inst_party_count).instance_party_id := p_party_account_rec.INSTANCE_PARTY_ID;
4871 	       IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid(
4872                                                  p_Instance_party_id => p_party_account_rec.INSTANCE_PARTY_ID
4873                                                 ,p_txn_type_id       => p_txn_rec.transaction_type_id
4874                                                 ,p_mode              => 'C' )      -- Added for bug 3550541
4875                   )
4876                THEN
4877 	          p_inst_party_tbl(p_account_count_rec.inst_party_count).valid_flag := 'N';
4878 	      -- Message added in the validation routine since additional validation added for bug # 2477417.
4879 		--  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
4880 		--  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_party_account_rec.INSTANCE_PARTY_ID);
4881 		--  FND_MSG_PUB.Add;
4882 		--  RAISE FND_API.G_EXC_ERROR;
4883 	       ELSE
4884 		  p_inst_party_tbl(p_account_count_rec.inst_party_count).valid_flag := 'Y';
4885 	       END IF;
4886 	    END IF;
4887          END IF; -- called from group check
4888          -- Verify Party Account ID is Valid
4889          IF p_called_from_grp <> FND_API.G_TRUE THEN
4890             IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_accountID_Valid
4891                           (p_party_account_rec.PARTY_ACCOUNT_ID,
4892                            p_party_account_rec.INSTANCE_PARTY_ID,
4893                            p_party_account_rec.RELATIONSHIP_TYPE_CODE,
4894                            p_txn_rec.transaction_type_id, -- Added for bug 3550541
4895                            'C'))                          -- Added for bug 3550541
4896             THEN
4897                RAISE FND_API.G_EXC_ERROR;
4898             END IF;
4899          END IF;
4900 
4901          -- Verify the relationship_type_code is valid
4902          -- Check the cache before hitting the Database.
4903          l_exists_flag := 'N';
4904          l_valid_flag := 'Y';
4905          IF p_acct_rel_type_tbl.count > 0 THEN
4906             For tab_row in p_acct_rel_type_tbl.FIRST .. p_acct_rel_type_tbl.LAST
4907             LOOP
4908               IF p_acct_rel_type_tbl(tab_row).rel_type_code = p_party_account_rec.RELATIONSHIP_TYPE_CODE THEN
4909                  l_valid_flag := p_acct_rel_type_tbl(tab_row).valid_flag;
4910                  l_exists_flag := 'Y';
4911                  exit;
4912               END IF;
4913             END LOOP;
4914             --
4915             IF l_valid_flag <> 'Y' THEN
4916 	       FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_ACCOUNT_TYPE');
4917 	       FND_MESSAGE.SET_TOKEN('IP_RELATIONSHIP_TYPE_CODE',p_party_account_rec.RELATIONSHIP_TYPE_CODE);
4918 	       FND_MSG_PUB.Add;
4919                RAISE FND_API.G_EXC_ERROR;
4920             END IF;
4921          END IF;
4922          IF l_exists_flag <> 'Y' THEN
4923             p_account_count_rec.rel_type_count := p_account_count_rec.rel_type_count + 1;
4924             p_acct_rel_type_tbl(p_account_count_rec.rel_type_count).rel_type_code :=
4925                                                 p_party_account_rec.RELATIONSHIP_TYPE_CODE;
4926             IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_Rel_type_Valid
4927                                    (p_party_account_rec.RELATIONSHIP_TYPE_CODE)) THEN
4928                p_acct_rel_type_tbl(p_account_count_rec.rel_type_count).valid_flag := 'N';
4929                RAISE FND_API.G_EXC_ERROR;
4930             ELSE
4931                p_acct_rel_type_tbl(p_account_count_rec.rel_type_count).valid_flag := 'Y';
4932             END IF;
4933          END IF;
4934 
4935           -- If active_start_date is null or G_MISS value then assign sysdate
4936          IF ((p_party_account_rec.ACTIVE_START_DATE IS NULL ) OR
4937             ( p_party_account_rec.ACTIVE_START_DATE = FND_API.G_MISS_DATE)) THEN
4938               p_party_account_rec.ACTIVE_START_DATE := SYSDATE;
4939          END IF;
4940 
4941          -- verify if the active_start_date is valid
4942          IF p_called_from_grp <> FND_API.G_TRUE THEN
4943             IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_StartDate_Valid
4944                                             (p_party_account_rec.ACTIVE_START_DATE,
4945                                              p_party_account_rec.ACTIVE_END_DATE ,
4946                                              p_party_account_rec.INSTANCE_PARTY_ID  )) THEN
4947                RAISE FND_API.G_EXC_ERROR;
4948             END IF;
4949 
4950             -- Verify if the active_end_date is valid
4951             IF ((p_party_account_rec.ACTIVE_END_DATE is NOT NULL) AND
4952                 (p_party_account_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE )) THEN
4953                 IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_EndDate_Valid
4954                                     (p_party_account_rec.ACTIVE_START_DATE,
4955                                      p_party_account_rec.ACTIVE_END_DATE ,
4956                                      p_party_account_rec.INSTANCE_PARTY_ID ,
4957 		      	             p_party_account_rec.IP_ACCOUNT_ID ,
4958 			             p_txn_rec.TRANSACTION_ID))  THEN
4959                    RAISE FND_API.G_EXC_ERROR;
4960                 END IF;
4961             END IF;
4962          END IF; -- Called from group check
4963 
4964        -- Verify if bill to address is correct
4965          IF ((p_party_account_rec.bill_to_address IS NOT NULL) AND
4966              (p_party_account_rec.bill_to_address <> FND_API.G_MISS_NUM )) THEN
4967             -- Check the cache before hitting the Database.
4968             l_exists_flag := 'N';
4969             l_valid_flag := 'Y';
4970             IF p_site_use_tbl.count > 0 THEN
4971                For tab_row in p_site_use_tbl.FIRST .. p_site_use_tbl.LAST
4972                LOOP
4973                   IF p_site_use_tbl(tab_row).site_use_id = p_party_account_rec.bill_to_address AND
4974                      p_site_use_tbl(tab_row).site_use_code = 'BILL_TO' THEN
4975                      l_valid_flag := p_site_use_tbl(tab_row).valid_flag;
4976                      l_exists_flag := 'Y';
4977                      exit;
4978                   END IF;
4979                END LOOP;
4980                --
4981                IF l_valid_flag <> 'Y' THEN
4982                   FND_MESSAGE.SET_NAME('CSI','CSI_INVALID_BILL_TO_ADD_ID');
4983 	          FND_MESSAGE.SET_TOKEN('BILL_TO_ADD_ID',p_party_account_rec.bill_to_address);
4984 	          FND_MSG_PUB.Add;
4985                   RAISE FND_API.G_EXC_ERROR;
4986                END IF;
4987             END IF;
4988             --
4989             IF l_exists_flag <> 'Y' THEN
4990                p_account_count_rec.site_use_count := p_account_count_rec.site_use_count + 1;
4991                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_id :=
4992                                                 p_party_account_rec.bill_to_address;
4993                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_code := 'BILL_TO';
4994                IF NOT(CSI_Instance_parties_vld_pvt.Is_bill_to_add_valid
4995                    ( p_party_account_rec.bill_to_address)) THEN
4996                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'N';
4997                   RAISE FND_API.G_EXC_ERROR;
4998                ELSE
4999                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'Y';
5000                END IF;
5001             END IF;
5002          END IF;
5003 
5004        -- Verify if ship to address is correct
5005          IF ((p_party_account_rec.ship_to_address IS NOT NULL) AND
5006              (p_party_account_rec.ship_to_address <> FND_API.G_MISS_NUM )) THEN
5007             -- Check the cache before hitting the Database.
5008             l_exists_flag := 'N';
5009             l_valid_flag := 'Y';
5010             IF p_site_use_tbl.count > 0 THEN
5011                For tab_row in p_site_use_tbl.FIRST .. p_site_use_tbl.LAST
5012                LOOP
5013                   IF p_site_use_tbl(tab_row).site_use_id = p_party_account_rec.ship_to_address AND
5014                      p_site_use_tbl(tab_row).site_use_code = 'SHIP_TO' THEN
5015                      l_valid_flag := p_site_use_tbl(tab_row).valid_flag;
5016                      l_exists_flag := 'Y';
5017                      exit;
5018                   END IF;
5019                END LOOP;
5020                --
5021                IF l_valid_flag <> 'Y' THEN
5022                   FND_MESSAGE.SET_NAME('CSI','CSI_INVALID_SHIP_TO_ADD_ID');
5023 	          FND_MESSAGE.SET_TOKEN('SHIP_TO_ADD_ID',p_party_account_rec.ship_to_address);
5024 	          FND_MSG_PUB.Add;
5025                   RAISE FND_API.G_EXC_ERROR;
5026                END IF;
5027             END IF;
5028             --
5029             IF l_exists_flag <> 'Y' THEN
5030                p_account_count_rec.site_use_count := p_account_count_rec.site_use_count + 1;
5031                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_id :=
5032                                                 p_party_account_rec.ship_to_address;
5033                p_site_use_tbl(p_account_count_rec.site_use_count).site_use_code := 'SHIP_TO';
5034                IF NOT(CSI_Instance_parties_vld_pvt.Is_ship_to_add_valid
5035                   ( p_party_account_rec.ship_to_address)) THEN
5036                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'N';
5037                   RAISE FND_API.G_EXC_ERROR;
5038                ELSE
5039                   p_site_use_tbl(p_account_count_rec.site_use_count).valid_flag := 'Y';
5040                END IF;
5041             END IF;
5042          END IF;
5043 
5044        -- Following will not be done when called from Group API.
5045        -- Verify if it meets Account Rules
5046        IF p_called_from_grp <> FND_API.G_TRUE THEN
5047 
5048           IF CSI_Instance_parties_vld_pvt.Acct_Rules_Check
5049                           (p_party_account_rec.instance_party_id   ,
5050                            p_party_account_rec.relationship_type_code ) THEN
5051                 RAISE FND_API.G_EXC_ERROR;
5052             END IF;
5053 
5054           -- Get the parent party record
5055           IF NOT(CSI_Instance_parties_vld_pvt.Get_Party_Record
5056                   ( p_party_account_rec.instance_party_id,
5057                     l_party_rec)) THEN
5058                  RAISE FND_API.G_EXC_ERROR;
5059            END IF;
5060 
5061           -- If it is an owner party and owner account then update csi_item_instances
5062           -- Account Rules check ensures that if the owner account is
5063           -- being created, the parent party is always a owner party
5064            IF ((p_party_account_rec.RELATIONSHIP_TYPE_CODE = 'OWNER')
5065                AND (l_party_rec.RELATIONSHIP_TYPE_CODE = 'OWNER')) THEN
5066 
5067                 update csi_item_instances
5068                 set   owner_party_account_id = p_party_account_rec.party_account_id
5069                 where instance_id     = l_party_rec.instance_id;
5070            END IF;
5071 
5072         -- Call table handlers to insert into csi_ip_accounts table
5073         CSI_IP_ACCOUNTS_PKG.Insert_Row(
5074           px_IP_ACCOUNT_ID      => p_party_account_rec.ip_account_id,
5075           p_INSTANCE_PARTY_ID   => p_party_account_rec.INSTANCE_PARTY_ID,
5076           p_PARTY_ACCOUNT_ID    => p_party_account_rec.PARTY_ACCOUNT_ID,
5077           p_RELATIONSHIP_TYPE_CODE => p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5078           p_ACTIVE_START_DATE   => p_party_account_rec.ACTIVE_START_DATE,
5079           p_ACTIVE_END_DATE     => p_party_account_rec.ACTIVE_END_DATE,
5080           p_CONTEXT             => p_party_account_rec.CONTEXT,
5081           p_ATTRIBUTE1          => p_party_account_rec.ATTRIBUTE1,
5082           p_ATTRIBUTE2          => p_party_account_rec.ATTRIBUTE2,
5083           p_ATTRIBUTE3          => p_party_account_rec.ATTRIBUTE3,
5084           p_ATTRIBUTE4          => p_party_account_rec.ATTRIBUTE4,
5085           p_ATTRIBUTE5          => p_party_account_rec.ATTRIBUTE5,
5086           p_ATTRIBUTE6          => p_party_account_rec.ATTRIBUTE6,
5087           p_ATTRIBUTE7          => p_party_account_rec.ATTRIBUTE7,
5088           p_ATTRIBUTE8          => p_party_account_rec.ATTRIBUTE8,
5089           p_ATTRIBUTE9          => p_party_account_rec.ATTRIBUTE9,
5090           p_ATTRIBUTE10         => p_party_account_rec.ATTRIBUTE10,
5091           p_ATTRIBUTE11         => p_party_account_rec.ATTRIBUTE11,
5092           p_ATTRIBUTE12         => p_party_account_rec.ATTRIBUTE12,
5093           p_ATTRIBUTE13         => p_party_account_rec.ATTRIBUTE13,
5094           p_ATTRIBUTE14         => p_party_account_rec.ATTRIBUTE14,
5095           p_ATTRIBUTE15         => p_party_account_rec.ATTRIBUTE15,
5096           p_CREATED_BY          => FND_GLOBAL.USER_ID             ,
5097           p_CREATION_DATE       => SYSDATE                        ,
5098           p_LAST_UPDATED_BY     => FND_GLOBAL.USER_ID             ,
5099           p_LAST_UPDATE_DATE    => SYSDATE                        ,
5100           p_LAST_UPDATE_LOGIN   => FND_GLOBAL.LOGIN_ID            ,
5101           p_OBJECT_VERSION_NUMBER  => 1                           ,
5102           p_BILL_TO_ADDRESS     => p_party_account_rec.BILL_TO_ADDRESS,
5103           p_SHIP_TO_ADDRESS     => p_party_account_rec.SHIP_TO_ADDRESS,
5104           p_REQUEST_ID          => p_party_account_rec.REQUEST_ID,
5105           p_PROGRAM_APPLICATION_ID => p_party_account_rec.PROGRAM_APPLICATION_ID,
5106           p_PROGRAM_ID          => p_party_account_rec.PROGRAM_ID,
5107           p_PROGRAM_UPDATE_DATE => p_party_account_rec.PROGRAM_UPDATE_DATE
5108           );
5109 
5110         -- Call create_transaction to create txn log
5111         CSI_TRANSACTIONS_PVT.Create_transaction
5112           (
5113              p_api_version            => p_api_version
5114             ,p_commit                 => p_commit
5115             ,p_init_msg_list          => p_init_msg_list
5116             ,p_validation_level       => p_validation_level
5117             ,p_Success_If_Exists_Flag => 'Y'
5118             ,P_transaction_rec       => p_txn_rec
5119             ,x_return_status          => x_return_status
5120             ,x_msg_count              => x_msg_count
5121             ,x_msg_data               => x_msg_data          );
5122 
5123 
5124          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
5125 	         l_msg_index := 1;
5126                  l_msg_count := x_msg_count;
5127    	         WHILE l_msg_count > 0 LOOP
5128      		       x_msg_data := FND_MSG_PUB.GET(
5129     	         		                l_msg_index,
5130 	     	     		                FND_API.G_FALSE	);
5131 	               csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
5132 	    	       l_msg_index := l_msg_index + 1;
5133 		           l_msg_count := l_msg_count - 1;
5134 	          END LOOP;
5135                   RAISE FND_API.G_EXC_ERROR;
5136          END IF;
5137 
5138          -- Generate a unique instance_party_history_id from the sequence
5139          l_ip_account_history_id := CSI_Instance_parties_vld_pvt.gen_ip_account_hist_id;
5140 
5141          CSI_IP_ACCOUNTS_H_PKG.Insert_Row
5142          (
5143           px_IP_ACCOUNT_HISTORY_ID        => l_ip_account_history_id          ,
5144           p_IP_ACCOUNT_ID                 => p_party_account_rec.ip_account_id,
5145           p_TRANSACTION_ID                => p_txn_rec.transaction_id        ,
5146           p_OLD_PARTY_ACCOUNT_ID          => NULL                            ,
5147           p_NEW_PARTY_ACCOUNT_ID          => p_party_account_rec.PARTY_ACCOUNT_ID,
5148           p_OLD_RELATIONSHIP_TYPE_CODE    => NULL                            ,
5149           p_NEW_RELATIONSHIP_TYPE_CODE    => p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5150           p_OLD_ACTIVE_START_DATE         => NULL                           ,
5151           p_NEW_ACTIVE_START_DATE         => p_party_account_rec.ACTIVE_START_DATE,
5152           p_OLD_ACTIVE_END_DATE           => NULL                           ,
5153           p_NEW_ACTIVE_END_DATE           => p_party_account_rec.ACTIVE_END_DATE,
5154           p_OLD_CONTEXT                   => NULL                           ,
5155           p_NEW_CONTEXT                   => p_party_account_rec.CONTEXT    ,
5156           p_OLD_ATTRIBUTE1                => NULL                           ,
5157           p_NEW_ATTRIBUTE1                => p_party_account_rec.ATTRIBUTE1 ,
5158           p_OLD_ATTRIBUTE2                => NULL                           ,
5159           p_NEW_ATTRIBUTE2                => p_party_account_rec.ATTRIBUTE2 ,
5160           p_OLD_ATTRIBUTE3                => NULL                           ,
5161           p_NEW_ATTRIBUTE3                => p_party_account_rec.ATTRIBUTE3 ,
5162           p_OLD_ATTRIBUTE4                => NULL                           ,
5163           p_NEW_ATTRIBUTE4                => p_party_account_rec.ATTRIBUTE4 ,
5164           p_OLD_ATTRIBUTE5                => NULL                           ,
5165           p_NEW_ATTRIBUTE5                => p_party_account_rec.ATTRIBUTE5 ,
5166           p_OLD_ATTRIBUTE6                => NULL                           ,
5167           p_NEW_ATTRIBUTE6                => p_party_account_rec.ATTRIBUTE6 ,
5168           p_OLD_ATTRIBUTE7                => NULL                           ,
5169           p_NEW_ATTRIBUTE7                => p_party_account_rec.ATTRIBUTE7 ,
5170           p_OLD_ATTRIBUTE8                => NULL                           ,
5171           p_NEW_ATTRIBUTE8                => p_party_account_rec.ATTRIBUTE8 ,
5172           p_OLD_ATTRIBUTE9                => NULL                           ,
5173           p_NEW_ATTRIBUTE9                => p_party_account_rec.ATTRIBUTE9 ,
5174           p_OLD_ATTRIBUTE10               => NULL                           ,
5175           p_NEW_ATTRIBUTE10               => p_party_account_rec.ATTRIBUTE10,
5176           p_OLD_ATTRIBUTE11               => NULL                           ,
5177           p_NEW_ATTRIBUTE11               => p_party_account_rec.ATTRIBUTE11,
5178           p_OLD_ATTRIBUTE12               => NULL                           ,
5179           p_NEW_ATTRIBUTE12               => p_party_account_rec.ATTRIBUTE12,
5180           p_OLD_ATTRIBUTE13               => NULL                           ,
5181           p_NEW_ATTRIBUTE13               => p_party_account_rec.ATTRIBUTE13,
5182           p_OLD_ATTRIBUTE14               => NULL                           ,
5183           p_NEW_ATTRIBUTE14               => p_party_account_rec.ATTRIBUTE14,
5184           p_OLD_ATTRIBUTE15               => NULL                           ,
5185           p_NEW_ATTRIBUTE15               => p_party_account_rec.ATTRIBUTE15,
5186           p_FULL_DUMP_FLAG                => 'N'                            ,
5187           p_CREATED_BY                    => FND_GLOBAL.USER_ID             ,
5188           p_CREATION_DATE                 => SYSDATE                        ,
5189           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID             ,
5190           p_LAST_UPDATE_DATE              => SYSDATE                        ,
5191           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID            ,
5192           p_OBJECT_VERSION_NUMBER         => 1                              ,
5193           p_OLD_BILL_TO_ADDRESS           => NULL                           ,
5194           p_NEW_BILL_TO_ADDRESS           => p_party_account_rec.BILL_TO_ADDRESS,
5195           p_OLD_SHIP_TO_ADDRESS           => NULL                           ,
5196           p_NEW_SHIP_TO_ADDRESS           => p_party_account_rec.SHIP_TO_ADDRESS,
5197           p_OLD_INSTANCE_PARTY_ID         => NULL                           ,
5198           p_NEW_INSTANCE_PARTY_ID         => p_party_account_rec.INSTANCE_PARTY_ID);
5199 
5200        END IF; -- p_called_from_grp check
5201        -- Call Contracts
5202        -- End commentation by sguthiva for bug 2307804
5203        -- Added by sguthiva for bug 2307804
5204        IF (    (p_party_account_rec.call_contracts <> fnd_api.g_false)
5205              AND (p_party_account_rec.relationship_type_code = 'OWNER' )
5206           )
5207        THEN
5208           -- The following code has been written to make sure
5209           -- before calling contracts we pass a valid vld_organization_id
5210           IF p_party_account_rec.vld_organization_id IS NULL OR
5211              p_party_account_rec.vld_organization_id = fnd_api.g_miss_num
5212           THEN
5213              BEGIN
5214                 SELECT last_vld_organization_id
5215                 INTO   l_last_vld_org
5216                 FROM   csi_item_instances
5217                 WHERE  instance_id = l_party_rec.instance_id;
5218              EXCEPTION
5219                 WHEN OTHERS THEN
5220                    NULL;
5221              END;
5222           ELSE
5223              l_last_vld_org := p_party_account_rec.vld_organization_id;
5224           END IF;
5225           --
5226 	  --Changes for Bug 11679952
5227           IF p_txn_rec.transaction_type_id <> 7   -- Added for bug 3973706
5228 	     AND nvl(p_txn_rec.source_group_ref, FND_API.G_MISS_CHAR) <> 'WBADI' --Added for Bug 11679952
5229           THEN
5230              csi_item_instance_pvt.Call_to_Contracts(
5231                               p_transaction_type   =>   'NEW'
5232                              ,p_instance_id        =>   l_party_rec.instance_id
5233                              ,p_new_instance_id    =>   NULL
5234                              ,p_vld_org_id         =>   l_last_vld_org
5235                              ,p_quantity           =>   NULL
5236                              ,p_party_account_id1  =>   NULL         -- old party account id
5237                              ,p_party_account_id2  =>   NULL         -- new party account id
5238                              ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
5239                              ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date
5240                              ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
5241                              ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
5242                              ,x_return_status      =>   x_return_status
5243                              ,x_msg_count          =>   x_msg_count
5244                              ,x_msg_data           =>   x_msg_data
5245                               );
5246 
5247              IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS)
5248              THEN
5249                 l_msg_index := 1;
5250                 l_msg_count := x_msg_count;
5251                 WHILE l_msg_count > 0 LOOP
5252                    x_msg_data := FND_MSG_PUB.GET(
5253                                                  l_msg_index,
5254                                                  FND_API.G_FALSE   );
5255                    csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
5256                    l_msg_index := l_msg_index + 1;
5257                    l_msg_count := l_msg_count - 1;
5258                 END LOOP;
5259                 RAISE FND_API.G_EXC_ERROR;
5260              END IF;
5261           END IF; -- Added for bug 3973706
5262        END IF;
5263     END IF; -- Added by sk for fixing the bug 2232880
5264   END IF; -- Added by sk for bug 2110790
5265         -- End addition by sguthiva for bug 2307804
5266         --
5267         -- End of API body
5268         -- Standard check of p_commit.
5269 
5270         IF FND_API.To_Boolean( p_commit ) THEN
5271                 COMMIT WORK;
5272         END IF;
5273 
5274 
5275         -- Standard call to get message count and if count is  get message info.
5276         FND_MSG_PUB.Count_And_Get
5277                 (p_count        =>      x_msg_count ,
5278                  p_data         =>      x_msg_data  );
5279 EXCEPTION
5280         WHEN FND_API.G_EXC_ERROR THEN
5281                 ROLLBACK TO create_inst_party_acct_pvt;
5282                 x_return_status := FND_API.G_RET_STS_ERROR ;
5283 
5284                 FND_MSG_PUB.Count_And_Get
5285                 (       p_count      =>      x_msg_count,
5286                         p_data       =>      x_msg_data  );
5287         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5288                ROLLBACK TO create_inst_party_acct_pvt;
5289                x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5290                 FND_MSG_PUB.Count_And_Get
5291                 (       p_count   =>      x_msg_count,
5292                         p_data    =>      x_msg_data  );
5293         WHEN OTHERS THEN
5294                 ROLLBACK TO create_inst_party_acct_pvt;
5295                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5296                 IF FND_MSG_PUB.Check_Msg_Level
5297                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5298                 THEN
5299                    FND_MSG_PUB.Add_Exc_Msg
5300                     ( g_pkg_name, l_api_name );
5301                 END IF;
5302                FND_MSG_PUB.Count_And_Get
5303                 (       p_count     =>      x_msg_count,
5304                         p_data      =>      x_msg_data );
5305 
5306 END create_inst_party_account;
5307 
5308 /*-----------------------------------------------------------*/
5309 /* Procedure name:  Update_inst_party_account                */
5310 /* Description :  Procedure used to update the existing      */
5311 /*                instance-party account relationships       */
5312 /*-----------------------------------------------------------*/
5313 
5314 PROCEDURE update_inst_party_account
5315  (    p_api_version                 IN  NUMBER
5316      ,p_commit                      IN  VARCHAR2
5317      ,p_init_msg_list               IN  VARCHAR2
5318      ,p_validation_level            IN  NUMBER
5319      ,p_party_account_rec           IN  csi_datastructures_pub.party_account_rec
5320      ,p_txn_rec                     IN  OUT NOCOPY  csi_datastructures_pub.transaction_rec
5321      ,p_oks_txn_inst_tbl            IN OUT NOCOPY   oks_ibint_pub.txn_instance_tbl
5322      ,x_return_status               OUT NOCOPY  VARCHAR2
5323      ,x_msg_count                   OUT NOCOPY  NUMBER
5324      ,x_msg_data                    OUT NOCOPY  VARCHAR2
5325     ) IS
5326 
5327       l_api_name      CONSTANT VARCHAR2(30)   := 'UPDATE_INST_PARTY_ACCOUNT';
5328       l_api_version   CONSTANT NUMBER         := 1.0;
5329       l_csi_debug_level        NUMBER;
5330 --       l_curr_party_acct_rec    csi_datastructures_pub.party_account_rec;
5331       l_temp_party_account_rec csi_datastructures_pub.party_account_rec;
5332       l_party_rec              csi_datastructures_pub.party_rec;
5333       l_msg_index              NUMBER;
5334       l_msg_count              NUMBER;
5335       l_mod_value              NUMBER;
5336       l_object_version_number  NUMBER;
5337       l_ip_account_history_id  NUMBER;
5338       l_full_dump_frequency    NUMBER;
5339       x_msg_index_out          NUMBER;
5340 
5341       -- Alternate PK variables
5342       l_alt_pk_inst_pty_id     NUMBER;
5343       l_alt_pk_pty_acct_id     NUMBER;
5344       l_alt_pk_rel_type_code   VARCHAR2(30);
5345 
5346       l_party_relation                VARCHAR2(30);
5347       l_transaction_type              VARCHAR2(10);
5348       l_old_oks_cp_rec                oks_ibint_pub.cp_rec_type;
5349       l_new_oks_cp_rec                oks_ibint_pub.cp_rec_type;
5350       l_contracts_status              VARCHAR2(3);
5351       l_internal_party_id             NUMBER;
5352       l_party_id                      NUMBER;
5353       l_old_party_id                  NUMBER;
5354       l_new_party_id                  NUMBER;
5355     CURSOR instance_csr (p_ins_id IN NUMBER) IS
5356       SELECT  *
5357       FROM    csi_item_instances
5358       WHERE   instance_id = p_ins_id;
5359     l_instance_csr    instance_csr%ROWTYPE;
5360 
5361   CURSOR get_curr_party_acct_rec (p_ip_account_id   IN  NUMBER) IS
5362    SELECT
5363      ip_account_id                    ,
5364      FND_API.G_MISS_NUM parent_tbl_index,
5365      instance_party_id                ,
5366      party_account_id                 ,
5367      relationship_type_code           ,
5368      bill_to_address                  ,
5369      ship_to_address                  ,
5370      active_start_date                ,
5371      active_end_date                  ,
5372      context                          ,
5373      attribute1                       ,
5374      attribute2                       ,
5375      attribute3                       ,
5376      attribute4                       ,
5377      attribute5                       ,
5378      attribute6                       ,
5379      attribute7                       ,
5380      attribute8                       ,
5381      attribute9                       ,
5382      attribute10                      ,
5383      attribute11                      ,
5384      attribute12                      ,
5385      attribute13                      ,
5386      attribute14                      ,
5387      attribute15                      ,
5388      object_version_number
5389     FROM CSI_IP_ACCOUNTS
5390    WHERE IP_ACCOUNT_ID = p_ip_account_id
5391    FOR UPDATE OF OBJECT_VERSION_NUMBER;
5392     --AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE));
5393 
5394   l_curr_party_acct_rec    get_curr_party_acct_rec%ROWTYPE;
5395 
5396 
5397   CURSOR pty_acct_csr (p_act_hist_id NUMBER) IS
5398   SELECT  ip_account_history_id
5399          ,ip_account_id
5400          ,transaction_id
5401          ,old_party_account_id
5402          ,new_party_account_id
5403          ,old_relationship_type_code
5404          ,new_relationship_type_code
5405          ,old_active_start_date
5406          ,new_active_start_date
5407          ,old_active_end_date
5408          ,new_active_end_date
5409          ,old_context
5410          ,new_context
5411          ,old_attribute1
5412          ,new_attribute1
5413          ,old_attribute2
5414          ,new_attribute2
5415          ,old_attribute3
5416          ,new_attribute3
5417          ,old_attribute4
5418          ,new_attribute4
5419          ,old_attribute5
5420          ,new_attribute5
5421          ,old_attribute6
5422          ,new_attribute6
5423          ,old_attribute7
5424          ,new_attribute7
5425          ,old_attribute8
5426          ,new_attribute8
5427          ,old_attribute9
5428          ,new_attribute9
5429          ,old_attribute10
5430          ,new_attribute10
5431          ,old_attribute11
5432          ,new_attribute11
5433          ,old_attribute12
5434          ,new_attribute12
5435          ,old_attribute13
5436          ,new_attribute13
5437          ,old_attribute14
5438          ,new_attribute14
5439          ,old_attribute15
5440          ,new_attribute15
5441          ,object_version_number
5442          ,old_bill_to_address
5443          ,new_bill_to_address
5444          ,old_ship_to_address
5445          ,new_ship_to_address
5446          ,full_dump_flag
5447          ,old_instance_party_id
5448          ,new_instance_party_id
5449   FROM   csi_ip_accounts_h
5450   WHERE  csi_ip_accounts_h.ip_account_history_id = p_act_hist_id
5451   FOR UPDATE OF object_version_number ;
5452   l_pty_acct_csr         pty_acct_csr%ROWTYPE;
5453   l_ip_acct_hist_id      NUMBER;
5454   l_old_pty_acct_id      NUMBER; -- Added by sguthiva for bug 2307804
5455   l_new_pty_acct_id      NUMBER; -- Added by sguthiva for bug 2307804
5456   l_last_vld_org         NUMBER; -- Added by sguthiva for bug 2307804
5457   l_party_account_id     NUMBER; -- Added by sguthiva for bug 2307804
5458   l_account_hist_rec     csi_datastructures_pub.account_history_rec;
5459   l_rel_type_code        VARCHAR2(30);
5460   l_acct_end_date        DATE;
5461   l_temp_acct_date       DATE;
5462   l_found_for_update     VARCHAR2(1):='N';
5463   l_dummy                VARCHAR2(1);
5464   l_instance_party_id    NUMBER;
5465 BEGIN
5466         -- Standard Start of API savepoint
5467         -- SAVEPOINT  update_inst_party_acct_pvt;
5468 
5469 
5470         -- Standard call to check for call compatibility.
5471         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
5472                                                 p_api_version           ,
5473                                                 l_api_name              ,
5474                                                 g_pkg_name              )
5475         THEN
5476                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5477         END IF;
5478 
5479         -- Initialize message list if p_init_msg_list is set to TRUE.
5480         IF FND_API.to_Boolean( p_init_msg_list ) THEN
5481                 FND_MSG_PUB.initialize;
5482         END IF;
5483 
5484         --  Initialize API return status to success
5485         x_return_status := FND_API.G_RET_STS_SUCCESS;
5486 
5487         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
5488         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
5489 
5490         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
5491         IF (l_csi_debug_level > 0) THEN
5492             csi_gen_utility_pvt.put_line( 'update_inst_party_account');
5493         END IF;
5494 
5495         -- If the debug level = 2 then dump all the parameters values.
5496         IF (l_csi_debug_level > 1) THEN
5497                 csi_gen_utility_pvt.put_line( 'update_inst_party_account '||'-'||
5498                                                 p_api_version           ||'-'||
5499                                                 p_commit                ||'-'||
5500                                                 p_init_msg_list               );
5501             -- Dump the records in the log file
5502             csi_gen_utility_pvt.dump_party_account_rec(p_party_account_rec);
5503             csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
5504         END IF;
5505 
5506         -- Start API body
5507         --
5508         -- Check if all the required parameters are passed
5509     	 CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
5510  	      (    p_party_account_rec.ip_account_id ,
5511 		    '  p_party_account_rec.IP_ACCOUNT_ID ',
5512 		       l_api_name                 );
5513         --
5514         IF p_party_account_rec.party_account_id IS NULL THEN
5515            FND_MESSAGE.SET_NAME('CSI','CSI_API_MANDATORY_ACCOUNT');
5516            FND_MSG_PUB.Add;
5517            RAISE FND_API.G_EXC_ERROR;
5518         END IF;
5519         --
5520     	-- Check if the instance party id  is valid
5521       -- Commented by sk for bug 2232880
5522       -- End of commentation by sk for bug 2232880
5523 
5524         -- check if the object_version_number passed matches with the one
5525         -- in the database else raise error
5526         OPEN get_curr_party_acct_rec(p_party_account_rec.IP_ACCOUNT_ID);
5527         FETCH get_curr_party_acct_rec INTO l_curr_party_acct_rec;
5528         IF  (l_curr_party_acct_rec.object_version_number <> p_party_account_rec.OBJECT_VERSION_NUMBER) THEN
5529             FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
5530             FND_MSG_PUB.ADD;
5531             RAISE FND_API.G_EXC_ERROR;
5532         END IF;
5533         IF get_curr_party_acct_rec%NOTFOUND THEN
5534           FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
5535           FND_MSG_PUB.ADD;
5536           RAISE FND_API.G_EXC_ERROR;
5537         END IF;
5538         CLOSE get_curr_party_acct_rec;
5539 
5540         -- Added by sguthiva for bug 2307804
5541         IF l_curr_party_acct_rec.active_end_date IS NULL OR
5542            l_curr_party_acct_rec.active_end_date > SYSDATE
5543         THEN
5544              l_old_pty_acct_id :=l_curr_party_acct_rec.party_account_id;-- added 18apr
5545         ELSE
5546              l_old_pty_acct_id := NULL;
5547         END IF;
5548         -- End addition by sguthiva for bug 2307804
5549 
5550         IF p_party_account_rec.INSTANCE_PARTY_ID <> FND_API.G_MISS_NUM THEN
5551     	    -- Check if the instance party id  is valid
5552             IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid
5553                                      (p_Instance_party_id => p_party_account_rec.INSTANCE_PARTY_ID
5554                                      ,p_txn_type_id       => p_txn_rec.transaction_type_id
5555                                      ,p_mode              => 'U'      -- Added for bug 3550541
5556                                       )
5557                    )
5558             THEN
5559             -- Message added in the validation routine since additional validation added for bug # 2477417.
5560 	           --  FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_INST_PARTY_ID');
5561 	           --  FND_MESSAGE.SET_TOKEN('INSTANCE_PARTY_ID',p_party_account_rec.INSTANCE_PARTY_ID);
5562 	           --  FND_MSG_PUB.Add;
5563                      RAISE FND_API.G_EXC_ERROR;
5564             END IF;
5565             IF p_party_account_rec.INSTANCE_PARTY_ID  <> l_curr_party_acct_rec.INSTANCE_PARTY_ID THEN
5566             -- Start addition
5567                IF p_txn_rec.transaction_type_id <> 7
5568                THEN
5569                   FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5570                   FND_MESSAGE.Set_Token('COLUMN', 'INSTANCE_PARTY_ID');
5571                   FND_MSG_PUB.ADD;
5572                   RAISE FND_API.G_EXC_ERROR;
5573                ELSE
5574                   BEGIN
5575                      SELECT relationship_type_code
5576                      INTO   l_rel_type_code
5577                      FROM   csi_i_parties
5578                      WHERE  instance_party_id=l_curr_party_acct_rec.instance_party_id;
5579 
5580                      IF (l_rel_type_code='OWNER' AND
5581                          l_curr_party_acct_rec.relationship_type_code='OWNER' )/* OR
5582                         (l_curr_party_acct_rec.active_end_date IS NOT NULL AND
5583                          l_curr_party_acct_rec.active_end_date < SYSDATE AND
5584                          (p_party_account_rec.active_end_date = fnd_api.g_miss_date OR
5585                           p_party_account_rec.active_end_date < SYSDATE )) */
5586                     -- Commented the above code for bug 3539990 (reported in 11.5.9)
5587                      THEN
5588                          FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5589                          FND_MESSAGE.Set_Token('COLUMN', 'INSTANCE_PARTY_ID');
5590                          FND_MSG_PUB.ADD;
5591                          RAISE FND_API.G_EXC_ERROR;
5592                      END IF;
5593                   EXCEPTION
5594                      WHEN FND_API.G_EXC_ERROR THEN
5595                           RAISE FND_API.G_EXC_ERROR;
5596                   END;
5597 
5598                END IF;
5599                -- End addition
5600             END IF;
5601         ELSE
5602            -- srramakr Updates not allowed for Expired instance. Bug # 2477417
5603            IF NOT(CSI_Instance_parties_vld_pvt.Is_Inst_partyID_Valid
5604                                      (p_Instance_party_id => l_curr_party_acct_rec.INSTANCE_PARTY_ID
5605                                      ,p_txn_type_id       => p_txn_rec.transaction_type_id
5606                                      ,p_mode              => 'U'      -- Added for bug 3550541
5607                                       )
5608                   )
5609            THEN
5610               RAISE FND_API.G_EXC_ERROR;
5611            END IF;
5612         END IF;
5613         l_party_relation := CSI_Instance_parties_vld_pvt.Get_Party_relation
5614                          (l_curr_party_acct_rec.Instance_party_id);
5615         --
5616         IF p_party_account_rec.active_start_date IS NULL THEN
5617            FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5618            FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
5619            FND_MSG_PUB.ADD;
5620            RAISE FND_API.G_EXC_ERROR;
5621         END IF;
5622         --
5623         IF p_party_account_rec.active_start_date <> FND_API.G_MISS_DATE THEN
5624              IF p_party_account_rec.active_start_date <> l_curr_party_acct_rec.active_start_date THEN
5625                 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5626                 FND_MESSAGE.Set_Token('COLUMN', 'ACTIVE_START_DATE');
5627                 FND_MSG_PUB.ADD;
5628                RAISE FND_API.G_EXC_ERROR;
5629              END IF;
5630         END IF;
5631 
5632         -- Verify if the active_end_date is valid
5633         -- Don't allow expiry of owner accounts
5634         IF  ( p_party_account_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE) THEN
5635            IF ((l_curr_party_acct_rec.relationship_type_code = 'OWNER')
5636               AND (l_party_relation = 'OWNER')) THEN
5637               -- Added by sguthiva for bug 2307804
5638                  IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
5639                      csi_gen_utility_pvt.populate_install_param_rec;
5640                   END IF;
5641                   --
5642                   l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
5643                   --
5644                   IF l_internal_party_id IS NULL THEN
5645                      FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
5646                      FND_MSG_PUB.ADD;
5647                      RAISE FND_API.G_EXC_ERROR;
5648                   END IF;
5649                   --
5650               -- End addition by sguthiva for bug 2307804
5651                 IF p_party_account_rec.expire_flag = fnd_api.g_false -- Added by sguthiva for bug 2307804
5652                -- IF csi_party_relationships_pvt.g_force_expire_flag   = 'N' -- Commented by sguthiva for bug 2307804
5653                 THEN
5654                    FND_MESSAGE.Set_Name('CSI', 'CSI_API_EXP_NOT_ALLOWED');
5655                    FND_MESSAGE.Set_Token('COLUMN', 'OWNER ACCOUNT');
5656                    FND_MSG_PUB.ADD;
5657                    RAISE FND_API.G_EXC_ERROR;
5658                 END IF;
5659            ELSE
5660 
5661             -- Verify if the active_end_date is valid
5662              IF p_party_account_rec.expire_flag = fnd_api.g_false  THEN    -- Added by sguthiva for bug 2307804
5663            -- IF (g_expire_account_flag <> 'Y') THEN                       -- Commented by sguthiva for bug 2307804
5664                IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_EndDate_Valid
5665                                  (l_curr_party_acct_rec.ACTIVE_START_DATE,
5666                                   p_party_account_rec.ACTIVE_END_DATE ,
5667                                   p_party_account_rec.INSTANCE_PARTY_ID ,
5668 			          p_party_account_rec.IP_ACCOUNT_ID ,
5669 			          p_txn_rec.TRANSACTION_ID))  THEN
5670                   RAISE FND_API.G_EXC_ERROR;
5671                END IF;
5672 
5673 
5674                -- Added following code for bug 3855525.
5675                IF p_party_account_rec.ACTIVE_END_DATE IS NOT NULL AND
5676                   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
5677                   l_curr_party_acct_rec.ACTIVE_START_DATE <> FND_API.G_MISS_DATE AND
5678                   p_party_account_rec.ACTIVE_END_DATE < l_curr_party_acct_rec.ACTIVE_START_DATE
5679                THEN
5680                    FND_MESSAGE.Set_Name('CSI', 'CSI_ENDDT_GT_STDT');
5681 
5682                    FND_MESSAGE.Set_Token('END_DATE',p_party_account_rec.ACTIVE_END_DATE);
5683                    FND_MESSAGE.Set_Token('START_DATE',l_curr_party_acct_rec.ACTIVE_START_DATE);
5684                    FND_MSG_PUB.ADD;
5685                    RAISE FND_API.G_EXC_ERROR;
5686                END IF;
5687                -- End code addition for bug 3855525.
5688 
5689              END IF;
5690            END IF;
5691         END IF;
5692 
5693 
5694         -- Verify the relationship_type_code is valid
5695         -- Don't allow change of owner accounts
5696         IF p_party_account_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
5697            IF ((p_party_account_rec.relationship_type_code <> l_curr_party_acct_rec.relationship_type_code)
5698               AND (l_curr_party_acct_rec.relationship_type_code = 'OWNER')
5699               AND (l_party_relation = 'OWNER')) THEN
5700                 FND_MESSAGE.Set_Name('CSI', 'CSI_API_UPD_NOT_ALLOWED');
5701                 FND_MESSAGE.Set_Token('COLUMN', 'OWNER ACCOUNT');
5702                 FND_MSG_PUB.ADD;
5703                 RAISE FND_API.G_EXC_ERROR;
5704            ELSE
5705                -- Verify the relationship_type_code is valid
5706               IF NOT(CSI_Instance_parties_vld_pvt.Is_Acct_Rel_type_Valid
5707                                 (p_party_account_rec.RELATIONSHIP_TYPE_CODE)) THEN
5708                  RAISE FND_API.G_EXC_ERROR;
5709               END IF;
5710            END IF;
5711         END IF;
5712 
5713   -- Need to add the following as account/party merge transaction
5714   -- is allowed to change the instance_party_id.
5715     IF p_txn_rec.transaction_type_id=7 AND
5716       (p_party_account_rec.instance_party_id IS NOT NULL AND
5717        p_party_account_rec.instance_party_id <> fnd_api.g_miss_num)
5718     THEN
5719       l_instance_party_id := p_party_account_rec.instance_party_id;
5720     ELSE
5721       l_instance_party_id := l_curr_party_acct_rec.INSTANCE_PARTY_ID;
5722     END IF;
5723 
5724         -- verify if party_account_id  is valid
5725         IF p_party_account_rec.PARTY_ACCOUNT_ID <> FND_API.G_MISS_NUM THEN
5726          -- Added the following condition for bug 3830149 (rel 11.5.9)
5727          IF (p_party_account_rec.ACTIVE_END_DATE IS NULL OR
5728              p_party_account_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE)
5729              OR
5730             (p_party_account_rec.ACTIVE_END_DATE IS NOT NULL AND
5731              p_party_account_rec.ACTIVE_END_DATE <> FND_API.G_MISS_DATE AND
5732              p_party_account_rec.ACTIVE_END_DATE > SYSDATE)
5733          THEN
5734           IF NOT(CSI_Instance_parties_vld_pvt.Is_Pty_accountID_Valid
5735                        (p_party_account_rec.PARTY_ACCOUNT_ID,
5736                         l_instance_party_id, --l_curr_party_acct_rec.INSTANCE_PARTY_ID,
5737                         p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5738                         p_txn_rec.transaction_type_id, -- Added for bug 3550541
5739                         'U'                            -- Added for bug 3550541
5740                         )
5741                  )
5742           THEN
5743                RAISE FND_API.G_EXC_ERROR;
5744           END IF;
5745          ELSE
5746            -- Since party_account_id validation is not required during expiration of accounts
5747            -- ,Hence we added the above filter condition.
5748            -- Refer bug 3830149 for more explaination.
5749            NULL;
5750          END IF;
5751         END IF;
5752 
5753        -- Verify if bill to address is correct
5754         IF p_party_account_rec.bill_to_address <> FND_API.G_MISS_NUM THEN
5755            IF NOT(CSI_Instance_parties_vld_pvt.Is_bill_to_add_valid
5756                ( p_party_account_rec.bill_to_address)) THEN
5757                RAISE FND_API.G_EXC_ERROR;
5758            END IF;
5759         END IF;
5760 
5761 
5762        -- Verify if ship to address is correct
5763         IF p_party_account_rec.ship_to_address <> FND_API.G_MISS_NUM THEN
5764             IF NOT(CSI_Instance_parties_vld_pvt.Is_ship_to_add_valid
5765                ( p_party_account_rec.ship_to_address)) THEN
5766                 RAISE FND_API.G_EXC_ERROR;
5767             END IF;
5768         END IF;
5769 
5770        -- Validate alternate primary key
5771        -- Verify if the party account combination exists
5772        IF  ((p_party_account_rec.instance_party_id   IS NULL) OR
5773             (p_party_account_rec.instance_party_id = FND_API.G_MISS_NUM)) THEN
5774           l_alt_pk_inst_pty_id := l_curr_party_acct_rec.instance_party_id;
5775        ELSE
5776           l_alt_pk_inst_pty_id := p_party_account_rec.instance_party_id;
5777        END IF;
5778 
5779        IF ((p_party_account_rec.party_account_id IS NULL) OR
5780             (p_party_account_rec.party_account_id = FND_API.G_MISS_NUM)) THEN
5781             l_alt_pk_pty_acct_id :=   l_curr_party_acct_rec.party_account_id;
5782        ELSE
5783             l_alt_pk_pty_acct_id :=   p_party_account_rec.party_account_id;
5784        END IF;
5785 
5786        IF ((p_party_account_rec.relationship_type_code IS NULL) OR
5787             (p_party_account_rec.relationship_type_code = FND_API.G_MISS_CHAR)) THEN
5788             l_alt_pk_rel_type_code := l_curr_party_acct_rec.relationship_type_code;
5789        ELSE
5790             l_alt_pk_rel_type_code := p_party_account_rec.relationship_type_code;
5791        END IF;
5792 
5793         IF  ((l_alt_pk_inst_pty_id <> l_curr_party_acct_rec.instance_party_id)
5794             OR
5795             (l_alt_pk_pty_acct_id <> l_curr_party_acct_rec.party_account_id)
5796             OR
5797             (l_alt_pk_rel_type_code <> l_curr_party_acct_rec.relationship_type_code))
5798         THEN
5799              -- Verify if the party account combination exists
5800            IF p_txn_rec.transaction_type_id=7
5801            THEN
5802            l_found_for_update:='T';
5803              BEGIN
5804               SELECT 'x'
5805                 INTO l_dummy
5806                 FROM csi_ip_accounts
5807                WHERE instance_party_id      = l_alt_pk_inst_pty_id
5808                  AND party_account_id       = l_alt_pk_pty_acct_id
5809                  AND relationship_type_code = l_alt_pk_rel_type_code
5810                  AND ((active_end_date IS NULL) OR (active_end_date >= sysdate))
5811                  AND ROWNUM=1;
5812 
5813              -- If found then there exists a record in csi_i_parties, Hence
5814             -- I need to expire(if active) this record.
5815                BEGIN
5816                   SELECT active_end_date
5817                     INTO l_temp_acct_date
5818                     FROM csi_ip_accounts
5819                    WHERE ip_account_id=p_party_account_rec.ip_account_id
5820                      AND ((active_end_date IS NULL) OR (active_end_date > sysdate));
5821                    -- Active record found so make it inactive.
5822                        l_temp_acct_date:=sysdate;
5823                EXCEPTION
5824                  WHEN NO_DATA_FOUND THEN
5825                    -- Means the record is already in inactive state.
5826                       l_temp_acct_date := p_party_account_rec.active_end_date;
5827                END;
5828 
5829              EXCEPTION
5830                WHEN OTHERS THEN
5831                -- No changes are needed.
5832                   l_temp_acct_date := p_party_account_rec.active_end_date;
5833              END;
5834 
5835            ELSE
5836              IF CSI_Instance_parties_vld_pvt.Is_Pty_Acct_Comb_Exists
5837                             (l_alt_pk_inst_pty_id ,
5838                              l_alt_pk_pty_acct_id ,
5839                              l_alt_pk_rel_type_code ) THEN
5840                     RAISE FND_API.G_EXC_ERROR;
5841              END IF;
5842            END IF;
5843          END IF;
5844 
5845        -- Verify if it meets Account Rules
5846         IF  ((l_alt_pk_inst_pty_id <> l_curr_party_acct_rec.instance_party_id)
5847             OR
5848             (l_alt_pk_rel_type_code <> l_curr_party_acct_rec.relationship_type_code))
5849         THEN
5850            IF CSI_Instance_parties_vld_pvt.Acct_Rules_Check
5851                        (l_alt_pk_inst_pty_id ,
5852                         l_alt_pk_rel_type_code ) THEN
5853              RAISE FND_API.G_EXC_ERROR;
5854            END IF;
5855          END IF;
5856 
5857         -- Get party record for later use in contaracts
5858         IF NOT(CSI_Instance_parties_vld_pvt.Get_Party_Record
5859            (l_curr_party_acct_rec.instance_party_id,
5860            l_party_rec)) THEN
5861            RAISE FND_API.G_EXC_ERROR;
5862         END IF;
5863 
5864        -- If it is an owner party and owner account then update csi_item_instances
5865         IF p_party_account_rec.relationship_type_code <> FND_API.G_MISS_CHAR THEN
5866            IF ((p_party_account_rec.relationship_type_code = 'OWNER')
5867               AND (l_party_relation = 'OWNER')) THEN
5868             -- Added by sguthiva for bug 2307804
5869              IF p_party_account_rec.party_account_id <> fnd_api.g_miss_num
5870               AND p_party_account_rec.party_account_id IS NOT NULL
5871              THEN
5872                 update csi_item_instances
5873                 set   owner_party_account_id =  p_party_account_rec.party_account_id
5874                 where  instance_id     = l_party_rec.instance_id;
5875              END IF;
5876             END IF;
5877             -- End addition by sguthiva for bug 2307804
5878         END IF;
5879 
5880            IF p_txn_rec.transaction_type_id=7 AND
5881               l_found_for_update='T'
5882            THEN
5883               l_acct_end_date:=l_temp_acct_date;
5884            ELSE
5885               l_acct_end_date:=p_party_account_rec.active_end_date;
5886            END IF;
5887 
5888         -- Increment the object_version_number before updating
5889         l_OBJECT_VERSION_NUMBER := l_curr_party_acct_rec.OBJECT_VERSION_NUMBER + 1 ;
5890 
5891         -- Calling table table handler to update
5892         CSI_IP_ACCOUNTS_PKG.Update_Row
5893         (
5894           p_IP_ACCOUNT_ID       => p_party_account_rec.ip_account_id,
5895           p_INSTANCE_PARTY_ID   => p_party_account_rec.INSTANCE_PARTY_ID,
5896           p_PARTY_ACCOUNT_ID    => p_party_account_rec.PARTY_ACCOUNT_ID,
5897           p_RELATIONSHIP_TYPE_CODE => p_party_account_rec.RELATIONSHIP_TYPE_CODE,
5898           p_ACTIVE_START_DATE   => p_party_account_rec.ACTIVE_START_DATE,
5899           p_ACTIVE_END_DATE     => l_acct_end_date, --p_party_account_rec.ACTIVE_END_DATE,
5900           p_CONTEXT             => p_party_account_rec.CONTEXT,
5901           p_ATTRIBUTE1          => p_party_account_rec.ATTRIBUTE1,
5902           p_ATTRIBUTE2          => p_party_account_rec.ATTRIBUTE2,
5903           p_ATTRIBUTE3          => p_party_account_rec.ATTRIBUTE3,
5904           p_ATTRIBUTE4          => p_party_account_rec.ATTRIBUTE4,
5905           p_ATTRIBUTE5          => p_party_account_rec.ATTRIBUTE5,
5906           p_ATTRIBUTE6          => p_party_account_rec.ATTRIBUTE6,
5907           p_ATTRIBUTE7          => p_party_account_rec.ATTRIBUTE7,
5908           p_ATTRIBUTE8          => p_party_account_rec.ATTRIBUTE8,
5909           p_ATTRIBUTE9          => p_party_account_rec.ATTRIBUTE9,
5910           p_ATTRIBUTE10         => p_party_account_rec.ATTRIBUTE10,
5911           p_ATTRIBUTE11         => p_party_account_rec.ATTRIBUTE11,
5912           p_ATTRIBUTE12         => p_party_account_rec.ATTRIBUTE12,
5913           p_ATTRIBUTE13         => p_party_account_rec.ATTRIBUTE13,
5914           p_ATTRIBUTE14         => p_party_account_rec.ATTRIBUTE14,
5915           p_ATTRIBUTE15         => p_party_account_rec.ATTRIBUTE15,
5916           p_CREATED_BY          => FND_API.G_MISS_NUM, -- FND_GLOBAL.USER_ID,
5917           p_CREATION_DATE       => FND_API.G_MISS_DATE, -- SYSDATE,
5918           p_LAST_UPDATED_BY     => FND_GLOBAL.USER_ID             ,
5919           p_LAST_UPDATE_DATE    => SYSDATE                        ,
5920           p_LAST_UPDATE_LOGIN   => FND_GLOBAL.LOGIN_ID            ,
5921           p_OBJECT_VERSION_NUMBER => l_OBJECT_VERSION_NUMBER      ,
5922           p_BILL_TO_ADDRESS     => p_party_account_rec.BILL_TO_ADDRESS,
5923           p_SHIP_TO_ADDRESS     => p_party_account_rec.SHIP_TO_ADDRESS,
5924           p_REQUEST_ID          => p_party_account_rec.REQUEST_ID,
5925           p_PROGRAM_APPLICATION_ID => p_party_account_rec.PROGRAM_APPLICATION_ID,
5926           p_PROGRAM_ID          => p_party_account_rec.PROGRAM_ID,
5927           p_PROGRAM_UPDATE_DATE => p_party_account_rec.PROGRAM_UPDATE_DATE);
5928 
5929          -- Call create_transaction to create txn log
5930          CSI_TRANSACTIONS_PVT.Create_transaction
5931           (
5932              p_api_version            => p_api_version
5933             ,p_commit                 => p_commit
5934             ,p_init_msg_list          => p_init_msg_list
5935             ,p_validation_level       => p_validation_level
5936             ,p_Success_If_Exists_Flag => 'Y'
5937             ,P_transaction_rec        => p_txn_rec
5938             ,x_return_status          => x_return_status
5939             ,x_msg_count              => x_msg_count
5940             ,x_msg_data               => x_msg_data         );
5941 
5942          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
5943 
5944               FOR i in 1..x_msg_Count LOOP
5945                 FND_MSG_PUB.Get(p_msg_index     => i,
5946                                 p_encoded       => 'F',
5947                                 p_data          => x_msg_data,
5948                                 p_msg_index_out => x_msg_index_out );
5949                 csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
5950               End LOOP;
5951               RAISE FND_API.G_EXC_ERROR;
5952          END IF;
5953 
5954 
5955 
5956          -- Generate a unique instance_party_history_id from the sequence
5957          l_ip_account_history_id := CSI_Instance_parties_vld_pvt.gen_ip_account_hist_id;
5958 
5959          -- Get the full_dump_frequency from csi_install_parameter
5960        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
5961           csi_gen_utility_pvt.populate_install_param_rec;
5962        END IF;
5963        --
5964        l_full_dump_frequency := csi_datastructures_pub.g_install_param_rec.history_full_dump_frequency;
5965        --
5966        IF l_full_dump_frequency IS NULL THEN
5967           FND_MESSAGE.SET_NAME('CSI','CSI_API_GET_FULL_DUMP_FAILED');
5968           FND_MSG_PUB.ADD;
5969           RAISE FND_API.G_EXC_ERROR;
5970        END IF;
5971        --
5972          select mod(l_object_version_number,l_full_dump_frequency)
5973          into   l_mod_value
5974          from   dual;
5975 
5976          -- assign the party rec
5977          l_temp_party_account_rec := p_party_account_rec;
5978          l_temp_party_account_rec.active_end_date:=l_acct_end_date;
5979       -- Start of changes for Bug#2547034 on 09/20/02 - rtalluri
5980        BEGIN
5981         SELECT  ip_account_history_id
5982         INTO    l_ip_acct_hist_id
5983         FROM    csi_ip_accounts_h h
5984         WHERE   h.transaction_id = p_txn_rec.transaction_id
5985         AND     h.ip_account_id = p_party_account_rec.ip_account_id;
5986 
5987         OPEN   pty_acct_csr(l_ip_acct_hist_id);
5988         FETCH  pty_acct_csr INTO l_pty_acct_csr ;
5989         CLOSE  pty_acct_csr;
5990         IF l_pty_acct_csr.full_dump_flag = 'Y'
5991         THEN
5992         CSI_IP_ACCOUNTS_H_PKG.Update_Row
5993          (
5994           p_IP_ACCOUNT_HISTORY_ID         => l_ip_acct_hist_id                        ,
5995           p_IP_ACCOUNT_ID                 => fnd_api.g_miss_num                       ,
5996           p_TRANSACTION_ID                => fnd_api.g_miss_num                       ,
5997           p_OLD_PARTY_ACCOUNT_ID          => fnd_api.g_miss_num                       ,
5998           p_NEW_PARTY_ACCOUNT_ID          => l_temp_party_account_rec.PARTY_ACCOUNT_ID,
5999           p_OLD_RELATIONSHIP_TYPE_CODE    => fnd_api.g_miss_char                      ,
6000           p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_account_rec.RELATIONSHIP_TYPE_CODE,
6001           p_OLD_ACTIVE_START_DATE         => fnd_api.g_miss_date                      ,
6002           p_NEW_ACTIVE_START_DATE         => l_temp_party_account_rec.ACTIVE_START_DATE,
6003           p_OLD_ACTIVE_END_DATE           => fnd_api.g_miss_date                      ,
6004           p_NEW_ACTIVE_END_DATE           => l_temp_party_account_rec.ACTIVE_END_DATE ,
6005           p_OLD_CONTEXT                   => fnd_api.g_miss_char                      ,
6006           p_NEW_CONTEXT                   => l_temp_party_account_rec.CONTEXT         ,
6007           p_OLD_ATTRIBUTE1                => fnd_api.g_miss_char                      ,
6008           p_NEW_ATTRIBUTE1                => l_temp_party_account_rec.ATTRIBUTE1      ,
6009           p_OLD_ATTRIBUTE2                => fnd_api.g_miss_char                      ,
6010           p_NEW_ATTRIBUTE2                => l_temp_party_account_rec.ATTRIBUTE2      ,
6011           p_OLD_ATTRIBUTE3                => fnd_api.g_miss_char                      ,
6012           p_NEW_ATTRIBUTE3                => l_temp_party_account_rec.ATTRIBUTE3      ,
6013           p_OLD_ATTRIBUTE4                => fnd_api.g_miss_char                      ,
6014           p_NEW_ATTRIBUTE4                => l_temp_party_account_rec.ATTRIBUTE4      ,
6015           p_OLD_ATTRIBUTE5                => fnd_api.g_miss_char                      ,
6016           p_NEW_ATTRIBUTE5                => l_temp_party_account_rec.ATTRIBUTE5      ,
6017           p_OLD_ATTRIBUTE6                => fnd_api.g_miss_char                      ,
6018           p_NEW_ATTRIBUTE6                => l_temp_party_account_rec.ATTRIBUTE6      ,
6019           p_OLD_ATTRIBUTE7                => fnd_api.g_miss_char                      ,
6020           p_NEW_ATTRIBUTE7                => l_temp_party_account_rec.ATTRIBUTE7      ,
6021           p_OLD_ATTRIBUTE8                => fnd_api.g_miss_char                      ,
6022           p_NEW_ATTRIBUTE8                => l_temp_party_account_rec.ATTRIBUTE8      ,
6023           p_OLD_ATTRIBUTE9                => fnd_api.g_miss_char                      ,
6024           p_NEW_ATTRIBUTE9                => l_temp_party_account_rec.ATTRIBUTE9      ,
6025           p_OLD_ATTRIBUTE10               => fnd_api.g_miss_char                      ,
6026           p_NEW_ATTRIBUTE10               => l_temp_party_account_rec.ATTRIBUTE10     ,
6027           p_OLD_ATTRIBUTE11               => fnd_api.g_miss_char                      ,
6028           p_NEW_ATTRIBUTE11               => l_temp_party_account_rec.ATTRIBUTE11     ,
6029           p_OLD_ATTRIBUTE12               => fnd_api.g_miss_char                      ,
6030           p_NEW_ATTRIBUTE12               => l_temp_party_account_rec.ATTRIBUTE12     ,
6031           p_OLD_ATTRIBUTE13               => fnd_api.g_miss_char                      ,
6032           p_NEW_ATTRIBUTE13               => l_temp_party_account_rec.ATTRIBUTE13     ,
6033           p_OLD_ATTRIBUTE14               => fnd_api.g_miss_char                      ,
6034           p_NEW_ATTRIBUTE14               => l_temp_party_account_rec.ATTRIBUTE14     ,
6035           p_OLD_ATTRIBUTE15               => fnd_api.g_miss_char                      ,
6036           p_NEW_ATTRIBUTE15               => l_temp_party_account_rec.ATTRIBUTE15     ,
6037           p_FULL_DUMP_FLAG                => fnd_api.g_miss_char                      ,
6038           p_CREATED_BY                    => FND_API.G_MISS_NUM                       ,
6039           p_CREATION_DATE                 => FND_API.G_MISS_DATE                      ,
6040           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                       ,
6041           p_LAST_UPDATE_DATE              => SYSDATE                                  ,
6042           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID                      ,
6043           p_OBJECT_VERSION_NUMBER         => fnd_api.g_miss_num                       ,
6044           p_OLD_BILL_TO_ADDRESS           => fnd_api.g_miss_num                       ,
6045           p_NEW_BILL_TO_ADDRESS           => l_temp_party_account_rec.BILL_TO_ADDRESS ,
6046           p_OLD_SHIP_TO_ADDRESS           => fnd_api.g_miss_num                       ,
6047           p_NEW_SHIP_TO_ADDRESS           => l_temp_party_account_rec.SHIP_TO_ADDRESS ,
6048           p_OLD_INSTANCE_PARTY_ID         => fnd_api.g_miss_num                       ,
6049           p_NEW_INSTANCE_PARTY_ID         => l_temp_party_account_rec.INSTANCE_PARTY_ID);
6050 
6051 
6052         ELSE
6053 
6054              IF    ( l_pty_acct_csr.old_party_account_id IS NULL
6055                 AND  l_pty_acct_csr.new_party_account_id IS NULL ) THEN
6056                      IF  ( l_temp_party_account_rec.party_account_id = l_curr_party_acct_rec.party_account_id )
6057                       OR ( l_temp_party_account_rec.party_account_id = fnd_api.g_miss_num ) THEN
6058                            l_pty_acct_csr.old_party_account_id := NULL;
6059                            l_pty_acct_csr.new_party_account_id := NULL;
6060                      ELSE
6061                            l_pty_acct_csr.old_party_account_id := fnd_api.g_miss_num;
6062                            l_pty_acct_csr.new_party_account_id := l_temp_party_account_rec.party_account_id;
6063                      END IF;
6064              ELSE
6065                      l_pty_acct_csr.old_party_account_id := fnd_api.g_miss_num;
6066                      l_pty_acct_csr.new_party_account_id := l_temp_party_account_rec.party_account_id;
6067              END IF;
6068              --
6069              IF    ( l_pty_acct_csr.old_relationship_type_code IS NULL
6070                 AND  l_pty_acct_csr.new_relationship_type_code IS NULL ) THEN
6071                      IF  ( l_temp_party_account_rec.relationship_type_code = l_curr_party_acct_rec.relationship_type_code )
6072                       OR ( l_temp_party_account_rec.relationship_type_code = fnd_api.g_miss_char ) THEN
6073                            l_pty_acct_csr.old_relationship_type_code := NULL;
6074                            l_pty_acct_csr.new_relationship_type_code := NULL;
6075                      ELSE
6076                            l_pty_acct_csr.old_relationship_type_code := fnd_api.g_miss_char;
6077                            l_pty_acct_csr.new_relationship_type_code := l_temp_party_account_rec.relationship_type_code;
6078                      END IF;
6079              ELSE
6080                      l_pty_acct_csr.old_relationship_type_code := fnd_api.g_miss_char;
6081                      l_pty_acct_csr.new_relationship_type_code := l_temp_party_account_rec.relationship_type_code;
6082              END IF;
6083              --
6084              IF    ( l_pty_acct_csr.old_bill_to_address IS NULL
6085                 AND  l_pty_acct_csr.new_bill_to_address IS NULL ) THEN
6086                      IF  ( l_temp_party_account_rec.bill_to_address = l_curr_party_acct_rec.bill_to_address )
6087                       OR ( l_temp_party_account_rec.bill_to_address = fnd_api.g_miss_num ) THEN
6088                            l_pty_acct_csr.old_bill_to_address := NULL;
6089                            l_pty_acct_csr.new_bill_to_address := NULL;
6090                      ELSE
6091                            l_pty_acct_csr.old_bill_to_address := fnd_api.g_miss_num;
6092                            l_pty_acct_csr.new_bill_to_address := l_temp_party_account_rec.bill_to_address;
6093                      END IF;
6094              ELSE
6095                      l_pty_acct_csr.old_bill_to_address := fnd_api.g_miss_num;
6096                      l_pty_acct_csr.new_bill_to_address := l_temp_party_account_rec.bill_to_address;
6097              END IF;
6098              --
6099              IF    ( l_pty_acct_csr.old_ship_to_address IS NULL
6100                 AND  l_pty_acct_csr.new_ship_to_address IS NULL ) THEN
6101                      IF  ( l_temp_party_account_rec.ship_to_address = l_curr_party_acct_rec.ship_to_address )
6102                       OR ( l_temp_party_account_rec.ship_to_address = fnd_api.g_miss_num ) THEN
6103                            l_pty_acct_csr.old_ship_to_address := NULL;
6104                            l_pty_acct_csr.new_ship_to_address := NULL;
6105                      ELSE
6106                            l_pty_acct_csr.old_ship_to_address := fnd_api.g_miss_num;
6107                            l_pty_acct_csr.new_ship_to_address := l_temp_party_account_rec.ship_to_address;
6108                      END IF;
6109              ELSE
6110                      l_pty_acct_csr.old_ship_to_address := fnd_api.g_miss_num;
6111                      l_pty_acct_csr.new_ship_to_address := l_temp_party_account_rec.ship_to_address;
6112              END IF;
6113              --
6114              IF    ( l_pty_acct_csr.old_active_start_date IS NULL
6115                 AND  l_pty_acct_csr.new_active_start_date IS NULL ) THEN
6116                      IF  ( l_temp_party_account_rec.active_start_date = l_curr_party_acct_rec.active_start_date )
6117                       OR ( l_temp_party_account_rec.active_start_date = fnd_api.g_miss_date ) THEN
6118                            l_pty_acct_csr.old_active_start_date := NULL;
6119                            l_pty_acct_csr.new_active_start_date := NULL;
6120                      ELSE
6121                            l_pty_acct_csr.old_active_start_date := fnd_api.g_miss_date;
6122                            l_pty_acct_csr.new_active_start_date := l_temp_party_account_rec.active_start_date;
6123                      END IF;
6124              ELSE
6125                      l_pty_acct_csr.old_active_start_date := fnd_api.g_miss_date;
6126                      l_pty_acct_csr.new_active_start_date := l_temp_party_account_rec.active_start_date;
6127              END IF;
6128              --
6129              IF    ( l_pty_acct_csr.old_active_end_date IS NULL
6130                 AND  l_pty_acct_csr.new_active_end_date IS NULL ) THEN
6131                      IF  ( l_temp_party_account_rec.active_end_date = l_curr_party_acct_rec.active_end_date )
6132                       OR ( l_temp_party_account_rec.active_end_date = fnd_api.g_miss_date ) THEN
6133                            l_pty_acct_csr.old_active_end_date := NULL;
6134                            l_pty_acct_csr.new_active_end_date := NULL;
6135                      ELSE
6136                            l_pty_acct_csr.old_active_end_date := fnd_api.g_miss_date;
6137                            l_pty_acct_csr.new_active_end_date := l_temp_party_account_rec.active_end_date;
6138                      END IF;
6139              ELSE
6140                      l_pty_acct_csr.old_active_end_date := fnd_api.g_miss_date;
6141                      l_pty_acct_csr.new_active_end_date := l_temp_party_account_rec.active_end_date;
6142              END IF;
6143              --
6144              IF    ( l_pty_acct_csr.old_context IS NULL
6145                 AND  l_pty_acct_csr.new_context IS NULL ) THEN
6146                      IF  ( l_temp_party_account_rec.context = l_curr_party_acct_rec.context )
6147                       OR ( l_temp_party_account_rec.context = fnd_api.g_miss_char ) THEN
6148                            l_pty_acct_csr.old_context := NULL;
6149                            l_pty_acct_csr.new_context := NULL;
6150                      ELSE
6151                            l_pty_acct_csr.old_context := fnd_api.g_miss_char;
6152                            l_pty_acct_csr.new_context := l_temp_party_account_rec.context;
6153                      END IF;
6154              ELSE
6155                      l_pty_acct_csr.old_context := fnd_api.g_miss_char;
6156                      l_pty_acct_csr.new_context := l_temp_party_account_rec.context;
6157              END IF;
6158              --
6159              IF    ( l_pty_acct_csr.old_attribute1 IS NULL
6160                 AND  l_pty_acct_csr.new_attribute1 IS NULL ) THEN
6161                      IF  ( l_temp_party_account_rec.attribute1 = l_curr_party_acct_rec.attribute1 )
6162                       OR ( l_temp_party_account_rec.attribute1 = fnd_api.g_miss_char ) THEN
6163                            l_pty_acct_csr.old_attribute1 := NULL;
6164                            l_pty_acct_csr.new_attribute1 := NULL;
6165                      ELSE
6166                            l_pty_acct_csr.old_attribute1 := fnd_api.g_miss_char;
6167                            l_pty_acct_csr.new_attribute1 := l_temp_party_account_rec.attribute1;
6168                      END IF;
6169              ELSE
6170                      l_pty_acct_csr.old_attribute1 := fnd_api.g_miss_char;
6171                      l_pty_acct_csr.new_attribute1 := l_temp_party_account_rec.attribute1;
6172              END IF;
6173              --
6174              IF    ( l_pty_acct_csr.old_attribute2 IS NULL
6175                 AND  l_pty_acct_csr.new_attribute2 IS NULL ) THEN
6176                      IF  ( l_temp_party_account_rec.attribute2 = l_curr_party_acct_rec.attribute2 )
6177                       OR ( l_temp_party_account_rec.attribute2 = fnd_api.g_miss_char ) THEN
6178                            l_pty_acct_csr.old_attribute2 := NULL;
6179                            l_pty_acct_csr.new_attribute2 := NULL;
6180                      ELSE
6181                            l_pty_acct_csr.old_attribute2 := fnd_api.g_miss_char;
6182                            l_pty_acct_csr.new_attribute2 := l_temp_party_account_rec.attribute2;
6183                      END IF;
6184              ELSE
6185                      l_pty_acct_csr.old_attribute2 := fnd_api.g_miss_char;
6186                      l_pty_acct_csr.new_attribute2 := l_temp_party_account_rec.attribute2;
6187              END IF;
6188              --
6189              IF    ( l_pty_acct_csr.old_attribute3 IS NULL
6190                 AND  l_pty_acct_csr.new_attribute3 IS NULL ) THEN
6191                      IF  ( l_temp_party_account_rec.attribute3 = l_curr_party_acct_rec.attribute3 )
6192                       OR ( l_temp_party_account_rec.attribute3 = fnd_api.g_miss_char ) THEN
6193                            l_pty_acct_csr.old_attribute3 := NULL;
6194                            l_pty_acct_csr.new_attribute3 := NULL;
6195                      ELSE
6196                            l_pty_acct_csr.old_attribute3 := fnd_api.g_miss_char;
6197                            l_pty_acct_csr.new_attribute3 := l_temp_party_account_rec.attribute3;
6198                      END IF;
6199              ELSE
6200                      l_pty_acct_csr.old_attribute3 := fnd_api.g_miss_char;
6201                      l_pty_acct_csr.new_attribute3 := l_temp_party_account_rec.attribute3;
6202              END IF;
6203              --
6204              IF    ( l_pty_acct_csr.old_attribute4 IS NULL
6205                 AND  l_pty_acct_csr.new_attribute4 IS NULL ) THEN
6206                      IF  ( l_temp_party_account_rec.attribute4 = l_curr_party_acct_rec.attribute4 )
6207                       OR ( l_temp_party_account_rec.attribute4 = fnd_api.g_miss_char ) THEN
6208                            l_pty_acct_csr.old_attribute4 := NULL;
6209                            l_pty_acct_csr.new_attribute4 := NULL;
6210                      ELSE
6211                            l_pty_acct_csr.old_attribute4 := fnd_api.g_miss_char;
6212                            l_pty_acct_csr.new_attribute4 := l_temp_party_account_rec.attribute4;
6213                      END IF;
6214              ELSE
6215                      l_pty_acct_csr.old_attribute4 := fnd_api.g_miss_char;
6216                      l_pty_acct_csr.new_attribute4 := l_temp_party_account_rec.attribute4;
6217              END IF;
6218              --
6219              IF    ( l_pty_acct_csr.old_attribute5 IS NULL
6220                 AND  l_pty_acct_csr.new_attribute5 IS NULL ) THEN
6221                      IF  ( l_temp_party_account_rec.attribute5 = l_curr_party_acct_rec.attribute5 )
6222                       OR ( l_temp_party_account_rec.attribute5 = fnd_api.g_miss_char ) THEN
6223                            l_pty_acct_csr.old_attribute5 := NULL;
6224                            l_pty_acct_csr.new_attribute5 := NULL;
6225                      ELSE
6226                            l_pty_acct_csr.old_attribute5 := fnd_api.g_miss_char;
6227                            l_pty_acct_csr.new_attribute5 := l_temp_party_account_rec.attribute5;
6228                      END IF;
6229              ELSE
6230                      l_pty_acct_csr.old_attribute5 := fnd_api.g_miss_char;
6231                      l_pty_acct_csr.new_attribute5 := l_temp_party_account_rec.attribute5;
6232              END IF;
6233              --
6234              IF    ( l_pty_acct_csr.old_attribute6 IS NULL
6235                 AND  l_pty_acct_csr.new_attribute6 IS NULL ) THEN
6236                      IF  ( l_temp_party_account_rec.attribute6 = l_curr_party_acct_rec.attribute6 )
6237                       OR ( l_temp_party_account_rec.attribute6 = fnd_api.g_miss_char ) THEN
6238                            l_pty_acct_csr.old_attribute6 := NULL;
6239                            l_pty_acct_csr.new_attribute6 := NULL;
6240                      ELSE
6241                            l_pty_acct_csr.old_attribute6 := fnd_api.g_miss_char;
6242                            l_pty_acct_csr.new_attribute6 := l_temp_party_account_rec.attribute6;
6243                      END IF;
6244              ELSE
6245                      l_pty_acct_csr.old_attribute6 := fnd_api.g_miss_char;
6246                      l_pty_acct_csr.new_attribute6 := l_temp_party_account_rec.attribute6;
6247              END IF;
6248              --
6249              IF    ( l_pty_acct_csr.old_attribute7 IS NULL
6250                 AND  l_pty_acct_csr.new_attribute7 IS NULL ) THEN
6251                      IF  ( l_temp_party_account_rec.attribute7 = l_curr_party_acct_rec.attribute7 )
6252                       OR ( l_temp_party_account_rec.attribute7 = fnd_api.g_miss_char ) THEN
6253                            l_pty_acct_csr.old_attribute7 := NULL;
6254                            l_pty_acct_csr.new_attribute7 := NULL;
6255                      ELSE
6256                            l_pty_acct_csr.old_attribute7 := fnd_api.g_miss_char;
6257                            l_pty_acct_csr.new_attribute7 := l_temp_party_account_rec.attribute7;
6258                      END IF;
6259              ELSE
6260                      l_pty_acct_csr.old_attribute7 := fnd_api.g_miss_char;
6261                      l_pty_acct_csr.new_attribute7 := l_temp_party_account_rec.attribute7;
6262              END IF;
6263              --
6264              IF    ( l_pty_acct_csr.old_attribute8 IS NULL
6265                 AND  l_pty_acct_csr.new_attribute8 IS NULL ) THEN
6266                      IF  ( l_temp_party_account_rec.attribute8 = l_curr_party_acct_rec.attribute8 )
6267                       OR ( l_temp_party_account_rec.attribute8 = fnd_api.g_miss_char ) THEN
6268                            l_pty_acct_csr.old_attribute8 := NULL;
6269                            l_pty_acct_csr.new_attribute8 := NULL;
6270                      ELSE
6271                            l_pty_acct_csr.old_attribute8 := fnd_api.g_miss_char;
6272                            l_pty_acct_csr.new_attribute8 := l_temp_party_account_rec.attribute8;
6273                      END IF;
6274              ELSE
6275                      l_pty_acct_csr.old_attribute8 := fnd_api.g_miss_char;
6276                      l_pty_acct_csr.new_attribute8 := l_temp_party_account_rec.attribute8;
6277              END IF;
6278              --
6279              IF    ( l_pty_acct_csr.old_attribute9 IS NULL
6280                 AND  l_pty_acct_csr.new_attribute9 IS NULL ) THEN
6281                      IF  ( l_temp_party_account_rec.attribute9 = l_curr_party_acct_rec.attribute9 )
6282                       OR ( l_temp_party_account_rec.attribute9 = fnd_api.g_miss_char ) THEN
6283                            l_pty_acct_csr.old_attribute9 := NULL;
6284                            l_pty_acct_csr.new_attribute9 := NULL;
6285                      ELSE
6286                            l_pty_acct_csr.old_attribute9 := fnd_api.g_miss_char;
6287                            l_pty_acct_csr.new_attribute9 := l_temp_party_account_rec.attribute9;
6288                      END IF;
6289              ELSE
6290                      l_pty_acct_csr.old_attribute9 := fnd_api.g_miss_char;
6291                      l_pty_acct_csr.new_attribute9 := l_temp_party_account_rec.attribute9;
6292              END IF;
6293              --
6294              IF    ( l_pty_acct_csr.old_attribute10 IS NULL
6295                 AND  l_pty_acct_csr.new_attribute10 IS NULL ) THEN
6296                      IF  ( l_temp_party_account_rec.attribute10 = l_curr_party_acct_rec.attribute10 )
6297                       OR ( l_temp_party_account_rec.attribute10 = fnd_api.g_miss_char ) THEN
6298                            l_pty_acct_csr.old_attribute10 := NULL;
6299                            l_pty_acct_csr.new_attribute10 := NULL;
6300                      ELSE
6301                            l_pty_acct_csr.old_attribute10 := fnd_api.g_miss_char;
6302                            l_pty_acct_csr.new_attribute10 := l_temp_party_account_rec.attribute10;
6303                      END IF;
6304              ELSE
6305                      l_pty_acct_csr.old_attribute10 := fnd_api.g_miss_char;
6306                      l_pty_acct_csr.new_attribute10 := l_temp_party_account_rec.attribute10;
6307              END IF;
6308              --
6309              IF    ( l_pty_acct_csr.old_attribute11 IS NULL
6310                 AND  l_pty_acct_csr.new_attribute11 IS NULL ) THEN
6311                      IF  ( l_temp_party_account_rec.attribute11 = l_curr_party_acct_rec.attribute11 )
6312                       OR ( l_temp_party_account_rec.attribute11 = fnd_api.g_miss_char ) THEN
6313                            l_pty_acct_csr.old_attribute11 := NULL;
6314                            l_pty_acct_csr.new_attribute11 := NULL;
6315                      ELSE
6316                            l_pty_acct_csr.old_attribute11 := fnd_api.g_miss_char;
6317                            l_pty_acct_csr.new_attribute11 := l_temp_party_account_rec.attribute11;
6318                      END IF;
6319              ELSE
6320                      l_pty_acct_csr.old_attribute11 := fnd_api.g_miss_char;
6321                      l_pty_acct_csr.new_attribute11 := l_temp_party_account_rec.attribute11;
6322              END IF;
6323              --
6324              IF    ( l_pty_acct_csr.old_attribute12 IS NULL
6325                 AND  l_pty_acct_csr.new_attribute12 IS NULL ) THEN
6326                      IF  ( l_temp_party_account_rec.attribute12 = l_curr_party_acct_rec.attribute12 )
6327                       OR ( l_temp_party_account_rec.attribute12 = fnd_api.g_miss_char ) THEN
6328                            l_pty_acct_csr.old_attribute12 := NULL;
6329                            l_pty_acct_csr.new_attribute12 := NULL;
6330                      ELSE
6331                            l_pty_acct_csr.old_attribute12 := fnd_api.g_miss_char;
6332                            l_pty_acct_csr.new_attribute12 := l_temp_party_account_rec.attribute12;
6333                      END IF;
6334              ELSE
6335                      l_pty_acct_csr.old_attribute12 := fnd_api.g_miss_char;
6336                      l_pty_acct_csr.new_attribute12 := l_temp_party_account_rec.attribute12;
6337              END IF;
6338              --
6339              IF    ( l_pty_acct_csr.old_attribute13 IS NULL
6340                 AND  l_pty_acct_csr.new_attribute13 IS NULL ) THEN
6341                      IF  ( l_temp_party_account_rec.attribute13 = l_curr_party_acct_rec.attribute13 )
6342                       OR ( l_temp_party_account_rec.attribute13 = fnd_api.g_miss_char ) THEN
6343                            l_pty_acct_csr.old_attribute13 := NULL;
6344                            l_pty_acct_csr.new_attribute13 := NULL;
6345                      ELSE
6346                            l_pty_acct_csr.old_attribute13 := fnd_api.g_miss_char;
6347                            l_pty_acct_csr.new_attribute13 := l_temp_party_account_rec.attribute13;
6348                      END IF;
6349              ELSE
6350                      l_pty_acct_csr.old_attribute13 := fnd_api.g_miss_char;
6351                      l_pty_acct_csr.new_attribute13 := l_temp_party_account_rec.attribute13;
6352              END IF;
6353              --
6354              IF    ( l_pty_acct_csr.old_attribute14 IS NULL
6355                 AND  l_pty_acct_csr.new_attribute14 IS NULL ) THEN
6356                      IF  ( l_temp_party_account_rec.attribute14 = l_curr_party_acct_rec.attribute14 )
6357                       OR ( l_temp_party_account_rec.attribute14 = fnd_api.g_miss_char ) THEN
6358                            l_pty_acct_csr.old_attribute14 := NULL;
6359                            l_pty_acct_csr.new_attribute14 := NULL;
6360                      ELSE
6361                            l_pty_acct_csr.old_attribute14 := fnd_api.g_miss_char;
6362                            l_pty_acct_csr.new_attribute14 := l_temp_party_account_rec.attribute14;
6363                      END IF;
6364              ELSE
6365                      l_pty_acct_csr.old_attribute14 := fnd_api.g_miss_char;
6366                      l_pty_acct_csr.new_attribute14 := l_temp_party_account_rec.attribute14;
6367              END IF;
6368              --
6369              IF    ( l_pty_acct_csr.old_attribute15 IS NULL
6370                 AND  l_pty_acct_csr.new_attribute15 IS NULL ) THEN
6371                      IF  ( l_temp_party_account_rec.attribute15 = l_curr_party_acct_rec.attribute15 )
6372                       OR ( l_temp_party_account_rec.attribute15 = fnd_api.g_miss_char ) THEN
6373                            l_pty_acct_csr.old_attribute15 := NULL;
6374                            l_pty_acct_csr.new_attribute15 := NULL;
6375                      ELSE
6376                            l_pty_acct_csr.old_attribute15 := fnd_api.g_miss_char;
6377                            l_pty_acct_csr.new_attribute15 := l_temp_party_account_rec.attribute15;
6378                      END IF;
6379              ELSE
6380                      l_pty_acct_csr.old_attribute15 := fnd_api.g_miss_char;
6381                      l_pty_acct_csr.new_attribute15 := l_temp_party_account_rec.attribute15;
6382              END IF;
6383              --
6384              IF    ( l_pty_acct_csr.old_instance_party_id IS NULL
6385                 AND  l_pty_acct_csr.new_instance_party_id IS NULL ) THEN
6386                      IF  ( l_temp_party_account_rec.instance_party_id = l_curr_party_acct_rec.instance_party_id )
6387                       OR ( l_temp_party_account_rec.instance_party_id = fnd_api.g_miss_num ) THEN
6388                            l_pty_acct_csr.old_instance_party_id := NULL;
6389                            l_pty_acct_csr.new_instance_party_id := NULL;
6390                      ELSE
6391                            l_pty_acct_csr.old_instance_party_id := fnd_api.g_miss_num;
6392                            l_pty_acct_csr.new_instance_party_id := l_temp_party_account_rec.instance_party_id;
6393                      END IF;
6394              ELSE
6395                      l_pty_acct_csr.old_instance_party_id := fnd_api.g_miss_num;
6396                      l_pty_acct_csr.new_instance_party_id := l_temp_party_account_rec.instance_party_id;
6397              END IF;
6398 
6399           CSI_IP_ACCOUNTS_H_PKG.Update_Row
6400          (
6401           p_IP_ACCOUNT_HISTORY_ID         => l_ip_acct_hist_id                        ,
6402           p_IP_ACCOUNT_ID                 => fnd_api.g_miss_num                       ,
6403           p_TRANSACTION_ID                => fnd_api.g_miss_num                       ,
6404           p_OLD_PARTY_ACCOUNT_ID          => l_pty_acct_csr.old_party_account_id      ,
6405           p_NEW_PARTY_ACCOUNT_ID          => l_pty_acct_csr.NEW_PARTY_ACCOUNT_ID,
6406           p_OLD_RELATIONSHIP_TYPE_CODE    => l_pty_acct_csr.old_relationship_type_code,
6407           p_NEW_RELATIONSHIP_TYPE_CODE    => l_pty_acct_csr.NEW_RELATIONSHIP_TYPE_CODE,
6408           p_OLD_ACTIVE_START_DATE         => l_pty_acct_csr.old_active_start_date     ,
6409           p_NEW_ACTIVE_START_DATE         => l_pty_acct_csr.NEW_ACTIVE_START_DATE,
6410           p_OLD_ACTIVE_END_DATE           => l_pty_acct_csr.old_active_end_date       ,
6411           p_NEW_ACTIVE_END_DATE           => l_pty_acct_csr.NEW_ACTIVE_END_DATE ,
6412           p_OLD_CONTEXT                   => l_pty_acct_csr.old_context               ,
6413           p_NEW_CONTEXT                   => l_pty_acct_csr.NEW_CONTEXT         ,
6414           p_OLD_ATTRIBUTE1                => l_pty_acct_csr.old_attribute1            ,
6415           p_NEW_ATTRIBUTE1                => l_pty_acct_csr.NEW_ATTRIBUTE1      ,
6416           p_OLD_ATTRIBUTE2                => l_pty_acct_csr.old_attribute2            ,
6417           p_NEW_ATTRIBUTE2                => l_pty_acct_csr.NEW_ATTRIBUTE2      ,
6418           p_OLD_ATTRIBUTE3                => l_pty_acct_csr.old_attribute3            ,
6419           p_NEW_ATTRIBUTE3                => l_pty_acct_csr.NEW_ATTRIBUTE3      ,
6420           p_OLD_ATTRIBUTE4                => l_pty_acct_csr.old_attribute4            ,
6421           p_NEW_ATTRIBUTE4                => l_pty_acct_csr.NEW_ATTRIBUTE4      ,
6422           p_OLD_ATTRIBUTE5                => l_pty_acct_csr.old_attribute5            ,
6423           p_NEW_ATTRIBUTE5                => l_pty_acct_csr.NEW_ATTRIBUTE5      ,
6424           p_OLD_ATTRIBUTE6                => l_pty_acct_csr.old_attribute6            ,
6425           p_NEW_ATTRIBUTE6                => l_pty_acct_csr.NEW_ATTRIBUTE6      ,
6426           p_OLD_ATTRIBUTE7                => l_pty_acct_csr.old_attribute7            ,
6427           p_NEW_ATTRIBUTE7                => l_pty_acct_csr.NEW_ATTRIBUTE7      ,
6428           p_OLD_ATTRIBUTE8                => l_pty_acct_csr.old_attribute8            ,
6429           p_NEW_ATTRIBUTE8                => l_pty_acct_csr.NEW_ATTRIBUTE8      ,
6430           p_OLD_ATTRIBUTE9                => l_pty_acct_csr.old_attribute9            ,
6431           p_NEW_ATTRIBUTE9                => l_pty_acct_csr.NEW_ATTRIBUTE9      ,
6432           p_OLD_ATTRIBUTE10               => l_pty_acct_csr.old_attribute10           ,
6433           p_NEW_ATTRIBUTE10               => l_pty_acct_csr.NEW_ATTRIBUTE10     ,
6434           p_OLD_ATTRIBUTE11               => l_pty_acct_csr.old_attribute11           ,
6435           p_NEW_ATTRIBUTE11               => l_pty_acct_csr.NEW_ATTRIBUTE11     ,
6436           p_OLD_ATTRIBUTE12               => l_pty_acct_csr.old_attribute12           ,
6437           p_NEW_ATTRIBUTE12               => l_pty_acct_csr.NEW_ATTRIBUTE12     ,
6438           p_OLD_ATTRIBUTE13               => l_pty_acct_csr.old_attribute13           ,
6439           p_NEW_ATTRIBUTE13               => l_pty_acct_csr.NEW_ATTRIBUTE13     ,
6440           p_OLD_ATTRIBUTE14               => l_pty_acct_csr.old_attribute14           ,
6441           p_NEW_ATTRIBUTE14               => l_pty_acct_csr.NEW_ATTRIBUTE14     ,
6442           p_OLD_ATTRIBUTE15               => l_pty_acct_csr.old_attribute15           ,
6443           p_NEW_ATTRIBUTE15               => l_pty_acct_csr.NEW_ATTRIBUTE15     ,
6444           p_FULL_DUMP_FLAG                => fnd_api.g_miss_char                      ,
6445           p_CREATED_BY                    => FND_API.G_MISS_NUM                 ,
6446           p_CREATION_DATE                 => FND_API.G_MISS_DATE                      ,
6447           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID                       ,
6448           p_LAST_UPDATE_DATE              => SYSDATE                                  ,
6449           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID                      ,
6450           p_OBJECT_VERSION_NUMBER         => fnd_api.g_miss_num                       ,
6451           p_OLD_BILL_TO_ADDRESS           => l_pty_acct_csr.old_bill_to_address       ,
6452           p_NEW_BILL_TO_ADDRESS           => l_pty_acct_csr.NEW_BILL_TO_ADDRESS ,
6453           p_OLD_SHIP_TO_ADDRESS           => l_pty_acct_csr.old_ship_to_address       ,
6454           p_NEW_SHIP_TO_ADDRESS           => l_pty_acct_csr.NEW_SHIP_TO_ADDRESS,
6455           p_OLD_INSTANCE_PARTY_ID         => l_pty_acct_csr.old_instance_party_id     ,
6456           p_NEW_INSTANCE_PARTY_ID         => l_pty_acct_csr.new_instance_party_id     );
6457 
6458         END IF;
6459       EXCEPTION
6460 
6461         WHEN NO_DATA_FOUND THEN
6462         IF (l_mod_value = 0) THEN
6463           -- If the mod value is 0 then dump all the columns both changed and unchanged
6464           -- changed columns have old and new values while the unchanged values have old and new values
6465           -- exactly same
6466 
6467           IF (p_party_account_rec.instance_party_id = FND_API.G_MISS_NUM) THEN
6468               l_temp_party_account_rec.instance_party_id := l_curr_party_acct_rec.instance_party_id ;
6469           END IF;
6470           IF (p_party_account_rec.party_account_id = FND_API.G_MISS_NUM) THEN
6471               l_temp_party_account_rec.party_account_id := l_curr_party_acct_rec.party_account_id ;
6472           END IF;
6473           IF (p_party_account_rec.relationship_type_code = FND_API.G_MISS_CHAR) THEN
6474               l_temp_party_account_rec.relationship_type_code := l_curr_party_acct_rec.relationship_type_code ;
6475           END IF;
6476           IF (p_party_account_rec.ACTIVE_START_DATE = FND_API.G_MISS_DATE) THEN
6477               l_temp_party_account_rec.ACTIVE_START_DATE := l_curr_party_acct_rec.ACTIVE_START_DATE ;
6478           END IF;
6479           IF  --(p_party_account_rec.ACTIVE_END_DATE = FND_API.G_MISS_DATE)
6480               (l_acct_end_date = FND_API.G_MISS_DATE)
6481           THEN
6482               l_temp_party_account_rec.ACTIVE_END_DATE := l_curr_party_acct_rec.ACTIVE_END_DATE ;
6483           END IF;
6484           IF  (p_party_account_rec.context = FND_API.G_MISS_CHAR) THEN
6485               l_temp_party_account_rec.CONTEXT := l_curr_party_acct_rec.CONTEXT ;
6486           END IF;
6487           IF  (p_party_account_rec.ATTRIBUTE1 = FND_API.G_MISS_CHAR) THEN
6488               l_temp_party_account_rec.ATTRIBUTE1 := l_curr_party_acct_rec.ATTRIBUTE1 ;
6489           END IF;
6490           IF  (p_party_account_rec.ATTRIBUTE2 = FND_API.G_MISS_CHAR) THEN
6491               l_temp_party_account_rec.ATTRIBUTE2 := l_curr_party_acct_rec.ATTRIBUTE2 ;
6492           END IF;
6493           IF  (p_party_account_rec.ATTRIBUTE3 = FND_API.G_MISS_CHAR) THEN
6494               l_temp_party_account_rec.ATTRIBUTE3 := l_curr_party_acct_rec.ATTRIBUTE3 ;
6495           END IF;
6496           IF  (p_party_account_rec.ATTRIBUTE4 = FND_API.G_MISS_CHAR) THEN
6497               l_temp_party_account_rec.ATTRIBUTE4 := l_curr_party_acct_rec.ATTRIBUTE4 ;
6498           END IF;
6499           IF  (p_party_account_rec.ATTRIBUTE5 = FND_API.G_MISS_CHAR) THEN
6500               l_temp_party_account_rec.ATTRIBUTE5 := l_curr_party_acct_rec.ATTRIBUTE5 ;
6501           END IF;
6502           IF  (p_party_account_rec.ATTRIBUTE6 = FND_API.G_MISS_CHAR) THEN
6503               l_temp_party_account_rec.ATTRIBUTE6 := l_curr_party_acct_rec.ATTRIBUTE6 ;
6504           END IF;
6505           IF  (p_party_account_rec.ATTRIBUTE7 = FND_API.G_MISS_CHAR) THEN
6506               l_temp_party_account_rec.ATTRIBUTE7 := l_curr_party_acct_rec.ATTRIBUTE7 ;
6507           END IF;
6508           IF  (p_party_account_rec.ATTRIBUTE8 = FND_API.G_MISS_CHAR) THEN
6509               l_temp_party_account_rec.ATTRIBUTE8 := l_curr_party_acct_rec.ATTRIBUTE8 ;
6510           END IF;
6511           IF  (p_party_account_rec.ATTRIBUTE9 = FND_API.G_MISS_CHAR) THEN
6512               l_temp_party_account_rec.ATTRIBUTE9 := l_curr_party_acct_rec.ATTRIBUTE9 ;
6513           END IF;
6514           IF  (p_party_account_rec.ATTRIBUTE10 = FND_API.G_MISS_CHAR) THEN
6515               l_temp_party_account_rec.ATTRIBUTE10 := l_curr_party_acct_rec.ATTRIBUTE10 ;
6516           END IF;
6517           IF  (p_party_account_rec.ATTRIBUTE11 = FND_API.G_MISS_CHAR) THEN
6518               l_temp_party_account_rec.ATTRIBUTE11 := l_curr_party_acct_rec.ATTRIBUTE11 ;
6519           END IF;
6520           IF  (p_party_account_rec.ATTRIBUTE12 = FND_API.G_MISS_CHAR) THEN
6521               l_temp_party_account_rec.ATTRIBUTE12 := l_curr_party_acct_rec.ATTRIBUTE12 ;
6522           END IF;
6523           IF  (p_party_account_rec.ATTRIBUTE13 = FND_API.G_MISS_CHAR) THEN
6524               l_temp_party_account_rec.ATTRIBUTE13 := l_curr_party_acct_rec.ATTRIBUTE13 ;
6525           END IF;
6526           IF  (p_party_account_rec.ATTRIBUTE14 = FND_API.G_MISS_CHAR) THEN
6527               l_temp_party_account_rec.ATTRIBUTE14 := l_curr_party_acct_rec.ATTRIBUTE14 ;
6528           END IF;
6529           IF  (p_party_account_rec.ATTRIBUTE15 = FND_API.G_MISS_CHAR) THEN
6530               l_temp_party_account_rec.ATTRIBUTE15 := l_curr_party_acct_rec.ATTRIBUTE15 ;
6531           END IF;
6532 
6533         -- Call table handlers to insert into csi_i_parties_h table
6534         CSI_IP_ACCOUNTS_H_PKG.Insert_Row
6535          (
6536           px_IP_ACCOUNT_HISTORY_ID        => l_ip_account_history_id          ,
6537           p_IP_ACCOUNT_ID                 => p_party_account_rec.ip_account_id,
6538           p_TRANSACTION_ID                => p_txn_rec.transaction_id        ,
6539           p_OLD_PARTY_ACCOUNT_ID          => l_curr_party_acct_rec.party_account_id,
6540           p_NEW_PARTY_ACCOUNT_ID          => l_temp_party_account_rec.PARTY_ACCOUNT_ID,
6541           p_OLD_RELATIONSHIP_TYPE_CODE    => l_curr_party_acct_rec.RELATIONSHIP_TYPE_CODE,
6542           p_NEW_RELATIONSHIP_TYPE_CODE    => l_temp_party_account_rec.RELATIONSHIP_TYPE_CODE,
6543           p_OLD_ACTIVE_START_DATE         => l_curr_party_acct_rec.ACTIVE_START_DATE,
6544           p_NEW_ACTIVE_START_DATE         => l_temp_party_account_rec.ACTIVE_START_DATE,
6545           p_OLD_ACTIVE_END_DATE           => l_curr_party_acct_rec.ACTIVE_END_DATE,
6546           p_NEW_ACTIVE_END_DATE           => l_temp_party_account_rec.ACTIVE_END_DATE,
6547           p_OLD_CONTEXT                   => l_curr_party_acct_rec.CONTEXT,
6548           p_NEW_CONTEXT                   => l_temp_party_account_rec.CONTEXT    ,
6549           p_OLD_ATTRIBUTE1                => l_curr_party_acct_rec.ATTRIBUTE1,
6550           p_NEW_ATTRIBUTE1                => l_temp_party_account_rec.ATTRIBUTE1 ,
6551           p_OLD_ATTRIBUTE2                => l_curr_party_acct_rec.ATTRIBUTE2,
6552           p_NEW_ATTRIBUTE2                => l_temp_party_account_rec.ATTRIBUTE2 ,
6553           p_OLD_ATTRIBUTE3                => l_curr_party_acct_rec.ATTRIBUTE3,
6554           p_NEW_ATTRIBUTE3                => l_temp_party_account_rec.ATTRIBUTE3 ,
6555           p_OLD_ATTRIBUTE4                => l_curr_party_acct_rec.ATTRIBUTE4,
6556           p_NEW_ATTRIBUTE4                => l_temp_party_account_rec.ATTRIBUTE4 ,
6557           p_OLD_ATTRIBUTE5                => l_curr_party_acct_rec.ATTRIBUTE5,
6558           p_NEW_ATTRIBUTE5                => l_temp_party_account_rec.ATTRIBUTE5 ,
6559           p_OLD_ATTRIBUTE6                => l_curr_party_acct_rec.ATTRIBUTE6,
6560           p_NEW_ATTRIBUTE6                => l_temp_party_account_rec.ATTRIBUTE6 ,
6561           p_OLD_ATTRIBUTE7                => l_curr_party_acct_rec.ATTRIBUTE7,
6562           p_NEW_ATTRIBUTE7                => l_temp_party_account_rec.ATTRIBUTE7 ,
6563           p_OLD_ATTRIBUTE8                => l_curr_party_acct_rec.ATTRIBUTE8,
6564           p_NEW_ATTRIBUTE8                => l_temp_party_account_rec.ATTRIBUTE8 ,
6565           p_OLD_ATTRIBUTE9                => l_curr_party_acct_rec.ATTRIBUTE9,
6566           p_NEW_ATTRIBUTE9                => l_temp_party_account_rec.ATTRIBUTE9 ,
6567           p_OLD_ATTRIBUTE10               => l_curr_party_acct_rec.ATTRIBUTE10,
6568           p_NEW_ATTRIBUTE10               => l_temp_party_account_rec.ATTRIBUTE10,
6569           p_OLD_ATTRIBUTE11               => l_curr_party_acct_rec.ATTRIBUTE11,
6570           p_NEW_ATTRIBUTE11               => l_temp_party_account_rec.ATTRIBUTE11,
6571           p_OLD_ATTRIBUTE12               => l_curr_party_acct_rec.ATTRIBUTE12,
6572           p_NEW_ATTRIBUTE12               => l_temp_party_account_rec.ATTRIBUTE12,
6573           p_OLD_ATTRIBUTE13               => l_curr_party_acct_rec.ATTRIBUTE13,
6574           p_NEW_ATTRIBUTE13               => l_temp_party_account_rec.ATTRIBUTE13,
6575           p_OLD_ATTRIBUTE14               => l_curr_party_acct_rec.ATTRIBUTE14,
6576           p_NEW_ATTRIBUTE14               => l_temp_party_account_rec.ATTRIBUTE14,
6577           p_OLD_ATTRIBUTE15               => l_curr_party_acct_rec.ATTRIBUTE15,
6578           p_NEW_ATTRIBUTE15               => l_temp_party_account_rec.ATTRIBUTE15,
6579           p_FULL_DUMP_FLAG                => 'Y'                            ,
6580           p_CREATED_BY                    => FND_GLOBAL.USER_ID             ,
6581           p_CREATION_DATE                 => SYSDATE                        ,
6582           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID             ,
6583           p_LAST_UPDATE_DATE              => SYSDATE                        ,
6584           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID            ,
6585           p_OBJECT_VERSION_NUMBER         => 1      ,
6586           p_OLD_BILL_TO_ADDRESS           => l_curr_party_acct_rec.BILL_TO_ADDRESS,
6587           p_NEW_BILL_TO_ADDRESS           => l_temp_party_account_rec.BILL_TO_ADDRESS,
6588           p_OLD_SHIP_TO_ADDRESS           => l_curr_party_acct_rec.SHIP_TO_ADDRESS ,
6589           p_NEW_SHIP_TO_ADDRESS           => l_temp_party_account_rec.SHIP_TO_ADDRESS,
6590           p_OLD_INSTANCE_PARTY_ID         => l_curr_party_acct_rec.INSTANCE_PARTY_ID ,
6591           p_NEW_INSTANCE_PARTY_ID         => l_temp_party_account_rec.INSTANCE_PARTY_ID);
6592 
6593        ELSE
6594           -- If the mod value is not equal to zero then dump only the changed columns
6595           -- while the unchanged values have old and new values as null
6596            IF (p_party_account_rec.party_account_id = fnd_api.g_miss_num) OR
6597                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
6598                 l_account_hist_rec.old_party_account_id := NULL;
6599                 l_account_hist_rec.new_party_account_id := NULL;
6600            ELSIF
6601               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
6602                 l_account_hist_rec.old_party_account_id := l_curr_party_acct_rec.party_account_id ;
6603                 l_account_hist_rec.new_party_account_id := p_party_account_rec.party_account_id ;
6604            END IF;
6605            --
6606            IF (p_party_account_rec.relationship_type_code = fnd_api.g_miss_char) OR
6607                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
6608                 l_account_hist_rec.old_relationship_type_code := NULL;
6609                 l_account_hist_rec.new_relationship_type_code := NULL;
6610            ELSIF
6611               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
6612                 l_account_hist_rec.old_relationship_type_code := l_curr_party_acct_rec.relationship_type_code ;
6613                 l_account_hist_rec.new_relationship_type_code := p_party_account_rec.relationship_type_code ;
6614            END IF;
6615            --
6616            IF (p_party_account_rec.bill_to_address = fnd_api.g_miss_num) OR
6617                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
6618                 l_account_hist_rec.old_bill_to_address := NULL;
6619                 l_account_hist_rec.new_bill_to_address := NULL;
6620            ELSIF
6621               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
6622                 l_account_hist_rec.old_bill_to_address := l_curr_party_acct_rec.bill_to_address ;
6623                 l_account_hist_rec.new_bill_to_address := p_party_account_rec.bill_to_address ;
6624            END IF;
6625            --
6626            IF (p_party_account_rec.ship_to_address = fnd_api.g_miss_num) OR
6627                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
6628                 l_account_hist_rec.old_ship_to_address := NULL;
6629                 l_account_hist_rec.new_ship_to_address := NULL;
6630            ELSIF
6631               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
6632                 l_account_hist_rec.old_ship_to_address := l_curr_party_acct_rec.ship_to_address ;
6633                 l_account_hist_rec.new_ship_to_address := p_party_account_rec.ship_to_address ;
6634            END IF;
6635            --
6636            IF (p_party_account_rec.active_start_date = fnd_api.g_miss_date) OR
6637                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
6638                 l_account_hist_rec.old_active_start_date := NULL;
6639                 l_account_hist_rec.new_active_start_date := NULL;
6640            ELSIF
6641               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
6642                 l_account_hist_rec.old_active_start_date := l_curr_party_acct_rec.active_start_date ;
6643                 l_account_hist_rec.new_active_start_date := p_party_account_rec.active_start_date ;
6644            END IF;
6645            --
6646            IF --(p_party_account_rec.active_end_date = fnd_api.g_miss_date) OR
6647               (l_acct_end_date= fnd_api.g_miss_date) OR
6648                --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
6649                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
6650                 l_account_hist_rec.old_active_end_date := NULL;
6651                 l_account_hist_rec.new_active_end_date := NULL;
6652            ELSIF
6653               --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
6654               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
6655                 l_account_hist_rec.old_active_end_date := l_curr_party_acct_rec.active_end_date ;
6656                 l_account_hist_rec.new_active_end_date := l_acct_end_date; --p_party_account_rec.active_end_date ;
6657            END IF;
6658            --
6659            IF (p_party_account_rec.context = fnd_api.g_miss_char) OR
6660                NVL(p_party_account_rec.context, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.context, fnd_api.g_miss_char) THEN
6661                 l_account_hist_rec.old_context := NULL;
6662                 l_account_hist_rec.new_context := NULL;
6663            ELSIF
6664               NVL(l_curr_party_acct_rec.context,fnd_api.g_miss_char) <> NVL(p_party_account_rec.context,fnd_api.g_miss_char) THEN
6665                 l_account_hist_rec.old_context := l_curr_party_acct_rec.context ;
6666                 l_account_hist_rec.new_context := p_party_account_rec.context ;
6667            END IF;
6668            --
6669            IF (p_party_account_rec.attribute1 = fnd_api.g_miss_char) OR
6670                NVL(p_party_account_rec.attribute1, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute1, fnd_api.g_miss_char) THEN
6671                 l_account_hist_rec.old_attribute1 := NULL;
6672                 l_account_hist_rec.new_attribute1 := NULL;
6673            ELSIF
6674               NVL(l_curr_party_acct_rec.attribute1,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute1,fnd_api.g_miss_char) THEN
6675                 l_account_hist_rec.old_attribute1 := l_curr_party_acct_rec.attribute1 ;
6676                 l_account_hist_rec.new_attribute1 := p_party_account_rec.attribute1 ;
6677            END IF;
6678            --
6679            IF (p_party_account_rec.attribute2 = fnd_api.g_miss_char) OR
6680                NVL(p_party_account_rec.attribute2, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute2, fnd_api.g_miss_char) THEN
6681                 l_account_hist_rec.old_attribute2 := NULL;
6682                 l_account_hist_rec.new_attribute2 := NULL;
6683            ELSIF
6684               NVL(l_curr_party_acct_rec.attribute2,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute2,fnd_api.g_miss_char) THEN
6685                 l_account_hist_rec.old_attribute2 := l_curr_party_acct_rec.attribute2 ;
6686                 l_account_hist_rec.new_attribute2 := p_party_account_rec.attribute2 ;
6687            END IF;
6688            --
6689            IF (p_party_account_rec.attribute3 = fnd_api.g_miss_char) OR
6690                NVL(p_party_account_rec.attribute3, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute3, fnd_api.g_miss_char) THEN
6691                 l_account_hist_rec.old_attribute3 := NULL;
6692                 l_account_hist_rec.new_attribute3 := NULL;
6693            ELSIF
6694               NVL(l_curr_party_acct_rec.attribute3,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute3,fnd_api.g_miss_char) THEN
6695                 l_account_hist_rec.old_attribute3 := l_curr_party_acct_rec.attribute3 ;
6696                 l_account_hist_rec.new_attribute3 := p_party_account_rec.attribute3 ;
6697            END IF;
6698            --
6699            IF (p_party_account_rec.attribute4 = fnd_api.g_miss_char) OR
6700                NVL(p_party_account_rec.attribute4, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute4, fnd_api.g_miss_char) THEN
6701                 l_account_hist_rec.old_attribute4 := NULL;
6702                 l_account_hist_rec.new_attribute4 := NULL;
6703            ELSIF
6704               NVL(l_curr_party_acct_rec.attribute4,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute4,fnd_api.g_miss_char) THEN
6705                 l_account_hist_rec.old_attribute4 := l_curr_party_acct_rec.attribute4 ;
6706                 l_account_hist_rec.new_attribute4 := p_party_account_rec.attribute4 ;
6707            END IF;
6708            --
6709            IF (p_party_account_rec.attribute5 = fnd_api.g_miss_char) OR
6710                NVL(p_party_account_rec.attribute5, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute5, fnd_api.g_miss_char) THEN
6711                 l_account_hist_rec.old_attribute5 := NULL;
6712                 l_account_hist_rec.new_attribute5 := NULL;
6713            ELSIF
6714               NVL(l_curr_party_acct_rec.attribute5,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute5,fnd_api.g_miss_char) THEN
6715                 l_account_hist_rec.old_attribute5 := l_curr_party_acct_rec.attribute5 ;
6716                 l_account_hist_rec.new_attribute5 := p_party_account_rec.attribute5 ;
6717            END IF;
6718            --
6719            IF (p_party_account_rec.attribute6 = fnd_api.g_miss_char) OR
6720                NVL(p_party_account_rec.attribute6, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute6, fnd_api.g_miss_char) THEN
6721                 l_account_hist_rec.old_attribute6 := NULL;
6722                 l_account_hist_rec.new_attribute6 := NULL;
6723            ELSIF
6724               NVL(l_curr_party_acct_rec.attribute6,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute6,fnd_api.g_miss_char) THEN
6725                 l_account_hist_rec.old_attribute6 := l_curr_party_acct_rec.attribute6 ;
6726                 l_account_hist_rec.new_attribute6 := p_party_account_rec.attribute6 ;
6727            END IF;
6728            --
6729            IF (p_party_account_rec.attribute7 = fnd_api.g_miss_char) OR
6730                NVL(p_party_account_rec.attribute7, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute7, fnd_api.g_miss_char) THEN
6731                 l_account_hist_rec.old_attribute7 := NULL;
6732                 l_account_hist_rec.new_attribute7 := NULL;
6733            ELSIF
6734               NVL(l_curr_party_acct_rec.attribute7,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute7,fnd_api.g_miss_char) THEN
6735                 l_account_hist_rec.old_attribute7 := l_curr_party_acct_rec.attribute7 ;
6736                 l_account_hist_rec.new_attribute7 := p_party_account_rec.attribute7 ;
6737            END IF;
6738            --
6739            IF (p_party_account_rec.attribute8 = fnd_api.g_miss_char) OR
6740                NVL(p_party_account_rec.attribute8, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute8, fnd_api.g_miss_char) THEN
6741                 l_account_hist_rec.old_attribute8 := NULL;
6742                 l_account_hist_rec.new_attribute8 := NULL;
6743            ELSIF
6744               NVL(l_curr_party_acct_rec.attribute8,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute8,fnd_api.g_miss_char) THEN
6745                 l_account_hist_rec.old_attribute8 := l_curr_party_acct_rec.attribute8 ;
6746                 l_account_hist_rec.new_attribute8 := p_party_account_rec.attribute8 ;
6747            END IF;
6748            --
6749            IF (p_party_account_rec.attribute9 = fnd_api.g_miss_char) OR
6750                NVL(p_party_account_rec.attribute9, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute9, fnd_api.g_miss_char) THEN
6751                 l_account_hist_rec.old_attribute9 := NULL;
6752                 l_account_hist_rec.new_attribute9 := NULL;
6753            ELSIF
6754               NVL(l_curr_party_acct_rec.attribute9,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute9,fnd_api.g_miss_char) THEN
6755                 l_account_hist_rec.old_attribute9 := l_curr_party_acct_rec.attribute9 ;
6756                 l_account_hist_rec.new_attribute9 := p_party_account_rec.attribute9 ;
6757            END IF;
6758            --
6759            IF (p_party_account_rec.attribute10 = fnd_api.g_miss_char) OR
6760                NVL(p_party_account_rec.attribute10, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute10, fnd_api.g_miss_char) THEN
6761                 l_account_hist_rec.old_attribute10 := NULL;
6762                 l_account_hist_rec.new_attribute10 := NULL;
6763            ELSIF
6764               NVL(l_curr_party_acct_rec.attribute10,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute10,fnd_api.g_miss_char) THEN
6765                 l_account_hist_rec.old_attribute10 := l_curr_party_acct_rec.attribute10 ;
6766                 l_account_hist_rec.new_attribute10 := p_party_account_rec.attribute10 ;
6767            END IF;
6768            --
6769            IF (p_party_account_rec.attribute11 = fnd_api.g_miss_char) OR
6770                NVL(p_party_account_rec.attribute11, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute11, fnd_api.g_miss_char) THEN
6771                 l_account_hist_rec.old_attribute11 := NULL;
6772                 l_account_hist_rec.new_attribute11 := NULL;
6773            ELSIF
6774               NVL(l_curr_party_acct_rec.attribute11,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute11,fnd_api.g_miss_char) THEN
6775                 l_account_hist_rec.old_attribute11 := l_curr_party_acct_rec.attribute11 ;
6776                 l_account_hist_rec.new_attribute11 := p_party_account_rec.attribute11 ;
6777            END IF;
6778            --
6779            IF (p_party_account_rec.attribute12 = fnd_api.g_miss_char) OR
6780                NVL(p_party_account_rec.attribute12, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute12, fnd_api.g_miss_char) THEN
6781                 l_account_hist_rec.old_attribute12 := NULL;
6782                 l_account_hist_rec.new_attribute12 := NULL;
6783            ELSIF
6784               NVL(l_curr_party_acct_rec.attribute12,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute12,fnd_api.g_miss_char) THEN
6785                 l_account_hist_rec.old_attribute12 := l_curr_party_acct_rec.attribute12 ;
6786                 l_account_hist_rec.new_attribute12 := p_party_account_rec.attribute12 ;
6787            END IF;
6788            --
6789            IF (p_party_account_rec.attribute13 = fnd_api.g_miss_char) OR
6790                NVL(p_party_account_rec.attribute13, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute13, fnd_api.g_miss_char) THEN
6791                 l_account_hist_rec.old_attribute13 := NULL;
6792                 l_account_hist_rec.new_attribute13 := NULL;
6793            ELSIF
6794               NVL(l_curr_party_acct_rec.attribute13,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute13,fnd_api.g_miss_char) THEN
6795                 l_account_hist_rec.old_attribute13 := l_curr_party_acct_rec.attribute13 ;
6796                 l_account_hist_rec.new_attribute13 := p_party_account_rec.attribute13 ;
6797            END IF;
6798            --
6799            IF (p_party_account_rec.attribute14 = fnd_api.g_miss_char) OR
6800                NVL(p_party_account_rec.attribute14, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute14, fnd_api.g_miss_char) THEN
6801                 l_account_hist_rec.old_attribute14 := NULL;
6802                 l_account_hist_rec.new_attribute14 := NULL;
6803            ELSIF
6804               NVL(l_curr_party_acct_rec.attribute14,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute14,fnd_api.g_miss_char) THEN
6805                 l_account_hist_rec.old_attribute14 := l_curr_party_acct_rec.attribute14 ;
6806                 l_account_hist_rec.new_attribute14 := p_party_account_rec.attribute14 ;
6807            END IF;
6808            --
6809            IF (p_party_account_rec.attribute15 = fnd_api.g_miss_char) OR
6810                NVL(p_party_account_rec.attribute15, fnd_api.g_miss_char) = NVL(l_curr_party_acct_rec.attribute15, fnd_api.g_miss_char) THEN
6811                 l_account_hist_rec.old_attribute15 := NULL;
6812                 l_account_hist_rec.new_attribute15 := NULL;
6813            ELSIF
6814               NVL(l_curr_party_acct_rec.attribute15,fnd_api.g_miss_char) <> NVL(p_party_account_rec.attribute15,fnd_api.g_miss_char) THEN
6815                 l_account_hist_rec.old_attribute15 := l_curr_party_acct_rec.attribute15 ;
6816                 l_account_hist_rec.new_attribute15 := p_party_account_rec.attribute15 ;
6817            END IF;
6818     -- Added
6819            IF (p_party_account_rec.instance_party_id = fnd_api.g_miss_num) OR
6820                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
6821                 l_account_hist_rec.old_instance_party_id := NULL;
6822                 l_account_hist_rec.new_instance_party_id := NULL;
6823            ELSIF
6824               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
6825                 l_account_hist_rec.old_instance_party_id := l_curr_party_acct_rec.instance_party_id ;
6826                 l_account_hist_rec.new_instance_party_id := p_party_account_rec.instance_party_id ;
6827            END IF;
6828    -- End addition
6829         -- Call table handlers to insert into csi_i_parties_h table
6830          CSI_IP_ACCOUNTS_H_PKG.Insert_Row
6831          (
6832           px_IP_ACCOUNT_HISTORY_ID        => l_ip_account_history_id ,
6833           p_IP_ACCOUNT_ID                 => p_party_account_rec.IP_ACCOUNT_ID ,
6834           p_TRANSACTION_ID                => p_txn_rec.TRANSACTION_ID ,
6835           p_OLD_PARTY_ACCOUNT_ID          => l_account_hist_rec.OLD_PARTY_ACCOUNT_ID ,
6836           p_NEW_PARTY_ACCOUNT_ID          => l_account_hist_rec.NEW_PARTY_ACCOUNT_ID ,
6837           p_OLD_RELATIONSHIP_TYPE_CODE    => l_account_hist_rec.OLD_RELATIONSHIP_TYPE_CODE ,
6838           p_NEW_RELATIONSHIP_TYPE_CODE    => l_account_hist_rec.NEW_RELATIONSHIP_TYPE_CODE ,
6839           p_OLD_ACTIVE_START_DATE         => l_account_hist_rec.OLD_ACTIVE_START_DATE ,
6840           p_NEW_ACTIVE_START_DATE         => l_account_hist_rec.NEW_ACTIVE_START_DATE ,
6841           p_OLD_ACTIVE_END_DATE           => l_account_hist_rec.OLD_ACTIVE_END_DATE ,
6842           p_NEW_ACTIVE_END_DATE           => l_account_hist_rec.NEW_ACTIVE_END_DATE ,
6843           p_OLD_CONTEXT                   => l_account_hist_rec.OLD_CONTEXT ,
6844           p_NEW_CONTEXT                   => l_account_hist_rec.NEW_CONTEXT ,
6845           p_OLD_ATTRIBUTE1                => l_account_hist_rec.OLD_ATTRIBUTE1 ,
6846           p_NEW_ATTRIBUTE1                => l_account_hist_rec.NEW_ATTRIBUTE1 ,
6847           p_OLD_ATTRIBUTE2                => l_account_hist_rec.OLD_ATTRIBUTE2 ,
6848           p_NEW_ATTRIBUTE2                => l_account_hist_rec.NEW_ATTRIBUTE2 ,
6849           p_OLD_ATTRIBUTE3                => l_account_hist_rec.OLD_ATTRIBUTE3 ,
6850           p_NEW_ATTRIBUTE3                => l_account_hist_rec.NEW_ATTRIBUTE3 ,
6851           p_OLD_ATTRIBUTE4                => l_account_hist_rec.OLD_ATTRIBUTE4 ,
6852           p_NEW_ATTRIBUTE4                => l_account_hist_rec.NEW_ATTRIBUTE4 ,
6853           p_OLD_ATTRIBUTE5                => l_account_hist_rec.OLD_ATTRIBUTE5 ,
6854           p_NEW_ATTRIBUTE5                => l_account_hist_rec.NEW_ATTRIBUTE5 ,
6855           p_OLD_ATTRIBUTE6                => l_account_hist_rec.OLD_ATTRIBUTE6 ,
6856           p_NEW_ATTRIBUTE6                => l_account_hist_rec.NEW_ATTRIBUTE6 ,
6857           p_OLD_ATTRIBUTE7                => l_account_hist_rec.OLD_ATTRIBUTE7 ,
6858           p_NEW_ATTRIBUTE7                => l_account_hist_rec.NEW_ATTRIBUTE7 ,
6859           p_OLD_ATTRIBUTE8                => l_account_hist_rec.OLD_ATTRIBUTE8 ,
6860           p_NEW_ATTRIBUTE8                => l_account_hist_rec.NEW_ATTRIBUTE8 ,
6861           p_OLD_ATTRIBUTE9                => l_account_hist_rec.OLD_ATTRIBUTE9 ,
6862           p_NEW_ATTRIBUTE9                => l_account_hist_rec.NEW_ATTRIBUTE9 ,
6863           p_OLD_ATTRIBUTE10               => l_account_hist_rec.OLD_ATTRIBUTE10 ,
6864           p_NEW_ATTRIBUTE10               => l_account_hist_rec.NEW_ATTRIBUTE10 ,
6865           p_OLD_ATTRIBUTE11               => l_account_hist_rec.OLD_ATTRIBUTE11 ,
6866           p_NEW_ATTRIBUTE11               => l_account_hist_rec.NEW_ATTRIBUTE11 ,
6867           p_OLD_ATTRIBUTE12               => l_account_hist_rec.OLD_ATTRIBUTE12 ,
6868           p_NEW_ATTRIBUTE12               => l_account_hist_rec.NEW_ATTRIBUTE12 ,
6869           p_OLD_ATTRIBUTE13               => l_account_hist_rec.OLD_ATTRIBUTE13 ,
6870           p_NEW_ATTRIBUTE13               => l_account_hist_rec.NEW_ATTRIBUTE13 ,
6871           p_OLD_ATTRIBUTE14               => l_account_hist_rec.OLD_ATTRIBUTE14 ,
6872           p_NEW_ATTRIBUTE14               => l_account_hist_rec.NEW_ATTRIBUTE14 ,
6873           p_OLD_ATTRIBUTE15               => l_account_hist_rec.OLD_ATTRIBUTE15 ,
6874           p_NEW_ATTRIBUTE15               => l_account_hist_rec.NEW_ATTRIBUTE15 ,
6875           p_FULL_DUMP_FLAG                => 'N' ,
6876           p_CREATED_BY                    => FND_GLOBAL.USER_ID ,
6877           p_CREATION_DATE                 => SYSDATE ,
6878           p_LAST_UPDATED_BY               => FND_GLOBAL.USER_ID ,
6879           p_LAST_UPDATE_DATE              => SYSDATE ,
6880           p_LAST_UPDATE_LOGIN             => FND_GLOBAL.LOGIN_ID ,
6881           p_OBJECT_VERSION_NUMBER         => 1 ,
6882           p_OLD_BILL_TO_ADDRESS           => l_account_hist_rec.OLD_BILL_TO_ADDRESS ,
6883           p_NEW_BILL_TO_ADDRESS           => l_account_hist_rec.NEW_BILL_TO_ADDRESS ,
6884           p_OLD_SHIP_TO_ADDRESS           => l_account_hist_rec.OLD_SHIP_TO_ADDRESS ,
6885           p_NEW_SHIP_TO_ADDRESS           => l_account_hist_rec.NEW_SHIP_TO_ADDRESS ,
6886           p_OLD_INSTANCE_PARTY_ID         => l_account_hist_rec.OLD_INSTANCE_PARTY_ID ,
6887           p_NEW_INSTANCE_PARTY_ID         => l_account_hist_rec.NEW_INSTANCE_PARTY_ID );
6888 
6889         END IF;
6890        END;
6891        -- End of modification for Bug#2547034 on 09/20/02 - rtalluri
6892 
6893     -- Call Contracts
6894     -- Commented by sguthiva for bug 2307804
6895     -- End commentation by sguthiva for bug 2307804
6896     -- Added by sguthiva for bug 2307804
6897     IF p_party_account_rec.relationship_type_code = 'OWNER'
6898     THEN
6899        -- The following code has been written to make sure
6900        -- before calling contracts we pass a valid vld_organization_id
6901        IF p_party_account_rec.vld_organization_id IS NULL OR
6902           p_party_account_rec.vld_organization_id = fnd_api.g_miss_num
6903        THEN
6904           BEGIN
6905              SELECT last_vld_organization_id
6906              INTO   l_last_vld_org
6907              FROM   csi_item_instances
6908              WHERE  instance_id = l_party_rec.instance_id;
6909           EXCEPTION
6910              WHEN OTHERS THEN
6911                 NULL;
6912           END;
6913        ELSE
6914           l_last_vld_org := p_party_account_rec.vld_organization_id;
6915        END IF;
6916        --
6917        IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
6918           csi_gen_utility_pvt.populate_install_param_rec;
6919        END IF;
6920        --
6921        l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
6922        --
6923        IF l_internal_party_id IS NULL THEN
6924           FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
6925           FND_MSG_PUB.ADD;
6926           RAISE FND_API.G_EXC_ERROR;
6927        END IF;
6928        -- Commenting as we are not using this code
6929        -- Uncommented following code for bug 13614080
6930        l_old_party_id := null;
6931        l_new_party_id := null;
6932        Begin
6933           select old_party_id,new_party_id
6934           into l_old_party_id,l_new_party_id
6935           from CSI_I_PARTIES_H
6936           where instance_party_id = l_party_rec.instance_party_id
6937           and   transaction_id = p_txn_rec.transaction_id;
6938        Exception
6939           when no_data_found then
6940              l_old_party_id := null;
6941              l_new_party_id := null;
6942        End;
6943        --
6944 
6945        IF l_old_pty_acct_id IS NOT NULL
6946          -- l_party_rec.Party_id <> l_internal_party_id -- changed from p_party_account_rec.party_account_id --commented for bug 13614080
6947           AND p_party_account_rec.party_account_id <> l_old_pty_acct_id
6948           AND p_party_account_rec.party_account_id <> fnd_api.g_miss_num
6949        THEN
6950 	  -- start code fix for bug 13614080
6951 	   IF l_old_party_id = l_internal_party_id THEN
6952 		 l_transaction_type := 'NEW';
6953           l_new_pty_acct_id := p_party_account_rec.party_account_id;
6954 	   ELSE
6955           l_transaction_type := 'TRF';
6956           l_new_pty_acct_id := p_party_account_rec.party_account_id;
6957 		END IF;
6958 		-- End code fix for bug 13614080
6959        ELSIF l_old_pty_acct_id IS NULL AND
6960              l_party_rec.party_id <> l_internal_party_id -- changed from p_party_account_rec.party_account_id
6961              AND p_party_account_rec.party_account_id IS NOT NULL
6962              AND p_party_account_rec.party_account_id <> fnd_api.g_miss_num
6963        THEN
6964           l_transaction_type := 'NEW';
6965           l_new_pty_acct_id := NULL;
6966           /*  ELSIF p_party_account_rec.party_account_id = l_internal_party_id
6967               OR  ( l_old_pty_acct_id <> l_internal_party_id
6968                 AND p_party_account_rec.active_end_date <= sysdate
6969                 AND p_party_account_rec.active_end_date <> fnd_api.g_miss_date )
6970             THEN */
6971           -- srramakr commneted the above code and checked for old and new party ID
6972        ELSIF /*l_old_party_id IS NOT NULL AND
6973           l_new_party_id IS NOT NULL AND
6974           l_old_party_id <> l_internal_party_id AND
6975           l_new_party_id = l_internal_party_id */
6976           p_party_account_rec.active_end_date IS NOT NULL AND
6977           p_party_account_rec.active_end_date <> fnd_api.g_miss_date AND
6978           p_party_account_rec.active_end_date <= sysdate
6979       THEN -- external to internal
6980           IF p_txn_rec.transaction_type_id in (53,54) THEN -- RMA
6981              l_transaction_type := 'RET';
6982           ELSE
6983              l_transaction_type := 'TRM';
6984           END IF;
6985 
6986           l_old_pty_acct_id := NULL;
6987           l_new_pty_acct_id := NULL;
6988 
6989           UPDATE csi_item_instances
6990           SET    owner_party_account_id = NULL
6991           WHERE  instance_id     = l_party_rec.instance_id;
6992        END IF;
6993        --
6994         --Changes for Bug 11679952
6995        IF  l_transaction_type IS NOT NULL AND
6996            p_party_account_rec.call_contracts <> fnd_api.g_false AND
6997            p_txn_rec.transaction_type_id <> 7   -- Added for bug 3973706
6998 	  AND nvl(p_txn_rec.source_group_ref, FND_API.G_MISS_CHAR) <> 'WBADI' --Added for Bug 11679952
6999        THEN
7000           IF l_transaction_type = 'TRF' THEN
7001              -- Added the following code for bug 2972082
7002              IF nvl(p_party_account_rec.cascade_ownership_flag,'N')='Y' THEN
7003                 csi_gen_utility_pvt.put_line('Since the transaction is a cascade ownership call ');
7004                 csi_gen_utility_pvt.put_line('(external to external ownership, component owner is different from parent),');
7005                 csi_gen_utility_pvt.put_line('Hence call contracts with TRM and NEW transaction types. ');
7006                 csi_gen_utility_pvt.put_line( 'Calling contracts with TRM transaction type for instance '||l_party_rec.instance_id);
7007 		csi_item_instance_pvt.Call_to_Contracts(
7008 		         p_transaction_type   =>   'TRM'
7009 		        ,p_instance_id        =>   l_party_rec.instance_id
7010 		        ,p_new_instance_id    =>   NULL
7011 		        ,p_vld_org_id         =>   l_last_vld_org
7012 		        ,p_quantity           =>   NULL
7013 		        ,p_party_account_id1  =>   NULL
7014 		        ,p_party_account_id2  =>   NULL
7015 		        ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
7016 			,p_txn_type_id        => p_txn_rec.transaction_type_id  --added for BUG# 5752271
7017 		        ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date
7018 		        ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
7019                         ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
7020 		        ,x_return_status      =>   x_return_status
7021 		        ,x_msg_count          =>   x_msg_count
7022 		        ,x_msg_data           =>   x_msg_data
7023 		         );
7024 
7025                 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
7026                    csi_gen_utility_pvt.put_line('Cascade Ownership - Call to contracts with TRM txn type has errored ');
7027                    l_msg_index := 1;
7028                    l_msg_count := x_msg_count;
7029                    WHILE l_msg_count > 0 LOOP
7030                      x_msg_data := FND_MSG_PUB.GET(
7031                                            l_msg_index,
7032                                            FND_API.G_FALSE   );
7033                       csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
7034                       l_msg_index := l_msg_index + 1;
7035                       l_msg_count := l_msg_count - 1;
7036                    END LOOP;
7037                    RAISE FND_API.G_EXC_ERROR;
7038                 END IF;
7039                 csi_gen_utility_pvt.put_line( 'Calling contracts with NEW transaction type for instance '||l_party_rec.instance_id);
7040 
7041 		csi_item_instance_pvt.Call_to_Contracts(
7042 		         p_transaction_type   =>   'NEW'
7043 		        ,p_instance_id        =>   l_party_rec.instance_id
7044 		        ,p_new_instance_id    =>   NULL
7045 		        ,p_vld_org_id         =>   l_last_vld_org
7046 		        ,p_quantity           =>   NULL
7047 		        ,p_party_account_id1  =>   NULL
7048 		        ,p_party_account_id2  =>   NULL
7049 		        ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
7050 		        ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date -- SYSDATE
7051 		        ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
7052 			,p_txn_type_id        => p_txn_rec.transaction_type_id  --added for BUG# 5752271
7053                         ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
7054 		        ,x_return_status      =>   x_return_status
7055 		        ,x_msg_count          =>   x_msg_count
7056 		        ,x_msg_data           =>   x_msg_data
7057 		         );
7058                 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
7059                    csi_gen_utility_pvt.put_line('Cascade Ownership - Call to contracts with NEW txn type has errored ');
7060                    l_msg_index := 1;
7061                    l_msg_count := x_msg_count;
7062                    WHILE l_msg_count > 0 LOOP
7063                      x_msg_data := FND_MSG_PUB.GET(
7064                                            l_msg_index,
7065                                            FND_API.G_FALSE   );
7066                       csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
7067                       l_msg_index := l_msg_index + 1;
7068                       l_msg_count := l_msg_count - 1;
7069                    END LOOP;
7070                    RAISE FND_API.G_EXC_ERROR;
7071                 END IF;
7072                 -- End addition for bug 2972082
7073              ELSE
7074 		csi_item_instance_pvt.Call_to_Contracts(
7075 		         p_transaction_type   =>   l_transaction_type
7076 		        ,p_instance_id        =>   l_party_rec.instance_id
7077 		        ,p_new_instance_id    =>   NULL
7078 		        ,p_vld_org_id         =>   l_last_vld_org
7079 		        ,p_quantity           =>   NULL
7080 		        ,p_party_account_id1  =>   l_old_pty_acct_id
7081 		        ,p_party_account_id2  =>   l_new_pty_acct_id
7082 		        ,p_transaction_date   =>   p_txn_rec.transaction_date       -- added by sguthiva
7083 		        ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date       -- added by jpwilson
7084 		        ,p_transaction_id     =>   p_txn_rec.transaction_id
7085 		        ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
7086 			,p_txn_type_id        => p_txn_rec.transaction_type_id  --added for BUG# 5752271
7087 		        ,p_system_id          =>   p_party_account_rec.system_id
7088                         ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
7089 		        ,x_return_status      =>   x_return_status
7090 		        ,x_msg_count          =>   x_msg_count
7091 		        ,x_msg_data           =>   x_msg_data
7092 		         );
7093              END IF;
7094 	  ELSE
7095 	     csi_item_instance_pvt.Call_to_Contracts(
7096 		      p_transaction_type   =>   l_transaction_type
7097 		     ,p_instance_id        =>   l_party_rec.instance_id
7098 		     ,p_new_instance_id    =>   NULL
7099 		     ,p_vld_org_id         =>   l_last_vld_org
7100 		     ,p_quantity           =>   NULL
7101 		     ,p_party_account_id1  =>   l_old_pty_acct_id
7102 		     ,p_party_account_id2  =>   l_new_pty_acct_id
7103 		     ,p_transaction_date   =>   p_txn_rec.transaction_date -- SYSDATE
7104 		     ,p_source_transaction_date   =>   p_txn_rec.source_transaction_date
7105 		     ,p_grp_call_contracts =>   p_party_account_rec.grp_call_contracts -- srramakr
7106                      ,p_oks_txn_inst_tbl   =>   p_oks_txn_inst_tbl
7107 		     ,x_return_status      =>   x_return_status
7108 		     ,x_msg_count          =>   x_msg_count
7109 		     ,x_msg_data           =>   x_msg_data
7110 		      );
7111 		  END IF;
7112 	     IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
7113 		l_msg_index := 1;
7114 		l_msg_count := x_msg_count;
7115 		WHILE l_msg_count > 0 LOOP
7116 			x_msg_data := FND_MSG_PUB.GET(
7117 					       l_msg_index,
7118 					       FND_API.G_FALSE   );
7119 			csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
7120 			l_msg_index := l_msg_index + 1;
7121 			l_msg_count := l_msg_count - 1;
7122 		END LOOP;
7123 		RAISE FND_API.G_EXC_ERROR;
7124              END IF;
7125           END IF;
7126        END IF;
7127        -- End addition by sguthiva for bug 2307804
7128        --
7129        -- End of API body
7130        -- Standard check of p_commit.
7131        IF FND_API.To_Boolean( p_commit ) THEN
7132           COMMIT WORK;
7133        END IF;
7134        -- Standard call to get message count and if count is  get message info.
7135        FND_MSG_PUB.Count_And_Get
7136                 (p_count        =>      x_msg_count ,
7137                  p_data         =>      x_msg_data  );
7138 EXCEPTION
7139         WHEN FND_API.G_EXC_ERROR THEN
7140                 -- ROLLBACK TO update_inst_party_acct_pvt;
7141                 x_return_status := FND_API.G_RET_STS_ERROR ;
7142                 FND_MSG_PUB.Count_And_Get
7143                 (       p_count    =>      x_msg_count,
7144                         p_data     =>      x_msg_data  );
7145         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7146                 -- ROLLBACK TO update_inst_party_acct_pvt;
7147                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7148                 FND_MSG_PUB.Count_And_Get
7149                 (       p_count  =>      x_msg_count,
7150                         p_data   =>      x_msg_data );
7151         WHEN OTHERS THEN
7152                 -- ROLLBACK TO update_inst_party_acct_pvt;
7153                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7154                 IF FND_MSG_PUB.Check_Msg_Level
7155                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7156                 THEN
7157                    FND_MSG_PUB.Add_Exc_Msg
7158                     ( g_pkg_name, l_api_name );
7159                 END IF;
7160                 FND_MSG_PUB.Count_And_Get
7161                 (       p_count   =>      x_msg_count,
7162                         p_data    =>      x_msg_data );
7163 END update_inst_party_account ;
7164 
7165 /*--------------------------------------------------------------*/
7166 /* Procedure name: Expire_inst_party_account                    */
7167 /* Description :  Procedure used to expire an existing          */
7168 /*                    instance-party account relationships      */
7169 /*--------------------------------------------------------------*/
7170 
7171 PROCEDURE expire_inst_party_account
7172  (    p_api_version                 IN  NUMBER
7173      ,p_commit                      IN  VARCHAR2
7174      ,p_init_msg_list               IN  VARCHAR2
7175      ,p_validation_level            IN  NUMBER
7176      ,p_party_account_rec           IN  csi_datastructures_pub.party_account_rec
7177      ,p_txn_rec                     IN OUT NOCOPY  csi_datastructures_pub.transaction_rec
7178      ,x_return_status               OUT NOCOPY  VARCHAR2
7179      ,x_msg_count                   OUT NOCOPY  NUMBER
7180      ,x_msg_data                    OUT NOCOPY  VARCHAR2
7181     ) IS
7182 
7183      l_api_name      CONSTANT VARCHAR2(30)   :=  'EXPIRE_INST_PARTY_ACCOUNT';
7184      l_api_version   CONSTANT NUMBER         :=  1.0;
7185      l_csi_debug_level        NUMBER;
7186      l_party_account_rec      csi_datastructures_pub.party_account_rec;
7187     --  l_curr_party_acct_rec    csi_datastructures_pub.party_account_rec;
7188      l_msg_count              NUMBER;
7189      l_msg_data               VARCHAR2(100);
7190      l_txn_id                 NUMBER;
7191      l_msg_index              NUMBER;
7192      l_OBJECT_VERSION_NUMBER  NUMBER;
7193      x_msg_index_out          NUMBER;
7194      l_ip_account_history_id  NUMBER;
7195      l_full_dump_frequency    NUMBER;
7196      l_mod_value              NUMBER;
7197      --
7198      px_oks_txn_inst_tbl      oks_ibint_pub.txn_instance_tbl;
7199 
7200   CURSOR get_curr_party_acct_rec (p_ip_account_id   IN  NUMBER) IS
7201    SELECT
7202      ip_account_id                    ,
7203      FND_API.G_MISS_NUM parent_tbl_index,
7204      instance_party_id                ,
7205      party_account_id                 ,
7206      relationship_type_code           ,
7207      bill_to_address                  ,
7208      ship_to_address                  ,
7209      active_start_date                ,
7210      active_end_date                  ,
7211      context                          ,
7212      attribute1                       ,
7213      attribute2                       ,
7214      attribute3                       ,
7215      attribute4                       ,
7216      attribute5                       ,
7217      attribute6                       ,
7218      attribute7                       ,
7219      attribute8                       ,
7220      attribute9                       ,
7221      attribute10                      ,
7222      attribute11                      ,
7223      attribute12                      ,
7224      attribute13                      ,
7225      attribute14                      ,
7226      attribute15                      ,
7227      object_version_number
7228    FROM CSI_IP_ACCOUNTS
7229    WHERE IP_ACCOUNT_ID = p_ip_account_id
7230    AND (( ACTIVE_END_DATE IS NULL) OR (ACTIVE_END_DATE >= SYSDATE))
7231    FOR UPDATE OF OBJECT_VERSION_NUMBER;
7232 
7233    l_curr_party_acct_rec    get_curr_party_acct_rec%ROWTYPE;
7234 
7235 BEGIN
7236    -- Standard Start of API savepoint
7237    SAVEPOINT  expire_inst_party_acct_pvt;
7238 
7239    -- Standard call to check for call compatibility.
7240    IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
7241 					   p_api_version           ,
7242 					   l_api_name              ,
7243 					   g_pkg_name              )
7244    THEN
7245 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7246    END IF;
7247 
7248    -- Initialize message list if p_init_msg_list is set to TRUE.
7249    IF FND_API.to_Boolean( p_init_msg_list ) THEN
7250 	   FND_MSG_PUB.initialize;
7251    END IF;
7252 
7253    --  Initialize API return status to success
7254    x_return_status := FND_API.G_RET_STS_SUCCESS;
7255 
7256    -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
7257    l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
7258 
7259    -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
7260    IF (l_csi_debug_level > 0) THEN
7261        csi_gen_utility_pvt.put_line( 'expire_inst_party_account');
7262    END IF;
7263 
7264    -- If the debug level = 2 then dump all the parameters values.
7265    IF (l_csi_debug_level > 1) THEN
7266 	 csi_gen_utility_pvt.put_line( 'expire_inst_party_account:'||
7267 					 p_api_version           ||'-'||
7268 					 p_commit                ||'-'||
7269 					 p_init_msg_list              );
7270 
7271 
7272        -- Dump the records in the log file
7273        csi_gen_utility_pvt.dump_party_account_rec(p_party_account_rec);
7274        csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
7275    END IF;
7276    -- Start API body
7277    --
7278    -- Check if all the required parameters are passed
7279    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
7280 	 (    p_party_account_rec.ip_account_id,
7281 	      '  p_party_account_rec.ip_account_id ',
7282 	      l_api_name                 );
7283 
7284    CSI_Instance_parties_vld_pvt.Check_Reqd_Param_num
7285 	 (   p_party_account_rec.object_version_number,
7286 	       ' p_party_account_rec.object_version_number ',
7287 		 l_api_name                 );
7288 
7289 
7290    -- Check if the instance party id  is valid
7291    IF NOT(CSI_Instance_parties_vld_pvt.Is_Ip_account_Valid
7292 	       (p_party_account_rec.ip_account_id))THEN
7293 	      FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_IP_ACCOUNT_ID');
7294 	      FND_MESSAGE.SET_TOKEN('IP_ACCOUNT_ID',p_party_account_rec.ip_account_id);
7295 	      FND_MSG_PUB.Add;
7296 	 RAISE FND_API.G_EXC_ERROR;
7297    END IF;
7298    -- check if the object_version_number passed matches with the one
7299    -- in the database else raise error
7300    OPEN get_curr_party_acct_rec(p_party_account_rec.ip_account_id);
7301    FETCH get_curr_party_acct_rec INTO l_curr_party_acct_rec;
7302 
7303    IF  (l_curr_party_acct_rec.object_version_number <> p_party_account_rec.OBJECT_VERSION_NUMBER) THEN
7304        FND_MESSAGE.Set_Name('CSI', 'CSI_API_OBJ_VER_MISMATCH');
7305        FND_MSG_PUB.ADD;
7306       RAISE FND_API.G_EXC_ERROR;
7307    END IF;
7308    --
7309    IF get_curr_party_acct_rec%NOTFOUND THEN
7310       FND_MESSAGE.Set_Name('CSI', 'CSI_API_RECORD_LOCKED');
7311       FND_MSG_PUB.ADD;
7312       RAISE FND_API.G_EXC_ERROR;
7313    END IF;
7314    CLOSE get_curr_party_acct_rec;
7315    -- Initialize all the parameters and call upate_inst_party_account to expire the record
7316 
7317    l_party_account_rec.IP_ACCOUNT_ID      := l_curr_party_acct_rec.ip_account_id;
7318    l_party_account_rec.INSTANCE_PARTY_ID := FND_API.G_MISS_NUM;
7319    l_party_account_rec.PARTY_ACCOUNT_ID := l_curr_party_acct_rec.party_account_id; -- Added by sguthiva for bug 2307804
7320    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;
7321     -- Bug 3804960
7322     -- srramakr Need to use the same the date used by the item instance
7323     IF p_txn_rec.src_txn_creation_date IS NULL OR
7324        p_txn_rec.src_txn_creation_date = FND_API.G_MISS_DATE THEN
7325        l_party_account_rec.active_end_date := sysdate;
7326     ELSE
7327        l_party_account_rec.active_end_date := p_txn_rec.src_txn_creation_date;
7328     END IF;
7329     -- End of 3804960
7330     l_party_account_rec.CONTEXT       := FND_API.G_MISS_CHAR;
7331     l_party_account_rec.ATTRIBUTE1    := FND_API.G_MISS_CHAR;
7332     l_party_account_rec.ATTRIBUTE2    := FND_API.G_MISS_CHAR;
7333     l_party_account_rec.ATTRIBUTE3    := FND_API.G_MISS_CHAR;
7334     l_party_account_rec.ATTRIBUTE4    := FND_API.G_MISS_CHAR;
7335     l_party_account_rec.ATTRIBUTE5    := FND_API.G_MISS_CHAR;
7336     l_party_account_rec.ATTRIBUTE6    := FND_API.G_MISS_CHAR;
7337     l_party_account_rec.ATTRIBUTE7    := FND_API.G_MISS_CHAR;
7338     l_party_account_rec.ATTRIBUTE8    := FND_API.G_MISS_CHAR;
7339     l_party_account_rec.ATTRIBUTE9    := FND_API.G_MISS_CHAR;
7340     l_party_account_rec.ATTRIBUTE10   := FND_API.G_MISS_CHAR;
7341     l_party_account_rec.ATTRIBUTE11   := FND_API.G_MISS_CHAR;
7342     l_party_account_rec.ATTRIBUTE12   := FND_API.G_MISS_CHAR;
7343     l_party_account_rec.ATTRIBUTE13   := FND_API.G_MISS_CHAR;
7344     l_party_account_rec.ATTRIBUTE14   := FND_API.G_MISS_CHAR;
7345     l_party_account_rec.ATTRIBUTE15   := FND_API.G_MISS_CHAR;
7346     l_party_account_rec.BILL_TO_ADDRESS := FND_API.G_MISS_NUM;
7347     l_party_account_rec.SHIP_TO_ADDRESS := FND_API.G_MISS_NUM;
7348     l_party_account_rec.OBJECT_VERSION_NUMBER := p_party_account_rec.OBJECT_VERSION_NUMBER;
7349     l_party_account_rec.expire_flag := p_party_account_rec.expire_flag; -- Added by sguthiva for bug 2307804
7350     l_party_account_rec.call_contracts := p_party_account_rec.call_contracts; -- Added by sguthiva for bug 2307804
7351     -- g_expire_account_flag    := 'Y'; -- Added by sguthiva for bug 2307804
7352     --
7353     update_inst_party_account
7354 	(  p_api_version         => p_api_version
7355 	  ,p_commit              => p_commit
7356 	  ,p_init_msg_list       => p_init_msg_list
7357 	  ,p_validation_level    => p_validation_level
7358 	  ,p_party_account_rec   => l_party_account_rec
7359 	  ,p_txn_rec             => p_txn_rec
7360 	  ,p_oks_txn_inst_tbl    => px_oks_txn_inst_tbl
7361 	  ,x_return_status       => x_return_status
7362 	  ,x_msg_count           => x_msg_count
7363 	  ,x_msg_data            => x_msg_data);
7364     --
7365     --g_expire_account_flag    := 'N';  -- Added by sguthiva for bug 2307804
7366     IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
7367        l_msg_index := 1;
7368        l_msg_count := x_msg_count;
7369        WHILE l_msg_count > 0 LOOP
7370 	    x_msg_data := FND_MSG_PUB.GET(
7371 					 l_msg_index,
7372 					 FND_API.G_FALSE 	);
7373 	    csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
7374 	    l_msg_index := l_msg_index + 1;
7375 	    l_msg_count := l_msg_count - 1;
7376        END LOOP;
7377        RAISE FND_API.G_EXC_ERROR;
7378     END IF;
7379     --
7380     -- Commented the tablehandler call since Update API got invoked
7381     --
7382     -- End of API body
7383     -- Standard check of p_commit.
7384     IF FND_API.To_Boolean( p_commit ) THEN
7385        COMMIT WORK;
7386     END IF;
7387     -- Standard call to get message count and if count is  get message info.
7388     FND_MSG_PUB.Count_And_Get
7389                 (p_count        =>      x_msg_count ,
7390                  p_data         =>      x_msg_data );
7391 EXCEPTION
7392         WHEN FND_API.G_EXC_ERROR THEN
7393                 ROLLBACK TO expire_inst_party_acct_pvt;
7394                 x_return_status := FND_API.G_RET_STS_ERROR ;
7395                 FND_MSG_PUB.Count_And_Get
7396                 (       p_count   =>      x_msg_count,
7397                         p_data    =>      x_msg_data );
7398 
7399         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7400                 ROLLBACK TO expire_inst_party_acct_pvt;
7401                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7402                 FND_MSG_PUB.Count_And_Get
7403                 (       p_count  =>      x_msg_count,
7404                         p_data   =>      x_msg_data );
7405         WHEN OTHERS THEN
7406                 ROLLBACK TO expire_inst_party_acct_pvt;
7407                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7408                 IF FND_MSG_PUB.Check_Msg_Level
7409                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7410                 THEN
7411                    FND_MSG_PUB.Add_Exc_Msg
7412                     ( g_pkg_name, l_api_name );
7413                 END IF;
7414                 FND_MSG_PUB.Count_And_Get
7415                 (       p_count   =>      x_msg_count,
7416                         p_data    =>      x_msg_data  );
7417 END expire_inst_party_account ;
7418 
7419 
7420 /*------------------------------------------------------------*/
7421 /* Procedure name: get_contact_details                        */
7422 /* Description :  Get the details of a contact party          */
7423 /*------------------------------------------------------------*/
7424 
7425 PROCEDURE get_contact_details
7426  (
7427       p_api_version                 IN  NUMBER
7428      ,p_commit                      IN  VARCHAR2
7429      ,p_init_msg_list               IN  VARCHAR2
7430      ,p_validation_level            IN  NUMBER
7431      ,p_contact_party_id            IN  NUMBER
7432      ,p_contact_flag                IN  VARCHAR2
7433      ,p_party_tbl                   IN  VARCHAR2
7434      ,x_contact_details             OUT NOCOPY  csi_datastructures_pub.contact_details_rec
7435      ,x_return_status               OUT NOCOPY  VARCHAR2
7436      ,x_msg_count                   OUT NOCOPY  NUMBER
7437      ,x_msg_data                    OUT NOCOPY  VARCHAR2
7438     ) IS
7439 
7440      l_api_name      CONSTANT VARCHAR2(30)   :=  'GET_CONTACT_DETAILS_PVT';
7441      l_api_version   CONSTANT NUMBER         :=  1.0;
7442      l_csi_debug_level        NUMBER;
7443 
7444 
7445 BEGIN
7446         -- Standard Start of API savepoint
7447         -- SAVEPOINT  get_contact_details_pvt;
7448 
7449         -- Standard call to check for call compatibility.
7450         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
7451                                                 p_api_version           ,
7452                                                 l_api_name              ,
7453                                                 g_pkg_name              )
7454         THEN
7455                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7456         END IF;
7457 
7458         -- Initialize message list if p_init_msg_list is set to TRUE.
7459         IF FND_API.to_Boolean( p_init_msg_list ) THEN
7460                 FND_MSG_PUB.initialize;
7461         END IF;
7462 
7463         --  Initialize API return status to success
7464         x_return_status := FND_API.G_RET_STS_SUCCESS;
7465 
7466         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
7467         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
7468 
7469         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
7470         IF (l_csi_debug_level > 0) THEN
7471             csi_gen_utility_pvt.put_line( 'get_contact_details');
7472         END IF;
7473 
7474 
7475         -- Start API body
7476 
7477         IF (   ( p_contact_party_id IS NULL OR p_contact_party_id = fnd_api.g_miss_num )
7478             OR ( p_party_tbl IS NULL OR p_party_tbl = fnd_api.g_miss_char )
7479            )
7480         THEN
7481             fnd_message.set_name('CSI', 'CSI_API_INVALID_PARAMETERS');
7482             fnd_msg_pub.add;
7483             x_return_status := fnd_api.g_ret_sts_error;
7484             RAISE fnd_api.g_exc_error;
7485         END IF;
7486 
7487 
7488         IF upper(p_party_tbl) = 'HZ_PARTIES'
7489         THEN
7490            BEGIN
7491 
7492               SELECT   hp.party_name party_name,
7493 
7494                 decode( hcp_wp.phone_country_code, null, null, hcp_wp.phone_country_code || '-'
7495     )
7496              || decode( hcp_wp.phone_area_code, null, null, '(' || hcp_wp.phone_Area_code || ')'
7497     )
7498              || hcp_wp.phone_number
7499              || decode( hcp_wp.phone_extension, null, null, ' x'|| hcp_wp.phone_extension)
7500     work_phone_number,
7501 
7502                 decode( hcp_hp.phone_country_code, null, null, hcp_hp.phone_country_code || '-'
7503     )
7504              || decode( hcp_hp.phone_area_code, null, null, '(' || hcp_hp.phone_Area_code || ')'
7505     )
7506              || hcp_hp.phone_number
7507              || decode( hcp_hp.phone_extension, null, null, ' x'|| hcp_hp.phone_extension)
7508     home_phone_number,
7509 
7510                 decode( hcp_mb.phone_country_code, null, null, hcp_mb.phone_country_code || '-'
7511     )
7512              || decode( hcp_mb.phone_area_code, null, null, '(' || hcp_mb.phone_Area_code || ')'
7513     )
7514              || hcp_mb.phone_number
7515              || decode( hcp_mb.phone_extension, null, null, ' x'|| hcp_mb.phone_extension)
7516     mobile_number,
7517 
7518                 decode( hcp_pg.phone_country_code, null, null, hcp_pg.phone_country_code || '-'
7519     )
7520              || decode( hcp_pg.phone_area_code, null, null, '(' || hcp_pg.phone_Area_code || ')'
7521     )
7522              || hcp_pg.phone_number
7523              || decode( hcp_pg.phone_extension, null, null, ' x'|| hcp_pg.phone_extension)
7524     pager_number,
7525 
7526                 decode( hcp_fx.phone_country_code, null, null, hcp_fx.phone_country_code || '-'
7527     )
7528              || decode( hcp_fx.phone_area_code, null, null, '(' || hcp_fx.phone_Area_code || ')'
7529     )
7530              || hcp_fx.phone_number
7531              || decode( hcp_fx.phone_extension, null, null, ' x'|| hcp_fx.phone_extension)
7532     fax_number,
7533 
7534                 HP.ADDRESS1, HP.ADDRESS2, HP.ADDRESS3, HP.ADDRESS4, HP.CITY, HP.POSTAL_CODE,
7535                 HP.STATE, HP.COUNTRY,
7536                 hcp_em.email_address
7537 
7538             INTO   x_contact_details.party_name,
7539                    x_contact_details.officephone,
7540                    x_contact_details.homephone,
7541                    x_contact_details.mobile,
7542                    x_contact_details.page,
7543                    x_contact_details.fax,
7544                    x_contact_details.address1,
7545                    x_contact_details.address2,
7546                    x_contact_details.address3,
7547                    x_contact_details.address4,
7548                    x_contact_details.city,
7549                    x_contact_details.postal_code,
7550                    x_contact_details.state,
7551                    x_contact_details.country,
7552                    x_contact_details.email
7553 
7554              FROM
7555                    HZ_PARTIES HP,
7556                    CSI_I_PARTIES CIP,
7557                  --  CSI_IPA_RELATION_TYPES CIR,
7558                    HZ_CONTACT_POINTS HCP_WP,
7559                    HZ_CONTACT_POINTS HCP_HP,
7560                    HZ_CONTACT_POINTS HCP_PG,
7561                    HZ_CONTACT_POINTS HCP_EM,
7562                    HZ_CONTACT_POINTS HCP_FX,
7563                    HZ_CONTACT_POINTS HCP_MB,
7564                  --  CSI_LOOKUPS CL,
7565                    HZ_RELATIONSHIPS HR,
7566                    CSI_I_PARTIES CIPO
7567              WHERE CIP.INSTANCE_PARTY_ID =  p_contact_party_id -- party_id for the contact
7568                AND CIP.PARTY_ID = HR.SUBJECT_ID
7569                AND CIP.CONTACT_IP_ID = CIPO.INSTANCE_PARTY_ID
7570                AND CIPO.PARTY_ID = HR.OBJECT_ID
7571                AND HR.SUBJECT_ID = HP.PARTY_ID
7572                AND CIP.CONTACT_FLAG = 'Y'
7573                AND CIP.PARTY_SOURCE_TABLE = 'HZ_PARTIES'
7574             --   AND CIP.RELATIONSHIP_TYPE_CODE = CIR.IPA_RELATION_TYPE_CODE(+)
7575             --   AND CL.LOOKUP_CODE(+) = CIP.PARTY_SOURCE_TABLE
7576                AND HR.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
7577                AND HR.OBJECT_TABLE_NAME = 'HZ_PARTIES'
7578 
7579                AND HCP_WP.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7580                AND HCP_WP.OWNER_TABLE_ID(+) = HR.PARTY_ID
7581                AND HCP_WP.CONTACT_POINT_TYPE(+) = 'PHONE'
7582                AND HCP_WP.PHONE_LINE_TYPE(+) = 'GEN'
7583                AND HCP_WP.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7584 
7585                AND HCP_HP.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7586                AND HCP_HP.OWNER_TABLE_ID(+) = HR.PARTY_ID
7587                AND HCP_HP.CONTACT_POINT_TYPE(+) = 'PHONE'
7588                AND HCP_HP.PHONE_LINE_TYPE(+) = 'GEN'
7589                AND HCP_HP.CONTACT_POINT_PURPOSE(+) = 'PERSONAL'
7590 
7591                AND HCP_MB.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7592                AND HCP_MB.OWNER_TABLE_ID(+) = HR.PARTY_ID
7593                AND HCP_MB.CONTACT_POINT_TYPE(+) = 'PHONE'
7594                AND HCP_MB.PHONE_LINE_TYPE(+) = 'MOBILE'
7595                AND HCP_MB.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7596 
7597                AND HCP_PG.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7598                AND HCP_PG.OWNER_TABLE_ID(+) = HR.PARTY_ID
7599                AND HCP_PG.CONTACT_POINT_TYPE(+) = 'PHONE'
7600                AND HCP_PG.PHONE_LINE_TYPE(+) = 'PAGER'
7601                AND HCP_PG.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7602 
7603                AND HCP_FX.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7604                AND HCP_FX.OWNER_TABLE_ID(+) = HR.PARTY_ID
7605                AND HCP_FX.CONTACT_POINT_TYPE(+) = 'PHONE'
7606                AND HCP_FX.PHONE_LINE_TYPE(+) = 'FAX'
7607                AND HCP_FX.CONTACT_POINT_PURPOSE(+) = 'BUSINESS'
7608 
7609                AND HCP_EM.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
7610                AND HCP_EM.OWNER_TABLE_ID(+) = HR.PARTY_ID
7611                AND HCP_EM.CONTACT_POINT_TYPE(+) = 'EMAIL'
7612                AND HCP_EM.PRIMARY_FLAG(+) = 'Y'
7613                AND ROWNUM < 2;
7614            EXCEPTION
7615                WHEN NO_DATA_FOUND THEN
7616                 NULL;
7617            END;
7618 
7619 
7620         ELSIF upper(p_party_tbl) = 'PO_VENDORS'
7621         THEN
7622            IF p_contact_flag = 'Y' THEN
7623               BEGIN
7624 
7625                 SELECT   PVC.PREFIX || ' ' || PVC.FIRST_NAME || ' ' || PVC.MIDDLE_NAME || ' '|| PVC.LAST_NAME PARTY_NAME,
7626                          PVC.area_code||'-'||PVC.phone, --WORKPHONE,
7627                          NULL, --HOMEPHONE
7628                          NULL, --MOBILE
7629                          NULL, --PAGE
7630                          NULL, --FAX,
7631                          PVS.ADDRESS_LINE1 ADDRESS1, --address_line1
7632                          PVS.ADDRESS_LINE2 ADDRESS2, --address_line2
7633                          PVS.ADDRESS_LINE3 ADDRESS3, --address_line3
7634                          NULL, --address_line4
7635                          PVS.CITY, --city,
7636                          PVS.ZIP POSTAL_CODE, --zip
7637                          PVS.STATE STATE, --state
7638                          PVS.COUNTRY COUNTRY, --country
7639                          PVC.mail_stop --EMAIL ADDRESS
7640                  INTO    x_contact_details.party_name,
7641                          x_contact_details.officephone,
7642                          x_contact_details.homephone,
7643                          x_contact_details.mobile,
7644                          x_contact_details.page,
7645                          x_contact_details.fax,
7646                          x_contact_details.address1,
7647                          x_contact_details.address2,
7648                          x_contact_details.address3,
7649                          x_contact_details.address4,
7650                          x_contact_details.city,
7651                          x_contact_details.postal_code,
7652                          x_contact_details.state,
7653                          x_contact_details.country,
7654                          x_contact_details.email
7655                  FROM    CSI_I_PARTIES CIP,
7656                          PO_VENDOR_CONTACTS PVC,
7657                          PO_VENDOR_SITES_ALL PVS
7658                  WHERE   CIP.INSTANCE_PARTY_ID = p_contact_party_id
7659                    AND   CIP.PARTY_ID = PVC.VENDOR_CONTACT_ID
7660                    AND   PVS.VENDOR_SITE_ID = PVC.VENDOR_SITE_ID
7661                  AND     rownum < 2;
7662               EXCEPTION
7663                WHEN NO_DATA_FOUND THEN
7664                 NULL;
7665               END;
7666             END IF;
7667 
7668         ELSIF upper(p_party_tbl) = 'EMPLOYEE'
7669         THEN
7670               BEGIN
7671                  SELECT  distinct PAP.full_name, --PARTY NAME
7672                          PAP.work_telephone, --WORK PHONE
7673                          NULL , -- HOME_PHONE_NUMBER
7674                          NULL , --MOBILE
7675                          NULL , --PAGE
7676                          NULL , --FAX
7677                          NULL , --ADDRESS1
7678                          NULL , --ADDRESS2
7679                          NULL , --ADDRESS3
7680                          NULL , --ADDRESS4
7681                          NULL , --CITY
7682                          NULL , --POSTAL CODE
7683                          NULL , --STATE
7684                          NULL , --COUNTRY
7685                          PAP.email_address --EMAIL
7686                  INTO    x_contact_details.party_name,
7687                          x_contact_details.officephone,
7688                          x_contact_details.homephone,
7689                          x_contact_details.mobile,
7690                          x_contact_details.page,
7691                          x_contact_details.fax,
7692                          x_contact_details.address1,
7693                          x_contact_details.address2,
7694                          x_contact_details.address3,
7695                          x_contact_details.address4,
7696                          x_contact_details.city,
7697                          x_contact_details.postal_code,
7698                          x_contact_details.state,
7699                          x_contact_details.country,
7700                          x_contact_details.email
7701                   FROM   CSI_I_PARTIES CIP,
7702                          PER_ALL_PEOPLE_F PAP
7703                   WHERE  CIP.INSTANCE_PARTY_ID = p_contact_party_id
7704                   AND    CIP.PARTY_ID = PAP.PERSON_ID
7705                   AND    PAP.EFFECTIVE_START_DATE <= SYSDATE
7706                   AND    PAP.EFFECTIVE_END_DATE >= SYSDATE
7707                   AND    rownum < 2;
7708               EXCEPTION
7709                 WHEN NO_DATA_FOUND THEN
7710                  NULL;
7711               END;
7712 
7713         ELSIF upper(p_party_tbl) = 'GROUP'
7714         THEN
7715             BEGIN
7716                SELECT    distinct JG.group_name,
7717                          NULL , --WORK PHONE
7718                          NULL , --HOME_PHONE_NUMBER
7719                          NULL , --MOBILE
7720                          NULL , --PAGE
7721                          NULL , --FAX
7722                          NULL , --ADDRESS1
7723                          NULL , --ADDRESS2
7724                          NULL , --ADDRESS3
7725                          NULL , --ADDRESS4
7726                          NULL , --CITY
7727                          NULL , --POSTAL CODE
7728                          NULL , --STATE
7729                          NULL , --COUNTRY
7730                          JG.email_address --EMAIL
7731                  INTO    x_contact_details.party_name,
7732                          x_contact_details.officephone,
7733                          x_contact_details.homephone,
7734                          x_contact_details.mobile,
7735                          x_contact_details.page,
7736                          x_contact_details.fax,
7737                          x_contact_details.address1,
7738                          x_contact_details.address2,
7739                          x_contact_details.address3,
7740                          x_contact_details.address4,
7741                          x_contact_details.city,
7742                          x_contact_details.postal_code,
7743                          x_contact_details.state,
7744                          x_contact_details.country,
7745                          x_contact_details.email
7746                   FROM   CSI_I_PARTIES CIP,
7747                          JTF_RS_GROUPS_VL JG
7748                   WHERE  CIP.INSTANCE_PARTY_ID = p_contact_party_id
7749                     AND  CIP.PARTY_ID = JG.GROUP_ID
7750                     AND  rownum < 2;
7751               EXCEPTION
7752                  WHEN NO_DATA_FOUND THEN
7753                    NULL;
7754               END;
7755 
7756         ELSIF upper(p_party_tbl) = 'TEAM'
7757         THEN
7758             BEGIN
7759                SELECT    distinct JT.TEAM_NAME,
7760                          NULL , --WORK PHONE
7761                          NULL , --HOME_PHONE_NUMBER
7762                          NULL , --MOBILE
7763                          NULL , --PAGE
7764                          NULL , --FAX
7765                          NULL , --ADDRESS1
7766                          NULL , --ADDRESS2
7767                          NULL , --ADDRESS3
7768                          NULL , --ADDRESS4
7769                          NULL , --CITY
7770                          NULL , --POSTAL CODE
7771                          NULL , --STATE
7772                          NULL , --COUNTRY
7773                          JT.email_address --EMAIL
7774                  INTO    x_contact_details.party_name,
7775                          x_contact_details.officephone,
7776                          x_contact_details.homephone,
7777                          x_contact_details.mobile,
7778                          x_contact_details.page,
7779                          x_contact_details.fax,
7780                          x_contact_details.address1,
7781                          x_contact_details.address2,
7782                          x_contact_details.address3,
7783                          x_contact_details.address4,
7784                          x_contact_details.city,
7785                          x_contact_details.postal_code,
7786                          x_contact_details.state,
7787                          x_contact_details.country,
7788                          x_contact_details.email
7789                  FROM    CSI_I_PARTIES CIP,
7790                          JTF_RS_TEAMS_VL JT
7791                  WHERE   CIP.INSTANCE_PARTY_ID = p_contact_party_id
7792                  AND     CIP.PARTY_ID = JT.TEAM_ID
7793                  AND     rownum < 2;
7794              EXCEPTION
7795                  WHEN NO_DATA_FOUND THEN
7796                   NULL;
7797              END;
7798         END IF;
7799         x_contact_details.contact_party_id := p_contact_party_id;
7800         --
7801         -- End of API body
7802 
7803         -- Standard check of p_commit.
7804         /*
7805         IF FND_API.To_Boolean( p_commit ) THEN
7806                 COMMIT WORK;
7807         END IF;
7808         */
7809 
7810         -- Standard call to get message count and if count is  get message info.
7811         FND_MSG_PUB.Count_And_Get
7812                 (p_count        =>      x_msg_count ,
7813                  p_data         =>      x_msg_data );
7814 EXCEPTION
7815         WHEN FND_API.G_EXC_ERROR THEN
7816               --  ROLLBACK TO get_contact_details_pvt;
7817                 x_return_status := FND_API.G_RET_STS_ERROR ;
7818                 FND_MSG_PUB.Count_And_Get
7819                 (       p_count   =>      x_msg_count,
7820                         p_data    =>      x_msg_data );
7821         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7822               --  ROLLBACK TO get_contact_details_pvt;
7823                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7824                 FND_MSG_PUB.Count_And_Get
7825                 (       p_count  =>      x_msg_count,
7826                         p_data   =>      x_msg_data );
7827         WHEN OTHERS THEN
7828               --  ROLLBACK TO get_contact_details_pvt;
7829                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7830                 IF FND_MSG_PUB.Check_Msg_Level
7831                      (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7832                 THEN
7833                    FND_MSG_PUB.Add_Exc_Msg
7834                     ( g_pkg_name, l_api_name );
7835                 END IF;
7836                 FND_MSG_PUB.Count_And_Get
7837                 (       p_count   =>      x_msg_count,
7838                         p_data    =>      x_msg_data  );
7839 
7840 END get_contact_details ;
7841 
7842 
7843 
7844 /*------------------------------------------------------------*/
7845 /* Procedure name:  get_inst_party_rel_hist                   */
7846 /* Description :   Procedure used to  get party relationships */
7847 /*                  from history given a transaction_id       */
7848 /*------------------------------------------------------------*/
7849 
7850 PROCEDURE get_inst_party_rel_hist
7851  (    p_api_version             IN  NUMBER
7852      ,p_commit                  IN  VARCHAR2
7853      ,p_init_msg_list           IN  VARCHAR2
7854      ,p_validation_level        IN  NUMBER
7855      ,p_transaction_id          IN  NUMBER
7856      ,x_party_history_tbl       OUT NOCOPY  csi_datastructures_pub.party_history_tbl
7857      ,x_return_status           OUT NOCOPY  VARCHAR2
7858      ,x_msg_count               OUT NOCOPY  NUMBER
7859      ,x_msg_data                OUT NOCOPY  VARCHAR2
7860     ) IS
7861 
7862      l_api_name      CONSTANT VARCHAR2(30)   := 'GET_INST_PARTY_REL_HIST' ;
7863      l_api_version   CONSTANT NUMBER         := 1.0                       ;
7864      l_csi_debug_level        NUMBER                                      ;
7865      x_msg_index_out          NUMBER;
7866      l_count                  NUMBER         := 0                         ;
7867      l_flag                   VARCHAR2(1)  :='N'                          ;
7868      l_instance_party_id      NUMBER                                          ;
7869      l_old_contact_party_id       NUMBER                                          ;
7870      l_new_contact_party_id       NUMBER                                      ;
7871      l_contact_details        csi_datastructures_pub.contact_details_rec ;
7872      i                       NUMBER :=1;
7873      l_old_party_source_tbl  VARCHAR2(30);
7874      l_new_party_source_tbl  VARCHAR2(30);
7875      l_old_contact_flag      VARCHAR2(1);
7876      l_new_contact_flag      VARCHAR2(1);
7877 
7878 
7879 
7880      CURSOR get_party_hist(i_transaction_id NUMBER)
7881      IS
7882      SELECT   ciph.INSTANCE_PARTY_ID,
7883               ciph.INSTANCE_PARTY_HISTORY_ID,
7884               ciph.TRANSACTION_ID,
7885               ciph.OLD_PARTY_SOURCE_TABLE,
7886               ciph.NEW_PARTY_SOURCE_TABLE,
7887               ciph.OLD_PARTY_ID,
7888               ciph.NEW_PARTY_ID,
7889               ciph.OLD_RELATIONSHIP_TYPE_CODE,
7890               ciph.NEW_RELATIONSHIP_TYPE_CODE,
7891               ciph.OLD_CONTACT_FLAG,
7892               ciph.NEW_CONTACT_FLAG,
7893               ciph.OLD_CONTACT_IP_ID,
7894               ciph.NEW_CONTACT_IP_ID,
7895               ciph.OLD_ACTIVE_START_DATE,
7896               ciph.NEW_ACTIVE_START_DATE,
7897               ciph.OLD_ACTIVE_END_DATE,
7898               ciph.NEW_ACTIVE_END_DATE,
7899               ciph.OLD_CONTEXT,
7900               ciph.NEW_CONTEXT,
7901               ciph.OLD_ATTRIBUTE1,
7902               ciph.NEW_ATTRIBUTE1,
7903               ciph.OLD_ATTRIBUTE2,
7904               ciph.NEW_ATTRIBUTE2,
7905               ciph.OLD_ATTRIBUTE3,
7906               ciph.NEW_ATTRIBUTE3,
7907               ciph.OLD_ATTRIBUTE4,
7908               ciph.NEW_ATTRIBUTE4,
7909               ciph.OLD_ATTRIBUTE5,
7910               ciph.NEW_ATTRIBUTE5,
7911               ciph.OLD_ATTRIBUTE6,
7912               ciph.NEW_ATTRIBUTE6,
7913               ciph.OLD_ATTRIBUTE7,
7914               ciph.NEW_ATTRIBUTE7,
7915               ciph.OLD_ATTRIBUTE8,
7916               ciph.NEW_ATTRIBUTE8,
7917               ciph.OLD_ATTRIBUTE9,
7918               ciph.NEW_ATTRIBUTE9,
7919               ciph.OLD_ATTRIBUTE10,
7920               ciph.NEW_ATTRIBUTE10,
7921               ciph.OLD_ATTRIBUTE11,
7922               ciph.NEW_ATTRIBUTE11,
7923               ciph.OLD_ATTRIBUTE12,
7924               ciph.NEW_ATTRIBUTE12,
7925               ciph.OLD_ATTRIBUTE13,
7926               ciph.NEW_ATTRIBUTE13,
7927               ciph.OLD_ATTRIBUTE14,
7928               ciph.NEW_ATTRIBUTE14,
7929               ciph.OLD_ATTRIBUTE15,
7930               ciph.NEW_ATTRIBUTE15,
7931               ciph.FULL_DUMP_FLAG,
7932               ciph.OBJECT_VERSION_NUMBER,
7933               ciph.OLD_PREFERRED_FLAG,
7934               ciph.NEW_PREFERRED_FLAG,
7935               ciph.OLD_PRIMARY_FLAG,
7936               ciph.NEW_PRIMARY_FLAG,
7937               cip.INSTANCE_ID,
7938               ciph.creation_date  --Added for bug 2781480
7939      FROM     csi_i_parties_h ciph,
7940               csi_i_parties cip
7941      WHERE    ciph.transaction_id = i_transaction_id
7942      AND      ciph.instance_party_id = cip.instance_party_id; -- Added by sk on 08-APR for fixing bug
7943                                                               -- 2304649 .
7944 -- Added for bug 2781480
7945 l_time_stamp          DATE;
7946 l_party_query_rec     csi_datastructures_pub.party_query_rec;
7947 l_party_header_tbl    csi_datastructures_pub.party_header_tbl;
7948 -- End addition for bug 2781480
7949 BEGIN
7950         -- Standard Start of API savepoint
7951      --   SAVEPOINT   get_inst_party_rel_hist;
7952 
7953 
7954         -- Standard call to check for call compatibility.
7955         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
7956                                                 p_api_version           ,
7957                                                 l_api_name              ,
7958                                                 g_pkg_name              )
7959         THEN
7960            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7961         END IF;
7962 
7963         -- Initialize message list if p_init_msg_list is set to TRUE.
7964         IF FND_API.to_Boolean( p_init_msg_list ) THEN
7965                 FND_MSG_PUB.initialize;
7966         END IF;
7967 
7968         --  Initialize API return status to success
7969         x_return_status := FND_API.G_RET_STS_SUCCESS;
7970 
7971         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
7972         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
7973 
7974         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
7975         IF (l_csi_debug_level > 0) THEN
7976             csi_gen_utility_pvt.put_line( 'get_inst_party_rel_hist');
7977         END IF;
7978 
7979         -- If the debug level = 2 then dump all the parameters values.
7980         IF (l_csi_debug_level > 1) THEN
7981             csi_gen_utility_pvt.put_line(  'get_inst_party_rel_hist'   ||
7982                                                  p_api_version           ||'-'||
7983                                                  p_commit                ||'-'||
7984                                                  p_init_msg_list         ||'-'||
7985                                                  p_validation_level      ||'-'||
7986                                                  p_transaction_id               );
7987              -- dump the in parameter in the log file
7988 
7989         END IF;
7990 
7991         /***** srramakr commented for bug # 3304439
7992         -- Check for the profile option and enable trace
7993         l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
7994         -- End enable trace
7995         ****/
7996 
7997         -- Start API body
7998 
7999         FOR C1 IN get_party_hist(p_transaction_id) LOOP
8000               x_party_history_tbl(i).INSTANCE_PARTY_ID := C1.INSTANCE_PARTY_ID;
8001               x_party_history_tbl(i).INSTANCE_PARTY_HISTORY_ID := C1.INSTANCE_PARTY_HISTORY_ID;
8002               x_party_history_tbl(i).TRANSACTION_ID := C1.TRANSACTION_ID;
8003               x_party_history_tbl(i).OLD_PARTY_SOURCE_TABLE := C1.OLD_PARTY_SOURCE_TABLE;
8004               x_party_history_tbl(i).NEW_PARTY_SOURCE_TABLE := C1.NEW_PARTY_SOURCE_TABLE;
8005               x_party_history_tbl(i).OLD_PARTY_ID := C1.OLD_PARTY_ID;
8006               x_party_history_tbl(i).NEW_PARTY_ID := C1.NEW_PARTY_ID;
8007               x_party_history_tbl(i).OLD_RELATIONSHIP_TYPE_CODE := C1.OLD_RELATIONSHIP_TYPE_CODE;
8008               x_party_history_tbl(i).NEW_RELATIONSHIP_TYPE_CODE:= C1.NEW_RELATIONSHIP_TYPE_CODE;
8009               x_party_history_tbl(i).OLD_CONTACT_FLAG := C1.OLD_CONTACT_FLAG;
8010               x_party_history_tbl(i).NEW_CONTACT_FLAG := C1.NEW_CONTACT_FLAG;
8011               x_party_history_tbl(i).OLD_CONTACT_IP_ID := C1.OLD_CONTACT_IP_ID;
8012               x_party_history_tbl(i).NEW_CONTACT_IP_ID := C1.NEW_CONTACT_IP_ID;
8013               x_party_history_tbl(i).OLD_ACTIVE_START_DATE:= C1.OLD_ACTIVE_START_DATE;
8014               x_party_history_tbl(i).NEW_ACTIVE_START_DATE:= C1.NEW_ACTIVE_START_DATE;
8015               x_party_history_tbl(i).OLD_ACTIVE_END_DATE:= C1.OLD_ACTIVE_END_DATE;
8016               x_party_history_tbl(i).NEW_ACTIVE_END_DATE:= C1.NEW_ACTIVE_END_DATE;
8017               x_party_history_tbl(i).OLD_CONTEXT:= C1.OLD_CONTEXT;
8018               x_party_history_tbl(i).NEW_CONTEXT:= C1.NEW_CONTEXT;
8019               x_party_history_tbl(i).OLD_ATTRIBUTE1:= C1.OLD_ATTRIBUTE1;
8020               x_party_history_tbl(i).NEW_ATTRIBUTE1:= C1.NEW_ATTRIBUTE1;
8021               x_party_history_tbl(i).OLD_ATTRIBUTE2:= C1.OLD_ATTRIBUTE2;
8022               x_party_history_tbl(i).NEW_ATTRIBUTE2:= C1.NEW_ATTRIBUTE2;
8023               x_party_history_tbl(i).OLD_ATTRIBUTE3:= C1.OLD_ATTRIBUTE3;
8024               x_party_history_tbl(i).OLD_ATTRIBUTE3:= C1.OLD_ATTRIBUTE3;
8025               x_party_history_tbl(i).OLD_ATTRIBUTE4:= C1.OLD_ATTRIBUTE4;
8026               x_party_history_tbl(i).NEW_ATTRIBUTE4:= C1.NEW_ATTRIBUTE4;
8027               x_party_history_tbl(i).OLD_ATTRIBUTE5:= C1.OLD_ATTRIBUTE5;
8028               x_party_history_tbl(i).NEW_ATTRIBUTE5:= C1.NEW_ATTRIBUTE5;
8029               x_party_history_tbl(i).OLD_ATTRIBUTE6:= C1.OLD_ATTRIBUTE6;
8030               x_party_history_tbl(i).NEW_ATTRIBUTE6:= C1.NEW_ATTRIBUTE6;
8031               x_party_history_tbl(i).OLD_ATTRIBUTE7:= C1.OLD_ATTRIBUTE7;
8032               x_party_history_tbl(i).NEW_ATTRIBUTE7:= C1.NEW_ATTRIBUTE7;
8033               x_party_history_tbl(i).OLD_ATTRIBUTE8:= C1.OLD_ATTRIBUTE8;
8034               x_party_history_tbl(i).NEW_ATTRIBUTE8:= C1.NEW_ATTRIBUTE8;
8035               x_party_history_tbl(i).OLD_ATTRIBUTE9:= C1.OLD_ATTRIBUTE9;
8036               x_party_history_tbl(i).NEW_ATTRIBUTE9:= C1.NEW_ATTRIBUTE9;
8037               x_party_history_tbl(i).OLD_ATTRIBUTE10:= C1.OLD_ATTRIBUTE10;
8038               x_party_history_tbl(i).NEW_ATTRIBUTE10:= C1.NEW_ATTRIBUTE10;
8039               x_party_history_tbl(i).OLD_ATTRIBUTE11:= C1.OLD_ATTRIBUTE11;
8040               x_party_history_tbl(i).NEW_ATTRIBUTE11:= C1.NEW_ATTRIBUTE11;
8041               x_party_history_tbl(i).OLD_ATTRIBUTE12:= C1.OLD_ATTRIBUTE12;
8042               x_party_history_tbl(i).NEW_ATTRIBUTE12:= C1.NEW_ATTRIBUTE12;
8043               x_party_history_tbl(i).OLD_ATTRIBUTE13:= C1.OLD_ATTRIBUTE13;
8044               x_party_history_tbl(i).NEW_ATTRIBUTE13:= C1.NEW_ATTRIBUTE13;
8045               x_party_history_tbl(i).OLD_ATTRIBUTE14:= C1.OLD_ATTRIBUTE14;
8046               x_party_history_tbl(i).NEW_ATTRIBUTE14:= C1.NEW_ATTRIBUTE14;
8047               x_party_history_tbl(i).OLD_ATTRIBUTE15:= C1.OLD_ATTRIBUTE15;
8048               x_party_history_tbl(i).NEW_ATTRIBUTE15:= C1.NEW_ATTRIBUTE15;
8049               x_party_history_tbl(i).FULL_DUMP_FLAG:= C1.FULL_DUMP_FLAG;
8050               x_party_history_tbl(i).OBJECT_VERSION_NUMBER := C1.OBJECT_VERSION_NUMBER;
8051               x_party_history_tbl(i).OLD_PREFERRED_FLAG :=  C1.OLD_PREFERRED_FLAG;
8052               x_party_history_tbl(i).NEW_PREFERRED_FLAG :=  C1.NEW_PREFERRED_FLAG;
8053               x_party_history_tbl(i).OLD_PRIMARY_FLAG:= C1.OLD_PRIMARY_FLAG;
8054               x_party_history_tbl(i).NEW_PRIMARY_FLAG := C1.NEW_PRIMARY_FLAG;
8055               x_party_history_tbl(i).INSTANCE_ID := C1.INSTANCE_ID; -- Added by sk on 08-APR for fixing bug
8056                                                                     -- 2304649 .
8057 -- Added for bug 2781480
8058              IF  (x_party_history_tbl(i).old_party_source_table IS NULL AND
8059                   x_party_history_tbl(i).new_party_source_table IS NULL ) OR
8060                  (x_party_history_tbl(i).old_party_id IS NULL AND
8061                   x_party_history_tbl(i).new_party_id IS NULL ) OR
8062                  (x_party_history_tbl(i).old_relationship_type_code IS NULL AND
8063                   x_party_history_tbl(i).new_relationship_type_code IS NULL)
8064              --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)  )
8065              THEN
8066                  l_party_query_rec.instance_party_id := x_party_history_tbl(i).instance_party_id;
8067                  l_time_stamp:=c1.creation_date;
8068                 csi_party_relationships_pub.get_inst_party_relationships
8069                    (    p_api_version             => 1.0
8070                        ,p_commit                  => fnd_api.g_false
8071                        ,p_init_msg_list           => fnd_api.g_false
8072                        ,p_validation_level        => fnd_api.g_valid_level_full
8073                        ,p_party_query_rec         => l_party_query_rec
8074                        ,p_resolve_id_columns      => fnd_api.g_false
8075                        ,p_time_stamp              => l_time_stamp
8076                        ,x_party_header_tbl        => l_party_header_tbl
8077                        ,x_return_status           => x_return_status
8078                        ,x_msg_count               => x_msg_count
8079                        ,x_msg_data                => x_msg_data
8080                      );
8081 
8082                  IF NOT(x_return_status = fnd_api.g_ret_sts_success)
8083                  THEN
8084                     RAISE fnd_api.g_exc_error;
8085                  END IF;
8086 
8087                IF (x_party_history_tbl(i).old_party_source_table IS NULL AND
8088                    x_party_history_tbl(i).new_party_source_table IS NULL )
8089                THEN
8090                    x_party_history_tbl(i).old_party_source_table:=l_party_header_tbl(1).party_source_table;
8091                    x_party_history_tbl(i).new_party_source_table:=l_party_header_tbl(1).party_source_table;
8092                END IF;
8093                -- Added for bug 2179142
8094                IF (x_party_history_tbl(i).old_party_id IS NULL AND
8095                    x_party_history_tbl(i).new_party_id IS NULL )
8096                THEN
8097                    x_party_history_tbl(i).old_party_id:=l_party_header_tbl(1).party_id;
8098                    x_party_history_tbl(i).new_party_id:=l_party_header_tbl(1).party_id;
8099                END IF;
8100 
8101                IF (x_party_history_tbl(i).old_relationship_type_code IS NULL AND
8102                    x_party_history_tbl(i).new_relationship_type_code IS NULL)
8103                THEN
8104                    x_party_history_tbl(i).old_relationship_type_code := l_party_header_tbl(1).relationship_type_code;
8105                    x_party_history_tbl(i).new_relationship_type_code := l_party_header_tbl(1).relationship_type_code;
8106                END IF;
8107 
8108                IF (x_party_history_tbl(i).old_contact_flag IS NULL AND
8109                    x_party_history_tbl(i).new_contact_flag IS NULL )
8110                THEN
8111                    x_party_history_tbl(i).old_contact_flag:=l_party_header_tbl(1).contact_flag;
8112                    x_party_history_tbl(i).new_contact_flag:=l_party_header_tbl(1).contact_flag;
8113                END IF;
8114                -- End addition for bug 2179142
8115              END IF;
8116 -- End addition for bug 2781480
8117 
8118 
8119 --start of the code for  resolve_id_columns for old tbl(i)ords
8120 
8121        l_old_contact_party_id := x_party_history_tbl(i).old_party_id;
8122        l_old_contact_flag     := x_party_history_tbl(i).old_contact_flag;
8123        l_old_party_source_tbl := x_party_history_tbl(i).old_party_source_table;
8124 
8125     IF ((l_old_contact_party_id IS NOT NULL )
8126        AND ( l_old_party_source_tbl IS NOT NULL )
8127        AND ( l_old_contact_flag = 'Y')   -- Added for bug 2179142
8128        )
8129     THEN
8130           csi_party_relationships_pvt.get_contact_details
8131           (
8132            p_api_version              =>  p_api_version
8133           ,p_commit                   =>  p_commit
8134           ,p_init_msg_list            =>  p_init_msg_list
8135           ,p_validation_level         =>  p_validation_level
8136           ,p_contact_party_id         =>  l_old_contact_party_id
8137           ,p_contact_flag             =>  l_old_contact_flag
8138           ,p_party_tbl                =>  l_old_party_source_tbl
8139           ,x_contact_details          =>  l_contact_details
8140           ,x_return_status            =>  x_return_status
8141           ,x_msg_count                =>  x_msg_count
8142           ,x_msg_data                 =>  x_msg_data
8143           );
8144 
8145 
8146           IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
8147               FOR i in 1..x_msg_Count LOOP
8148                    FND_MSG_PUB.Get(p_msg_index     => i,
8149                                    p_encoded       => 'F',
8150                                    p_data          => x_msg_data,
8151                                    p_msg_index_out => x_msg_index_out );
8152                    csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
8153               End LOOP;
8154               RAISE FND_API.G_EXC_ERROR;
8155           END IF;
8156 
8157            x_party_history_tbl(i).old_contact_party_name        :=  l_contact_details.party_name;
8158            -- Added for bug 2179142
8159             IF x_party_history_tbl(i).old_party_source_table = 'EMPLOYEE' THEN
8160               BEGIN
8161                 SELECT employee_number,
8162                        'EMPLYOEE'
8163                 INTO   x_party_history_tbl(i).old_contact_party_number,
8164                        x_party_history_tbl(i).old_contact_party_type
8165                 FROM   per_all_people_f
8166                 WHERE  person_id = l_old_contact_party_id
8167                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8168               EXCEPTION
8169                 WHEN OTHERS THEN
8170                   NULL;
8171               END;
8172             ELSIF x_party_history_tbl(i).old_party_source_table = 'HZ_PARTIES' THEN
8173               BEGIN
8174                 SELECT party_number,
8175                        'PARTY'
8176                 INTO   x_party_history_tbl(i).old_contact_party_number,
8177                        x_party_history_tbl(i).old_contact_party_type
8178                 FROM   hz_parties
8179                 WHERE  party_id = l_old_contact_party_id;
8180               EXCEPTION
8181                 WHEN OTHERS THEN
8182                   NULL;
8183               END;
8184             ELSIF x_party_history_tbl(i).old_party_source_table = 'PO_VENDORS' THEN
8185               BEGIN
8186                 SELECT segment1,
8187                        'VENDOR'
8188                 INTO   x_party_history_tbl(i).old_contact_party_number,
8189                        x_party_history_tbl(i).old_contact_party_type
8190                 FROM   po_vendors
8191                 WHERE  vendor_id = l_old_contact_party_id;
8192               EXCEPTION
8193                 WHEN OTHERS THEN
8194                   NULL;
8195               END;
8196             ELSIF x_party_history_tbl(i).old_party_source_table = 'GROUP' THEN
8197               BEGIN
8198                 SELECT group_number,
8199                        'GROUP'
8200                 INTO   x_party_history_tbl(i).old_contact_party_number,
8201                        x_party_history_tbl(i).old_contact_party_type
8202                FROM    jtf_rs_groups_vl
8203                WHERE   group_id = l_old_contact_party_id;
8204               EXCEPTION
8205                 WHEN OTHERS THEN
8206                   NULL;
8207               END;
8208             ELSIF x_party_history_tbl(i).old_party_source_table = 'TEAM' THEN
8209               BEGIN
8210                 SELECT team_number,
8211                        'TEAM'
8212                 INTO   x_party_history_tbl(i).old_contact_party_number,
8213                        x_party_history_tbl(i).old_contact_party_type
8214                 FROM   jtf_rs_teams_vl
8215                 WHERE  team_id = l_old_contact_party_id;
8216               EXCEPTION
8217                 WHEN OTHERS THEN
8218                   NULL;
8219               END;
8220 
8221             END IF;
8222            -- End addition for bug 2179142
8223          IF NVL(l_old_contact_party_id,fnd_api.g_miss_num) <> NVL(l_new_contact_party_id,fnd_api.g_miss_num)
8224          THEN
8225            x_party_history_tbl(i).old_contact_work_phone_num    :=  l_contact_details.officephone;
8226            x_party_history_tbl(i).old_contact_address1          :=  l_contact_details.address1;
8227            x_party_history_tbl(i).old_contact_address2          :=  l_contact_details.address2;
8228            x_party_history_tbl(i).old_contact_address3          :=  l_contact_details.address3;
8229            x_party_history_tbl(i).old_contact_address4          :=  l_contact_details.address4;
8230            x_party_history_tbl(i).old_contact_city              :=  l_contact_details.city;
8231            x_party_history_tbl(i).old_contact_postal_code       :=  l_contact_details.postal_code;
8232            x_party_history_tbl(i).old_contact_state             :=  l_contact_details.state;
8233            x_party_history_tbl(i).old_contact_country           :=  l_contact_details.country;
8234            x_party_history_tbl(i).old_contact_email_address     :=  l_contact_details.email;
8235          END IF;
8236        END IF;
8237 
8238             IF x_party_history_tbl(i).old_party_source_table = 'EMPLOYEE' THEN
8239               BEGIN
8240                 SELECT employee_number,
8241                        'EMPLYOEE',
8242                        full_name
8243                 INTO   x_party_history_tbl(i).old_party_number,
8244                        x_party_history_tbl(i).old_party_type,
8245                         x_party_history_tbl(i).old_party_name
8246                 FROM   per_all_people_f
8247                 WHERE  person_id = x_party_history_tbl(i).old_party_id
8248                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8249               EXCEPTION
8250                 WHEN OTHERS THEN
8251                   NULL;
8252               END;
8253             ELSIF x_party_history_tbl(i).old_party_source_table = 'HZ_PARTIES' THEN
8254               BEGIN
8255                 SELECT party_number,
8256                        'PARTY',
8257                        party_name
8258                 INTO   x_party_history_tbl(i).old_party_number,
8259                        x_party_history_tbl(i).old_party_type,
8260                        x_party_history_tbl(i).old_party_name
8261                 FROM   hz_parties
8262                 WHERE  party_id = x_party_history_tbl(i).old_party_id;
8263               EXCEPTION
8264                 WHEN OTHERS THEN
8265                   NULL;
8266               END;
8267             ELSIF x_party_history_tbl(i).old_party_source_table = 'PO_VENDORS' THEN
8268               BEGIN
8269                 SELECT segment1,
8270                        'VENDOR',
8271                        vendor_name
8272                 INTO   x_party_history_tbl(i).old_party_number,
8273                        x_party_history_tbl(i).old_party_type,
8274                        x_party_history_tbl(i).old_party_name
8275                 FROM   po_vendors
8276                 WHERE  vendor_id = x_party_history_tbl(i).old_party_id;
8277               EXCEPTION
8278                 WHEN OTHERS THEN
8279                   NULL;
8280               END;
8281             ELSIF x_party_history_tbl(i).old_party_source_table = 'GROUP' THEN
8282               BEGIN
8283                 SELECT group_number,
8284                        'GROUP',
8285                        group_name
8286                 INTO   x_party_history_tbl(i).old_party_number,
8287                        x_party_history_tbl(i).old_party_type,
8288                        x_party_history_tbl(i).old_party_name
8289                FROM    jtf_rs_groups_vl
8290                WHERE   group_id = x_party_history_tbl(i).old_party_id;
8291               EXCEPTION
8292                 WHEN OTHERS THEN
8293                   NULL;
8294               END;
8295             ELSIF x_party_history_tbl(i).old_party_source_table = 'TEAM' THEN
8296               BEGIN
8297                 SELECT team_number,
8298                        'TEAM',
8299                        team_name
8300                 INTO   x_party_history_tbl(i).old_party_number,
8301                        x_party_history_tbl(i).old_party_type,
8302                        x_party_history_tbl(i).old_party_name
8303                 FROM   jtf_rs_teams_vl
8304                 WHERE  team_id = x_party_history_tbl(i).old_party_id;
8305               EXCEPTION
8306                 WHEN OTHERS THEN
8307                   NULL;
8308               END;
8309 
8310             END IF;
8311 
8312    --start of the code for resolve_id_columns for new records
8313        l_new_contact_party_id := x_party_history_tbl(i).new_party_id;
8314        l_new_contact_flag      := x_party_history_tbl(i).new_contact_flag;
8315        l_new_party_source_tbl := x_party_history_tbl(i).new_party_source_table;
8316 
8317       IF ((l_new_contact_party_id IS NOT NULL )
8318             AND ( l_new_party_source_tbl IS NOT NULL )
8319             AND ( l_new_contact_flag = 'Y')  -- Added for bug 2179142
8320           )
8321       THEN
8322            csi_party_relationships_pvt.get_contact_details
8323           (
8324            p_api_version              =>  p_api_version
8325           ,p_commit                   =>  p_commit
8326           ,p_init_msg_list            =>  p_init_msg_list
8327           ,p_validation_level         =>  p_validation_level
8328           ,p_contact_party_id         =>  l_new_contact_party_id
8329           ,p_contact_flag             =>  l_new_contact_flag
8330           ,p_party_tbl                =>  l_new_party_source_tbl
8331           ,x_contact_details          =>  l_contact_details
8332           ,x_return_status            =>  x_return_status
8333           ,x_msg_count                =>  x_msg_count
8334           ,x_msg_data                 =>  x_msg_data
8335           );
8336 
8337 
8338          IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
8339               FOR i in 1..x_msg_Count LOOP
8340                    FND_MSG_PUB.Get(p_msg_index     => i,
8341                                    p_encoded       => 'F',
8342                                    p_data          => x_msg_data,
8343                                    p_msg_index_out => x_msg_index_out );
8344                    csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
8345               End LOOP;
8346               RAISE FND_API.G_EXC_ERROR;
8347          END IF;
8348 
8349            x_party_history_tbl(i).new_contact_party_name        :=  l_contact_details.party_name;
8350            -- Added for bug 2179142
8351             IF x_party_history_tbl(i).new_party_source_table = 'EMPLOYEE' THEN
8352               BEGIN
8353                 SELECT employee_number,
8354                        'EMPLYOEE'
8355                 INTO   x_party_history_tbl(i).new_contact_party_number,
8356                        x_party_history_tbl(i).new_contact_party_type
8357                 FROM   per_all_people_f
8358                 WHERE  person_id = l_new_contact_party_id
8359                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8360               EXCEPTION
8361                 WHEN OTHERS THEN
8362                   NULL;
8363               END;
8364             ELSIF x_party_history_tbl(i).new_party_source_table = 'HZ_PARTIES' THEN
8365               BEGIN
8366                 SELECT party_number,
8367                        'PARTY'
8368                 INTO   x_party_history_tbl(i).new_contact_party_number,
8369                        x_party_history_tbl(i).new_contact_party_type
8370                 FROM   hz_parties
8371                 WHERE  party_id = l_new_contact_party_id;
8372               EXCEPTION
8373                 WHEN OTHERS THEN
8374                   NULL;
8375               END;
8376             ELSIF x_party_history_tbl(i).new_party_source_table = 'PO_VENDORS' THEN
8377               BEGIN
8378                 SELECT segment1,
8379                        'VENDOR'
8380                 INTO   x_party_history_tbl(i).new_contact_party_number,
8381                        x_party_history_tbl(i).new_contact_party_type
8382                 FROM   po_vendors
8383                 WHERE  vendor_id = l_new_contact_party_id;
8384               EXCEPTION
8385                 WHEN OTHERS THEN
8386                   NULL;
8387               END;
8388             ELSIF x_party_history_tbl(i).new_party_source_table = 'GROUP' THEN
8389               BEGIN
8390                 SELECT group_number,
8391                        'GROUP'
8392                 INTO   x_party_history_tbl(i).new_contact_party_number,
8393                        x_party_history_tbl(i).new_contact_party_type
8394                FROM    jtf_rs_groups_vl
8395                WHERE   group_id = l_new_contact_party_id;
8396               EXCEPTION
8397                 WHEN OTHERS THEN
8398                   NULL;
8399               END;
8400             ELSIF x_party_history_tbl(i).new_party_source_table = 'TEAM' THEN
8401               BEGIN
8402                 SELECT team_number,
8403                        'TEAM'
8404                 INTO   x_party_history_tbl(i).new_contact_party_number,
8405                        x_party_history_tbl(i).new_contact_party_type
8406                 FROM   jtf_rs_teams_vl
8407                 WHERE  team_id = x_party_history_tbl(i).new_party_id;
8408               EXCEPTION
8409                 WHEN OTHERS THEN
8410                   NULL;
8411               END;
8412 
8413             END IF;
8414            -- End addition for bug 2179142
8415          IF NVL(l_old_contact_party_id,fnd_api.g_miss_num) <> NVL(l_new_contact_party_id,fnd_api.g_miss_num)
8416          THEN
8417            x_party_history_tbl(i).new_contact_work_phone_num    :=  l_contact_details.officephone;
8418            x_party_history_tbl(i).new_contact_address1          :=  l_contact_details.address1;
8419            x_party_history_tbl(i).new_contact_address2          :=  l_contact_details.address2;
8420            x_party_history_tbl(i).new_contact_address3          :=  l_contact_details.address3;
8421            x_party_history_tbl(i).new_contact_address4          :=  l_contact_details.address4;
8422            x_party_history_tbl(i).new_contact_city              :=  l_contact_details.city;
8423            x_party_history_tbl(i).new_contact_postal_code       :=  l_contact_details.postal_code;
8424            x_party_history_tbl(i).new_contact_state             :=  l_contact_details.state;
8425            x_party_history_tbl(i).new_contact_country           :=  l_contact_details.country;
8426            x_party_history_tbl(i).new_contact_email_address     :=  l_contact_details.email;
8427          END IF;
8428 
8429        END IF;
8430 
8431            IF x_party_history_tbl(i).new_party_source_table = 'EMPLOYEE' THEN
8432               BEGIN
8433                 SELECT employee_number,
8434                        'EMPLYOEE',
8435                        full_name
8436                 INTO   x_party_history_tbl(i).new_party_number,
8437                        x_party_history_tbl(i).new_party_type,
8438                         x_party_history_tbl(i).new_party_name
8439                 FROM   per_all_people_f
8440                 WHERE  person_id = x_party_history_tbl(i).new_party_id
8441                 AND    rownum < 2;  -- Bug # 2183107 srramakr
8442               EXCEPTION
8443                 WHEN OTHERS THEN
8444                   NULL;
8445               END;
8446             ELSIF x_party_history_tbl(i).new_party_source_table = 'HZ_PARTIES' THEN
8447               BEGIN
8448                 SELECT party_number,
8449                        'PARTY',
8450                        party_name
8451                 INTO   x_party_history_tbl(i).new_party_number,
8452                        x_party_history_tbl(i).new_party_type,
8453                         x_party_history_tbl(i).new_party_name
8454                 FROM   hz_parties
8455                 WHERE  party_id = x_party_history_tbl(i).new_party_id;
8456               EXCEPTION
8457                 WHEN OTHERS THEN
8458                   NULL;
8459               END;
8460             ELSIF x_party_history_tbl(i).new_party_source_table = 'PO_VENDORS' THEN
8461               BEGIN
8462                 SELECT segment1,
8463                        'VENDOR',
8464                        vendor_name
8465                 INTO   x_party_history_tbl(i).new_party_number,
8466                        x_party_history_tbl(i).new_party_type,
8467                        x_party_history_tbl(i).new_party_name
8468                 FROM   po_vendors
8469                 WHERE  vendor_id = x_party_history_tbl(i).new_party_id;
8470               EXCEPTION
8471                 WHEN OTHERS THEN
8472                   NULL;
8473               END;
8474             ELSIF x_party_history_tbl(i).new_party_source_table = 'GROUP' THEN
8475               BEGIN
8476                 SELECT group_number,
8477                        'GROUP',
8478                        group_name
8479                 INTO   x_party_history_tbl(i).new_party_number,
8480                        x_party_history_tbl(i).new_party_type,
8481                        x_party_history_tbl(i).new_party_name
8482                FROM    jtf_rs_groups_vl
8483                WHERE   group_id = x_party_history_tbl(i).new_party_id;
8484               EXCEPTION
8485                 WHEN OTHERS THEN
8486                   NULL;
8487               END;
8488             ELSIF x_party_history_tbl(i).new_party_source_table = 'TEAM' THEN
8489               BEGIN
8490                 SELECT team_number,
8491                        'TEAM',
8492                        team_name
8493                 INTO   x_party_history_tbl(i).new_party_number,
8494                        x_party_history_tbl(i).new_party_type,
8495                        x_party_history_tbl(i).new_party_name
8496                 FROM   jtf_rs_teams_vl
8497                 WHERE  team_id = x_party_history_tbl(i).new_party_id;
8498               EXCEPTION
8499                 WHEN OTHERS THEN
8500                   NULL;
8501               END;
8502             END IF;
8503          -- Added for bug 2781480
8504          /* Commented for bug 2179142
8505             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)
8506             THEN
8507                x_party_history_tbl(i).old_party_source_table:=NULL;
8508                x_party_history_tbl(i).new_party_source_table:=NULL;
8509             END IF;
8510           */
8511          -- End addition for bug 2781480
8512 
8513          -- Added for bug 2179142
8514 
8515                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)
8516                THEN
8517                    x_party_history_tbl(i).old_party_id:=NULL;
8518                    x_party_history_tbl(i).new_party_id:=NULL;
8519                END IF;
8520 
8521          -- End addition for bug 2179142
8522             i := i + 1;
8523               --IF get_party_hist%NOTFOUND THEN
8524                 --FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_TXN_ID');
8525                 --FND_MSG_PUB.Add;
8526                 --RAISE FND_API.G_EXC_ERROR;
8527      	      --END IF;
8528         END LOOP;
8529 
8530        -- End of API body
8531 
8532        -- Standard check of p_commit.
8533        /*
8534        IF FND_API.To_Boolean( p_commit ) THEN
8535              COMMIT WORK;
8536        END IF;
8537        */
8538 
8539        /***** srramakr commented for bug # 3304439
8540        -- Check for the profile option and disable the trace
8541        IF (l_flag = 'Y') THEN
8542             dbms_session.set_sql_trace(false);
8543        END IF;
8544        -- End disable trace
8545        ****/
8546 
8547        -- Standard call to get message count and if count is  get message info.
8548        FND_MSG_PUB.Count_And_Get
8549                 (p_count        =>      x_msg_count ,
8550                  p_data         =>      x_msg_data   );
8551 EXCEPTION
8552         WHEN FND_API.G_EXC_ERROR THEN
8553               --  ROLLBACK TO get_inst_party_rel_hist;
8554                 x_return_status := FND_API.G_RET_STS_ERROR ;
8555                 FND_MSG_PUB.Count_And_Get
8556                 (   p_count   =>      x_msg_count,
8557                     p_data    =>      x_msg_data );
8558         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8559               --  ROLLBACK TO get_inst_party_rel_hist;
8560                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8561                 FND_MSG_PUB.Count_And_Get
8562                 (   p_count   =>      x_msg_count,
8563                     p_data    =>      x_msg_data  );
8564         WHEN OTHERS THEN
8565               --  ROLLBACK TO get_inst_party_rel_hist;
8566                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8567                 IF      FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
8568                 FND_MSG_PUB.Add_Exc_Msg
8569                 (       g_pkg_name          ,
8570                         l_api_name           );
8571                 END IF;
8572                 FND_MSG_PUB.Count_And_Get
8573                 ( p_count     =>      x_msg_count,
8574                   p_data      =>      x_msg_data  );
8575 
8576 END get_inst_party_rel_hist;
8577 
8578 
8579 
8580 /*------------------------------------------------------------*/
8581 /* Procedure name:  get_inst_party_rel_hist                   */
8582 /* Description :   Procedure used to  get party relationships */
8583 /*                  from history given a transaction_id       */
8584 /*------------------------------------------------------------*/
8585 
8586 PROCEDURE get_inst_party_account_hist
8587  (    p_api_version             IN  NUMBER
8588      ,p_commit                  IN  VARCHAR2
8589      ,p_init_msg_list           IN  VARCHAR2
8590      ,p_validation_level        IN  NUMBER
8591      ,p_transaction_id          IN  NUMBER
8592      ,x_account_history_tbl     OUT NOCOPY  csi_datastructures_pub.account_history_tbl
8593      ,x_return_status           OUT NOCOPY  VARCHAR2
8594      ,x_msg_count               OUT NOCOPY  NUMBER
8595      ,x_msg_data                OUT NOCOPY  VARCHAR2
8596     )IS
8597 
8598      l_api_name        CONSTANT VARCHAR2(30)   := 'get_inst_party_account_hist' ;
8599      l_api_version     CONSTANT NUMBER         := 1.0                           ;
8600      l_csi_debug_level          NUMBER                                          ;
8601      x_msg_index_out            NUMBER                                          ;
8602      l_count                    NUMBER         := 0                             ;
8603      l_flag                     VARCHAR2(1)    :='N'                            ;
8604       i                         NUMBER         :=1                              ;
8605      l_account_header_tbl       csi_datastructures_pub.party_account_header_tbl ;
8606      l_time_stamp               DATE;
8607      l_party_account_query_rec  csi_datastructures_pub.party_account_query_rec;
8608      CURSOR get_account_hist(i_transaction_id NUMBER)
8609      IS
8610      SELECT      cah.IP_ACCOUNT_HISTORY_ID ,
8611                  cah.IP_ACCOUNT_ID ,
8612                  cah.TRANSACTION_ID ,
8613                  cah.OLD_PARTY_ACCOUNT_ID ,
8614                  cah.NEW_PARTY_ACCOUNT_ID ,
8615                  cah.OLD_RELATIONSHIP_TYPE_CODE ,
8616                  cah.NEW_RELATIONSHIP_TYPE_CODE ,
8617                  cah.OLD_ACTIVE_START_DATE ,
8618                  cah.NEW_ACTIVE_START_DATE ,
8619                  cah.OLD_ACTIVE_END_DATE ,
8620                  cah.NEW_ACTIVE_END_DATE ,
8621                  cah.OLD_CONTEXT ,
8622                  cah.NEW_CONTEXT ,
8623                  cah.OLD_ATTRIBUTE1 ,
8624                  cah.NEW_ATTRIBUTE1 ,
8625                  cah.OLD_ATTRIBUTE2 ,
8626                  cah.NEW_ATTRIBUTE2 ,
8627                  cah.OLD_ATTRIBUTE3 ,
8628                  cah.NEW_ATTRIBUTE3 ,
8629                  cah.OLD_ATTRIBUTE4 ,
8630                  cah.NEW_ATTRIBUTE4 ,
8631                  cah.OLD_ATTRIBUTE5 ,
8632                  cah.NEW_ATTRIBUTE5 ,
8633                  cah.OLD_ATTRIBUTE6 ,
8634                  cah.NEW_ATTRIBUTE6 ,
8635                  cah.OLD_ATTRIBUTE7 ,
8636                  cah.NEW_ATTRIBUTE7 ,
8637                  cah.OLD_ATTRIBUTE8 ,
8638                  cah.NEW_ATTRIBUTE8 ,
8639                  cah.OLD_ATTRIBUTE9 ,
8640                  cah.NEW_ATTRIBUTE9 ,
8641                  cah.OLD_ATTRIBUTE10 ,
8642                  cah.NEW_ATTRIBUTE10 ,
8643                  cah.OLD_ATTRIBUTE11 ,
8644                  cah.NEW_ATTRIBUTE11 ,
8645                  cah.OLD_ATTRIBUTE12 ,
8646                  cah.NEW_ATTRIBUTE12 ,
8647                  cah.OLD_ATTRIBUTE13 ,
8648                  cah.NEW_ATTRIBUTE13 ,
8649                  cah.OLD_ATTRIBUTE14 ,
8650                  cah.NEW_ATTRIBUTE14 ,
8651                  cah.OLD_ATTRIBUTE15 ,
8652                  cah.NEW_ATTRIBUTE15 ,
8653                  cah.FULL_DUMP_FLAG  ,
8654                  cah.OBJECT_VERSION_NUMBER ,
8655                  cah.OLD_BILL_TO_ADDRESS ,
8656                  cah.NEW_BILL_TO_ADDRESS ,
8657                  cah.OLD_SHIP_TO_ADDRESS ,
8658                  cah.NEW_SHIP_TO_ADDRESS ,
8659                  cip.INSTANCE_ID,
8660                  cah.OLD_INSTANCE_PARTY_ID ,
8661                  cah.NEW_INSTANCE_PARTY_ID,
8662                  cah.creation_date
8663      FROM     csi_ip_accounts_h cah,
8664               csi_ip_accounts   ca,
8665               csi_i_parties     cip
8666      WHERE    cah.transaction_id   = i_transaction_id
8667      AND      cah.ip_account_id    = ca.ip_account_id
8668      AND      ca.instance_party_id = cip.instance_party_id;    -- Added by sguthiva on 9-APR for bug 2304649
8669 
8670 BEGIN
8671         -- Standard Start of API savepoint
8672       --  SAVEPOINT   get_inst_party_account_hist;
8673 
8674 
8675         -- Standard call to check for call compatibility.
8676         IF NOT FND_API.Compatible_API_Call (    l_api_version           ,
8677                                                 p_api_version           ,
8678                                                 l_api_name              ,
8679                                                 g_pkg_name              )
8680         THEN
8681            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8682         END IF;
8683 
8684         -- Initialize message list if p_init_msg_list is set to TRUE.
8685         IF FND_API.to_Boolean( p_init_msg_list ) THEN
8686                 FND_MSG_PUB.initialize;
8687         END IF;
8688 
8689         --  Initialize API return status to success
8690         x_return_status := FND_API.G_RET_STS_SUCCESS;
8691 
8692         -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
8693         l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
8694 
8695         -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
8696         IF (l_csi_debug_level > 0) THEN
8697             csi_gen_utility_pvt.put_line( 'get_inst_party_account_hist');
8698         END IF;
8699 
8700         -- If the debug level = 2 then dump all the parameters values.
8701         IF (l_csi_debug_level > 1) THEN
8702             csi_gen_utility_pvt.put_line(  'get_inst_party_account_hist'   ||
8703                                                  p_api_version           ||'-'||
8704                                                  p_commit                ||'-'||
8705                                                  p_init_msg_list         ||'-'||
8706                                                  p_validation_level      ||'-'||
8707                                                  p_transaction_id               );
8708              -- dump the in parameter in the log file
8709 
8710         END IF;
8711 
8712         /***** srramakr commented for bug # 3304439
8713         -- Check for the profile option and enable trace
8714         l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
8715         -- End enable trace
8716         ****/
8717 
8718         -- Start API body
8719 
8720        FOR l_acct_hist_csr IN get_account_hist(p_transaction_id)
8721        LOOP
8722           x_account_history_tbl(i).ip_account_id := l_acct_hist_csr.ip_account_id;
8723           x_account_history_tbl(i).ip_account_history_id := l_acct_hist_csr.ip_account_history_id;
8724           x_account_history_tbl(i).transaction_id := l_acct_hist_csr.transaction_id;
8725 
8726           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)
8727           THEN
8728             x_account_history_tbl(i).old_party_account_id := NULL;
8729             x_account_history_tbl(i).new_party_account_id := NULL;
8730           ELSE
8731             x_account_history_tbl(i).old_party_account_id := l_acct_hist_csr.old_party_account_id;
8732             x_account_history_tbl(i).new_party_account_id := l_acct_hist_csr.new_party_account_id;
8733           END IF;
8734 
8735           IF NVL(l_acct_hist_csr.old_relationship_type_code,fnd_api.g_miss_char) =
8736                                     NVL(l_acct_hist_csr.new_relationship_type_code,fnd_api.g_miss_num)
8737           THEN
8738             x_account_history_tbl(i).old_relationship_type_code := NULL;
8739             x_account_history_tbl(i).new_relationship_type_code := NULL;
8740           ELSE
8741             x_account_history_tbl(i).old_relationship_type_code := l_acct_hist_csr.old_relationship_type_code;
8742             x_account_history_tbl(i).new_relationship_type_code := l_acct_hist_csr.new_relationship_type_code;
8743           END IF;
8744 
8745           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)
8746           THEN
8747             x_account_history_tbl(i).old_active_start_date := NULL;
8748             x_account_history_tbl(i).new_active_start_date := NULL;
8749           ELSE
8750             x_account_history_tbl(i).old_active_start_date := l_acct_hist_csr.old_active_start_date;
8751             x_account_history_tbl(i).new_active_start_date := l_acct_hist_csr.new_active_start_date;
8752           END IF;
8753 
8754           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)
8755           THEN
8756             x_account_history_tbl(i).old_active_end_date := NULL;
8757             x_account_history_tbl(i).new_active_end_date := NULL;
8758           ELSE
8759             x_account_history_tbl(i).old_active_end_date := l_acct_hist_csr.old_active_end_date;
8760             x_account_history_tbl(i).new_active_end_date := l_acct_hist_csr.new_active_end_date;
8761           END IF;
8762 
8763           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)
8764           THEN
8765             x_account_history_tbl(i).old_context := NULL;
8766             x_account_history_tbl(i).new_context := NULL;
8767           ELSE
8768             x_account_history_tbl(i).old_context := l_acct_hist_csr.old_context;
8769             x_account_history_tbl(i).new_context := l_acct_hist_csr.new_context;
8770           END IF;
8771 
8772           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)
8773           THEN
8774             x_account_history_tbl(i).old_attribute1 := NULL;
8775             x_account_history_tbl(i).new_attribute1 := NULL;
8776           ELSE
8777             x_account_history_tbl(i).old_attribute1 := l_acct_hist_csr.old_attribute1;
8778             x_account_history_tbl(i).new_attribute1 := l_acct_hist_csr.new_attribute1;
8779           END IF;
8780 
8781           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)
8782           THEN
8783             x_account_history_tbl(i).old_attribute2 := NULL;
8784             x_account_history_tbl(i).new_attribute2 := NULL;
8785           ELSE
8786             x_account_history_tbl(i).old_attribute2 := l_acct_hist_csr.old_attribute2;
8787             x_account_history_tbl(i).new_attribute2 := l_acct_hist_csr.new_attribute2;
8788           END IF;
8789 
8790           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)
8791           THEN
8792             x_account_history_tbl(i).old_attribute3 := NULL;
8793             x_account_history_tbl(i).new_attribute3 := NULL;
8794           ELSE
8795             x_account_history_tbl(i).old_attribute3 := l_acct_hist_csr.old_attribute3;
8796             x_account_history_tbl(i).new_attribute3 := l_acct_hist_csr.new_attribute3;
8797           END IF;
8798 
8799 
8800           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)
8801           THEN
8802             x_account_history_tbl(i).old_attribute4 := NULL;
8803             x_account_history_tbl(i).new_attribute4 := NULL;
8804           ELSE
8805             x_account_history_tbl(i).old_attribute4 := l_acct_hist_csr.old_attribute4;
8806             x_account_history_tbl(i).new_attribute4 := l_acct_hist_csr.new_attribute4;
8807           END IF;
8808 
8809           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)
8810           THEN
8811             x_account_history_tbl(i).old_attribute5 := NULL;
8812             x_account_history_tbl(i).new_attribute5 := NULL;
8813           ELSE
8814             x_account_history_tbl(i).old_attribute5 := l_acct_hist_csr.old_attribute5;
8815             x_account_history_tbl(i).new_attribute5 := l_acct_hist_csr.new_attribute5;
8816           END IF;
8817 
8818           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)
8819           THEN
8820             x_account_history_tbl(i).old_attribute6 := NULL;
8821             x_account_history_tbl(i).new_attribute6 := NULL;
8822           ELSE
8823             x_account_history_tbl(i).old_attribute6 := l_acct_hist_csr.old_attribute6;
8824             x_account_history_tbl(i).new_attribute6 := l_acct_hist_csr.new_attribute6;
8825           END IF;
8826 
8827           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)
8828           THEN
8829             x_account_history_tbl(i).old_attribute7 := NULL;
8830             x_account_history_tbl(i).new_attribute7 := NULL;
8831           ELSE
8832             x_account_history_tbl(i).old_attribute7 := l_acct_hist_csr.old_attribute7;
8833             x_account_history_tbl(i).new_attribute7 := l_acct_hist_csr.new_attribute7;
8834           END IF;
8835 
8836           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)
8837           THEN
8838             x_account_history_tbl(i).old_attribute8 := NULL;
8839             x_account_history_tbl(i).new_attribute8 := NULL;
8840           ELSE
8841             x_account_history_tbl(i).old_attribute8 := l_acct_hist_csr.old_attribute8;
8842             x_account_history_tbl(i).new_attribute8 := l_acct_hist_csr.new_attribute8;
8843           END IF;
8844 
8845           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)
8846           THEN
8847             x_account_history_tbl(i).old_attribute9 := NULL;
8848             x_account_history_tbl(i).new_attribute9 := NULL;
8849           ELSE
8850             x_account_history_tbl(i).old_attribute9 := l_acct_hist_csr.old_attribute9;
8851             x_account_history_tbl(i).new_attribute9 := l_acct_hist_csr.new_attribute9;
8852           END IF;
8853 
8854           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)
8855           THEN
8856             x_account_history_tbl(i).old_attribute10 := NULL;
8857             x_account_history_tbl(i).new_attribute10 := NULL;
8858           ELSE
8859             x_account_history_tbl(i).old_attribute10 := l_acct_hist_csr.old_attribute10;
8860             x_account_history_tbl(i).new_attribute10 := l_acct_hist_csr.new_attribute10;
8861           END IF;
8862 
8863           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)
8864           THEN
8865             x_account_history_tbl(i).old_attribute11 := NULL;
8866             x_account_history_tbl(i).new_attribute11 := NULL;
8867           ELSE
8868             x_account_history_tbl(i).old_attribute11 := l_acct_hist_csr.old_attribute11;
8869             x_account_history_tbl(i).new_attribute11 := l_acct_hist_csr.new_attribute11;
8870           END IF;
8871 
8872           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)
8873           THEN
8874             x_account_history_tbl(i).old_attribute12 := NULL;
8875             x_account_history_tbl(i).new_attribute12 := NULL;
8876           ELSE
8877             x_account_history_tbl(i).old_attribute12 := l_acct_hist_csr.old_attribute12;
8878             x_account_history_tbl(i).new_attribute12 := l_acct_hist_csr.new_attribute12;
8879           END IF;
8880 
8881           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)
8882           THEN
8883             x_account_history_tbl(i).old_attribute13 := NULL;
8884             x_account_history_tbl(i).new_attribute13 := NULL;
8885           ELSE
8886             x_account_history_tbl(i).old_attribute13 := l_acct_hist_csr.old_attribute13;
8887             x_account_history_tbl(i).new_attribute13 := l_acct_hist_csr.new_attribute13;
8888           END IF;
8889 
8890           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)
8891           THEN
8892             x_account_history_tbl(i).old_attribute14 := NULL;
8893             x_account_history_tbl(i).new_attribute14 := NULL;
8894           ELSE
8895             x_account_history_tbl(i).old_attribute14 := l_acct_hist_csr.old_attribute14;
8896             x_account_history_tbl(i).new_attribute14 := l_acct_hist_csr.new_attribute14;
8897           END IF;
8898 
8899           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)
8900           THEN
8901             x_account_history_tbl(i).old_attribute15 := NULL;
8902             x_account_history_tbl(i).new_attribute15 := NULL;
8903           ELSE
8904             x_account_history_tbl(i).old_attribute15 := l_acct_hist_csr.old_attribute15;
8905             x_account_history_tbl(i).new_attribute15 := l_acct_hist_csr.new_attribute15;
8906           END IF;
8907 
8908           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)
8909           THEN
8910             x_account_history_tbl(i).old_bill_to_address := NULL;
8911             x_account_history_tbl(i).new_bill_to_address := NULL;
8912           ELSE
8913             x_account_history_tbl(i).old_bill_to_address := l_acct_hist_csr.old_bill_to_address;
8914             x_account_history_tbl(i).new_bill_to_address := l_acct_hist_csr.new_bill_to_address;
8915           END IF;
8916 
8917           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)
8918           THEN
8919             x_account_history_tbl(i).old_ship_to_address := NULL;
8920             x_account_history_tbl(i).new_ship_to_address := NULL;
8921           ELSE
8922             x_account_history_tbl(i).old_ship_to_address := l_acct_hist_csr.old_ship_to_address;
8923             x_account_history_tbl(i).new_ship_to_address := l_acct_hist_csr.new_ship_to_address;
8924           END IF;
8925 
8926           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)
8927           THEN
8928             x_account_history_tbl(i).old_instance_party_id := NULL;
8929             x_account_history_tbl(i).new_instance_party_id := NULL;
8930           ELSE
8931             x_account_history_tbl(i).old_instance_party_id := l_acct_hist_csr.old_instance_party_id;
8932             x_account_history_tbl(i).new_instance_party_id := l_acct_hist_csr.new_instance_party_id;
8933           END IF;
8934 
8935             x_account_history_tbl(i).object_version_number := l_acct_hist_csr.object_version_number;
8936             x_account_history_tbl(i).instance_id           := l_acct_hist_csr.instance_id; -- added by sguthiva on 9-apr for bug 2304649
8937             x_account_history_tbl(i).full_dump_flag        := l_acct_hist_csr.full_dump_flag;
8938 
8939             IF (x_account_history_tbl(i).old_relationship_type_code IS NULL AND
8940                 x_account_history_tbl(i).new_relationship_type_code IS NULL ) OR
8941                (x_account_history_tbl(i).old_party_account_id IS NULL AND
8942                 x_account_history_tbl(i).new_party_account_id IS NULL)
8943             THEN
8944                  l_party_account_query_rec.ip_account_id := x_account_history_tbl(i).ip_account_id;
8945                  l_time_stamp:=l_acct_hist_csr.creation_date;
8946                       csi_party_relationships_pub.get_inst_party_accounts
8947                           ( p_api_version                 => p_api_version
8948                            ,p_commit                      => p_commit
8949                            ,p_init_msg_list               => p_init_msg_list
8950                            ,p_validation_level            => p_validation_level
8951                            ,p_account_query_rec           => l_party_account_query_rec
8952                            ,p_resolve_id_columns          => fnd_api.g_false
8953                            ,p_time_stamp                  => l_time_stamp
8954                            ,x_account_header_tbl          => l_account_header_tbl
8955                            ,x_return_status               => x_return_status
8956                            ,x_msg_count                   => x_msg_count
8957                            ,x_msg_data                    => x_msg_data);
8958 
8959               IF (x_account_history_tbl(i).old_relationship_type_code IS NULL AND
8960                   x_account_history_tbl(i).new_relationship_type_code IS NULL )
8961               THEN
8962                   x_account_history_tbl(i).old_relationship_type_code := l_account_header_tbl(1).relationship_type_code;
8963                   x_account_history_tbl(i).new_relationship_type_code := l_account_header_tbl(1).relationship_type_code;
8964               END IF;
8965 
8966               IF (x_account_history_tbl(i).old_party_account_id IS NULL AND
8967                   x_account_history_tbl(i).new_party_account_id IS NULL)
8968               THEN
8969                   x_account_history_tbl(i).old_party_account_id := l_account_header_tbl(1).party_account_id;
8970                   x_account_history_tbl(i).new_party_account_id := l_account_header_tbl(1).party_account_id;
8971               END IF;
8972 
8973             END IF;
8974 
8975               -- Resolve old history columns;
8976               l_account_header_tbl(1).party_account_id     := x_account_history_tbl(i).OLD_PARTY_ACCOUNT_ID;
8977               l_account_header_tbl(1).bill_to_address      := x_account_history_tbl(i).OLD_BILL_TO_ADDRESS;
8978               l_account_header_tbl(1).ship_to_address      := x_account_history_tbl(i).OLD_SHIP_TO_ADDRESS;
8979               l_account_header_tbl(1).party_account_number := NULL;
8980               l_account_header_tbl(1).party_account_name   := NULL;
8981               l_account_header_tbl(1).bill_to_location     := NULL;
8982               l_account_header_tbl(1).ship_to_location     := NULL;
8983               -- Following columns were added for bug 2670371
8984               l_account_header_tbl(1).bill_to_address1     := NULL;
8985               l_account_header_tbl(1).bill_to_address2     := NULL;
8986               l_account_header_tbl(1).bill_to_address3     := NULL;
8987               l_account_header_tbl(1).bill_to_address4     := NULL;
8988               l_account_header_tbl(1).bill_to_city         := NULL;
8989               l_account_header_tbl(1).bill_to_state        := NULL;
8990               l_account_header_tbl(1).bill_to_postal_code  := NULL;
8991               l_account_header_tbl(1).bill_to_country      := NULL;
8992               l_account_header_tbl(1).ship_to_address1     := NULL;
8993               l_account_header_tbl(1).ship_to_address2     := NULL;
8994               l_account_header_tbl(1).ship_to_address3     := NULL;
8995               l_account_header_tbl(1).ship_to_address4     := NULL;
8996               l_account_header_tbl(1).ship_to_city         := NULL;
8997               l_account_header_tbl(1).ship_to_state        := NULL;
8998               l_account_header_tbl(1).ship_to_postal_code  := NULL;
8999               l_account_header_tbl(1).ship_to_country      := NULL;
9000 
9001 
9002               csi_party_relationships_pvt.Resolve_id_columns(l_account_header_tbl);
9003 
9004               x_account_history_tbl(i).old_party_account_number  :=  l_account_header_tbl(1).party_account_number;
9005               x_account_history_tbl(i).old_party_account_name    :=  l_account_header_tbl(1).party_account_name;
9006               x_account_history_tbl(i).old_bill_to_location      :=  l_account_header_tbl(1).bill_to_location;
9007               x_account_history_tbl(i).old_ship_to_location      :=  l_account_header_tbl(1).ship_to_location;
9008 
9009               -- Following columns were added for bug 2670371
9010               x_account_history_tbl(i).old_bill_to_address1      :=  l_account_header_tbl(1).bill_to_address1;
9011               x_account_history_tbl(i).old_bill_to_address2      :=  l_account_header_tbl(1).bill_to_address2;
9012               x_account_history_tbl(i).old_bill_to_address3      :=  l_account_header_tbl(1).bill_to_address3;
9013               x_account_history_tbl(i).old_bill_to_address4      :=  l_account_header_tbl(1).bill_to_address4;
9014               x_account_history_tbl(i).old_bill_to_city          :=  l_account_header_tbl(1).bill_to_city;
9015               x_account_history_tbl(i).old_bill_to_state         :=  l_account_header_tbl(1).bill_to_state;
9016               x_account_history_tbl(i).old_bill_to_postal_code   :=  l_account_header_tbl(1).bill_to_postal_code;
9017               x_account_history_tbl(i).old_bill_to_country       :=  l_account_header_tbl(1).bill_to_country;
9018               x_account_history_tbl(i).old_ship_to_address1      :=  l_account_header_tbl(1).ship_to_address1;
9019               x_account_history_tbl(i).old_ship_to_address2      :=  l_account_header_tbl(1).ship_to_address2;
9020               x_account_history_tbl(i).old_ship_to_address3      :=  l_account_header_tbl(1).ship_to_address3;
9021               x_account_history_tbl(i).old_ship_to_address4      :=  l_account_header_tbl(1).ship_to_address4;
9022               x_account_history_tbl(i).old_ship_to_city          :=  l_account_header_tbl(1).ship_to_city;
9023               x_account_history_tbl(i).old_ship_to_state         :=  l_account_header_tbl(1).ship_to_state;
9024               x_account_history_tbl(i).old_ship_to_postal_code   :=  l_account_header_tbl(1).ship_to_postal_code;
9025               x_account_history_tbl(i).old_ship_to_country       :=  l_account_header_tbl(1).ship_to_country;
9026               -- Resolve new history columns;
9027               l_account_header_tbl(1).party_account_id     := x_account_history_tbl(i).NEW_PARTY_ACCOUNT_ID;
9028               l_account_header_tbl(1).bill_to_address      := x_account_history_tbl(i).NEW_BILL_TO_ADDRESS;
9029               l_account_header_tbl(1).ship_to_address      := x_account_history_tbl(i).NEW_SHIP_TO_ADDRESS;
9030               l_account_header_tbl(1).party_account_number := NULL;
9031               l_account_header_tbl(1).party_account_name   := NULL;
9032               l_account_header_tbl(1).bill_to_location     := NULL;
9033               l_account_header_tbl(1).ship_to_location     := NULL;
9034 
9035               -- Following columns were added for bug 2670371
9036               l_account_header_tbl(1).bill_to_address1     := NULL;
9037               l_account_header_tbl(1).bill_to_address2     := NULL;
9038               l_account_header_tbl(1).bill_to_address3     := NULL;
9039               l_account_header_tbl(1).bill_to_address4     := NULL;
9040               l_account_header_tbl(1).bill_to_city         := NULL;
9041               l_account_header_tbl(1).bill_to_state        := NULL;
9042               l_account_header_tbl(1).bill_to_postal_code  := NULL;
9043               l_account_header_tbl(1).bill_to_country      := NULL;
9044               l_account_header_tbl(1).ship_to_address1     := NULL;
9045               l_account_header_tbl(1).ship_to_address2     := NULL;
9046               l_account_header_tbl(1).ship_to_address3     := NULL;
9047               l_account_header_tbl(1).ship_to_address4     := NULL;
9048               l_account_header_tbl(1).ship_to_city         := NULL;
9049               l_account_header_tbl(1).ship_to_state        := NULL;
9050               l_account_header_tbl(1).ship_to_postal_code  := NULL;
9051               l_account_header_tbl(1).ship_to_country      := NULL;
9052 
9053               csi_party_relationships_pvt.Resolve_id_columns(l_account_header_tbl);
9054 
9055               x_account_history_tbl(i).new_party_account_number  :=  l_account_header_tbl(1).party_account_number;
9056               x_account_history_tbl(i).new_party_account_name    :=  l_account_header_tbl(1).party_account_name;
9057               x_account_history_tbl(i).new_bill_to_location      :=  l_account_header_tbl(1).bill_to_location;
9058               x_account_history_tbl(i).new_ship_to_location      :=  l_account_header_tbl(1).ship_to_location;
9059 
9060               -- Following columns were added for bug 2670371
9061 
9062               x_account_history_tbl(i).new_bill_to_address1      :=  l_account_header_tbl(1).bill_to_address1;
9063               x_account_history_tbl(i).new_bill_to_address2      :=  l_account_header_tbl(1).bill_to_address2;
9064               x_account_history_tbl(i).new_bill_to_address3      :=  l_account_header_tbl(1).bill_to_address3;
9065               x_account_history_tbl(i).new_bill_to_address4      :=  l_account_header_tbl(1).bill_to_address4;
9066               x_account_history_tbl(i).new_bill_to_city          :=  l_account_header_tbl(1).bill_to_city;
9067               x_account_history_tbl(i).new_bill_to_state         :=  l_account_header_tbl(1).bill_to_state;
9068               x_account_history_tbl(i).new_bill_to_postal_code   :=  l_account_header_tbl(1).bill_to_postal_code;
9069               x_account_history_tbl(i).new_bill_to_country       :=  l_account_header_tbl(1).bill_to_country;
9070               x_account_history_tbl(i).new_ship_to_address1      :=  l_account_header_tbl(1).ship_to_address1;
9071               x_account_history_tbl(i).new_ship_to_address2      :=  l_account_header_tbl(1).ship_to_address2;
9072               x_account_history_tbl(i).new_ship_to_address3      :=  l_account_header_tbl(1).ship_to_address3;
9073               x_account_history_tbl(i).new_ship_to_address4      :=  l_account_header_tbl(1).ship_to_address4;
9074               x_account_history_tbl(i).new_ship_to_city          :=  l_account_header_tbl(1).ship_to_city;
9075               x_account_history_tbl(i).new_ship_to_state         :=  l_account_header_tbl(1).ship_to_state;
9076               x_account_history_tbl(i).new_ship_to_postal_code   :=  l_account_header_tbl(1).ship_to_postal_code;
9077               x_account_history_tbl(i).new_ship_to_country       :=  l_account_header_tbl(1).ship_to_country;
9078 
9079               IF NVL(x_account_history_tbl(i).old_party_account_id,fnd_api.g_miss_num)=
9080                  NVL(x_account_history_tbl(i).new_party_account_id,fnd_api.g_miss_num)
9081               THEN
9082                   x_account_history_tbl(i).old_party_account_id := NULL;
9083                   x_account_history_tbl(i).new_party_account_id := NULL;
9084               END IF;
9085 
9086 
9087               i := i + 1;
9088 
9089        END LOOP;
9090 
9091        -- End of API body
9092 
9093        -- Standard check of p_commit.
9094        /*
9095        IF FND_API.To_Boolean( p_commit ) THEN
9096              COMMIT WORK;
9097        END IF;
9098        */
9099 
9100        /***** srramakr commented for bug # 3304439
9101        -- Check for the profile option and disable the trace
9102        IF (l_flag = 'Y') THEN
9103             dbms_session.set_sql_trace(false);
9104        END IF;
9105        -- End disable trace
9106        ****/
9107 
9108        -- Standard call to get message count and if count is  get message info.
9109        FND_MSG_PUB.Count_And_Get
9110                 (p_count        =>      x_msg_count ,
9111                  p_data         =>      x_msg_data   );
9112 EXCEPTION
9113         WHEN FND_API.G_EXC_ERROR THEN
9114                -- ROLLBACK TO get_inst_party_account_hist;
9115                 x_return_status := FND_API.G_RET_STS_ERROR ;
9116                 FND_MSG_PUB.Count_And_Get
9117                 (   p_count   =>      x_msg_count,
9118                     p_data    =>      x_msg_data );
9119         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9120                -- ROLLBACK TO get_inst_party_account_hist;
9121                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9122                 FND_MSG_PUB.Count_And_Get
9123                 (   p_count   =>      x_msg_count,
9124                     p_data    =>      x_msg_data  );
9125         WHEN OTHERS THEN
9126                -- ROLLBACK TO get_inst_party_account_hist;
9127                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9128                 IF      FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9129                 FND_MSG_PUB.Add_Exc_Msg
9130                 (       g_pkg_name          ,
9131                         l_api_name           );
9132                 END IF;
9133                 FND_MSG_PUB.Count_And_Get
9134                 ( p_count     =>      x_msg_count,
9135                   p_data      =>      x_msg_data  );
9136 
9137 END get_inst_party_account_hist;
9138 
9139 END  csi_party_relationships_pvt ;