DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSI_SYSTEMS_PVT

Source


1 PACKAGE BODY csi_systems_pvt AS
2 /* $Header: csivsysb.pls 120.3.12010000.2 2008/11/06 20:33:46 mashah ship $ */
3 -- start of comments
4 -- package name     : csi_systems_pvt
5 -- purpose          :
6 -- history          :
7 -- note             :
8 -- END of comments
9 
10 
11 g_pkg_name  CONSTANT VARCHAR2(30) := 'CSI_SYSTEMS_PVT';
12 g_file_name CONSTANT VARCHAR2(12) := 'csivsysb.pls';
13 
14 PROCEDURE validate_system_id (
15     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
16     p_validation_mode            IN   VARCHAR2  ,
17     p_system_id                  IN   NUMBER    ,
18     x_return_status              OUT NOCOPY  VARCHAR2  ,
19     x_msg_count                  OUT NOCOPY  NUMBER    ,
20     x_msg_data                   OUT NOCOPY  VARCHAR2
21     );
22 
23 
24 PROCEDURE validate_customer_id (
25     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
26     p_validation_mode            IN   VARCHAR2  ,
27     p_customer_id                IN   NUMBER    ,
28     x_return_status              OUT NOCOPY  VARCHAR2  ,
29     x_msg_count                  OUT NOCOPY  NUMBER    ,
30     x_msg_data                   OUT NOCOPY  VARCHAR2
31     );
32 
33 
34 PROCEDURE validate_system_type_code (
35     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
36     p_validation_mode            IN   VARCHAR2  ,
37     p_system_type_code           IN   VARCHAR2  ,
38     x_return_status              OUT NOCOPY  VARCHAR2  ,
39     x_msg_count                  OUT NOCOPY  NUMBER    ,
40     x_msg_data                   OUT NOCOPY  VARCHAR2
41     );
42 
43 
44 
45 PROCEDURE validate_parent_system_id (
46     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
47     p_validation_mode            IN   VARCHAR2  ,
48     p_parent_system_id           IN   NUMBER    ,
49     x_return_status              OUT NOCOPY  VARCHAR2  ,
50     x_msg_count                  OUT NOCOPY  NUMBER    ,
51     x_msg_data                   OUT NOCOPY  VARCHAR2
52     );
53 
54 
55 PROCEDURE validate_ship_to_contact_id (
56     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
57     p_validation_mode            IN   VARCHAR2  ,
58     p_ship_to_contact_id         IN   NUMBER    ,
59     x_return_status              OUT NOCOPY  VARCHAR2  ,
60     x_msg_count                  OUT NOCOPY  NUMBER    ,
61     x_msg_data                   OUT NOCOPY  VARCHAR2
62     );
63 
64 
65 PROCEDURE validate_bill_to_contact_id (
66     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
67     p_validation_mode            IN   VARCHAR2  ,
68     p_bill_to_contact_id         IN   NUMBER    ,
69     x_return_status              OUT NOCOPY  VARCHAR2  ,
70     x_msg_count                  OUT NOCOPY  NUMBER    ,
71     x_msg_data                   OUT NOCOPY  VARCHAR2
72     );
73 
74 PROCEDURE validate_technical_contact_id (
75     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
76     p_validation_mode            IN   VARCHAR2  ,
77     p_technical_contact_id       IN   NUMBER    ,
78     x_return_status              OUT NOCOPY  VARCHAR2  ,
79     x_msg_count                  OUT NOCOPY  NUMBER    ,
80     x_msg_data                   OUT NOCOPY  VARCHAR2
81     );
82 
83 
84 PROCEDURE validate_srv_admin_cont_id (
85     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
86     p_validation_mode            IN   VARCHAR2  ,
87     p_service_admin_contact_id   IN   NUMBER    ,
88     x_return_status              OUT NOCOPY  VARCHAR2  ,
89     x_msg_count                  OUT NOCOPY  NUMBER    ,
90     x_msg_data                   OUT NOCOPY  VARCHAR2
91     );
92 
93 
94 PROCEDURE validate_ship_to_site_use_id (
95     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
96     p_validation_mode            IN   VARCHAR2  ,
97     p_ship_to_site_use_id        IN   NUMBER    ,
98     x_return_status              OUT NOCOPY  VARCHAR2  ,
99     x_msg_count                  OUT NOCOPY  NUMBER    ,
100     x_msg_data                   OUT NOCOPY  VARCHAR2
101     );
102 
103 
104 PROCEDURE validate_bill_to_site_use_id (
105     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
106     p_validation_mode            IN   VARCHAR2  ,
107     p_bill_to_site_use_id        IN   NUMBER    ,
108     x_return_status              OUT NOCOPY  VARCHAR2  ,
109     x_msg_count                  OUT NOCOPY  NUMBER    ,
110     x_msg_data                   OUT NOCOPY  VARCHAR2
111     );
112 
113 
114 PROCEDURE validate_install_site_use_id (
115     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
116     p_validation_mode            IN   VARCHAR2  ,
117     p_install_site_use_id        IN   NUMBER    ,
118     x_return_status              OUT NOCOPY  VARCHAR2  ,
119     x_msg_count                  OUT NOCOPY  NUMBER    ,
120     x_msg_data                   OUT NOCOPY  VARCHAR2
121     );
122 
123 PROCEDURE validate_start_end_date (
124     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
125     p_validation_mode            IN   VARCHAR2  ,
126     p_system_id                  IN   NUMBER    ,
127     p_start_date                 IN   DATE      ,
128     p_end_date                   IN   DATE      ,
129     x_return_status              OUT NOCOPY  VARCHAR2  ,
130     x_msg_count                  OUT NOCOPY  NUMBER    ,
131     x_msg_data                   OUT NOCOPY  VARCHAR2
132     );
133 
134 PROCEDURE validate_object_version_num (
135     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
136     p_validation_mode            IN   VARCHAR2  ,
137     p_object_version_number      IN   NUMBER    ,
138     x_return_status              OUT NOCOPY  VARCHAR2  ,
139     x_msg_count                  OUT NOCOPY  NUMBER    ,
140     x_msg_data                   OUT NOCOPY  VARCHAR2
141     );
142 
143 PROCEDURE validate_name (
144     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
145     p_validation_mode            IN   VARCHAR2  ,
146     p_name                       IN   VARCHAR2  ,
147     x_return_status              OUT NOCOPY  VARCHAR2  ,
148     x_msg_count                  OUT NOCOPY  NUMBER    ,
149     x_msg_data                   OUT NOCOPY  VARCHAR2
150     );
151 
152 PROCEDURE validate_auto_sys_id (
153     p_init_msg_list              IN   VARCHAR2 := fnd_api.g_false,
154     p_validation_mode            IN   VARCHAR2  ,
155     p_auto_sys_id                IN   NUMBER    ,
156     x_return_status              OUT NOCOPY  VARCHAR2  ,
157     x_msg_count                  OUT NOCOPY  NUMBER    ,
158     x_msg_data                   OUT NOCOPY  VARCHAR2
159     );
160 
161 
162 PROCEDURE define_columns(
163 p_system_rec                IN   csi_datastructures_pub.system_rec,
164 p_cur_get_systems           IN   NUMBER
165 )
166 IS
167 BEGIN
168 
169     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  1, p_system_rec.system_id);
170     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  2, p_system_rec.customer_id);
171     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  3, p_system_rec.system_type_code,30);
172     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  4, p_system_rec.system_number,30);
173     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  5, p_system_rec.parent_system_id);
174     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  6, p_system_rec.ship_to_contact_id);
175     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  7, p_system_rec.bill_to_contact_id);
176     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  8, p_system_rec.technical_contact_id);
177     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems,  9, p_system_rec.service_admin_contact_id);
178     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 10, p_system_rec.ship_to_site_use_id);
179     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 11, p_system_rec.bill_to_site_use_id);
180     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 12, p_system_rec.install_site_use_id);
181     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 13, p_system_rec.coterminate_day_month,6);
182     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 14, p_system_rec.autocreated_from_system_id);
183     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 15, p_system_rec.start_date_active);
184     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 16, p_system_rec.end_date_active);
185     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 17, p_system_rec.context,30);
186     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 18, p_system_rec.attribute1,240);
187     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 19, p_system_rec.attribute2,240);
188     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 20, p_system_rec.attribute3,240);
189     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 21, p_system_rec.attribute4,240);
190     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 22, p_system_rec.attribute5,240);
191     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 23, p_system_rec.attribute6,240);
192     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 24, p_system_rec.attribute7,240);
193     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 25, p_system_rec.attribute8,240);
194     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 26, p_system_rec.attribute9,240);
195     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 27, p_system_rec.attribute10,240);
196     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 28, p_system_rec.attribute11,240);
197     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 29, p_system_rec.attribute12,240);
198     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 30, p_system_rec.attribute13,240);
199     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 31, p_system_rec.attribute14,240);
200     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 32, p_system_rec.attribute15,240);
201     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 33, p_system_rec.object_version_number);
202     DBMS_SQL.DEFINE_COLUMN(p_cur_get_systems, 34, p_system_rec.operating_unit_id);
203 END define_columns;
204 
205 PROCEDURE get_column_values(
206     p_cur_get_systems         IN   NUMBER,
207     x_sys_rec                OUT NOCOPY   csi_datastructures_pub.system_rec
208 )
209 IS
210 BEGIN
211     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  1, x_sys_rec.system_id);
212     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  2, x_sys_rec.customer_id);
213     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  3, x_sys_rec.system_type_code);
214     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  4, x_sys_rec.system_number);
215     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  5, x_sys_rec.parent_system_id);
216     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  6, x_sys_rec.ship_to_contact_id);
217     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  7, x_sys_rec.bill_to_contact_id);
218     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  8, x_sys_rec.technical_contact_id);
219     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems,  9, x_sys_rec.service_admin_contact_id);
220     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 10, x_sys_rec.ship_to_site_use_id);
221     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 11, x_sys_rec.bill_to_site_use_id);
222     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 12, x_sys_rec.install_site_use_id);
223     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 13, x_sys_rec.coterminate_day_month);
224     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 14, x_sys_rec.autocreated_from_system_id);
225     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 15, x_sys_rec.start_date_active);
226     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 16, x_sys_rec.end_date_active);
227     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 17, x_sys_rec.context);
228     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 18, x_sys_rec.attribute1);
229     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 19, x_sys_rec.attribute2);
230     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 20, x_sys_rec.attribute3);
231     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 21, x_sys_rec.attribute4);
232     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 22, x_sys_rec.attribute5);
233     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 23, x_sys_rec.attribute6);
234     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 24, x_sys_rec.attribute7);
235     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 25, x_sys_rec.attribute8);
236     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 26, x_sys_rec.attribute9);
237     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 27, x_sys_rec.attribute10);
238     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 28, x_sys_rec.attribute11);
239     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 29, x_sys_rec.attribute12);
240     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 30, x_sys_rec.attribute13);
241     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 31, x_sys_rec.attribute14);
242     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 32, x_sys_rec.attribute15);
243     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 33, x_sys_rec.object_version_number);
244     DBMS_SQL.COLUMN_VALUE(p_cur_get_systems, 34, x_sys_rec.operating_unit_id);
245 
246 END get_column_values;
247 
248 
249 PROCEDURE bind(
250     p_system_query_rec            IN   csi_datastructures_pub.system_query_rec,
251     p_cur_get_systems             IN   NUMBER
252 )
253 IS
254 BEGIN
255 
256 
257 
258       IF( (p_system_query_rec.system_id IS NOT NULL) AND (p_system_query_rec.system_id <> fnd_api.g_miss_num) )
259       THEN
260           dbms_sql.bind_variable(p_cur_get_systems, 'system_id', p_system_query_rec.system_id);
261       END IF;
262 
263       IF( (p_system_query_rec.system_type_code IS NOT NULL) AND (p_system_query_rec.system_type_code <> fnd_api.g_miss_char) )
264       THEN
265           dbms_sql.bind_variable(p_cur_get_systems, 'system_type_code', p_system_query_rec.system_type_code);
266       END IF;
267 
268        IF( (p_system_query_rec.system_number IS NOT NULL) AND (p_system_query_rec.system_number <> fnd_api.g_miss_char) )
269       THEN
270           dbms_sql.bind_variable(p_cur_get_systems, 'system_number', p_system_query_rec.system_number);
271       END IF;
272 
273 END bind;
274 
275 
276 PROCEDURE gen_select(
277     p_system_query_rec               IN    csi_datastructures_pub.system_query_rec,
278     x_select_cl                      OUT NOCOPY   VARCHAR2
279 )
280 IS
281 BEGIN
282 
283  x_select_cl := 'SELECT distinct system_id,customer_id,system_type_code,system_number,
284                  parent_system_id,ship_to_contact_id,bill_to_contact_id,technical_contact_id,
285                  service_admin_contact_id,ship_to_site_use_id,bill_to_site_use_id,
286                  install_site_use_id,coterminate_day_month,autocreated_from_system_id,
287                  start_date_active,end_date_active,context,attribute1,attribute2,attribute3,
288                  attribute4,attribute5,attribute6,attribute7,attribute8,attribute9,attribute10,
289                  attribute11,attribute12,attribute13,attribute14,attribute15,object_version_number,
290 		 operating_unit_id
291                   FROM csi_systems_b ';
292 
293 
294 
295 END gen_select;
296 
297 PROCEDURE gen_systems_where(
298     p_system_query_rec               IN     csi_datastructures_pub.system_query_rec,
299     p_active_systems_only            IN     VARCHAR2,
300     x_systems_where                  OUT NOCOPY    VARCHAR2
301 )
302 IS
303 CURSOR c_chk_str1(p_rec_item VARCHAR2) IS
304     SELECT instr(p_rec_item, '%', 1, 1)
305     FROM dual;
306 CURSOR c_chk_str2(p_rec_item VARCHAR2) IS
307     SELECT instr(p_rec_item, '_', 1, 1)
308     FROM dual;
309 
310 str_csr1   NUMBER;
311 str_csr2   NUMBER;
312 i          NUMBER;
313 l_operator VARCHAR2(10);
314 
315 BEGIN
316 
317 
318       IF( (p_system_query_rec.system_id IS NOT NULL) AND (p_system_query_rec.system_id <> fnd_api.g_miss_num) )
319       THEN
320           IF(x_systems_where IS NULL) THEN
321               x_systems_where := ' WHERE ';
322           ELSE
323               x_systems_where := x_systems_where || ' AND ';
324           END IF;
325           x_systems_where := x_systems_where || 'system_id = :system_id';
326       END IF;
327 
328 
329       IF( (p_system_query_rec.system_type_code IS NOT NULL) AND (p_system_query_rec.system_type_code <> fnd_api.g_miss_char) )
330       THEN
331 
332       i:=0;
333           -- check IF item value contains '%' wildcard
334             OPEN c_chk_str1(p_system_query_rec.system_type_code);
335             FETCH c_chk_str1 INTO str_csr1;
336             CLOSE c_chk_str1;
337             IF(str_csr1 <> 0) THEN
338               l_operator := ' like ';
339               i:=1;
340             ELSE
341               l_operator := ' = ';
342             END IF;
343             IF i=0 THEN
344           -- check IF item value contains '_' wildcard
345             OPEN c_chk_str2(p_system_query_rec.system_type_code);
346             FETCH c_chk_str2 INTO str_csr2;
347             CLOSE c_chk_str2;
348             IF(str_csr2 <> 0) THEN
349               l_operator := ' like ';
350             ELSE
351               l_operator := ' = ';
352             END IF;
353             END IF;
354             IF(x_systems_where IS NULL) THEN
355               x_systems_where := ' WHERE ';
356             ELSE
357               x_systems_where := x_systems_where || ' AND ';
358             END IF;
359               x_systems_where := x_systems_where || 'system_type_code ' || l_operator || ' :system_type_code';
360       END IF;
361 
362       IF( (p_system_query_rec.system_number IS NOT NULL) AND (p_system_query_rec.system_number <> fnd_api.g_miss_char) )
363       THEN
364 
365       i:=0;
366 
367             OPEN c_chk_str1(p_system_query_rec.system_number);
368             FETCH c_chk_str1 INTO str_csr1;
369             CLOSE c_chk_str1;
370             IF(str_csr1 <> 0) THEN
371               l_operator := ' like ';
372               i:=1;
373             ELSE
374               l_operator := ' = ';
375             END IF;
376             IF i=0 THEN
377             OPEN c_chk_str2(p_system_query_rec.system_number);
378             FETCH c_chk_str2 INTO str_csr2;
379             CLOSE c_chk_str2;
380             IF(str_csr2 <> 0) THEN
381               l_operator := ' like ';
382             ELSE
383               l_operator := ' = ';
384             END IF;
385             END IF;
386             IF(x_systems_where IS NULL) THEN
387               x_systems_where := ' WHERE ';
388             ELSE
389               x_systems_where := x_systems_where || ' AND ';
390             END IF;
391               x_systems_where := x_systems_where || 'system_number ' || l_operator || ' :system_number';
392       END IF;
393 
394   /*    IF  p_active_systems_only = 'T' THEN
395           IF(x_systems_where IS NULL) THEN
396              x_systems_where := ' WHERE ';
397           ELSE
398              x_systems_where := x_systems_where ||' AND ';
399           END IF;
400              x_systems_where := x_systems_where ||' end_date_active >= SYSDATE ';
401       END IF; */
402 
403 
404 
405 END gen_systems_where;
406 
407 PROCEDURE from_to_tran( p_system_id          IN  NUMBER,
408                         p_time_stamp         IN  DATE,
409                         from_time_stamp      OUT NOCOPY VARCHAR2,
410                         to_time_stamp        OUT NOCOPY VARCHAR2)
411 IS
412 l_f_date        VARCHAR2(25)    := fnd_api.g_miss_char;
413 l_t_date        VARCHAR2(25)    := fnd_api.g_miss_char;
414 BEGIN
415              SELECT max(min(to_char(a.transaction_date,'dd-mon-rr hh24:mi:ss')))
416              INTO   l_f_date
417              FROM   csi_transactions a, csi_systems_b b,csi_systems_h c
418              WHERE  b.system_id = c.system_id
419              AND    c.transaction_id = a.transaction_id
420              AND    c.full_dump_flag = 'Y'
421              AND    a.transaction_date <=p_time_stamp
422              AND    c.system_id = p_system_id
423              GROUP BY  to_char(a.transaction_date,'dd-mon-rr hh24:mi:ss');
424              IF l_f_date IS NULL THEN
425              from_time_stamp:=NULL;
426              to_time_stamp:=l_t_date;
427              ELSE
428              from_time_stamp:=l_f_date;
429              BEGIN
430                   SELECT max(min(to_char(a.transaction_date,'dd-mon-rr hh24:mi:ss')))
431                   INTO   l_t_date
432                   FROM   csi_transactions a, csi_systems_b b,csi_systems_h c
433                   WHERE  b.system_id = c.system_id
434                   AND    c.transaction_id = a.transaction_id
435                   AND    a.transaction_date <=p_time_stamp
436                   AND    c.system_id = p_system_id
437                   GROUP BY  to_char(a.transaction_date,'dd-mon-rr hh24:mi:ss');
438 
439                   IF l_t_date IS NULL THEN
440                   to_time_stamp:=NULL;
441                   ELSE
442                   to_time_stamp:=l_t_date;
443                   END IF;
444              END;
445              END IF;
446 END;
447 
448 
449 PROCEDURE get_history( p_sys_rec    IN   csi_datastructures_pub.system_rec
450                       ,p_new_rec    OUT NOCOPY  csi_datastructures_pub.system_rec
451                       ,p_flag       OUT NOCOPY  VARCHAR2
452                       ,p_time_stamp IN   DATE
453                       )
454 IS
455 CURSOR hist_csr (p_system_id    IN NUMBER,
456                  p_f_time_stamp IN VARCHAR2,
457                  p_t_time_stamp IN VARCHAR2)
458      IS
459        SELECT    c.system_id
460                 ,c.old_customer_id
461                 ,c.new_customer_id
462                 ,c.old_system_type_code
463                 ,c.new_system_type_code
464                 ,c.old_system_number
465                 ,c.new_system_number
466                 ,c.old_parent_system_id
467                 ,c.new_parent_system_id
468                 ,c.old_ship_to_contact_id
469                 ,c.new_ship_to_contact_id
470                 ,c.old_bill_to_contact_id
471                 ,c.new_bill_to_contact_id
472                 ,c.old_technical_contact_id
473                 ,c.new_technical_contact_id
474                 ,c.old_service_admin_contact_id
475                 ,c.new_service_admin_contact_id
476                 ,c.old_ship_to_site_use_id
477                 ,c.new_ship_to_site_use_id
478                 ,c.old_install_site_use_id
479                 ,c.new_install_site_use_id
480                 ,c.old_bill_to_site_use_id
481                 ,c.new_bill_to_site_use_id
482                 ,c.old_coterminate_day_month
483                 ,c.new_coterminate_day_month
484                 ,c.old_start_date_active
485                 ,c.new_start_date_active
486                 ,c.old_end_date_active
487                 ,c.new_end_date_active
488                 ,c.old_autocreated_from_system
489                 ,c.new_autocreated_from_system
490                 ,c.old_config_system_type
491                 ,c.new_config_system_type
492                 ,c.old_context
493                 ,c.new_context
494                 ,c.old_attribute1
495                 ,c.new_attribute1
496                 ,c.old_attribute2
497                 ,c.new_attribute2
498                 ,c.old_attribute3
499                 ,c.new_attribute3
500                 ,c.old_attribute4
501                 ,c.new_attribute4
502                 ,c.old_attribute5
503                 ,c.new_attribute5
504                 ,c.old_attribute6
505                 ,c.new_attribute6
506                 ,c.old_attribute7
507                 ,c.new_attribute7
508                 ,c.old_attribute8
509                 ,c.new_attribute8
510                 ,c.old_attribute9
511                 ,c.new_attribute9
512                 ,c.old_attribute10
513                 ,c.new_attribute10
514                 ,c.old_attribute11
515                 ,c.new_attribute11
516                 ,c.old_attribute12
517                 ,c.new_attribute12
518                 ,c.old_attribute13
519                 ,c.new_attribute13
520                 ,c.old_attribute14
521                 ,c.new_attribute14
522                 ,c.old_attribute15
523                 ,c.new_attribute15
524                 ,c.full_dump_flag
525 		,c.old_operating_unit_id
526 		 ,c.new_operating_unit_id
527        FROM     csi_transactions a,csi_systems_b b,csi_systems_h c
528        WHERE    b.system_id      = c.system_id
529        AND      c.transaction_id = a.transaction_id
530        AND      c.system_id      = p_system_id
531        AND      a.transaction_date BETWEEN to_date(p_f_time_stamp,'dd/mm/yyyy hh24:mi:ss')
532                                    AND     to_date(p_t_time_stamp,'dd/mm/yyyy hh24:mi:ss')
533        ORDER BY to_char(a.transaction_date,'dd/mm/yyyy hh24:mi:ss') ;
534 
535 l_f_time_stamp      VARCHAR2(25)    :=fnd_api.g_miss_char;
536 l_t_time_stamp      VARCHAR2(25)    :=fnd_api.g_miss_char;
537 l_to_date           VARCHAR2(25);
538 BEGIN
539       from_to_tran(p_system_id      =>  p_sys_rec.system_id,
540                    p_time_stamp     =>  p_time_stamp,
541                    from_time_stamp  =>  l_f_time_stamp,
542                    to_time_stamp    =>  l_t_time_stamp);
543 
544      SELECT max(to_char(a.transaction_date,'dd/mm/yyyy hh24:mi:ss'))
545      INTO   l_to_date
546      FROM   csi_transactions a,csi_systems_h b
547      WHERE  a.transaction_id=b.transaction_id
548      AND    b.system_id=p_sys_rec.system_id;
549 
550        IF ( (l_f_time_stamp IS NOT NULL) AND (p_time_stamp>to_date(l_to_date,'dd/mm/yyyy hh24:mi:ss')) ) THEN
551            p_new_rec := p_sys_rec;
552            p_flag    := 'ADD';
553        ELSIF (l_f_time_stamp IS NULL) THEN
554     -- we have entered into case 1 which we have to skip the record.
555            p_flag   := 'SKIP';
556        ELSE
557     -- we have entered into case 3 where we have to compare the record and return flag with 'add'.
558            FOR get_csr IN hist_csr(p_sys_rec.system_id,l_f_time_stamp,l_t_time_stamp) LOOP
559 
560              p_new_rec.system_id:=p_sys_rec.system_id;
561 
562 
563              IF get_csr.new_customer_id IS NOT NULL THEN
564                 p_new_rec.customer_id := get_csr.new_customer_id;
565              ELSIF get_csr.full_dump_flag='Y' THEN
566                 p_new_rec.customer_id := get_csr.old_customer_id;
567              END IF;
568 
569              IF get_csr.new_system_type_code IS NOT NULL THEN
570                 p_new_rec.system_type_code := get_csr.new_system_type_code;
571              ELSIF get_csr.full_dump_flag='Y' THEN
572                 p_new_rec.system_type_code := get_csr.old_system_type_code;
573              END IF;
574 
575              IF get_csr.new_system_number IS NOT NULL THEN
576                 p_new_rec.system_number := get_csr.new_system_number;
577              ELSIF get_csr.full_dump_flag='Y' THEN
578                 p_new_rec.system_number := get_csr.old_system_number;
579              END IF;
580 
581              IF get_csr.new_parent_system_id IS NOT NULL THEN
582                 p_new_rec.parent_system_id := get_csr.new_parent_system_id;
583              ELSIF get_csr.full_dump_flag='Y' THEN
584                 p_new_rec.parent_system_id := get_csr.old_parent_system_id;
585              END IF;
586 
587              IF get_csr.new_ship_to_contact_id IS NOT NULL THEN
588                 p_new_rec.ship_to_contact_id := get_csr.new_ship_to_contact_id;
589              ELSIF get_csr.full_dump_flag='Y' THEN
590                 p_new_rec.ship_to_contact_id := get_csr.old_ship_to_contact_id;
591              END IF;
592 
593              IF get_csr.new_bill_to_contact_id IS NOT NULL THEN
594                 p_new_rec.bill_to_contact_id := get_csr.new_bill_to_contact_id;
595              ELSIF get_csr.full_dump_flag='Y' THEN
596                 p_new_rec.bill_to_contact_id := get_csr.old_bill_to_contact_id;
597              END IF;
598 
599              IF get_csr.new_technical_contact_id IS NOT NULL THEN
600                 p_new_rec.technical_contact_id := get_csr.new_technical_contact_id;
601              ELSIF get_csr.full_dump_flag='Y' THEN
602                 p_new_rec.technical_contact_id := get_csr.old_technical_contact_id;
603              END IF;
604 
605              IF get_csr.new_service_admin_contact_id IS NOT NULL THEN
606                 p_new_rec.service_admin_contact_id := get_csr.new_service_admin_contact_id;
607              ELSIF get_csr.full_dump_flag='Y' THEN
608                  p_new_rec.service_admin_contact_id := get_csr.old_service_admin_contact_id;
609              END IF;
610 
611              IF get_csr.new_ship_to_site_use_id IS NOT NULL THEN
612                 p_new_rec.ship_to_site_use_id := get_csr.new_ship_to_site_use_id;
613              ELSIF get_csr.full_dump_flag='Y' THEN
614                 p_new_rec.ship_to_site_use_id := get_csr.old_ship_to_site_use_id;
615              END IF;
616 
617              IF get_csr.new_install_site_use_id IS NOT NULL THEN
618                 p_new_rec.install_site_use_id := get_csr.new_install_site_use_id;
619              ELSIF get_csr.full_dump_flag='Y' THEN
620                 p_new_rec.install_site_use_id := get_csr.old_install_site_use_id;
621              END IF;
622 
623              IF get_csr.new_bill_to_site_use_id IS NOT NULL THEN
624                 p_new_rec.bill_to_site_use_id := get_csr.new_bill_to_site_use_id;
625              ELSIF get_csr.full_dump_flag='Y' THEN
626                 p_new_rec.bill_to_site_use_id := get_csr.old_bill_to_site_use_id;
627              END IF;
628 
629              IF get_csr.new_coterminate_day_month IS NOT NULL THEN
630                 p_new_rec.coterminate_day_month := get_csr.new_coterminate_day_month;
631              ELSIF get_csr.full_dump_flag='Y' THEN
632                 p_new_rec.coterminate_day_month := get_csr.old_coterminate_day_month;
633              END IF;
634 
635              IF get_csr.new_start_date_active IS NOT NULL THEN
636                 p_new_rec.start_date_active := get_csr.new_start_date_active;
637              ELSIF get_csr.full_dump_flag='Y' THEN
638                 p_new_rec.start_date_active := get_csr.old_start_date_active;
639              END IF;
640 
641              IF get_csr.new_end_date_active IS NOT NULL THEN
642                 p_new_rec.end_date_active := get_csr.new_end_date_active;
643              ELSIF get_csr.full_dump_flag='Y' THEN
644                 p_new_rec.end_date_active := get_csr.old_end_date_active;
645              END IF;
646 
647              IF get_csr.new_autocreated_from_system IS NOT NULL THEN
648                 p_new_rec.autocreated_from_system_id := get_csr.new_autocreated_from_system;
649              ELSIF get_csr.full_dump_flag='Y' THEN
650                 p_new_rec.autocreated_from_system_id := get_csr.old_autocreated_from_system;
651              END IF;
652 
653              IF get_csr.new_config_system_type IS NOT NULL THEN
654                 p_new_rec.config_system_type := get_csr.new_config_system_type;
655              ELSIF get_csr.full_dump_flag='Y' THEN
656                 p_new_rec.config_system_type := get_csr.old_config_system_type;
657              END IF;
658 
659              IF get_csr.new_context IS NOT NULL THEN
660                 p_new_rec.context := get_csr.new_context;
661              ELSIF get_csr.full_dump_flag='Y' THEN
662                 p_new_rec.context := get_csr.old_context;
663              END IF;
664 
665              IF get_csr.new_attribute1 IS NOT NULL THEN
666                 p_new_rec.attribute1 := get_csr.new_attribute1;
667              ELSIF get_csr.full_dump_flag='Y' THEN
668                 p_new_rec.attribute1 := get_csr.old_attribute1;
669              END IF;
670 
671              IF get_csr.new_attribute2 IS NOT NULL THEN
672                 p_new_rec.attribute2 := get_csr.new_attribute2;
673              ELSIF get_csr.full_dump_flag='Y' THEN
674                 p_new_rec.attribute2 := get_csr.old_attribute2;
675              END IF;
676 
677              IF get_csr.new_attribute3 IS NOT NULL THEN
678                 p_new_rec.attribute3 := get_csr.new_attribute3;
679              ELSIF get_csr.full_dump_flag='Y' THEN
680                 p_new_rec.attribute3 := get_csr.old_attribute3;
681              END IF;
682 
683              IF get_csr.new_attribute4 IS NOT NULL THEN
684                 p_new_rec.attribute4 := get_csr.new_attribute4;
685              ELSIF get_csr.full_dump_flag='Y' THEN
686                 p_new_rec.attribute4 := get_csr.old_attribute4;
687              END IF;
688 
689              IF get_csr.new_attribute5 IS NOT NULL THEN
690                 p_new_rec.attribute5 := get_csr.new_attribute5;
691              ELSIF get_csr.full_dump_flag='Y' THEN
692                 p_new_rec.attribute5 := get_csr.old_attribute5;
693              END IF;
694 
695              IF get_csr.new_attribute6 IS NOT NULL THEN
696                 p_new_rec.attribute6 := get_csr.new_attribute6;
697              ELSIF get_csr.full_dump_flag='Y' THEN
698                 p_new_rec.attribute6 := get_csr.old_attribute6;
699              END IF;
700 
701              IF get_csr.new_attribute7 IS NOT NULL THEN
702                 p_new_rec.attribute7 := get_csr.new_attribute7;
703              ELSIF get_csr.full_dump_flag='Y' THEN
704                 p_new_rec.attribute7 := get_csr.old_attribute7;
705              END IF;
706 
707              IF get_csr.new_attribute8 IS NOT NULL THEN
708                 p_new_rec.attribute8 := get_csr.new_attribute8;
709              ELSIF get_csr.full_dump_flag='Y' THEN
710                 p_new_rec.attribute8 := get_csr.old_attribute8;
711              END IF;
712 
713              IF  get_csr.new_attribute9 IS NOT NULL THEN
714                 p_new_rec.attribute9 := get_csr.new_attribute9;
715              ELSIF get_csr.full_dump_flag='Y' THEN
716                 p_new_rec.attribute9 := get_csr.old_attribute9;
717              END IF;
718 
719              IF get_csr.new_attribute10 IS NOT NULL THEN
720                 p_new_rec.attribute10 := get_csr.new_attribute10;
721              ELSIF get_csr.full_dump_flag='Y' THEN
722                 p_new_rec.attribute10 := get_csr.old_attribute10;
723              END IF;
724 
725              IF get_csr.new_attribute11 IS NOT NULL THEN
726                 p_new_rec.attribute11 := get_csr.new_attribute11;
727              ELSIF get_csr.full_dump_flag='Y' THEN
728                 p_new_rec.attribute11 := get_csr.old_attribute11;
729              END IF;
730 
731              IF  get_csr.new_attribute12 IS NOT NULL THEN
732                 p_new_rec.attribute12 := get_csr.new_attribute12;
733              ELSIF get_csr.full_dump_flag='Y' THEN
734                 p_new_rec.attribute12 := get_csr.old_attribute12;
735              END IF;
736 
737              IF get_csr.new_attribute13 IS NOT NULL THEN
738                 p_new_rec.attribute13 := get_csr.new_attribute13;
739              ELSIF get_csr.full_dump_flag='Y' THEN
740                 p_new_rec.attribute13 := get_csr.old_attribute13;
741              END IF;
742 
743              IF  get_csr.new_attribute14 IS NOT NULL THEN
744                 p_new_rec.attribute14 := get_csr.new_attribute14;
745              ELSIF get_csr.full_dump_flag='Y' THEN
746                 p_new_rec.attribute14 := get_csr.old_attribute14;
747              END IF;
748 
749              IF  get_csr.new_attribute15 IS NOT NULL THEN
750                 p_new_rec.attribute15 := get_csr.new_attribute15;
751              ELSIF get_csr.full_dump_flag='Y' THEN
752                 p_new_rec.attribute15 := get_csr.old_attribute15;
753              END IF;
754 
755              IF  get_csr.new_operating_unit_id IS NOT NULL THEN
756                 p_new_rec.operating_unit_id := get_csr.new_operating_unit_id;
757              ELSIF get_csr.full_dump_flag='Y' THEN
758                 p_new_rec.operating_unit_id := get_csr.old_operating_unit_id;
759              END IF;
760 
761           END LOOP;
762              IF  p_new_rec.customer_id = fnd_api.g_miss_num THEN
763                  p_new_rec.customer_id := NULL;
764              END IF;
765 
766              IF p_new_rec.system_type_code = fnd_api.g_miss_char THEN
767                 p_new_rec.system_type_code := NULL;
768              END IF;
769 
770              IF p_new_rec.system_number = fnd_api.g_miss_char THEN
771                 p_new_rec.system_number := NULL;
772              END IF;
773 
774              IF p_new_rec.parent_system_id = fnd_api.g_miss_num THEN
775                 p_new_rec.parent_system_id := NULL;
776              END IF;
777 
778              IF p_new_rec.ship_to_contact_id = fnd_api.g_miss_num THEN
779                 p_new_rec.ship_to_contact_id := NULL;
780              END IF;
781 
782              IF p_new_rec.bill_to_contact_id = fnd_api.g_miss_num THEN
783                 p_new_rec.bill_to_contact_id := NULL;
784              END IF;
785 
786              IF p_new_rec.technical_contact_id = fnd_api.g_miss_num THEN
787                 p_new_rec.technical_contact_id := NULL;
788              END IF;
789 
790              IF p_new_rec.service_admin_contact_id = fnd_api.g_miss_num THEN
791                 p_new_rec.service_admin_contact_id := NULL;
792              END IF;
793 
794              IF p_new_rec.ship_to_site_use_id = fnd_api.g_miss_num THEN
795                 p_new_rec.ship_to_site_use_id := NULL;
796              END IF;
797 
798              IF p_new_rec.bill_to_site_use_id = fnd_api.g_miss_num THEN
799                 p_new_rec.bill_to_site_use_id := NULL;
800              END IF;
801 
802              IF p_new_rec.install_site_use_id = fnd_api.g_miss_num THEN
803                 p_new_rec.install_site_use_id := NULL;
804              END IF;
805 
806              IF p_new_rec.coterminate_day_month = fnd_api.g_miss_char THEN
807                 p_new_rec.coterminate_day_month := NULL;
808              END IF;
809 
810              IF p_new_rec.autocreated_from_system_id = fnd_api.g_miss_num THEN
811                 p_new_rec.autocreated_from_system_id := NULL;
812              END IF;
813 
814              IF p_new_rec.config_system_type = fnd_api.g_miss_char THEN
815                 p_new_rec.config_system_type := NULL;
816              END IF;
817 
818              IF p_new_rec.start_date_active = fnd_api.g_miss_date THEN
819                  p_new_rec.start_date_active := NULL;
820              END IF;
821 
822              IF p_new_rec.end_date_active = fnd_api.g_miss_date THEN
823                 p_new_rec.end_date_active := NULL;
824              END IF;
825 
826              IF p_new_rec.context = fnd_api.g_miss_char THEN
827                 p_new_rec.context := NULL;
828              END IF;
829 
830              IF p_new_rec.attribute1 = fnd_api.g_miss_char THEN
831                 p_new_rec.attribute1 := NULL;
832              END IF;
833 
834              IF p_new_rec.attribute2 = fnd_api.g_miss_char THEN
835                 p_new_rec.attribute2 := NULL;
836              END IF;
837 
838              IF p_new_rec.attribute3 = fnd_api.g_miss_char THEN
839                 p_new_rec.attribute3 := NULL;
840              END IF;
841 
842              IF p_new_rec.attribute4 = fnd_api.g_miss_char THEN
843                 p_new_rec.attribute4 := NULL;
844              END IF;
845 
846              IF p_new_rec.attribute5 = fnd_api.g_miss_char THEN
847                 p_new_rec.attribute5 := NULL;
848              END IF;
849 
850              IF p_new_rec.attribute6 = fnd_api.g_miss_char THEN
851                 p_new_rec.attribute6 := NULL;
852              END IF;
853 
854              IF p_new_rec.attribute7 =fnd_api.g_miss_char THEN
855                 p_new_rec.attribute7 := NULL;
856              END IF;
857 
858              IF p_new_rec.attribute8 = fnd_api.g_miss_char THEN
859                 p_new_rec.attribute8 := NULL;
860              END IF;
861 
862              IF p_new_rec.attribute9 = fnd_api.g_miss_char THEN
863                 p_new_rec.attribute9 := NULL;
864              END IF;
865 
866              IF p_new_rec.attribute10 = fnd_api.g_miss_char THEN
867                 p_new_rec.attribute10 := NULL;
868              END IF;
869 
870              IF p_new_rec.attribute11 = fnd_api.g_miss_char THEN
871                 p_new_rec.attribute11 := NULL;
872              END IF;
873 
874              IF p_new_rec.attribute12 = fnd_api.g_miss_char THEN
875                 p_new_rec.attribute12 := NULL;
876              END IF;
877 
878              IF p_new_rec.attribute13 = fnd_api.g_miss_char THEN
879                 p_new_rec.attribute13 := NULL;
880              END IF;
881 
882              IF p_new_rec.attribute14 =fnd_api.g_miss_char THEN
883                 p_new_rec.attribute14 := NULL;
884              END IF;
885 
886              IF p_new_rec.attribute15 = fnd_api.g_miss_char THEN
887                 p_new_rec.attribute15 := NULL;
888              END IF;
889 
890              IF p_new_rec.operating_unit_id = fnd_api.g_miss_num THEN
891                 p_new_rec.operating_unit_id := NULL;
892              END IF;
893 
894            p_flag :='ADD';
895         END IF;
896 
897 END;
898 
899 
900 
901 PROCEDURE get_systems
902  (
903      p_api_version               IN  NUMBER  ,
904      p_commit                    IN  VARCHAR2,
905      p_init_msg_list             IN  VARCHAR2,
906      p_validation_level          IN  NUMBER,
907      p_system_query_rec          IN  csi_datastructures_pub.system_query_rec,
908      p_time_stamp                IN  DATE    ,
909      p_active_systems_only       IN  VARCHAR2,
910      x_systems_tbl               OUT NOCOPY csi_datastructures_pub.systems_tbl,
911      x_return_status             OUT NOCOPY VARCHAR2,
912      x_msg_count                 OUT NOCOPY NUMBER  ,
913      x_msg_data                  OUT NOCOPY VARCHAR2
914  )
915  IS
916 
917 l_api_name                 CONSTANT VARCHAR2(30)    := 'get_systems';
918 l_api_version              CONSTANT NUMBER          := 1.0;
919 l_return_status_full                VARCHAR2(1);
920 l_crit_systems_rec                  csi_datastructures_pub.system_query_rec := p_system_query_rec;
921 l_systems_where                     VARCHAR2(2000)  := '';
922 l_cur_get_systems                   NUMBER;
923 l_select_cl                         VARCHAR2(2000)  := '';
924 l_def_systems_rec                   csi_datastructures_pub.system_rec;
925 l_ignore                            NUMBER;
926 l_return_tot_count                  VARCHAR2(1)     := fnd_api.g_false;
927 l_returned_rec_count                NUMBER          := 0;
928 l_sys_rec                           csi_datastructures_pub.system_rec;
929 l_tot_rec_count                     NUMBER          := 0;
930 l_start_rec_prt                     NUMBER          :=1;
931 l_rec_requested                     NUMBER          :=1000000;
932 l_new_rec                           csi_datastructures_pub.system_rec;
933 l_flag                              VARCHAR2(4);
934 l_active_systems_only               VARCHAR2(1):= p_active_systems_only;
935 l_debug_level                       NUMBER;
936 l_systems_tbl                       csi_datastructures_pub.systems_tbl;
937 l_sys_count                         NUMBER := 0;
938 l_last_purge_date                   DATE;
939 
940 BEGIN
941 
942       -- standard start of api savepoint
943     --  SAVEPOINT get_systems_pvt;
944 
945       -- standard call to check for call compatibility.
946       IF NOT fnd_api.compatible_api_call ( l_api_version,
947                                            p_api_version,
948                                            l_api_name,
949                                            g_pkg_name)
950       THEN
951           RAISE fnd_api.g_exc_unexpected_error;
952       END IF;
953 
954 
955       -- initialize message list if p_init_msg_list is set to true.
956       IF fnd_api.to_boolean( p_init_msg_list )
957       THEN
958           fnd_msg_pub.initialize;
959       END IF;
960 
961 
962 
963 
964       -- initialize api return status to success
965       x_return_status := fnd_api.g_ret_sts_success;
966 
967       l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
968         IF (l_debug_level > 0) THEN
969           csi_gen_utility_pvt.put_line( 'get_system');
970         END IF;
971 
972         IF (l_debug_level > 1) THEN
973              csi_gen_utility_pvt.put_line(
974                                 p_api_version             ||'-'||
975                                 p_Commit                  ||'-'||
976                                 p_Init_Msg_list           ||'-'||
977                                 p_Validation_level        ||'-'||
978                                 p_time_stamp              ||'-'||
979                                 p_active_systems_only
980                                 );
981             csi_gen_utility_pvt.dump_sys_query_rec(p_system_query_rec);
982         END IF;
983 
984       IF
985       ( ((p_system_query_rec.system_id IS NULL)         OR (p_system_query_rec.system_id = fnd_api.g_miss_num))
986     AND ((p_system_query_rec.system_type_code IS NULL)  OR (p_system_query_rec.system_type_code = fnd_api.g_miss_char))
987     AND ((p_system_query_rec.system_number IS NULL)     OR (p_system_query_rec.system_number  = fnd_api.g_miss_char))
988       )
989       THEN
990        fnd_message.set_name('CSI', 'CSI_INVALID_PARAMETERS');
991        fnd_msg_pub.add;
992        x_return_status := fnd_api.g_ret_sts_error;
993        RAISE fnd_api.g_exc_error;
994       END IF;
995 
996       gen_select(l_crit_systems_rec,l_select_cl);
997 
998 
999       gen_systems_where(l_crit_systems_rec,l_active_systems_only, l_systems_where);
1000           IF dbms_sql.is_open(l_cur_get_systems) THEN
1001           dbms_sql.close_CURSOR(l_cur_get_systems);
1002           END IF;
1003 
1004        l_cur_get_systems := dbms_sql.open_CURSOR;
1005 
1006        dbms_sql.parse(l_cur_get_systems, l_select_cl||l_systems_where , dbms_sql.native);
1007 
1008        bind(l_crit_systems_rec, l_cur_get_systems);
1009 
1010        define_columns(l_def_systems_rec, l_cur_get_systems);
1011 
1012        l_ignore := dbms_sql.execute(l_cur_get_systems);
1013      --
1014      -- Get the last purge date from csi_item_instances table
1015      --
1016      BEGIN
1017        SELECT last_purge_date
1018        INTO   l_last_purge_date
1019        FROM   CSI_ITEM_INSTANCES
1020        WHERE  rownum < 2;
1021      EXCEPTION
1022        WHEN no_data_found THEN
1023          NULL;
1024        WHEN others THEN
1025          NULL;
1026      END;
1027      --
1028      LOOP
1029      IF((dbms_sql.fetch_rows(l_cur_get_systems)>0) AND ( (l_returned_rec_count<l_rec_requested) OR (l_rec_requested=fnd_api.g_miss_num)))
1030       THEN
1031 
1032              get_column_values(l_cur_get_systems, l_sys_rec);
1033 
1034               l_tot_rec_count := l_tot_rec_count + 1 ;
1035 
1036               IF  (l_returned_rec_count < l_rec_requested) THEN
1037                    l_returned_rec_count := l_returned_rec_count + 1;
1038 
1039                    IF ((p_time_stamp IS NOT NULL) AND (p_time_stamp <> FND_API.G_MISS_DATE))
1040                    THEN
1041                        IF ((l_last_purge_date IS NOT NULL) AND (p_time_stamp <= l_last_purge_date))
1042                        THEN
1043                            csi_gen_utility_pvt.put_line('Warning! History for this entity has already been purged for the datetime stamp passed. ' ||
1044                            'Please provide a valid datetime stamp.');
1045                            FND_MESSAGE.Set_Name('CSI', 'CSI_API_HIST_AFTER_PURGE_REQ');
1046                            FND_MSG_PUB.ADD;
1047                        ELSE
1048                            get_history( p_sys_rec    => l_sys_rec
1049                                        ,p_new_rec    => l_new_rec
1050                                        ,p_flag       => l_flag
1051                                        ,p_time_stamp => p_time_stamp);
1052                                IF l_flag='ADD' THEN
1053                                   l_systems_tbl(l_returned_rec_count) :=l_new_rec;--l_sys_rec;
1054                                END IF;
1055                        END IF;
1056                     ELSE
1057                        l_systems_tbl(l_returned_rec_count) :=l_sys_rec;
1058                     END IF;
1059               END IF;
1060       ELSE
1061           EXIT;
1062       END IF;
1063       END LOOP;
1064       --
1065       IF l_active_systems_only = 'T' THEN
1066          IF l_systems_tbl.count > 0 THEN
1067             FOR sys_row IN l_systems_tbl.FIRST .. l_systems_tbl.LAST
1068             LOOP
1069                IF l_systems_tbl.EXISTS(sys_row) THEN
1070                   IF l_systems_tbl(sys_row).end_date_active IS NULL OR
1071                      l_systems_tbl(sys_row).end_date_active >= SYSDATE THEN
1072                      l_sys_count := l_sys_count + 1;
1073                      x_systems_tbl(l_sys_count) := l_systems_tbl(sys_row);
1074                   END IF;
1075                END IF;
1076             END LOOP;
1077          END IF;
1078       ELSE
1079          x_systems_tbl := l_systems_tbl;
1080       END IF;
1081       -- END of api body
1082       --
1083      dbms_sql.close_cursor(l_cur_get_systems);
1084 
1085       -- standard call to get message count and if count is 1, get message info.
1086       fnd_msg_pub.count_and_get
1087       (  p_count          =>   x_msg_count,
1088          p_data           =>   x_msg_data
1089       );
1090       EXCEPTION
1091          WHEN fnd_api.g_exc_error THEN
1092           --     ROLLBACK TO get_systems_pvt;
1093                x_return_status := fnd_api.g_ret_sts_error ;
1094                fnd_msg_pub.count_and_get
1095                         (p_count => x_msg_count ,
1096                          p_data => x_msg_data
1097                         );
1098 
1099           WHEN fnd_api.g_exc_unexpected_error THEN
1100           --      ROLLBACK TO get_systems_pvt;
1101                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1102                 fnd_msg_pub.count_and_get
1103                          (p_count => x_msg_count ,
1104                           p_data => x_msg_data
1105                          );
1106 
1107           WHEN OTHERS THEN
1108            --     ROLLBACK TO get_systems_pvt;
1109                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
1110                   IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
1111                          fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
1112                   END IF;
1113                 fnd_msg_pub.count_and_get
1114                          (p_count => x_msg_count ,
1115                           p_data => x_msg_data
1116                          );
1117 
1118 END get_systems;
1119 
1120 
1121 /* ----------------------------------------------------------------------------------------------- */
1122 /* This Procedure(during creation/updation)is used to check for Unique system_name for a Customer  */
1123 /*  and System_Number.IF found then raise an error else success                                    */
1124 /* ----------------------------------------------------------------------------------------------- */
1125 PROCEDURE Check_Unique(
1126              p_System_id     IN     NUMBER  ,
1127              p_Name          IN     VARCHAR2,
1128              p_Customer_ID   IN     NUMBER  ,
1129              p_System_number IN     VARCHAR2,
1130              x_return_status OUT NOCOPY    VARCHAR2,
1131              x_msg_count     OUT NOCOPY    NUMBER  ,
1132              x_msg_data      OUT NOCOPY    VARCHAR2) IS
1133     CURSOR dup_cur IS
1134       SELECT 'x'
1135       FROM   csi_systems_vl
1136       WHERE  name = p_Name
1137       AND    customer_id = p_Customer_ID
1138     --AND    system_number = nvl(p_System_number,system_number)
1139       AND   (system_number IS NULL OR
1140              system_number = p_System_number)
1141       AND   (p_System_id IS NULL OR
1142                  System_id <> p_System_id);
1143     l_dummy VARCHAR2(1);
1144   BEGIN
1145      x_return_status := fnd_api.g_ret_sts_success;
1146     OPEN dup_cur;
1147     FETCH dup_cur INTO l_dummy;
1148     IF (dup_cur%FOUND) THEN
1149       FND_MESSAGE.SET_NAME('CSI', 'CSI_SYSTEM_DUP_NAME');
1150       fnd_msg_pub.add;
1151       x_return_status := fnd_api.g_ret_sts_error;
1152     END IF;
1153 
1154     CLOSE dup_cur;
1155 
1156   EXCEPTION
1157       WHEN OTHERS THEN
1158          NULL;
1159   END Check_Unique;
1160 
1161 
1162 
1163 /* ----------------------------------------------------------------------------------------------- */
1164 /* This procedure(during creation)is used to check if the received subject is already an object    */
1165 /*  if found then raise and error else success                                                     */
1166 /*                      a                                                                          */
1167 /*                     / \                                                                         */
1168 /*                    b   c                                                                        */
1169 /*                    / \                                                                          */
1170 /*                   d   a -> not allowed                                                          */
1171 /* ----------------------------------------------------------------------------------------------- */
1172 
1173  PROCEDURE check_parent_child_constraint(x_system_id            IN  NUMBER,
1174                                          x_parent_system_id     IN  NUMBER,
1175                                          x_return_status        OUT NOCOPY VARCHAR2,
1176                                          x_msg_count            OUT NOCOPY NUMBER,
1177                                          x_msg_data             OUT NOCOPY VARCHAR2) IS
1178 
1179  CURSOR par_chld_csr IS
1180           SELECT 'x'
1181           FROM   csi_systems_b
1182           WHERE  system_id = x_parent_system_id
1183           START WITH parent_system_id = x_system_id
1184           CONNECT BY parent_system_id = prior system_id;
1185  l_dummy VARCHAR2(1);
1186 
1187 BEGIN
1188     --
1189     -- check to make sure that parent system exists and it doesn't have
1190     -- a parent of its own
1191     --
1192 x_return_status := fnd_api.g_ret_sts_success;
1193 
1194  IF x_system_id <> x_parent_system_id THEN
1195    OPEN  par_chld_csr;
1196    FETCH par_chld_csr INTO l_dummy;
1197      IF (par_chld_csr%found) THEN
1198          --CLOSE par_chld_csr;
1199          fnd_message.set_name('CSI','CSI_CHILD_PARENT_REL_LOOP');
1200          fnd_msg_pub.add;
1201          x_return_status := fnd_api.g_ret_sts_error;
1202      END IF;
1203    CLOSE par_chld_csr;
1204 
1205     ELSE
1206       fnd_message.set_name('CSI', 'CSI_PARENT_CHILD_INVALID');
1207       fnd_msg_pub.add;
1208       x_return_status := fnd_api.g_ret_sts_error;
1209  END IF;
1210 
1211 END check_parent_child_constraint;
1212 
1213 
1214 PROCEDURE validate_history(p_old_systems_rec IN   csi_datastructures_pub.system_rec,
1215                            p_new_systems_rec IN   csi_datastructures_pub.system_rec,
1216                            p_transaction_id  IN   NUMBER,
1217                            p_flag            IN   VARCHAR2,
1218                            p_sysdate         IN   DATE,
1219                            x_return_status   OUT NOCOPY  VARCHAR2,
1220                            x_msg_count       OUT NOCOPY  NUMBER,
1221                            x_msg_data        OUT NOCOPY  VARCHAR2)
1222 IS
1223 l_old_systems_rec   csi_datastructures_pub.system_rec :=p_old_systems_rec;
1224 l_new_systems_rec   csi_datastructures_pub.system_rec :=p_new_systems_rec;
1225 l_transaction_id        NUMBER := p_transaction_id;
1226 l_full_dump             NUMBER;
1227 l_systems_hist_rec     csi_datastructures_pub.system_history_rec;
1228 
1229 CURSOR sys_hist_csr (p_sys_hist_id  NUMBER) IS
1230  SELECT  *
1231  FROM    csi_systems_h
1232  WHERE   csi_systems_h.system_history_id = p_sys_hist_id
1233  FOR UPDATE OF object_version_number;
1234 l_sys_hist_csr   sys_hist_csr%ROWTYPE;
1235 l_sys_hist_id    NUMBER;
1236 
1237 BEGIN
1238      x_return_status := fnd_api.g_ret_sts_success;
1239 
1240      IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
1241          csi_gen_utility_pvt.populate_install_param_rec;
1242       END IF;
1243       --
1244       l_full_dump := csi_datastructures_pub.g_install_param_rec.history_full_dump_frequency;
1245       --
1246       IF l_full_dump IS NULL THEN
1247          FND_MESSAGE.SET_NAME('CSI','CSI_API_GET_FULL_DUMP_FAILED');
1248          FND_MSG_PUB.ADD;
1249          RAISE FND_API.G_EXC_ERROR;
1250       END IF;
1251 
1252       IF p_flag = 'EXPIRE' THEN
1253          l_new_systems_rec.end_date_active := p_sysdate;
1254       END IF;
1255      -- Start of modifications for Bug#2547034 on 09/20/02 - rtalluri
1256 
1257       BEGIN
1258         SELECT  system_history_id
1259         INTO    l_sys_hist_id
1260         FROM    csi_systems_h h
1261         WHERE   h.transaction_id = p_transaction_id
1262         AND     h.system_id = p_old_systems_rec.system_id;
1263 
1264         OPEN   sys_hist_csr(l_sys_hist_id);
1265         FETCH  sys_hist_csr INTO l_sys_hist_csr ;
1266         CLOSE  sys_hist_csr;
1267 
1268         IF l_sys_hist_csr.full_dump_flag = 'Y'
1269         THEN
1270          csi_systems_h_pkg.update_row(
1271                      p_system_history_id             => l_sys_hist_id,
1272                      p_system_id                     => fnd_api.g_miss_num,
1273                      p_transaction_id                => fnd_api.g_miss_num,
1274                      p_old_customer_id               => fnd_api.g_miss_num,
1275                      p_new_customer_id               => l_new_systems_rec.customer_id,
1276                      p_old_system_type_code          => fnd_api.g_miss_char,
1277                      p_new_system_type_code          => l_new_systems_rec.system_type_code,
1278                      p_old_system_number             => fnd_api.g_miss_char,
1279                      p_new_system_number             => l_new_systems_rec.system_number,
1280                      p_old_parent_system_id          => fnd_api.g_miss_num,
1281                      p_new_parent_system_id          => l_new_systems_rec.parent_system_id,
1282                      p_old_ship_to_contact_id        => fnd_api.g_miss_num,
1283                      p_new_ship_to_contact_id        => l_new_systems_rec.ship_to_contact_id,
1284                      p_old_bill_to_contact_id        => fnd_api.g_miss_num,
1285                      p_new_bill_to_contact_id        => l_new_systems_rec.bill_to_contact_id,
1286                      p_old_technical_contact_id      => fnd_api.g_miss_num,
1287                      p_new_technical_contact_id      => l_new_systems_rec.technical_contact_id,
1288                      p_old_service_admin_contact_id  => fnd_api.g_miss_num,
1289                      p_new_service_admin_contact_id  => l_new_systems_rec.service_admin_contact_id,
1290                      p_old_ship_to_site_use_id       => fnd_api.g_miss_num,
1291                      p_new_ship_to_site_use_id       => l_new_systems_rec.ship_to_site_use_id,
1292                      p_old_install_site_use_id       => fnd_api.g_miss_num,
1293                      p_new_install_site_use_id       => l_new_systems_rec.install_site_use_id,
1294                      p_old_bill_to_site_use_id       => fnd_api.g_miss_num,
1295                      p_new_bill_to_site_use_id       => l_new_systems_rec.bill_to_site_use_id,
1296                      p_old_coterminate_day_month     => fnd_api.g_miss_char,
1297                      p_new_coterminate_day_month     => l_new_systems_rec.coterminate_day_month,
1298                      p_old_start_date_active         => fnd_api.g_miss_date,
1299                      p_new_start_date_active         => l_new_systems_rec.start_date_active,
1300                      p_old_end_date_active           => fnd_api.g_miss_date,
1301                      p_new_end_date_active           => l_new_systems_rec.end_date_active,
1302                      p_old_autocreated_from_system   => fnd_api.g_miss_num,
1303                      p_new_autocreated_from_system   => l_new_systems_rec.autocreated_from_system_id,
1304                      p_old_config_system_type        => fnd_api.g_miss_char,
1305                      p_new_config_system_type        => l_new_systems_rec.config_system_type,
1306                      p_old_context                   => fnd_api.g_miss_char,
1307                      p_new_context                   => l_new_systems_rec.context,
1308                      p_old_attribute1                => fnd_api.g_miss_char,
1309                      p_new_attribute1                => l_new_systems_rec.attribute1,
1310                      p_old_attribute2                => fnd_api.g_miss_char,
1311                      p_new_attribute2                => l_new_systems_rec.attribute2,
1312                      p_old_attribute3                => fnd_api.g_miss_char,
1313                      p_new_attribute3                => l_new_systems_rec.attribute3,
1314                      p_old_attribute4                => fnd_api.g_miss_char,
1315                      p_new_attribute4                => l_new_systems_rec.attribute4,
1316                      p_old_attribute5                => fnd_api.g_miss_char,
1317                      p_new_attribute5                => l_new_systems_rec.attribute5,
1318                      p_old_attribute6                => fnd_api.g_miss_char,
1319                      p_new_attribute6                => l_new_systems_rec.attribute6,
1320                      p_old_attribute7                => fnd_api.g_miss_char,
1321                      p_new_attribute7                => l_new_systems_rec.attribute7,
1322                      p_old_attribute8                => fnd_api.g_miss_char,
1323                      p_new_attribute8                => l_new_systems_rec.attribute8,
1324                      p_old_attribute9                => fnd_api.g_miss_char,
1325                      p_new_attribute9                => l_new_systems_rec.attribute9,
1326                      p_old_attribute10               => fnd_api.g_miss_char,
1327                      p_new_attribute10               => l_new_systems_rec.attribute10,
1328                      p_old_attribute11               => fnd_api.g_miss_char,
1329                      p_new_attribute11               => l_new_systems_rec.attribute11,
1330                      p_old_attribute12               => fnd_api.g_miss_char,
1331                      p_new_attribute12               => l_new_systems_rec.attribute12,
1332                      p_old_attribute13               => fnd_api.g_miss_char,
1333                      p_new_attribute13               => l_new_systems_rec.attribute13,
1334                      p_old_attribute14               => fnd_api.g_miss_char,
1335                      p_new_attribute14               => l_new_systems_rec.attribute14,
1336                      p_old_attribute15               => fnd_api.g_miss_char,
1337                      p_new_attribute15               => l_new_systems_rec.attribute15,
1338                      p_full_dump_flag                => fnd_api.g_miss_char,
1339                      p_created_by                    => fnd_api.g_miss_num, -- fnd_global.user_id,
1340                      p_creation_date                 => fnd_api.g_miss_date,
1341                      p_last_updated_by               => fnd_global.user_id,
1342                      p_last_update_date              => SYSDATE,
1343                      p_last_update_login             => fnd_global.conc_login_id,
1344                      p_object_version_number         => fnd_api.g_miss_num,
1345                      p_old_name                      => fnd_api.g_miss_char,
1346                      p_new_name                      => l_new_systems_rec.name,
1347                      p_old_description               => fnd_api.g_miss_char,
1348                      p_new_description               => l_new_systems_rec.description,
1349                      p_old_operating_unit_id         => fnd_api.g_miss_num,
1350                      p_new_operating_unit_id         => l_new_systems_rec.operating_unit_id
1351                       );
1352 
1353         ELSE
1354 
1355              IF    ( l_sys_hist_csr.old_customer_id IS NULL
1356                 AND  l_sys_hist_csr.new_customer_id IS NULL ) THEN
1357                      IF  ( l_new_systems_rec.customer_id = l_old_systems_rec.customer_id )
1358                       OR ( l_new_systems_rec.customer_id = fnd_api.g_miss_num ) THEN
1359                            l_sys_hist_csr.old_customer_id := NULL;
1360                            l_sys_hist_csr.new_customer_id := NULL;
1361                      ELSE
1362                            l_sys_hist_csr.old_customer_id := fnd_api.g_miss_num;
1363                            l_sys_hist_csr.new_customer_id := l_new_systems_rec.customer_id;
1364                      END IF;
1365              ELSE
1366                      l_sys_hist_csr.old_customer_id := fnd_api.g_miss_num;
1367                      l_sys_hist_csr.new_customer_id := l_new_systems_rec.customer_id;
1368              END IF;
1369           --
1370              IF    ( l_sys_hist_csr.old_system_type_code IS NULL
1371                 AND  l_sys_hist_csr.new_system_type_code IS NULL ) THEN
1372                      IF  ( l_new_systems_rec.system_type_code = l_old_systems_rec.system_type_code )
1373                       OR ( l_new_systems_rec.system_type_code = fnd_api.g_miss_char ) THEN
1374                            l_sys_hist_csr.old_system_type_code := NULL;
1375                            l_sys_hist_csr.new_system_type_code := NULL;
1376                      ELSE
1377                            l_sys_hist_csr.old_system_type_code := fnd_api.g_miss_char;
1378                            l_sys_hist_csr.new_system_type_code := l_new_systems_rec.system_type_code;
1379                      END IF;
1380              ELSE
1381                      l_sys_hist_csr.old_system_type_code := fnd_api.g_miss_char;
1382                      l_sys_hist_csr.new_system_type_code := l_new_systems_rec.system_type_code;
1383              END IF;
1384           --
1385              IF    ( l_sys_hist_csr.old_system_number IS NULL
1386                 AND  l_sys_hist_csr.new_system_number IS NULL ) THEN
1387                      IF  ( l_new_systems_rec.system_number = l_old_systems_rec.system_number )
1388                       OR ( l_new_systems_rec.system_number = fnd_api.g_miss_char ) THEN
1389                            l_sys_hist_csr.old_system_number := NULL;
1390                            l_sys_hist_csr.new_system_number := NULL;
1391                      ELSE
1392                            l_sys_hist_csr.old_system_number := fnd_api.g_miss_char;
1393                            l_sys_hist_csr.new_system_number := l_new_systems_rec.system_number;
1394                      END IF;
1395              ELSE
1396                      l_sys_hist_csr.old_system_number := fnd_api.g_miss_char;
1397                      l_sys_hist_csr.new_system_number := l_new_systems_rec.system_number;
1398              END IF;
1399           --
1400              IF    ( l_sys_hist_csr.old_parent_system_id IS NULL
1401                 AND  l_sys_hist_csr.new_parent_system_id IS NULL ) THEN
1402                      IF  ( l_new_systems_rec.parent_system_id = l_old_systems_rec.parent_system_id )
1403                       OR ( l_new_systems_rec.parent_system_id = fnd_api.g_miss_num ) THEN
1404                            l_sys_hist_csr.old_parent_system_id := NULL;
1405                            l_sys_hist_csr.new_parent_system_id := NULL;
1406                      ELSE
1407                            l_sys_hist_csr.old_parent_system_id := fnd_api.g_miss_num;
1408                            l_sys_hist_csr.new_parent_system_id := l_new_systems_rec.parent_system_id;
1409                      END IF;
1410              ELSE
1411                      l_sys_hist_csr.old_parent_system_id := fnd_api.g_miss_num;
1412                      l_sys_hist_csr.new_parent_system_id := l_new_systems_rec.parent_system_id;
1413              END IF;
1414           --
1415              IF    ( l_sys_hist_csr.old_ship_to_contact_id IS NULL
1416                 AND  l_sys_hist_csr.new_ship_to_contact_id IS NULL ) THEN
1417                      IF  ( l_new_systems_rec.ship_to_contact_id = l_old_systems_rec.ship_to_contact_id )
1418                       OR ( l_new_systems_rec.ship_to_contact_id = fnd_api.g_miss_num ) THEN
1419                            l_sys_hist_csr.old_ship_to_contact_id := NULL;
1420                            l_sys_hist_csr.new_ship_to_contact_id := NULL;
1421                      ELSE
1422                            l_sys_hist_csr.old_ship_to_contact_id := fnd_api.g_miss_num;
1423                            l_sys_hist_csr.new_ship_to_contact_id := l_new_systems_rec.ship_to_contact_id;
1424                      END IF;
1425              ELSE
1426                      l_sys_hist_csr.old_ship_to_contact_id := fnd_api.g_miss_num;
1427                      l_sys_hist_csr.new_ship_to_contact_id := l_new_systems_rec.ship_to_contact_id;
1428              END IF;
1429           --
1430              IF    ( l_sys_hist_csr.old_bill_to_contact_id IS NULL
1431                 AND  l_sys_hist_csr.new_bill_to_contact_id IS NULL ) THEN
1432                      IF  ( l_new_systems_rec.bill_to_contact_id = l_old_systems_rec.bill_to_contact_id )
1433                       OR ( l_new_systems_rec.bill_to_contact_id = fnd_api.g_miss_num ) THEN
1434                            l_sys_hist_csr.old_bill_to_contact_id := NULL;
1435                            l_sys_hist_csr.new_bill_to_contact_id := NULL;
1436                      ELSE
1437                            l_sys_hist_csr.old_bill_to_contact_id := fnd_api.g_miss_num;
1438                            l_sys_hist_csr.new_bill_to_contact_id := l_new_systems_rec.bill_to_contact_id;
1439                      END IF;
1440              ELSE
1441                      l_sys_hist_csr.old_bill_to_contact_id := fnd_api.g_miss_num;
1442                      l_sys_hist_csr.new_bill_to_contact_id := l_new_systems_rec.bill_to_contact_id;
1443              END IF;
1444           --
1445              IF    ( l_sys_hist_csr.old_technical_contact_id IS NULL
1446                 AND  l_sys_hist_csr.new_technical_contact_id IS NULL ) THEN
1447                      IF  ( l_new_systems_rec.technical_contact_id = l_old_systems_rec.technical_contact_id )
1448                       OR ( l_new_systems_rec.technical_contact_id = fnd_api.g_miss_num ) THEN
1449                            l_sys_hist_csr.old_technical_contact_id := NULL;
1450                            l_sys_hist_csr.new_technical_contact_id := NULL;
1451                      ELSE
1452                            l_sys_hist_csr.old_technical_contact_id := fnd_api.g_miss_num;
1453                            l_sys_hist_csr.new_technical_contact_id := l_new_systems_rec.technical_contact_id;
1454                      END IF;
1455              ELSE
1456                      l_sys_hist_csr.old_technical_contact_id := fnd_api.g_miss_num;
1457                      l_sys_hist_csr.new_technical_contact_id := l_new_systems_rec.technical_contact_id;
1458              END IF;
1459           --
1460              IF    ( l_sys_hist_csr.old_service_admin_contact_id IS NULL
1461                 AND  l_sys_hist_csr.new_service_admin_contact_id IS NULL ) THEN
1462                      IF  ( l_new_systems_rec.service_admin_contact_id = l_old_systems_rec.service_admin_contact_id )
1463                       OR ( l_new_systems_rec.service_admin_contact_id = fnd_api.g_miss_num ) THEN
1464                            l_sys_hist_csr.old_service_admin_contact_id := NULL;
1465                            l_sys_hist_csr.new_service_admin_contact_id := NULL;
1466                      ELSE
1467                            l_sys_hist_csr.old_service_admin_contact_id := fnd_api.g_miss_num;
1468                            l_sys_hist_csr.new_service_admin_contact_id := l_new_systems_rec.service_admin_contact_id;
1469                      END IF;
1470              ELSE
1471                      l_sys_hist_csr.old_service_admin_contact_id := fnd_api.g_miss_num;
1472                      l_sys_hist_csr.new_service_admin_contact_id := l_new_systems_rec.service_admin_contact_id;
1473              END IF;
1474           --
1475              IF    ( l_sys_hist_csr.old_ship_to_site_use_id IS NULL
1476                 AND  l_sys_hist_csr.new_ship_to_site_use_id IS NULL ) THEN
1477                      IF  ( l_new_systems_rec.ship_to_site_use_id = l_old_systems_rec.ship_to_site_use_id )
1478                       OR ( l_new_systems_rec.ship_to_site_use_id = fnd_api.g_miss_num ) THEN
1479                            l_sys_hist_csr.old_ship_to_site_use_id := NULL;
1480                            l_sys_hist_csr.new_ship_to_site_use_id := NULL;
1481                      ELSE
1482                            l_sys_hist_csr.old_ship_to_site_use_id := fnd_api.g_miss_num;
1483                            l_sys_hist_csr.new_ship_to_site_use_id := l_new_systems_rec.ship_to_site_use_id;
1484                      END IF;
1485              ELSE
1486                      l_sys_hist_csr.old_ship_to_site_use_id := fnd_api.g_miss_num;
1487                      l_sys_hist_csr.new_ship_to_site_use_id := l_new_systems_rec.ship_to_site_use_id;
1488              END IF;
1489           --
1490              IF    ( l_sys_hist_csr.old_bill_to_site_use_id IS NULL
1491                 AND  l_sys_hist_csr.new_bill_to_site_use_id IS NULL ) THEN
1492                      IF  ( l_new_systems_rec.bill_to_site_use_id = l_old_systems_rec.bill_to_site_use_id )
1493                       OR ( l_new_systems_rec.bill_to_site_use_id = fnd_api.g_miss_num ) THEN
1494                            l_sys_hist_csr.old_bill_to_site_use_id := NULL;
1495                            l_sys_hist_csr.new_bill_to_site_use_id := NULL;
1496                      ELSE
1497                            l_sys_hist_csr.old_bill_to_site_use_id := fnd_api.g_miss_num;
1498                            l_sys_hist_csr.new_bill_to_site_use_id := l_new_systems_rec.bill_to_site_use_id;
1499                      END IF;
1500              ELSE
1501                      l_sys_hist_csr.old_bill_to_site_use_id := fnd_api.g_miss_num;
1502                      l_sys_hist_csr.new_bill_to_site_use_id := l_new_systems_rec.bill_to_site_use_id;
1503              END IF;
1504           --
1505              IF    ( l_sys_hist_csr.old_install_site_use_id IS NULL
1506                 AND  l_sys_hist_csr.new_install_site_use_id IS NULL ) THEN
1507                      IF  ( l_new_systems_rec.install_site_use_id = l_old_systems_rec.install_site_use_id )
1508                       OR ( l_new_systems_rec.install_site_use_id = fnd_api.g_miss_num ) THEN
1509                            l_sys_hist_csr.old_install_site_use_id := NULL;
1510                            l_sys_hist_csr.new_install_site_use_id := NULL;
1511                      ELSE
1512                            l_sys_hist_csr.old_install_site_use_id := fnd_api.g_miss_num;
1513                            l_sys_hist_csr.new_install_site_use_id := l_new_systems_rec.install_site_use_id;
1514                      END IF;
1515              ELSE
1516                      l_sys_hist_csr.old_install_site_use_id := fnd_api.g_miss_num;
1517                      l_sys_hist_csr.new_install_site_use_id := l_new_systems_rec.install_site_use_id;
1518              END IF;
1519           --
1520              IF    ( l_sys_hist_csr.old_coterminate_day_month IS NULL
1521                 AND  l_sys_hist_csr.new_coterminate_day_month IS NULL ) THEN
1522                      IF  ( l_new_systems_rec.coterminate_day_month = l_old_systems_rec.coterminate_day_month )
1523                       OR ( l_new_systems_rec.coterminate_day_month = fnd_api.g_miss_char ) THEN
1524                            l_sys_hist_csr.old_coterminate_day_month := NULL;
1525                            l_sys_hist_csr.new_coterminate_day_month := NULL;
1526                      ELSE
1527                            l_sys_hist_csr.old_coterminate_day_month := fnd_api.g_miss_char;
1528                            l_sys_hist_csr.new_coterminate_day_month := l_new_systems_rec.coterminate_day_month;
1529                      END IF;
1530              ELSE
1531                      l_sys_hist_csr.old_coterminate_day_month := fnd_api.g_miss_char;
1532                      l_sys_hist_csr.new_coterminate_day_month := l_new_systems_rec.coterminate_day_month;
1533              END IF;
1534           --
1535              IF    ( l_sys_hist_csr.old_autocreated_from_system IS NULL
1536                 AND  l_sys_hist_csr.new_autocreated_from_system IS NULL ) THEN
1537                      IF  ( l_new_systems_rec.autocreated_from_system_id = l_old_systems_rec.autocreated_from_system_id )
1538                       OR ( l_new_systems_rec.autocreated_from_system_id = fnd_api.g_miss_num ) THEN
1539                            l_sys_hist_csr.old_autocreated_from_system := NULL;
1540                            l_sys_hist_csr.new_autocreated_from_system := NULL;
1541                      ELSE
1542                            l_sys_hist_csr.old_autocreated_from_system := fnd_api.g_miss_num;
1543                            l_sys_hist_csr.new_autocreated_from_system := l_new_systems_rec.autocreated_from_system_id;
1544                      END IF;
1545              ELSE
1546                      l_sys_hist_csr.old_autocreated_from_system := fnd_api.g_miss_num;
1547                      l_sys_hist_csr.new_autocreated_from_system := l_new_systems_rec.autocreated_from_system_id;
1548              END IF;
1549           --
1550              IF    ( l_sys_hist_csr.old_config_system_type IS NULL
1551                 AND  l_sys_hist_csr.new_config_system_type IS NULL ) THEN
1552                      IF  ( l_new_systems_rec.config_system_type = l_old_systems_rec.config_system_type )
1553                       OR ( l_new_systems_rec.config_system_type = fnd_api.g_miss_char ) THEN
1554                            l_sys_hist_csr.old_config_system_type := NULL;
1555                            l_sys_hist_csr.new_config_system_type := NULL;
1556                      ELSE
1557                            l_sys_hist_csr.old_config_system_type := fnd_api.g_miss_char;
1558                            l_sys_hist_csr.new_config_system_type := l_new_systems_rec.config_system_type;
1559                      END IF;
1560              ELSE
1561                      l_sys_hist_csr.old_config_system_type := fnd_api.g_miss_char;
1562                      l_sys_hist_csr.new_config_system_type := l_new_systems_rec.config_system_type;
1563              END IF;
1564           --
1565              IF    ( l_sys_hist_csr.old_start_date_active IS NULL
1566                 AND  l_sys_hist_csr.new_start_date_active IS NULL ) THEN
1567                      IF  ( l_new_systems_rec.start_date_active = l_old_systems_rec.start_date_active )
1568                       OR ( l_new_systems_rec.start_date_active = fnd_api.g_miss_date ) THEN
1569                            l_sys_hist_csr.old_start_date_active := NULL;
1570                            l_sys_hist_csr.new_start_date_active := NULL;
1571                      ELSE
1572                            l_sys_hist_csr.old_start_date_active := fnd_api.g_miss_date;
1573                            l_sys_hist_csr.new_start_date_active := l_new_systems_rec.start_date_active;
1574                      END IF;
1575              ELSE
1576                      l_sys_hist_csr.old_start_date_active := fnd_api.g_miss_date;
1577                      l_sys_hist_csr.new_start_date_active := l_new_systems_rec.start_date_active;
1578              END IF;
1579           --
1580              IF    ( l_sys_hist_csr.old_end_date_active IS NULL
1581                 AND  l_sys_hist_csr.new_end_date_active IS NULL ) THEN
1582                      IF  ( l_new_systems_rec.end_date_active = l_old_systems_rec.end_date_active )
1583                       OR ( l_new_systems_rec.end_date_active = fnd_api.g_miss_date ) THEN
1584                            l_sys_hist_csr.old_end_date_active := NULL;
1585                            l_sys_hist_csr.new_end_date_active := NULL;
1586                      ELSE
1587                            l_sys_hist_csr.old_end_date_active := fnd_api.g_miss_date;
1588                            l_sys_hist_csr.new_end_date_active := l_new_systems_rec.end_date_active;
1589                      END IF;
1590              ELSE
1591                      l_sys_hist_csr.old_end_date_active := fnd_api.g_miss_date;
1592                      l_sys_hist_csr.new_end_date_active := l_new_systems_rec.end_date_active;
1593              END IF;
1594           --
1595              IF    ( l_sys_hist_csr.old_context IS NULL
1596                 AND  l_sys_hist_csr.new_context IS NULL ) THEN
1597                      IF  ( l_new_systems_rec.context = l_old_systems_rec.context )
1598                       OR ( l_new_systems_rec.context = fnd_api.g_miss_char ) THEN
1599                            l_sys_hist_csr.old_context := NULL;
1600                            l_sys_hist_csr.new_context := NULL;
1601                      ELSE
1602                            l_sys_hist_csr.old_context := fnd_api.g_miss_char;
1603                            l_sys_hist_csr.new_context := l_new_systems_rec.context;
1604                      END IF;
1605              ELSE
1606                      l_sys_hist_csr.old_context := fnd_api.g_miss_char;
1607                      l_sys_hist_csr.new_context := l_new_systems_rec.context;
1608              END IF;
1609           --
1610              IF    ( l_sys_hist_csr.old_attribute1 IS NULL
1611                 AND  l_sys_hist_csr.new_attribute1 IS NULL ) THEN
1612                      IF  ( l_new_systems_rec.attribute1 = l_old_systems_rec.attribute1 )
1613                       OR ( l_new_systems_rec.attribute1 = fnd_api.g_miss_char ) THEN
1614                            l_sys_hist_csr.old_attribute1 := NULL;
1615                            l_sys_hist_csr.new_attribute1 := NULL;
1616                      ELSE
1617                            l_sys_hist_csr.old_attribute1 := fnd_api.g_miss_char;
1618                            l_sys_hist_csr.new_attribute1 := l_new_systems_rec.attribute1;
1619                      END IF;
1620              ELSE
1621                      l_sys_hist_csr.old_attribute1 := fnd_api.g_miss_char;
1622                      l_sys_hist_csr.new_attribute1 := l_new_systems_rec.attribute1;
1623              END IF;
1624           --
1625              IF    ( l_sys_hist_csr.old_attribute2 IS NULL
1626                 AND  l_sys_hist_csr.new_attribute2 IS NULL ) THEN
1627                      IF  ( l_new_systems_rec.attribute2 = l_old_systems_rec.attribute2 )
1628                       OR ( l_new_systems_rec.attribute2 = fnd_api.g_miss_char ) THEN
1629                            l_sys_hist_csr.old_attribute2 := NULL;
1630                            l_sys_hist_csr.new_attribute2 := NULL;
1631                      ELSE
1632                            l_sys_hist_csr.old_attribute2 := fnd_api.g_miss_char;
1633                            l_sys_hist_csr.new_attribute2 := l_new_systems_rec.attribute2;
1634                      END IF;
1635              ELSE
1636                      l_sys_hist_csr.old_attribute2 := fnd_api.g_miss_char;
1637                      l_sys_hist_csr.new_attribute2 := l_new_systems_rec.attribute2;
1638              END IF;
1639           --
1640              IF    ( l_sys_hist_csr.old_attribute3 IS NULL
1641                 AND  l_sys_hist_csr.new_attribute3 IS NULL ) THEN
1642                      IF  ( l_new_systems_rec.attribute3 = l_old_systems_rec.attribute3 )
1643                       OR ( l_new_systems_rec.attribute3 = fnd_api.g_miss_char ) THEN
1644                            l_sys_hist_csr.old_attribute3 := NULL;
1645                            l_sys_hist_csr.new_attribute3 := NULL;
1646                      ELSE
1647                            l_sys_hist_csr.old_attribute3 := fnd_api.g_miss_char;
1648                            l_sys_hist_csr.new_attribute3 := l_new_systems_rec.attribute3;
1649                      END IF;
1650              ELSE
1651                      l_sys_hist_csr.old_attribute3 := fnd_api.g_miss_char;
1652                      l_sys_hist_csr.new_attribute3 := l_new_systems_rec.attribute3;
1653              END IF;
1654           --
1655              IF    ( l_sys_hist_csr.old_attribute4 IS NULL
1656                 AND  l_sys_hist_csr.new_attribute4 IS NULL ) THEN
1657                      IF  ( l_new_systems_rec.attribute4 = l_old_systems_rec.attribute4 )
1658                       OR ( l_new_systems_rec.attribute4 = fnd_api.g_miss_char ) THEN
1659                            l_sys_hist_csr.old_attribute4 := NULL;
1660                            l_sys_hist_csr.new_attribute4 := NULL;
1661                      ELSE
1662                            l_sys_hist_csr.old_attribute4 := fnd_api.g_miss_char;
1663                            l_sys_hist_csr.new_attribute4 := l_new_systems_rec.attribute4;
1664                      END IF;
1665              ELSE
1666                      l_sys_hist_csr.old_attribute4 := fnd_api.g_miss_char;
1667                      l_sys_hist_csr.new_attribute4 := l_new_systems_rec.attribute4;
1668              END IF;
1669           --
1670              IF    ( l_sys_hist_csr.old_attribute5 IS NULL
1671                 AND  l_sys_hist_csr.new_attribute5 IS NULL ) THEN
1672                      IF  ( l_new_systems_rec.attribute5 = l_old_systems_rec.attribute5 )
1673                       OR ( l_new_systems_rec.attribute5 = fnd_api.g_miss_char ) THEN
1674                            l_sys_hist_csr.old_attribute5 := NULL;
1675                            l_sys_hist_csr.new_attribute5 := NULL;
1676                      ELSE
1677                            l_sys_hist_csr.old_attribute5 := fnd_api.g_miss_char;
1678                            l_sys_hist_csr.new_attribute5 := l_new_systems_rec.attribute5;
1679                      END IF;
1680              ELSE
1681                      l_sys_hist_csr.old_attribute5 := fnd_api.g_miss_char;
1682                      l_sys_hist_csr.new_attribute5 := l_new_systems_rec.attribute5;
1683              END IF;
1684           --
1685              IF    ( l_sys_hist_csr.old_attribute6 IS NULL
1686                 AND  l_sys_hist_csr.new_attribute6 IS NULL ) THEN
1687                      IF  ( l_new_systems_rec.attribute6 = l_old_systems_rec.attribute6 )
1688                       OR ( l_new_systems_rec.attribute6 = fnd_api.g_miss_char ) THEN
1689                            l_sys_hist_csr.old_attribute6 := NULL;
1690                            l_sys_hist_csr.new_attribute6 := NULL;
1691                      ELSE
1692                            l_sys_hist_csr.old_attribute6 := fnd_api.g_miss_char;
1693                            l_sys_hist_csr.new_attribute6 := l_new_systems_rec.attribute6;
1694                      END IF;
1695              ELSE
1696                      l_sys_hist_csr.old_attribute6 := fnd_api.g_miss_char;
1697                      l_sys_hist_csr.new_attribute6 := l_new_systems_rec.attribute6;
1698              END IF;
1699           --
1700              IF    ( l_sys_hist_csr.old_attribute7 IS NULL
1701                 AND  l_sys_hist_csr.new_attribute7 IS NULL ) THEN
1702                      IF  ( l_new_systems_rec.attribute7 = l_old_systems_rec.attribute7 )
1703                       OR ( l_new_systems_rec.attribute7 = fnd_api.g_miss_char ) THEN
1704                            l_sys_hist_csr.old_attribute7 := NULL;
1705                            l_sys_hist_csr.new_attribute7 := NULL;
1706                      ELSE
1707                            l_sys_hist_csr.old_attribute7 := fnd_api.g_miss_char;
1708                            l_sys_hist_csr.new_attribute7 := l_new_systems_rec.attribute7;
1709                      END IF;
1710              ELSE
1711                      l_sys_hist_csr.old_attribute7 := fnd_api.g_miss_char;
1712                      l_sys_hist_csr.new_attribute7 := l_new_systems_rec.attribute7;
1713              END IF;
1714           --
1715              IF    ( l_sys_hist_csr.old_attribute8 IS NULL
1716                 AND  l_sys_hist_csr.new_attribute8 IS NULL ) THEN
1717                      IF  ( l_new_systems_rec.attribute8 = l_old_systems_rec.attribute8 )
1718                       OR ( l_new_systems_rec.attribute8 = fnd_api.g_miss_char ) THEN
1719                            l_sys_hist_csr.old_attribute8 := NULL;
1720                            l_sys_hist_csr.new_attribute8 := NULL;
1721                      ELSE
1722                            l_sys_hist_csr.old_attribute8 := fnd_api.g_miss_char;
1723                            l_sys_hist_csr.new_attribute8 := l_new_systems_rec.attribute8;
1724                      END IF;
1725              ELSE
1726                      l_sys_hist_csr.old_attribute8 := fnd_api.g_miss_char;
1727                      l_sys_hist_csr.new_attribute8 := l_new_systems_rec.attribute8;
1728              END IF;
1729           --
1730              IF    ( l_sys_hist_csr.old_attribute9 IS NULL
1731                 AND  l_sys_hist_csr.new_attribute9 IS NULL ) THEN
1732                      IF  ( l_new_systems_rec.attribute9 = l_old_systems_rec.attribute9 )
1733                       OR ( l_new_systems_rec.attribute9 = fnd_api.g_miss_char ) THEN
1734                            l_sys_hist_csr.old_attribute9 := NULL;
1735                            l_sys_hist_csr.new_attribute9 := NULL;
1736                      ELSE
1737                            l_sys_hist_csr.old_attribute9 := fnd_api.g_miss_char;
1738                            l_sys_hist_csr.new_attribute9 := l_new_systems_rec.attribute9;
1739                      END IF;
1740              ELSE
1741                      l_sys_hist_csr.old_attribute9 := fnd_api.g_miss_char;
1742                      l_sys_hist_csr.new_attribute9 := l_new_systems_rec.attribute9;
1743              END IF;
1744           --
1745              IF    ( l_sys_hist_csr.old_attribute10 IS NULL
1746                 AND  l_sys_hist_csr.new_attribute10 IS NULL ) THEN
1747                      IF  ( l_new_systems_rec.attribute10 = l_old_systems_rec.attribute10 )
1748                       OR ( l_new_systems_rec.attribute10 = fnd_api.g_miss_char ) THEN
1749                            l_sys_hist_csr.old_attribute10 := NULL;
1750                            l_sys_hist_csr.new_attribute10 := NULL;
1751                      ELSE
1752                            l_sys_hist_csr.old_attribute10 := fnd_api.g_miss_char;
1753                            l_sys_hist_csr.new_attribute10 := l_new_systems_rec.attribute10;
1754                      END IF;
1755              ELSE
1756                      l_sys_hist_csr.old_attribute10 := fnd_api.g_miss_char;
1757                      l_sys_hist_csr.new_attribute10 := l_new_systems_rec.attribute10;
1758              END IF;
1759           --
1760              IF    ( l_sys_hist_csr.old_attribute11 IS NULL
1761                 AND  l_sys_hist_csr.new_attribute11 IS NULL ) THEN
1762                      IF  ( l_new_systems_rec.attribute11 = l_old_systems_rec.attribute11 )
1763                       OR ( l_new_systems_rec.attribute11 = fnd_api.g_miss_char ) THEN
1764                            l_sys_hist_csr.old_attribute11 := NULL;
1765                            l_sys_hist_csr.new_attribute11 := NULL;
1766                      ELSE
1767                            l_sys_hist_csr.old_attribute11 := fnd_api.g_miss_char;
1768                            l_sys_hist_csr.new_attribute11 := l_new_systems_rec.attribute11;
1769                      END IF;
1770              ELSE
1771                      l_sys_hist_csr.old_attribute11 := fnd_api.g_miss_char;
1772                      l_sys_hist_csr.new_attribute11 := l_new_systems_rec.attribute11;
1773              END IF;
1774           --
1775              IF    ( l_sys_hist_csr.old_attribute12 IS NULL
1776                 AND  l_sys_hist_csr.new_attribute12 IS NULL ) THEN
1777                      IF  ( l_new_systems_rec.attribute12 = l_old_systems_rec.attribute12 )
1778                       OR ( l_new_systems_rec.attribute12 = fnd_api.g_miss_char ) THEN
1779                            l_sys_hist_csr.old_attribute12 := NULL;
1780                            l_sys_hist_csr.new_attribute12 := NULL;
1781                      ELSE
1782                            l_sys_hist_csr.old_attribute12 := fnd_api.g_miss_char;
1783                            l_sys_hist_csr.new_attribute12 := l_new_systems_rec.attribute12;
1784                      END IF;
1785              ELSE
1786                      l_sys_hist_csr.old_attribute12 := fnd_api.g_miss_char;
1787                      l_sys_hist_csr.new_attribute12 := l_new_systems_rec.attribute12;
1788              END IF;
1789           --
1790              IF    ( l_sys_hist_csr.old_attribute13 IS NULL
1791                 AND  l_sys_hist_csr.new_attribute13 IS NULL ) THEN
1792                      IF  ( l_new_systems_rec.attribute13 = l_old_systems_rec.attribute13 )
1793                       OR ( l_new_systems_rec.attribute13 = fnd_api.g_miss_char ) THEN
1794                            l_sys_hist_csr.old_attribute13 := NULL;
1795                            l_sys_hist_csr.new_attribute13 := NULL;
1796                      ELSE
1797                            l_sys_hist_csr.old_attribute13 := fnd_api.g_miss_char;
1798                            l_sys_hist_csr.new_attribute13 := l_new_systems_rec.attribute13;
1799                      END IF;
1800              ELSE
1801                      l_sys_hist_csr.old_attribute13 := fnd_api.g_miss_char;
1802                      l_sys_hist_csr.new_attribute13 := l_new_systems_rec.attribute13;
1803              END IF;
1804           --
1805              IF    ( l_sys_hist_csr.old_attribute14 IS NULL
1806                 AND  l_sys_hist_csr.new_attribute14 IS NULL ) THEN
1807                      IF  ( l_new_systems_rec.attribute14 = l_old_systems_rec.attribute14 )
1808                       OR ( l_new_systems_rec.attribute14 = fnd_api.g_miss_char ) THEN
1809                            l_sys_hist_csr.old_attribute14 := NULL;
1810                            l_sys_hist_csr.new_attribute14 := NULL;
1811                      ELSE
1812                            l_sys_hist_csr.old_attribute14 := fnd_api.g_miss_char;
1813                            l_sys_hist_csr.new_attribute14 := l_new_systems_rec.attribute14;
1814                      END IF;
1815              ELSE
1816                      l_sys_hist_csr.old_attribute14 := fnd_api.g_miss_char;
1817                      l_sys_hist_csr.new_attribute14 := l_new_systems_rec.attribute14;
1818              END IF;
1819           --
1820              IF    ( l_sys_hist_csr.old_attribute15 IS NULL
1821                 AND  l_sys_hist_csr.new_attribute15 IS NULL ) THEN
1822                      IF  ( l_new_systems_rec.attribute15 = l_old_systems_rec.attribute15 )
1823                       OR ( l_new_systems_rec.attribute15 = fnd_api.g_miss_char ) THEN
1824                            l_sys_hist_csr.old_attribute15 := NULL;
1825                            l_sys_hist_csr.new_attribute15 := NULL;
1826                      ELSE
1827                            l_sys_hist_csr.old_attribute15 := fnd_api.g_miss_char;
1828                            l_sys_hist_csr.new_attribute15 := l_new_systems_rec.attribute15;
1829                      END IF;
1830              ELSE
1831                      l_sys_hist_csr.old_attribute15 := fnd_api.g_miss_char;
1832                      l_sys_hist_csr.new_attribute15 := l_new_systems_rec.attribute15;
1833              END IF;
1834           --
1835              IF    ( l_sys_hist_csr.old_name IS NULL
1836                 AND  l_sys_hist_csr.new_name IS NULL ) THEN
1837                      IF  ( l_new_systems_rec.name = l_old_systems_rec.name )
1838                       OR ( l_new_systems_rec.name = fnd_api.g_miss_char ) THEN
1839                            l_sys_hist_csr.old_name := NULL;
1840                            l_sys_hist_csr.new_name := NULL;
1841                      ELSE
1842                            l_sys_hist_csr.old_name := fnd_api.g_miss_char;
1843                            l_sys_hist_csr.new_name := l_new_systems_rec.name;
1844                      END IF;
1845              ELSE
1846                      l_sys_hist_csr.old_name := fnd_api.g_miss_char;
1847                      l_sys_hist_csr.new_name := l_new_systems_rec.name;
1848              END IF;
1849           --
1850              IF    ( l_sys_hist_csr.old_description IS NULL
1851                 AND  l_sys_hist_csr.new_description IS NULL ) THEN
1852                      IF  ( l_new_systems_rec.description = l_old_systems_rec.description )
1853                       OR ( l_new_systems_rec.description = fnd_api.g_miss_char ) THEN
1854                            l_sys_hist_csr.old_description := NULL;
1855                            l_sys_hist_csr.new_description := NULL;
1856                      ELSE
1857                            l_sys_hist_csr.old_description := fnd_api.g_miss_char;
1858                            l_sys_hist_csr.new_description := l_new_systems_rec.description;
1859                      END IF;
1860              ELSE
1861                      l_sys_hist_csr.old_description := fnd_api.g_miss_char;
1862                      l_sys_hist_csr.new_description := l_new_systems_rec.description;
1863              END IF;
1864           --
1865              IF    ( l_sys_hist_csr.old_operating_unit_id IS NULL
1866                 AND  l_sys_hist_csr.new_operating_unit_id IS NULL ) THEN
1867                      IF  ( l_new_systems_rec.operating_unit_id = l_old_systems_rec.operating_unit_id )
1868                       OR ( l_new_systems_rec.operating_unit_id = fnd_api.g_miss_num ) THEN
1869                            l_sys_hist_csr.old_operating_unit_id := NULL;
1870                            l_sys_hist_csr.new_operating_unit_id := NULL;
1871                      ELSE
1872                            l_sys_hist_csr.old_operating_unit_id := fnd_api.g_miss_num;
1873                            l_sys_hist_csr.new_operating_unit_id := l_new_systems_rec.operating_unit_id;
1874                      END IF;
1875              ELSE
1876                      l_sys_hist_csr.old_operating_unit_id := fnd_api.g_miss_num;
1877                      l_sys_hist_csr.new_operating_unit_id := l_new_systems_rec.operating_unit_id;
1878              END IF;
1879           --
1880 
1881            csi_systems_h_pkg.update_row(
1882                      p_system_history_id             => l_sys_hist_id,
1883                      p_system_id                     => fnd_api.g_miss_num,
1884                      p_transaction_id                => fnd_api.g_miss_num,
1885                      p_old_customer_id               => l_sys_hist_csr.old_customer_id,
1886                      p_new_customer_id               => l_sys_hist_csr.new_customer_id,
1887                      p_old_system_type_code          => l_sys_hist_csr.old_system_type_code,
1888                      p_new_system_type_code          => l_sys_hist_csr.new_system_type_code,
1889                      p_old_system_number             => l_sys_hist_csr.old_system_number,
1890                      p_new_system_number             => l_sys_hist_csr.new_system_number,
1891                      p_old_parent_system_id          => l_sys_hist_csr.old_parent_system_id,
1892                      p_new_parent_system_id          => l_sys_hist_csr.new_parent_system_id,
1893                      p_old_ship_to_contact_id        => l_sys_hist_csr.old_ship_to_contact_id,
1894                      p_new_ship_to_contact_id        => l_sys_hist_csr.new_ship_to_contact_id,
1895                      p_old_bill_to_contact_id        => l_sys_hist_csr.old_bill_to_contact_id,
1896                      p_new_bill_to_contact_id        => l_sys_hist_csr.new_bill_to_contact_id,
1897                      p_old_technical_contact_id      => l_sys_hist_csr.old_technical_contact_id,
1898                      p_new_technical_contact_id      => l_sys_hist_csr.new_technical_contact_id,
1899                      p_old_service_admin_contact_id  => l_sys_hist_csr.old_service_admin_contact_id,
1900                      p_new_service_admin_contact_id  => l_sys_hist_csr.new_service_admin_contact_id,
1901                      p_old_ship_to_site_use_id       => l_sys_hist_csr.old_ship_to_site_use_id,
1902                      p_new_ship_to_site_use_id       => l_sys_hist_csr.new_ship_to_site_use_id,
1903                      p_old_install_site_use_id       => l_sys_hist_csr.old_install_site_use_id,
1904                      p_new_install_site_use_id       => l_sys_hist_csr.new_install_site_use_id,
1905                      p_old_bill_to_site_use_id       => l_sys_hist_csr.old_bill_to_site_use_id,
1906                      p_new_bill_to_site_use_id       => l_sys_hist_csr.new_bill_to_site_use_id,
1907                      p_old_coterminate_day_month     => l_sys_hist_csr.old_coterminate_day_month,
1908                      p_new_coterminate_day_month     => l_sys_hist_csr.new_coterminate_day_month,
1909                      p_old_start_date_active         => l_sys_hist_csr.old_start_date_active,
1910                      p_new_start_date_active         => l_sys_hist_csr.new_start_date_active,
1911                      p_old_end_date_active           => l_sys_hist_csr.old_end_date_active,
1912                      p_new_end_date_active           => l_sys_hist_csr.new_end_date_active,
1913                      p_old_autocreated_from_system   => l_sys_hist_csr.old_autocreated_from_system,
1914                      p_new_autocreated_from_system   => l_sys_hist_csr.new_autocreated_from_system,
1915                      p_old_config_system_type        => l_sys_hist_csr.old_config_system_type,
1916                      p_new_config_system_type        => l_sys_hist_csr.new_config_system_type,
1917                      p_old_context                   => l_sys_hist_csr.old_context,
1918                      p_new_context                   => l_sys_hist_csr.new_context,
1919                      p_old_attribute1                => l_sys_hist_csr.old_attribute1,
1920                      p_new_attribute1                => l_sys_hist_csr.new_attribute1,
1921                      p_old_attribute2                => l_sys_hist_csr.old_attribute2,
1922                      p_new_attribute2                => l_sys_hist_csr.new_attribute2,
1923                      p_old_attribute3                => l_sys_hist_csr.old_attribute3,
1924                      p_new_attribute3                => l_sys_hist_csr.new_attribute3,
1925                      p_old_attribute4                => l_sys_hist_csr.old_attribute4,
1926                      p_new_attribute4                => l_sys_hist_csr.new_attribute4,
1927                      p_old_attribute5                => l_sys_hist_csr.old_attribute5,
1928                      p_new_attribute5                => l_sys_hist_csr.new_attribute5,
1929                      p_old_attribute6                => l_sys_hist_csr.old_attribute6,
1930                      p_new_attribute6                => l_sys_hist_csr.new_attribute6,
1931                      p_old_attribute7                => l_sys_hist_csr.old_attribute7,
1932                      p_new_attribute7                => l_sys_hist_csr.new_attribute7,
1933                      p_old_attribute8                => l_sys_hist_csr.old_attribute8,
1934                      p_new_attribute8                => l_sys_hist_csr.new_attribute8,
1935                      p_old_attribute9                => l_sys_hist_csr.old_attribute9,
1936                      p_new_attribute9                => l_sys_hist_csr.new_attribute9,
1937                      p_old_attribute10               => l_sys_hist_csr.old_attribute10,
1938                      p_new_attribute10               => l_sys_hist_csr.new_attribute10,
1939                      p_old_attribute11               => l_sys_hist_csr.old_attribute11,
1940                      p_new_attribute11               => l_sys_hist_csr.new_attribute11,
1941                      p_old_attribute12               => l_sys_hist_csr.old_attribute12,
1942                      p_new_attribute12               => l_sys_hist_csr.new_attribute12,
1943                      p_old_attribute13               => l_sys_hist_csr.old_attribute13,
1944                      p_new_attribute13               => l_sys_hist_csr.new_attribute13,
1945                      p_old_attribute14               => l_sys_hist_csr.old_attribute14,
1946                      p_new_attribute14               => l_sys_hist_csr.new_attribute14,
1947                      p_old_attribute15               => l_sys_hist_csr.old_attribute15,
1948                      p_new_attribute15               => l_sys_hist_csr.new_attribute15,
1949                      p_full_dump_flag                => fnd_api.g_miss_char,
1950                      p_created_by                    => fnd_api.g_miss_num,
1951                      p_creation_date                 => fnd_api.g_miss_date,
1952                      p_last_updated_by               => fnd_global.user_id,
1953                      p_last_update_date              => SYSDATE,
1954                      p_last_update_login             => fnd_global.conc_login_id,
1955                      p_object_version_number         => fnd_api.g_miss_num,
1956                      p_old_name                      => l_sys_hist_csr.old_name,
1957                      p_new_name                      => l_sys_hist_csr.new_name,
1958                      p_old_description               => l_sys_hist_csr.old_description,
1959                      p_new_description               => l_sys_hist_csr.new_description,
1960                      p_old_operating_unit_id         => l_sys_hist_csr.old_operating_unit_id,
1961                      p_new_operating_unit_id         => l_sys_hist_csr.new_operating_unit_id
1962                       );
1963         END IF;
1964       EXCEPTION
1965         WHEN NO_DATA_FOUND THEN
1966 
1967           IF mod(l_old_systems_rec.object_version_number+1,l_full_dump)=0 THEN
1968                  csi_systems_h_pkg.insert_row(
1969                      px_system_history_id            => l_systems_hist_rec.system_history_id,
1970                      p_system_id                     => l_old_systems_rec.system_id,
1971                      p_transaction_id                => l_transaction_id,
1972                      p_old_customer_id               => l_old_systems_rec.customer_id,
1973                      p_new_customer_id               => l_new_systems_rec.customer_id,
1974                      p_old_system_type_code          => l_old_systems_rec.system_type_code,
1975                      p_new_system_type_code          => l_new_systems_rec.system_type_code,
1976                      p_old_system_number             => l_old_systems_rec.system_number,
1977                      p_new_system_number             => l_new_systems_rec.system_number,
1978                      p_old_parent_system_id          => l_old_systems_rec.parent_system_id,
1979                      p_new_parent_system_id          => l_new_systems_rec.parent_system_id,
1980                      p_old_ship_to_contact_id        => l_old_systems_rec.ship_to_contact_id,
1981                      p_new_ship_to_contact_id        => l_new_systems_rec.ship_to_contact_id,
1982                      p_old_bill_to_contact_id        => l_old_systems_rec.bill_to_contact_id,
1983                      p_new_bill_to_contact_id        => l_new_systems_rec.bill_to_contact_id,
1984                      p_old_technical_contact_id      => l_old_systems_rec.technical_contact_id,
1985                      p_new_technical_contact_id      => l_new_systems_rec.technical_contact_id,
1986                      p_old_service_admin_contact_id  => l_old_systems_rec.service_admin_contact_id,
1987                      p_new_service_admin_contact_id  => l_new_systems_rec.service_admin_contact_id,
1988                      p_old_ship_to_site_use_id       => l_old_systems_rec.ship_to_site_use_id,
1989                      p_new_ship_to_site_use_id       => l_new_systems_rec.ship_to_site_use_id,
1990                      p_old_install_site_use_id       => l_old_systems_rec.install_site_use_id,
1991                      p_new_install_site_use_id       => l_new_systems_rec.install_site_use_id,
1992                      p_old_bill_to_site_use_id       => l_old_systems_rec.bill_to_site_use_id,
1993                      p_new_bill_to_site_use_id       => l_new_systems_rec.bill_to_site_use_id,
1994                      p_old_coterminate_day_month     => l_old_systems_rec.coterminate_day_month,
1995                      p_new_coterminate_day_month     => l_new_systems_rec.coterminate_day_month,
1996                      p_old_start_date_active         => l_old_systems_rec.start_date_active,
1997                      p_new_start_date_active         => l_new_systems_rec.start_date_active,
1998                      p_old_end_date_active           => l_old_systems_rec.end_date_active,
1999                      p_new_end_date_active           => l_new_systems_rec.end_date_active,
2000                      p_old_autocreated_from_system   => l_old_systems_rec.autocreated_from_system_id,
2001                      p_new_autocreated_from_system   => l_new_systems_rec.autocreated_from_system_id,
2002                      p_old_config_system_type        => l_old_systems_rec.config_system_type,
2003                      p_new_config_system_type        => l_new_systems_rec.config_system_type,
2004                      p_old_context                   => l_old_systems_rec.context,
2005                      p_new_context                   => l_new_systems_rec.context,
2006                      p_old_attribute1                => l_old_systems_rec.attribute1,
2007                      p_new_attribute1                => l_new_systems_rec.attribute1,
2008                      p_old_attribute2                => l_old_systems_rec.attribute2,
2009                      p_new_attribute2                => l_new_systems_rec.attribute2,
2010                      p_old_attribute3                => l_old_systems_rec.attribute3,
2011                      p_new_attribute3                => l_new_systems_rec.attribute3,
2012                      p_old_attribute4                => l_old_systems_rec.attribute4,
2013                      p_new_attribute4                => l_new_systems_rec.attribute4,
2014                      p_old_attribute5                => l_old_systems_rec.attribute5,
2015                      p_new_attribute5                => l_new_systems_rec.attribute5,
2016                      p_old_attribute6                => l_old_systems_rec.attribute6,
2017                      p_new_attribute6                => l_new_systems_rec.attribute6,
2018                      p_old_attribute7                => l_old_systems_rec.attribute7,
2019                      p_new_attribute7                => l_new_systems_rec.attribute7,
2020                      p_old_attribute8                => l_old_systems_rec.attribute8,
2021                      p_new_attribute8                => l_new_systems_rec.attribute8,
2022                      p_old_attribute9                => l_old_systems_rec.attribute9,
2023                      p_new_attribute9                => l_new_systems_rec.attribute9,
2024                      p_old_attribute10               => l_old_systems_rec.attribute10,
2025                      p_new_attribute10               => l_new_systems_rec.attribute10,
2026                      p_old_attribute11               => l_old_systems_rec.attribute11,
2027                      p_new_attribute11               => l_new_systems_rec.attribute11,
2028                      p_old_attribute12               => l_old_systems_rec.attribute12,
2029                      p_new_attribute12               => l_new_systems_rec.attribute12,
2030                      p_old_attribute13               => l_old_systems_rec.attribute13,
2031                      p_new_attribute13               => l_new_systems_rec.attribute13,
2032                      p_old_attribute14               => l_old_systems_rec.attribute14,
2033                      p_new_attribute14               => l_new_systems_rec.attribute14,
2034                      p_old_attribute15               => l_old_systems_rec.attribute15,
2035                      p_new_attribute15               => l_new_systems_rec.attribute15,
2036                      p_full_dump_flag                => 'Y',
2037                      p_created_by                    => fnd_global.user_id,
2038                      p_creation_date                 => SYSDATE,
2039                      p_last_updated_by               => fnd_global.user_id,
2040                      p_last_update_date              => SYSDATE,
2041                      p_last_update_login             => fnd_global.conc_login_id,
2042                      p_object_version_number         => 1,
2043                      p_old_name                      => l_old_systems_rec.name,
2044                      p_new_name                      => l_new_systems_rec.name,
2045                      p_old_description               => l_old_systems_rec.description,
2046                      p_new_description               => l_new_systems_rec.description,
2047                      p_old_operating_unit_id         => l_old_systems_rec.operating_unit_id,
2048                      p_new_operating_unit_id         => l_new_systems_rec.operating_unit_id
2049                       );
2050   ELSE
2051 
2052           IF (l_new_systems_rec.customer_id = fnd_api.g_miss_num) OR
2053               NVL(l_old_systems_rec.customer_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.customer_id,fnd_api.g_miss_num) THEN
2054                l_systems_hist_rec.old_customer_id := NULL;
2055                l_systems_hist_rec.new_customer_id := NULL;
2056           ELSIF
2057               NVL(l_old_systems_rec.customer_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.customer_id,fnd_api.g_miss_num) THEN
2058                l_systems_hist_rec.old_customer_id := l_old_systems_rec.customer_id ;
2059                l_systems_hist_rec.new_customer_id := l_new_systems_rec.customer_id ;
2060           END IF;
2061           --
2062           IF (l_new_systems_rec.system_type_code = fnd_api.g_miss_char) OR
2063               NVL(l_old_systems_rec.system_type_code,fnd_api.g_miss_char) = NVL(l_new_systems_rec.system_type_code,fnd_api.g_miss_char) THEN
2064                l_systems_hist_rec.old_system_type_code := NULL;
2065                l_systems_hist_rec.new_system_type_code := NULL;
2066           ELSIF
2067               NVL(l_old_systems_rec.system_type_code,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.system_type_code,fnd_api.g_miss_char) THEN
2068                l_systems_hist_rec.old_system_type_code := l_old_systems_rec.system_type_code ;
2069                l_systems_hist_rec.new_system_type_code := l_new_systems_rec.system_type_code ;
2070           END IF;
2071           --
2072           IF (l_new_systems_rec.system_number = fnd_api.g_miss_char) OR
2073               NVL(l_old_systems_rec.system_number,fnd_api.g_miss_char) = NVL(l_new_systems_rec.system_number,fnd_api.g_miss_char) THEN
2074                l_systems_hist_rec.old_system_number := NULL;
2075                l_systems_hist_rec.new_system_number := NULL;
2076           ELSIF
2077               NVL(l_old_systems_rec.system_number,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.system_number,fnd_api.g_miss_char) THEN
2078                l_systems_hist_rec.old_system_number := l_old_systems_rec.system_number ;
2079                l_systems_hist_rec.new_system_number := l_new_systems_rec.system_number ;
2080           END IF;
2081           --
2082           IF (l_new_systems_rec.parent_system_id = fnd_api.g_miss_num) OR
2083               NVL(l_old_systems_rec.parent_system_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.parent_system_id,fnd_api.g_miss_num) THEN
2084                l_systems_hist_rec.old_parent_system_id := NULL;
2085                l_systems_hist_rec.new_parent_system_id := NULL;
2086           ELSIF
2087               NVL(l_old_systems_rec.parent_system_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.parent_system_id,fnd_api.g_miss_num) THEN
2088                l_systems_hist_rec.old_parent_system_id := l_old_systems_rec.parent_system_id ;
2089                l_systems_hist_rec.new_parent_system_id := l_new_systems_rec.parent_system_id ;
2090           END IF;
2091           --
2092           IF (l_new_systems_rec.ship_to_contact_id = fnd_api.g_miss_num) OR
2093               NVL(l_old_systems_rec.ship_to_contact_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.ship_to_contact_id,fnd_api.g_miss_num) THEN
2094                l_systems_hist_rec.old_ship_to_contact_id := NULL;
2095                l_systems_hist_rec.new_ship_to_contact_id := NULL;
2096           ELSIF
2097               NVL(l_old_systems_rec.ship_to_contact_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.ship_to_contact_id,fnd_api.g_miss_num) THEN
2098                l_systems_hist_rec.old_ship_to_contact_id := l_old_systems_rec.ship_to_contact_id ;
2099                l_systems_hist_rec.new_ship_to_contact_id := l_new_systems_rec.ship_to_contact_id ;
2100           END IF;
2101           --
2102           IF (l_new_systems_rec.bill_to_contact_id = fnd_api.g_miss_num) OR
2103               NVL(l_old_systems_rec.bill_to_contact_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.bill_to_contact_id,fnd_api.g_miss_num) THEN
2104                l_systems_hist_rec.old_bill_to_contact_id := NULL;
2105                l_systems_hist_rec.new_bill_to_contact_id := NULL;
2106           ELSIF
2107               NVL(l_old_systems_rec.bill_to_contact_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.bill_to_contact_id,fnd_api.g_miss_num) THEN
2108                l_systems_hist_rec.old_bill_to_contact_id := l_old_systems_rec.bill_to_contact_id ;
2109                l_systems_hist_rec.new_bill_to_contact_id := l_new_systems_rec.bill_to_contact_id ;
2110           END IF;
2111           --
2112           IF (l_new_systems_rec.technical_contact_id = fnd_api.g_miss_num) OR
2113               NVL(l_old_systems_rec.technical_contact_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.technical_contact_id,fnd_api.g_miss_num) THEN
2114                l_systems_hist_rec.old_technical_contact_id := NULL;
2115                l_systems_hist_rec.new_technical_contact_id := NULL;
2116           ELSIF
2117               NVL(l_old_systems_rec.technical_contact_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.technical_contact_id,fnd_api.g_miss_num) THEN
2118                l_systems_hist_rec.old_technical_contact_id := l_old_systems_rec.technical_contact_id ;
2119                l_systems_hist_rec.new_technical_contact_id := l_new_systems_rec.technical_contact_id ;
2120           END IF;
2121           --
2122           IF (l_new_systems_rec.service_admin_contact_id = fnd_api.g_miss_num) OR
2123               NVL(l_old_systems_rec.service_admin_contact_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.service_admin_contact_id,fnd_api.g_miss_num) THEN
2124                l_systems_hist_rec.old_service_admin_contact_id := NULL;
2125                l_systems_hist_rec.new_service_admin_contact_id := NULL;
2126           ELSIF
2127               NVL(l_old_systems_rec.service_admin_contact_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.service_admin_contact_id,fnd_api.g_miss_num) THEN
2128                l_systems_hist_rec.old_service_admin_contact_id := l_old_systems_rec.service_admin_contact_id ;
2129                l_systems_hist_rec.new_service_admin_contact_id := l_new_systems_rec.service_admin_contact_id ;
2130           END IF;
2131           --
2132           IF (l_new_systems_rec.ship_to_site_use_id = fnd_api.g_miss_num) OR
2133               NVL(l_old_systems_rec.ship_to_site_use_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.ship_to_site_use_id,fnd_api.g_miss_num) THEN
2134                l_systems_hist_rec.old_ship_to_site_use_id := NULL;
2135                l_systems_hist_rec.new_ship_to_site_use_id := NULL;
2136           ELSIF
2137               NVL(l_old_systems_rec.ship_to_site_use_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.ship_to_site_use_id,fnd_api.g_miss_num) THEN
2138                l_systems_hist_rec.old_ship_to_site_use_id := l_old_systems_rec.ship_to_site_use_id ;
2139                l_systems_hist_rec.new_ship_to_site_use_id := l_new_systems_rec.ship_to_site_use_id ;
2140           END IF;
2141           --
2142           IF (l_new_systems_rec.bill_to_site_use_id = fnd_api.g_miss_num) OR
2143               NVL(l_old_systems_rec.bill_to_site_use_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.bill_to_site_use_id,fnd_api.g_miss_num) THEN
2144                l_systems_hist_rec.old_bill_to_site_use_id := NULL;
2145                l_systems_hist_rec.new_bill_to_site_use_id := NULL;
2146           ELSIF
2147               NVL(l_old_systems_rec.bill_to_site_use_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.bill_to_site_use_id,fnd_api.g_miss_num) THEN
2148                l_systems_hist_rec.old_bill_to_site_use_id := l_old_systems_rec.bill_to_site_use_id ;
2149                l_systems_hist_rec.new_bill_to_site_use_id := l_new_systems_rec.bill_to_site_use_id ;
2150           END IF;
2151           --
2152           IF (l_new_systems_rec.install_site_use_id = fnd_api.g_miss_num) OR
2153               NVL(l_old_systems_rec.install_site_use_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.install_site_use_id,fnd_api.g_miss_num) THEN
2154                l_systems_hist_rec.old_install_site_use_id := NULL;
2155                l_systems_hist_rec.new_install_site_use_id := NULL;
2156           ELSIF
2157               NVL(l_old_systems_rec.install_site_use_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.install_site_use_id,fnd_api.g_miss_num) THEN
2158                l_systems_hist_rec.old_install_site_use_id := l_old_systems_rec.install_site_use_id ;
2159                l_systems_hist_rec.new_install_site_use_id := l_new_systems_rec.install_site_use_id ;
2160           END IF;
2161           --
2162           IF (l_new_systems_rec.coterminate_day_month = fnd_api.g_miss_char) OR
2163               NVL(l_old_systems_rec.coterminate_day_month,fnd_api.g_miss_char) = NVL(l_new_systems_rec.coterminate_day_month,fnd_api.g_miss_char) THEN
2164                l_systems_hist_rec.old_coterminate_day_month := NULL;
2165                l_systems_hist_rec.new_coterminate_day_month := NULL;
2166           ELSIF
2167               NVL(l_old_systems_rec.coterminate_day_month,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.coterminate_day_month,fnd_api.g_miss_char) THEN
2168                l_systems_hist_rec.old_coterminate_day_month := l_old_systems_rec.coterminate_day_month ;
2169                l_systems_hist_rec.new_coterminate_day_month := l_new_systems_rec.coterminate_day_month ;
2170           END IF;
2171           --
2172           IF (l_new_systems_rec.start_date_active = fnd_api.g_miss_date) OR
2173               NVL(l_old_systems_rec.start_date_active,fnd_api.g_miss_date) = NVL(l_new_systems_rec.start_date_active,fnd_api.g_miss_date) THEN
2174                l_systems_hist_rec.old_start_date_active := NULL;
2175                l_systems_hist_rec.new_start_date_active := NULL;
2176           ELSIF
2177               NVL(l_old_systems_rec.start_date_active,fnd_api.g_miss_date) <> NVL(l_new_systems_rec.start_date_active,fnd_api.g_miss_date) THEN
2178                l_systems_hist_rec.old_start_date_active := l_old_systems_rec.start_date_active ;
2179                l_systems_hist_rec.new_start_date_active := l_new_systems_rec.start_date_active ;
2180           END IF;
2181           --
2182           IF (l_new_systems_rec.end_date_active = fnd_api.g_miss_date) OR
2183               NVL(l_old_systems_rec.end_date_active,fnd_api.g_miss_date) = NVL(l_new_systems_rec.end_date_active,fnd_api.g_miss_date) THEN
2184                l_systems_hist_rec.old_end_date_active := NULL;
2185                l_systems_hist_rec.new_end_date_active := NULL;
2186           ELSIF
2187               NVL(l_old_systems_rec.end_date_active,fnd_api.g_miss_date) <> NVL(l_new_systems_rec.end_date_active,fnd_api.g_miss_date) THEN
2188                l_systems_hist_rec.old_end_date_active := l_old_systems_rec.end_date_active ;
2189                l_systems_hist_rec.new_end_date_active := l_new_systems_rec.end_date_active ;
2190           END IF;
2191           --
2192           IF (l_new_systems_rec.autocreated_from_system_id = fnd_api.g_miss_num) OR
2193               NVL(l_old_systems_rec.autocreated_from_system_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.autocreated_from_system_id,fnd_api.g_miss_num) THEN
2194                l_systems_hist_rec.old_autocreated_from_system := NULL;
2195                l_systems_hist_rec.new_autocreated_from_system := NULL;
2196           ELSIF
2197               NVL(l_old_systems_rec.autocreated_from_system_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.autocreated_from_system_id,fnd_api.g_miss_num) THEN
2198                l_systems_hist_rec.old_autocreated_from_system := l_old_systems_rec.autocreated_from_system_id ;
2199                l_systems_hist_rec.new_autocreated_from_system := l_new_systems_rec.autocreated_from_system_id ;
2200           END IF;
2201           --
2202           IF (l_new_systems_rec.config_system_type = fnd_api.g_miss_char) OR
2203               NVL(l_old_systems_rec.config_system_type,fnd_api.g_miss_char) = NVL(l_new_systems_rec.config_system_type,fnd_api.g_miss_char) THEN
2204                l_systems_hist_rec.old_config_system_type := NULL;
2205                l_systems_hist_rec.new_config_system_type := NULL;
2206           ELSIF
2207               NVL(l_old_systems_rec.config_system_type,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.config_system_type,fnd_api.g_miss_char) THEN
2208                l_systems_hist_rec.old_config_system_type := l_old_systems_rec.config_system_type ;
2209                l_systems_hist_rec.new_config_system_type := l_new_systems_rec.config_system_type ;
2210           END IF;
2211           --
2212           IF (l_new_systems_rec.context = fnd_api.g_miss_char) OR
2213               NVL(l_old_systems_rec.context,fnd_api.g_miss_char) = NVL(l_new_systems_rec.context,fnd_api.g_miss_char) THEN
2214                l_systems_hist_rec.old_context := NULL;
2215                l_systems_hist_rec.new_context := NULL;
2216           ELSIF
2217               NVL(l_old_systems_rec.context,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.context,fnd_api.g_miss_char) THEN
2218                l_systems_hist_rec.old_context := l_old_systems_rec.context ;
2219                l_systems_hist_rec.new_context := l_new_systems_rec.context ;
2220           END IF;
2221           --
2222           IF (l_new_systems_rec.attribute1 = fnd_api.g_miss_char) OR
2223               NVL(l_old_systems_rec.attribute1,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute1,fnd_api.g_miss_char) THEN
2224                l_systems_hist_rec.old_attribute1 := NULL;
2225                l_systems_hist_rec.new_attribute1 := NULL;
2226           ELSIF
2227               NVL(l_old_systems_rec.attribute1,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute1,fnd_api.g_miss_char) THEN
2228                l_systems_hist_rec.old_attribute1 := l_old_systems_rec.attribute1 ;
2229                l_systems_hist_rec.new_attribute1 := l_new_systems_rec.attribute1 ;
2230           END IF;
2231           --
2232           IF (l_new_systems_rec.attribute2 = fnd_api.g_miss_char) OR
2233               NVL(l_old_systems_rec.attribute2,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute2,fnd_api.g_miss_char) THEN
2234                l_systems_hist_rec.old_attribute2 := NULL;
2235                l_systems_hist_rec.new_attribute2 := NULL;
2236           ELSIF
2237               NVL(l_old_systems_rec.attribute2,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute2,fnd_api.g_miss_char) THEN
2238                l_systems_hist_rec.old_attribute2 := l_old_systems_rec.attribute2 ;
2239                l_systems_hist_rec.new_attribute2 := l_new_systems_rec.attribute2 ;
2240           END IF;
2241           --
2242           IF (l_new_systems_rec.attribute3 = fnd_api.g_miss_char) OR
2243               NVL(l_old_systems_rec.attribute3,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute3,fnd_api.g_miss_char) THEN
2244                l_systems_hist_rec.old_attribute3 := NULL;
2245                l_systems_hist_rec.new_attribute3 := NULL;
2246           ELSIF
2247               NVL(l_old_systems_rec.attribute3,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute3,fnd_api.g_miss_char) THEN
2248                l_systems_hist_rec.old_attribute3 := l_old_systems_rec.attribute3 ;
2249                l_systems_hist_rec.new_attribute3 := l_new_systems_rec.attribute3 ;
2250           END IF;
2251           --
2252           IF (l_new_systems_rec.attribute4 = fnd_api.g_miss_char) OR
2253               NVL(l_old_systems_rec.attribute4,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute4,fnd_api.g_miss_char) THEN
2254                l_systems_hist_rec.old_attribute4 := NULL;
2255                l_systems_hist_rec.new_attribute4 := NULL;
2256           ELSIF
2257               NVL(l_old_systems_rec.attribute4,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute4,fnd_api.g_miss_char) THEN
2258                l_systems_hist_rec.old_attribute4 := l_old_systems_rec.attribute4 ;
2259                l_systems_hist_rec.new_attribute4 := l_new_systems_rec.attribute4 ;
2260           END IF;
2261           --
2262           IF (l_new_systems_rec.attribute5 = fnd_api.g_miss_char) OR
2263               NVL(l_old_systems_rec.attribute5,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute5,fnd_api.g_miss_char) THEN
2264                l_systems_hist_rec.old_attribute5 := NULL;
2265                l_systems_hist_rec.new_attribute5 := NULL;
2266           ELSIF
2267               NVL(l_old_systems_rec.attribute5,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute5,fnd_api.g_miss_char) THEN
2268                l_systems_hist_rec.old_attribute5 := l_old_systems_rec.attribute5 ;
2269                l_systems_hist_rec.new_attribute5 := l_new_systems_rec.attribute5 ;
2270           END IF;
2271           --
2272           IF (l_new_systems_rec.attribute6 = fnd_api.g_miss_char) OR
2273               NVL(l_old_systems_rec.attribute6,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute6,fnd_api.g_miss_char) THEN
2274                l_systems_hist_rec.old_attribute6 := NULL;
2275                l_systems_hist_rec.new_attribute6 := NULL;
2276           ELSIF
2277               NVL(l_old_systems_rec.attribute6,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute6,fnd_api.g_miss_char) THEN
2278                l_systems_hist_rec.old_attribute6 := l_old_systems_rec.attribute6 ;
2279                l_systems_hist_rec.new_attribute6 := l_new_systems_rec.attribute6 ;
2280           END IF;
2281           --
2282           IF (l_new_systems_rec.attribute7 = fnd_api.g_miss_char) OR
2283               NVL(l_old_systems_rec.attribute7,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute7,fnd_api.g_miss_char) THEN
2284                l_systems_hist_rec.old_attribute7 := NULL;
2285                l_systems_hist_rec.new_attribute7 := NULL;
2286           ELSIF
2287               NVL(l_old_systems_rec.attribute7,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute7,fnd_api.g_miss_char) THEN
2288                l_systems_hist_rec.old_attribute7 := l_old_systems_rec.attribute7 ;
2289                l_systems_hist_rec.new_attribute7 := l_new_systems_rec.attribute7 ;
2290           END IF;
2291           --
2292           IF (l_new_systems_rec.attribute8 = fnd_api.g_miss_char) OR
2293               NVL(l_old_systems_rec.attribute8,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute8,fnd_api.g_miss_char) THEN
2294                l_systems_hist_rec.old_attribute8 := NULL;
2295                l_systems_hist_rec.new_attribute8 := NULL;
2296           ELSIF
2297               NVL(l_old_systems_rec.attribute8,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute8,fnd_api.g_miss_char) THEN
2298                l_systems_hist_rec.old_attribute8 := l_old_systems_rec.attribute8 ;
2299                l_systems_hist_rec.new_attribute8 := l_new_systems_rec.attribute8 ;
2300           END IF;
2301           --
2302           IF (l_new_systems_rec.attribute9 = fnd_api.g_miss_char) OR
2303               NVL(l_old_systems_rec.attribute9,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute9,fnd_api.g_miss_char) THEN
2304                l_systems_hist_rec.old_attribute9 := NULL;
2305                l_systems_hist_rec.new_attribute9 := NULL;
2306           ELSIF
2307               NVL(l_old_systems_rec.attribute9,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute9,fnd_api.g_miss_char) THEN
2308                l_systems_hist_rec.old_attribute9 := l_old_systems_rec.attribute9 ;
2309                l_systems_hist_rec.new_attribute9 := l_new_systems_rec.attribute9 ;
2310           END IF;
2311           --
2312           IF (l_new_systems_rec.attribute10 = fnd_api.g_miss_char) OR
2313               NVL(l_old_systems_rec.attribute10,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute10,fnd_api.g_miss_char) THEN
2314                l_systems_hist_rec.old_attribute10 := NULL;
2315                l_systems_hist_rec.new_attribute10 := NULL;
2316           ELSIF
2317               NVL(l_old_systems_rec.attribute10,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute10,fnd_api.g_miss_char) THEN
2318                l_systems_hist_rec.old_attribute10 := l_old_systems_rec.attribute10 ;
2319                l_systems_hist_rec.new_attribute10 := l_new_systems_rec.attribute10 ;
2320           END IF;
2321           --
2322           IF (l_new_systems_rec.attribute11 = fnd_api.g_miss_char) OR
2323               NVL(l_old_systems_rec.attribute11,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute11,fnd_api.g_miss_char) THEN
2324                l_systems_hist_rec.old_attribute11 := NULL;
2325                l_systems_hist_rec.new_attribute11 := NULL;
2326           ELSIF
2327               NVL(l_old_systems_rec.attribute11,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute11,fnd_api.g_miss_char) THEN
2328                l_systems_hist_rec.old_attribute11 := l_old_systems_rec.attribute11 ;
2329                l_systems_hist_rec.new_attribute11 := l_new_systems_rec.attribute11 ;
2330           END IF;
2331           --
2332           IF (l_new_systems_rec.attribute12 = fnd_api.g_miss_char) OR
2333               NVL(l_old_systems_rec.attribute12,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute12,fnd_api.g_miss_char) THEN
2334                l_systems_hist_rec.old_attribute12 := NULL;
2335                l_systems_hist_rec.new_attribute12 := NULL;
2336           ELSIF
2337               NVL(l_old_systems_rec.attribute12,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute12,fnd_api.g_miss_char) THEN
2338                l_systems_hist_rec.old_attribute12 := l_old_systems_rec.attribute12 ;
2339                l_systems_hist_rec.new_attribute12 := l_new_systems_rec.attribute12 ;
2340           END IF;
2341           --
2342           IF (l_new_systems_rec.attribute13 = fnd_api.g_miss_char) OR
2343               NVL(l_old_systems_rec.attribute13,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute13,fnd_api.g_miss_char) THEN
2344                l_systems_hist_rec.old_attribute13 := NULL;
2345                l_systems_hist_rec.new_attribute13 := NULL;
2346           ELSIF
2347               NVL(l_old_systems_rec.attribute13,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute13,fnd_api.g_miss_char) THEN
2348                l_systems_hist_rec.old_attribute13 := l_old_systems_rec.attribute13 ;
2349                l_systems_hist_rec.new_attribute13 := l_new_systems_rec.attribute13 ;
2350           END IF;
2351           --
2352           IF (l_new_systems_rec.attribute14 = fnd_api.g_miss_char) OR
2353               NVL(l_old_systems_rec.attribute14,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute14,fnd_api.g_miss_char) THEN
2354                l_systems_hist_rec.old_attribute14 := NULL;
2355                l_systems_hist_rec.new_attribute14 := NULL;
2356           ELSIF
2357               NVL(l_old_systems_rec.attribute14,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute14,fnd_api.g_miss_char) THEN
2358                l_systems_hist_rec.old_attribute14 := l_old_systems_rec.attribute14 ;
2359                l_systems_hist_rec.new_attribute14 := l_new_systems_rec.attribute14 ;
2360           END IF;
2361           --
2362           IF (l_new_systems_rec.attribute15 = fnd_api.g_miss_char) OR
2363               NVL(l_old_systems_rec.attribute15,fnd_api.g_miss_char) = NVL(l_new_systems_rec.attribute15,fnd_api.g_miss_char) THEN
2364                l_systems_hist_rec.old_attribute15 := NULL;
2365                l_systems_hist_rec.new_attribute15 := NULL;
2366           ELSIF
2367               NVL(l_old_systems_rec.attribute15,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.attribute15,fnd_api.g_miss_char) THEN
2368                l_systems_hist_rec.old_attribute15 := l_old_systems_rec.attribute15 ;
2369                l_systems_hist_rec.new_attribute15 := l_new_systems_rec.attribute15 ;
2370           END IF;
2371           --
2372           IF (l_new_systems_rec.name = fnd_api.g_miss_char) OR
2373               NVL(l_old_systems_rec.name,fnd_api.g_miss_char) = NVL(l_new_systems_rec.name,fnd_api.g_miss_char) THEN
2374                l_systems_hist_rec.old_name := NULL;
2375                l_systems_hist_rec.new_name := NULL;
2376           ELSIF
2377               NVL(l_old_systems_rec.name,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.name,fnd_api.g_miss_char) THEN
2378                l_systems_hist_rec.old_name := l_old_systems_rec.name ;
2379                l_systems_hist_rec.new_name := l_new_systems_rec.name ;
2380           END IF;
2381           --
2382           IF (l_new_systems_rec.description = fnd_api.g_miss_char) OR
2383               NVL(l_old_systems_rec.description,fnd_api.g_miss_char) = NVL(l_new_systems_rec.description,fnd_api.g_miss_char) THEN
2384                l_systems_hist_rec.old_description := NULL;
2385                l_systems_hist_rec.new_description := NULL;
2386           ELSIF
2387               NVL(l_old_systems_rec.description,fnd_api.g_miss_char) <> NVL(l_new_systems_rec.description,fnd_api.g_miss_char) THEN
2388                l_systems_hist_rec.old_description := l_old_systems_rec.description ;
2389                l_systems_hist_rec.new_description := l_new_systems_rec.description ;
2390           END IF;
2391           --
2392           IF (l_new_systems_rec.operating_unit_id = fnd_api.g_miss_num) OR
2393               NVL(l_old_systems_rec.operating_unit_id,fnd_api.g_miss_num) = NVL(l_new_systems_rec.operating_unit_id,fnd_api.g_miss_num) THEN
2394                l_systems_hist_rec.old_operating_unit_id := NULL;
2395                l_systems_hist_rec.new_operating_unit_id := NULL;
2396           ELSIF
2397               NVL(l_old_systems_rec.operating_unit_id,fnd_api.g_miss_num) <> NVL(l_new_systems_rec.operating_unit_id,fnd_api.g_miss_num) THEN
2398                l_systems_hist_rec.old_operating_unit_id := l_old_systems_rec.operating_unit_id ;
2399                l_systems_hist_rec.new_operating_unit_id := l_new_systems_rec.operating_unit_id ;
2400           END IF;
2401           --
2402           IF p_flag = 'EXPIRE' THEN
2403                l_systems_hist_rec.new_end_date_active := p_sysdate;
2404           END IF;
2405 
2406           csi_systems_h_pkg.insert_row(
2407                      px_system_history_id            => l_systems_hist_rec.system_history_id,
2408                      p_system_id                     => l_old_systems_rec.system_id,
2409                      p_transaction_id                => l_transaction_id,
2410                      p_old_customer_id               => l_systems_hist_rec.old_customer_id,
2411                      p_new_customer_id               => l_systems_hist_rec.new_customer_id,
2412                      p_old_system_type_code          => l_systems_hist_rec.old_system_type_code,
2413                      p_new_system_type_code          => l_systems_hist_rec.new_system_type_code,
2414                      p_old_system_number             => l_systems_hist_rec.old_system_number,
2415                      p_new_system_number             => l_systems_hist_rec.new_system_number,
2416                      p_old_parent_system_id          => l_systems_hist_rec.old_parent_system_id,
2417                      p_new_parent_system_id          => l_systems_hist_rec.new_parent_system_id,
2418                      p_old_ship_to_contact_id        => l_systems_hist_rec.old_ship_to_contact_id,
2419                      p_new_ship_to_contact_id        => l_systems_hist_rec.new_ship_to_contact_id,
2420                      p_old_bill_to_contact_id        => l_systems_hist_rec.old_bill_to_contact_id,
2421                      p_new_bill_to_contact_id        => l_systems_hist_rec.new_bill_to_contact_id,
2422                      p_old_technical_contact_id      => l_systems_hist_rec.old_technical_contact_id,
2423                      p_new_technical_contact_id      => l_systems_hist_rec.new_technical_contact_id,
2424                      p_old_service_admin_contact_id  => l_systems_hist_rec.old_service_admin_contact_id,
2425                      p_new_service_admin_contact_id  => l_systems_hist_rec.new_service_admin_contact_id,
2426                      p_old_ship_to_site_use_id       => l_systems_hist_rec.old_ship_to_site_use_id,
2427                      p_new_ship_to_site_use_id       => l_systems_hist_rec.new_ship_to_site_use_id,
2428                      p_old_install_site_use_id       => l_systems_hist_rec.old_install_site_use_id,
2429                      p_new_install_site_use_id       => l_systems_hist_rec.new_install_site_use_id,
2430                      p_old_bill_to_site_use_id       => l_systems_hist_rec.old_bill_to_site_use_id,
2431                      p_new_bill_to_site_use_id       => l_systems_hist_rec.new_bill_to_site_use_id,
2432                      p_old_coterminate_day_month     => l_systems_hist_rec.old_coterminate_day_month,
2433                      p_new_coterminate_day_month     => l_systems_hist_rec.new_coterminate_day_month,
2434                      p_old_start_date_active         => l_systems_hist_rec.old_start_date_active,
2435                      p_new_start_date_active         => l_systems_hist_rec.new_start_date_active,
2436                      p_old_end_date_active           => l_systems_hist_rec.old_end_date_active,
2437                      p_new_end_date_active           => l_systems_hist_rec.new_end_date_active,
2438                      p_old_autocreated_from_system   => l_systems_hist_rec.old_autocreated_from_system,
2439                      p_new_autocreated_from_system   => l_systems_hist_rec.new_autocreated_from_system,
2440                      p_old_config_system_type        => l_systems_hist_rec.old_config_system_type,
2441                      p_new_config_system_type        => l_systems_hist_rec.new_config_system_type,
2442                      p_old_context                   => l_systems_hist_rec.old_context,
2443                      p_new_context                   => l_systems_hist_rec.new_context,
2444                      p_old_attribute1                => l_systems_hist_rec.old_attribute1,
2445                      p_new_attribute1                => l_systems_hist_rec.new_attribute1,
2446                      p_old_attribute2                => l_systems_hist_rec.old_attribute2,
2447                      p_new_attribute2                => l_systems_hist_rec.new_attribute2,
2448                      p_old_attribute3                => l_systems_hist_rec.old_attribute3,
2449                      p_new_attribute3                => l_systems_hist_rec.new_attribute3,
2450                      p_old_attribute4                => l_systems_hist_rec.old_attribute4,
2451                      p_new_attribute4                => l_systems_hist_rec.new_attribute4,
2452                      p_old_attribute5                => l_systems_hist_rec.old_attribute5,
2453                      p_new_attribute5                => l_systems_hist_rec.new_attribute5,
2454                      p_old_attribute6                => l_systems_hist_rec.old_attribute6,
2455                      p_new_attribute6                => l_systems_hist_rec.new_attribute6,
2456                      p_old_attribute7                => l_systems_hist_rec.old_attribute7,
2457                      p_new_attribute7                => l_systems_hist_rec.new_attribute7,
2458                      p_old_attribute8                => l_systems_hist_rec.old_attribute8,
2459                      p_new_attribute8                => l_systems_hist_rec.new_attribute8,
2460                      p_old_attribute9                => l_systems_hist_rec.old_attribute9,
2461                      p_new_attribute9                => l_systems_hist_rec.new_attribute9,
2462                      p_old_attribute10               => l_systems_hist_rec.old_attribute10,
2463                      p_new_attribute10               => l_systems_hist_rec.new_attribute10,
2464                      p_old_attribute11               => l_systems_hist_rec.old_attribute11,
2465                      p_new_attribute11               => l_systems_hist_rec.new_attribute11,
2466                      p_old_attribute12               => l_systems_hist_rec.old_attribute12,
2467                      p_new_attribute12               => l_systems_hist_rec.new_attribute12,
2468                      p_old_attribute13               => l_systems_hist_rec.old_attribute13,
2469                      p_new_attribute13               => l_systems_hist_rec.new_attribute13,
2470                      p_old_attribute14               => l_systems_hist_rec.old_attribute14,
2471                      p_new_attribute14               => l_systems_hist_rec.new_attribute14,
2472                      p_old_attribute15               => l_systems_hist_rec.old_attribute15,
2473                      p_new_attribute15               => l_systems_hist_rec.new_attribute15,
2474                      p_full_dump_flag                => 'N',
2475                      p_created_by                    => fnd_global.user_id,
2476                      p_creation_date                 => SYSDATE,
2477                      p_last_updated_by               => fnd_global.user_id,
2478                      p_last_update_date              => SYSDATE,
2479                      p_last_update_login             => fnd_global.conc_login_id,
2480                      p_object_version_number         => 1,
2481                      p_old_name                      => l_systems_hist_rec.old_name,
2482                      p_new_name                      => l_systems_hist_rec.new_name,
2483                      p_old_description               => l_systems_hist_rec.old_description,
2484                      p_new_description               => l_systems_hist_rec.new_description,
2485                      p_old_operating_unit_id         => l_systems_hist_rec.old_operating_unit_id,
2486                      p_new_operating_unit_id         => l_systems_hist_rec.new_operating_unit_id
2487                      );
2488 
2489      END IF;
2490 
2491    END;
2492    -- End of modifications for Bug#2547034 on 09/20/02 - rtalluri
2493 EXCEPTION
2494    WHEN OTHERS THEN
2495      x_return_status := fnd_api.g_ret_sts_error;
2496 END;
2497 
2498 
2499 
2500 
2501 
2502 -- hint: primary key needs to be returned.
2503 PROCEDURE create_system(
2504     p_api_version                IN     NUMBER,
2505     p_commit                     IN     VARCHAR2,
2506     p_init_msg_list              IN     VARCHAR2,
2507     p_validation_level           IN     NUMBER,
2508     p_system_rec                 IN     csi_datastructures_pub.system_rec,
2509     p_txn_rec                    IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
2510     x_system_id                  OUT NOCOPY    NUMBER,
2511     x_return_status              OUT NOCOPY    VARCHAR2,
2512     x_msg_count                  OUT NOCOPY    NUMBER,
2513     x_msg_data                   OUT NOCOPY    VARCHAR2
2514     )
2515 
2516  IS
2517 l_api_name                CONSTANT VARCHAR2(30) := 'create_system';
2518 l_api_version_number      CONSTANT NUMBER       := 1.0;
2519 l_system_id                        NUMBER;
2520 l_system_history_id                NUMBER       :=fnd_api.g_miss_num;
2521 l_debug_level                      NUMBER;
2522 l_name                             VARCHAR2(50);
2523 l_start_date                       DATE;
2524 l_date                             DATE;
2525 l_month                            VARCHAR2(20);
2526  BEGIN
2527       -- standard start of api savepoint
2528       SAVEPOINT create_system_pvt;
2529 
2530       -- standard call to check for call compatibility.
2531       IF NOT fnd_api.compatible_api_call ( l_api_version_number,
2532                                            p_api_version,
2533                                            l_api_name,
2534                                            g_pkg_name)
2535       THEN
2536           RAISE fnd_api.g_exc_unexpected_error;
2537       END IF;
2538 
2539 
2540       -- initialize message list if p_init_msg_list is set to true.
2541       IF fnd_api.to_boolean( p_init_msg_list )
2542       THEN
2543           fnd_msg_pub.initialize;
2544       END IF;
2545 
2546 
2547       -- debug message
2548 
2549 
2550       -- initialize api return status to success
2551       x_return_status := fnd_api.g_ret_sts_success;
2552 
2553       l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2554         IF (l_debug_level > 0) THEN
2555           csi_gen_utility_pvt.put_line( 'create_system');
2556         END IF;
2557 
2558         IF (l_debug_level > 1) THEN
2559              csi_gen_utility_pvt.put_line(
2560                                 p_api_version             ||'-'||
2561                                 p_Commit                  ||'-'||
2562                                 p_Init_Msg_list           ||'-'||
2563                                 p_Validation_level
2564                                 );
2565             csi_gen_utility_pvt.dump_sys_rec(p_system_rec);
2566             csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
2567         END IF;
2568       -- invoke validation procedures
2569 
2570       validate_system_id(
2571               p_init_msg_list          => fnd_api.g_false,
2572               p_validation_mode        => 'CREATE',
2573               p_system_id              => p_system_rec.system_id,
2574               x_return_status          => x_return_status,
2575               x_msg_count              => x_msg_count,
2576               x_msg_data               => x_msg_data);
2577 
2578     validate_auto_sys_id(
2579               p_init_msg_list          => fnd_api.g_false,
2580               p_validation_mode        => 'CREATE',
2581               p_auto_sys_id            => p_system_rec.autocreated_from_system_id,
2582               x_return_status          => x_return_status,
2583               x_msg_count              => x_msg_count,
2584               x_msg_data               => x_msg_data);
2585 
2586         IF x_return_status<>fnd_api.g_ret_sts_success THEN
2587           RAISE fnd_api.g_exc_error;
2588         END IF;
2589 
2590       validate_systems(
2591           p_init_msg_list    => fnd_api.g_false,
2592           p_validation_level => p_validation_level,
2593           p_validation_mode  => 'CREATE',
2594           p_system_rec       => p_system_rec,
2595           x_return_status    => x_return_status,
2596           x_msg_count        => x_msg_count,
2597           x_msg_data         => x_msg_data);
2598 
2599       IF x_return_status<>fnd_api.g_ret_sts_success THEN
2600           RAISE fnd_api.g_exc_error;
2601       END IF;
2602 
2603        validate_start_end_date(
2604               p_init_msg_list          => fnd_api.g_false,
2605               p_validation_mode        => 'CREATE',
2606               p_system_id              => p_system_rec.system_id,
2607               p_start_date             => p_system_rec.start_date_active,
2608               p_end_date               => p_system_rec.end_date_active,
2609               x_return_status          => x_return_status,
2610               x_msg_count              => x_msg_count,
2611               x_msg_data               => x_msg_data);
2612         IF x_return_status <> fnd_api.g_ret_sts_success THEN
2613               RAISE fnd_api.g_exc_error;
2614         END IF;
2615 
2616        -- Validate the Operating Unit
2617 	  IF p_system_rec.operating_unit_id is NOT NULL AND
2618 		p_system_rec.operating_unit_id <> FND_API.G_MISS_NUM THEN
2619 		IF NOT csi_org_unit_vld_pvt.Is_Valid_operating_unit_id(p_system_rec.operating_unit_id) THEN
2620              RAISE fnd_api.g_exc_error;
2621 		END IF;
2622 	  END IF;
2623 	  --
2624        IF ( (p_system_rec.name IS NULL) OR (p_system_rec.name=fnd_api.g_miss_char) )
2625        THEN
2626           IF (fnd_profile.value('CSI_AUTO_GEN_SYS_NAME') = 'Y')
2627           THEN
2628            SELECT csi_systems_s.NEXTVAL
2629            INTO   x_system_id
2630            FROM   sys.dual;
2631            l_name := to_char(x_system_id);
2632           END IF;
2633        ELSE
2634           l_name := p_system_rec.name;
2635        END IF;
2636 
2637        IF (x_return_status = fnd_api.g_ret_sts_success) THEN
2638 
2639         -- check for unique system name
2640             Check_Unique(
2641                           p_System_id     =>     NULL
2642                          ,p_Name          =>     l_name --p_system_rec.name
2643                          ,p_Customer_ID   =>     p_system_rec.customer_id
2644                          ,p_System_number =>     p_system_rec.system_number
2645                          ,x_return_status =>     x_return_status
2646                          ,x_msg_count     =>     x_msg_count
2647                          ,x_msg_data      =>     x_msg_data);
2648         END IF;
2649 
2650         IF   p_system_rec.start_date_active IS NULL
2651           OR p_system_rec.start_date_active = fnd_api.g_miss_date
2652         THEN
2653             l_start_date := SYSDATE;
2654         ELSE
2655             l_start_date := p_system_rec.start_date_active;
2656         END IF;
2657 
2658         IF ((p_system_rec.coterminate_day_month IS NOT NULL) AND
2659             (p_system_rec.coterminate_day_month <> FND_API.G_MISS_CHAR))
2660         THEN
2661            BEGIN
2662              l_month := p_system_rec.coterminate_day_month||'-1996';
2663              l_date  := to_date(l_month, 'DD-MM-YYYY');
2664            EXCEPTION
2665              WHEN OTHERS THEN
2666               fnd_message.set_name('CSI','CSI_INVALID_COTERM_DATE');
2667               fnd_message.set_token('Coterminate_Day_Month',p_system_rec.coterminate_day_month);
2668               fnd_msg_pub.add;
2669               RAISE fnd_api.g_exc_error;
2670            END;
2671         END IF;
2672 
2673 
2674         IF x_return_status = fnd_api.g_ret_sts_success THEN
2675       -- invoke table handler(csi_systems_b_pkg.insert_row)
2676 
2677 
2678           csi_systems_b_pkg.insert_row(
2679             px_system_id                  =>  x_system_id,
2680             p_customer_id                 =>  p_system_rec.customer_id,
2681             p_system_type_code            =>  p_system_rec.system_type_code,
2682             p_system_number               =>  p_system_rec.system_number,
2683             p_parent_system_id            =>  p_system_rec.parent_system_id,
2684             p_ship_to_contact_id          =>  p_system_rec.ship_to_contact_id,
2685             p_bill_to_contact_id          =>  p_system_rec.bill_to_contact_id,
2686             p_technical_contact_id        =>  p_system_rec.technical_contact_id,
2687             p_service_admin_contact_id    =>  p_system_rec.service_admin_contact_id,
2688             p_ship_to_site_use_id         =>  p_system_rec.ship_to_site_use_id,
2689             p_bill_to_site_use_id         =>  p_system_rec.bill_to_site_use_id,
2690             p_install_site_use_id         =>  p_system_rec.install_site_use_id,
2691             p_coterminate_day_month       =>  p_system_rec.coterminate_day_month,
2692             p_autocreated_from_system_id  =>  p_system_rec.autocreated_from_system_id,
2693             p_config_system_type          =>  p_system_rec.config_system_type,
2694             p_start_date_active           =>  l_start_date,
2695             p_end_date_active             =>  p_system_rec.end_date_active,
2696             p_context                     =>  p_system_rec.context,
2697             p_attribute1                  =>  p_system_rec.attribute1,
2698             p_attribute2                  =>  p_system_rec.attribute2,
2699             p_attribute3                  =>  p_system_rec.attribute3,
2700             p_attribute4                  =>  p_system_rec.attribute4,
2701             p_attribute5                  =>  p_system_rec.attribute5,
2702             p_attribute6                  =>  p_system_rec.attribute6,
2703             p_attribute7                  =>  p_system_rec.attribute7,
2704             p_attribute8                  =>  p_system_rec.attribute8,
2705             p_attribute9                  =>  p_system_rec.attribute9,
2706             p_attribute10                 =>  p_system_rec.attribute10,
2707             p_attribute11                 =>  p_system_rec.attribute11,
2708             p_attribute12                 =>  p_system_rec.attribute12,
2709             p_attribute13                 =>  p_system_rec.attribute13,
2710             p_attribute14                 =>  p_system_rec.attribute14,
2711             p_attribute15                 =>  p_system_rec.attribute15,
2712             p_created_by                  =>  fnd_global.user_id,
2713             p_creation_date               =>  SYSDATE,
2714             p_last_updated_by             =>  fnd_global.user_id,
2715             p_last_update_date            =>  SYSDATE,
2716             p_last_update_login           =>  fnd_global.conc_login_id,
2717             p_object_version_number       =>  1,
2718             p_name                        =>  l_name,--p_system_rec.name,
2719             p_description                 =>  p_system_rec.description,
2720             p_operating_unit_id           =>  p_system_rec.operating_unit_id,
2721             p_request_id                  =>  p_system_rec.request_id,
2722             p_program_application_id      =>  p_system_rec.program_application_id,
2723             p_program_id                  =>  p_system_rec.program_id,
2724             p_program_update_date         =>  p_system_rec.program_update_date);
2725       -- hint: primary key should be returned.
2726       -- x_system_id := px_system_id;
2727             l_system_id := x_system_id;
2728 
2729               csi_transactions_pvt.create_transaction
2730           (
2731              p_api_version            => p_api_version
2732             ,p_commit                 => p_commit
2733             ,p_init_msg_list          => p_init_msg_list
2734             ,p_validation_level       => p_validation_level
2735             ,p_success_if_exists_flag => 'Y'
2736             ,p_transaction_rec        => p_txn_rec
2737             ,x_return_status          => x_return_status
2738             ,x_msg_count              => x_msg_count
2739             ,x_msg_data               => x_msg_data
2740           );
2741 
2742          IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
2743 
2744 
2745               fnd_message.set_name('CSI','CSI_FAILED_TO_VALIDATE_TXN');
2746               fnd_message.set_token('transaction_id',p_txn_rec.transaction_id );
2747               fnd_msg_pub.add;
2748 
2749               RAISE fnd_api.g_exc_error;
2750               RETURN;
2751          END IF;
2752 
2753 
2754        csi_systems_h_pkg.insert_row(
2755           px_system_history_id              =>  l_system_history_id,
2756           p_system_id                       =>  l_system_id,
2757           p_transaction_id                  =>  p_txn_rec.transaction_id,
2758           p_old_customer_id                 =>  NULL,
2759           p_new_customer_id                 =>  p_system_rec.customer_id,
2760           p_old_system_type_code            =>  NULL,
2761           p_new_system_type_code            =>  p_system_rec.system_type_code,
2762           p_old_system_number               =>  NULL,
2763           p_new_system_number               =>  p_system_rec.system_number,
2764           p_old_parent_system_id            =>  NULL,
2765           p_new_parent_system_id            =>  p_system_rec.parent_system_id,
2766           p_old_ship_to_contact_id          =>  NULL,
2767           p_new_ship_to_contact_id          =>  p_system_rec.ship_to_contact_id,
2768           p_old_bill_to_contact_id          =>  NULL,
2769           p_new_bill_to_contact_id          =>  p_system_rec.bill_to_contact_id,
2770           p_old_technical_contact_id        =>  NULL,
2771           p_new_technical_contact_id        =>  p_system_rec.technical_contact_id,
2772           p_old_service_admin_contact_id    =>  NULL,
2773           p_new_service_admin_contact_id    =>  p_system_rec.service_admin_contact_id,
2774           p_old_ship_to_site_use_id         =>  NULL,
2775           p_new_ship_to_site_use_id         =>  p_system_rec.ship_to_site_use_id,
2776           p_old_install_site_use_id         =>  NULL,
2777           p_new_install_site_use_id         =>  p_system_rec.install_site_use_id,
2778           p_old_bill_to_site_use_id         =>  NULL,
2779           p_new_bill_to_site_use_id         =>  p_system_rec.bill_to_site_use_id,
2780           p_old_coterminate_day_month       =>  NULL,
2781           p_new_coterminate_day_month       =>  p_system_rec.coterminate_day_month,
2782           p_old_start_date_active           =>  NULL,
2783           p_new_start_date_active           =>  l_start_date,
2784           p_old_end_date_active             =>  NULL,
2785           p_new_end_date_active             =>  p_system_rec.end_date_active,
2786           p_old_autocreated_from_system     =>  NULL,
2787           p_new_autocreated_from_system     =>  p_system_rec.autocreated_from_system_id,
2788           p_old_config_system_type          =>  NULL,
2789           p_new_config_system_type          =>  p_system_rec.config_system_type,
2790           p_old_context                     =>  NULL,
2791           p_new_context                     =>  p_system_rec.context,
2792           p_old_attribute1                  =>  NULL,
2793           p_new_attribute1                  =>  p_system_rec.attribute1,
2794           p_old_attribute2                  =>  NULL,
2795           p_new_attribute2                  =>  p_system_rec.attribute2,
2796           p_old_attribute3                  =>  NULL,
2797           p_new_attribute3                  =>  p_system_rec.attribute3,
2798           p_old_attribute4                  =>  NULL,
2799           p_new_attribute4                  =>  p_system_rec.attribute4,
2800           p_old_attribute5                  =>  NULL,
2801           p_new_attribute5                  =>  p_system_rec.attribute5,
2802           p_old_attribute6                  =>  NULL,
2803           p_new_attribute6                  =>  p_system_rec.attribute6,
2804           p_old_attribute7                  =>  NULL,
2805           p_new_attribute7                  =>  p_system_rec.attribute7,
2806           p_old_attribute8                  =>  NULL,
2807           p_new_attribute8                  =>  p_system_rec.attribute8,
2808           p_old_attribute9                  =>  NULL,
2809           p_new_attribute9                  =>  p_system_rec.attribute9,
2810           p_old_attribute10                 =>  NULL,
2811           p_new_attribute10                 =>  p_system_rec.attribute10,
2812           p_old_attribute11                 =>  NULL,
2813           p_new_attribute11                 =>  p_system_rec.attribute11,
2814           p_old_attribute12                 =>  NULL,
2815           p_new_attribute12                 =>  p_system_rec.attribute12,
2816           p_old_attribute13                 =>  NULL,
2817           p_new_attribute13                 =>  p_system_rec.attribute13,
2818           p_old_attribute14                 =>  NULL,
2819           p_new_attribute14                 =>  p_system_rec.attribute14,
2820           p_old_attribute15                 =>  NULL,
2821           p_new_attribute15                 =>  p_system_rec.attribute15,
2822           p_full_dump_flag                  =>  'Y',
2823           p_created_by                      =>  fnd_global.user_id,
2824           p_creation_date                   =>  SYSDATE,
2825           p_last_updated_by                 =>  fnd_global.user_id,
2826           p_last_update_date                =>  SYSDATE,
2827           p_last_update_login               =>  fnd_global.conc_login_id,
2828           p_object_version_number           =>  1,
2829           p_old_name                        =>  NULL,
2830           p_new_name                        =>  l_name, --p_system_rec.name,
2831           p_old_description                 =>  NULL,
2832           p_new_description                 =>  p_system_rec.description,
2833 		p_old_operating_unit_id           =>  NULL,
2834 		p_new_operating_unit_id           =>  p_system_rec.operating_unit_id) ;
2835 
2836 
2837         END IF;
2838 
2839 
2840 
2841 
2842 
2843           IF x_return_status <> fnd_api.g_ret_sts_success THEN
2844               RAISE fnd_api.g_exc_error;
2845           END IF;
2846 
2847       --
2848       -- END of api body
2849       --
2850 
2851       -- standard check FOR p_commit
2852       IF fnd_api.to_boolean( p_commit )
2853       THEN
2854           COMMIT WORK;
2855       END IF;
2856 
2857 
2858 
2859 
2860       -- standard call to get message count and if count is 1, get message info.
2861       fnd_msg_pub.count_and_get
2862       (  p_count          =>   x_msg_count,
2863          p_data           =>   x_msg_data
2864       );
2865 
2866       EXCEPTION
2867           WHEN fnd_api.g_exc_error THEN
2868                 ROLLBACK TO create_system_pvt;
2869                 x_return_status := fnd_api.g_ret_sts_error ;
2870                 fnd_msg_pub.count_and_get
2871                         (p_count => x_msg_count ,
2872                          p_data => x_msg_data
2873                         );
2874 
2875           WHEN fnd_api.g_exc_unexpected_error THEN
2876                 ROLLBACK TO create_system_pvt;
2877                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
2878                 fnd_msg_pub.count_and_get
2879                        (p_count => x_msg_count ,
2880                         p_data => x_msg_data
2881                         );
2882 
2883           WHEN OTHERS THEN
2884                 ROLLBACK TO create_system_pvt;
2885                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
2886                   IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
2887                          fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
2888                   END IF;
2889                 fnd_msg_pub.count_and_get
2890                         (p_count => x_msg_count ,
2891                          p_data => x_msg_data
2892                         );
2893 
2894 END create_system;
2895 
2896 
2897 
2898 PROCEDURE update_system(
2899     p_api_version                IN     NUMBER,
2900     p_commit                     IN     VARCHAR2,
2901     p_init_msg_list              IN     VARCHAR2,
2902     p_validation_level           IN     NUMBER,
2903     p_system_rec                 IN     csi_datastructures_pub.system_rec,
2904     p_txn_rec                    IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
2905     x_return_status              OUT NOCOPY    VARCHAR2,
2906     x_msg_count                  OUT NOCOPY    NUMBER,
2907     x_msg_data                   OUT NOCOPY    VARCHAR2
2908     )
2909  IS
2910   --
2911 CURSOR  systems_csr (sys_id NUMBER) IS
2912      SELECT system_id,
2913             customer_id,
2914             system_type_code,
2915             system_number,
2916             parent_system_id,
2917             ship_to_contact_id,
2918             bill_to_contact_id,
2919             technical_contact_id,
2920             service_admin_contact_id,
2921             ship_to_site_use_id,
2922             bill_to_site_use_id,
2923             install_site_use_id,
2924             coterminate_day_month,
2925             start_date_active,
2926             end_date_active,
2927             context,
2928             attribute1,
2929             attribute2,
2930             attribute3,
2931             attribute4,
2932             attribute5,
2933             attribute6,
2934             attribute7,
2935             attribute8,
2936             attribute9,
2937             attribute10,
2938             attribute11,
2939             attribute12,
2940             attribute13,
2941             attribute14,
2942             attribute15,
2943             object_version_number,
2944 		  operating_unit_id
2945      FROM   csi_systems_b
2946      WHERE  system_id=sys_id
2947      FOR UPDATE OF object_version_number ;
2948 
2949 CURSOR  tl_csr (sys_id NUMBER) IS
2950     SELECT name,
2951            description
2952     FROM   csi_systems_tl
2953     WHERE  system_id=sys_id
2954     FOR UPDATE OF system_id ;
2955 
2956 CURSOR cont_csr IS
2957     SELECT party_id
2958     FROM   csi_i_parties cip, csi_item_instances cii
2959     WHERE  cip.instance_id=cii.instance_id
2960     AND    cii.system_id=p_system_rec.system_id
2961     AND    cip.relationship_type_code='OWNER'
2962     AND    sysdate BETWEEN NVL(cii.active_start_date,sysdate)
2963                    AND     NVL(cii.active_end_date,sysdate);
2964 
2965 CURSOR site_csr IS
2966     SELECT ip_account_id
2967     FROM   csi_item_instances cii,
2968            csi_i_parties cip,
2969            csi_ip_accounts cia
2970     WHERE  cii.instance_id=cip.instance_id
2971     AND    cii.system_id=p_system_rec.system_id
2972     AND    cip.instance_party_id=cia.instance_party_id
2973     AND    cia.relationship_type_code='OWNER'
2974     AND    sysdate BETWEEN NVL(cii.active_start_date,sysdate)
2975                    AND     NVL(cii.active_end_date,sysdate);
2976 CURSOR ins_csr IS
2977    SELECT cip.instance_id instance_id,cip.instance_party_id instance_party_id,
2978           cip.object_version_number party_obj_version_number
2979          ,cia.ip_account_id ip_account_id,cia.object_version_number account_obj_version_number
2980    FROM CSI_ITEM_INSTANCES cii,
2981         CSI_I_PARTIES cip,
2982         CSI_IP_ACCOUNTS cia
2983    WHERE cii.system_id = p_system_rec.system_id
2984    AND   cip.instance_id = cii.instance_id
2985    AND   cip.relationship_type_code='OWNER'
2986    AND   cip.instance_party_id=cia.instance_party_id
2987    AND   cia.relationship_type_code='OWNER'
2988    AND   sysdate BETWEEN NVL(cii.active_start_date,sysdate) AND NVL(cii.active_end_date,sysdate)
2989    AND   sysdate BETWEEN NVL(cip.active_start_date,sysdate) AND NVL(cip.active_end_date,sysdate)
2990    AND   sysdate BETWEEN NVL(cia.active_start_date,sysdate) AND NVL(cia.active_end_date,sysdate);
2991 --
2992 CURSOR ip_acct_csr(p_bill_to IN NUMBER,p_ship_to IN NUMBER) IS
2993    SELECT cia.ip_account_id ip_account_id,cia.object_version_number object_version_number
2994          ,cia.bill_to_address,cia.ship_to_address
2995    FROM CSI_ITEM_INSTANCES cii,
2996         CSI_I_PARTIES cip,
2997         CSI_IP_ACCOUNTS cia
2998    WHERE cii.system_id = p_system_rec.system_id
2999    AND   cip.instance_id = cii.instance_id
3000    AND   cip.relationship_type_code='OWNER'
3001    AND   cip.instance_party_id=cia.instance_party_id
3002    AND   cia.relationship_type_code='OWNER'
3003    AND   sysdate BETWEEN NVL(cii.active_start_date,sysdate) AND NVL(cii.active_end_date,sysdate)
3004    AND   sysdate BETWEEN NVL(cip.active_start_date,sysdate) AND NVL(cip.active_end_date,sysdate)
3005    AND   sysdate BETWEEN NVL(cia.active_start_date,sysdate) AND NVL(cia.active_end_date,sysdate)
3006    AND   ((NVL(cia.bill_to_address,-999) = NVL(p_bill_to,-999)) OR
3007           (NVL(cia.ship_to_address,-999) = NVL(p_ship_to,-999))) ;
3008 --
3009 CURSOR ins_party_csr IS
3010    SELECT cip.instance_party_id instance_party_id
3011    FROM CSI_ITEM_INSTANCES cii,
3012         CSI_I_PARTIES cip
3013    WHERE cii.system_id = p_system_rec.system_id
3014    AND   cip.instance_id = cii.instance_id
3015    AND   cip.relationship_type_code = 'OWNER'
3016    AND   sysdate BETWEEN NVL(cii.active_start_date,sysdate) AND NVL(cii.active_end_date,sysdate)
3017    AND   sysdate BETWEEN NVL(cip.active_start_date,sysdate) AND NVL(cip.active_end_date,sysdate);
3018 --
3019 CURSOR contact_ip_csr(p_contact_ip_id IN NUMBER) IS
3020    SELECT instance_party_id,object_version_number,party_id,relationship_type_code
3021    FROM CSI_I_PARTIES
3022    WHERE contact_ip_id = p_contact_ip_id
3023    AND   contact_flag = 'Y'
3024    AND   party_source_table = 'HZ_PARTIES'
3025    AND   sysdate BETWEEN NVL(active_start_date,sysdate) AND NVL(active_end_date,sysdate);
3026 --
3027 CURSOR install_csr(p_sys_id IN NUMBER) IS
3028    SELECT instance_id, install_location_id, object_version_number
3029    FROM   CSI_ITEM_INSTANCES
3030    WHERE  sysdate BETWEEN NVL(active_start_date,sysdate) AND NVL(active_end_date,sysdate)
3031    AND    system_id = p_sys_id;
3032 --
3033    l_msg_count                        NUMBER;
3034    l_msg_data                         VARCHAR2(2000);
3035    l_msg_index                        NUMBER;
3036    l_dummy                            VARCHAR2(1):='N';
3037    l_sys_csr                          systems_csr%ROWTYPE;
3038    l_tl_csr                           tl_csr%ROWTYPE;
3039    l_api_name                CONSTANT VARCHAR2(30) := 'update_system';
3040    l_api_version_number      CONSTANT NUMBER   := 1.0;
3041    l_rowid                            rowid;
3042    l_object_version_number            NUMBER;
3043    l_old_systems_rec                  csi_datastructures_pub.system_rec;
3044    l_new_systems_rec                  csi_datastructures_pub.system_rec:=p_system_rec;
3045    l_systems_hist_rec                 csi_datastructures_pub.system_history_rec;
3046    l_count                            NUMBER;
3047    l_full_dump                        NUMBER;
3048    l_debug_level                      NUMBER;
3049    l_customer_id                      NUMBER;
3050    l_instance_id_lst                  csi_datastructures_pub.id_tbl;
3051    l_transaction_date                 DATE;
3052    l_party_id                         NUMBER;
3053    l_party_tbl                        csi_datastructures_pub.party_tbl;
3054    l_party_account_tbl                csi_datastructures_pub.party_account_tbl;
3055    l_init_party_tbl                   csi_datastructures_pub.party_tbl;
3056    l_init_party_account_tbl           csi_datastructures_pub.party_account_tbl;
3057    l_bill_to                          NUMBER;
3058    l_ship_to                          NUMBER;
3059    l_contact_party_id                 NUMBER;
3060    l_call_flag                        VARCHAR2(1);
3061    l_date                             DATE;
3062    l_month                            VARCHAR2(20);
3063    l_exists                           VARCHAR2(1);
3064    l_xfer_flag                        VARCHAR2(1);
3065    l_bill_to_address                  NUMBER;
3066    l_ship_to_address                  NUMBER;
3067    --
3068    l_item_attribute_tbl               csi_item_instance_pvt.item_attribute_tbl;
3069    l_location_tbl                     csi_item_instance_pvt.location_tbl;
3070    l_generic_id_tbl                   csi_item_instance_pvt.generic_id_tbl;
3071    l_lookup_tbl                       csi_item_instance_pvt.lookup_tbl;
3072    l_ins_count_rec                    csi_item_instance_pvt.ins_count_rec;
3073    l_instance_rec                     csi_datastructures_pub.instance_rec;
3074    l_temp_instance_rec                csi_datastructures_pub.instance_rec;
3075    l_install_to                       NUMBER;
3076    px_oks_txn_inst_tbl                oks_ibint_pub.txn_instance_tbl;
3077    px_child_inst_tbl                  csi_item_instance_grp.child_inst_tbl;
3078    l_batch_id                         NUMBER;
3079    l_batch_type                       VARCHAR2(50);
3080    --
3081    Process_next                       EXCEPTION;
3082 
3083  BEGIN
3084       -- standard start of api savepoint
3085       SAVEPOINT update_system_pvt;
3086 
3087       -- standard call to check for call compatibility.
3088       IF NOT fnd_api.compatible_api_call ( l_api_version_number,
3089                                            p_api_version,
3090                                            l_api_name,
3091                                            g_pkg_name)
3092       THEN
3093           RAISE fnd_api.g_exc_unexpected_error;
3094       END IF;
3095 
3096 
3097       -- initialize message list if p_init_msg_list is set to true.
3098       IF fnd_api.to_boolean( p_init_msg_list )
3099       THEN
3100           fnd_msg_pub.initialize;
3101       END IF;
3102 
3103       -- initialize api return status to success
3104       x_return_status := fnd_api.g_ret_sts_success;
3105 
3106 
3107 
3108       l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
3109         IF (l_debug_level > 0) THEN
3110           csi_gen_utility_pvt.put_line( 'update_system');
3111         END IF;
3112 
3113         IF (l_debug_level > 1) THEN
3114              csi_gen_utility_pvt.put_line(
3115                                 p_api_version             ||'-'||
3116                                 p_Commit                  ||'-'||
3117                                 p_Init_Msg_list           ||'-'||
3118                                 p_Validation_level
3119                                 );
3120             csi_gen_utility_pvt.dump_sys_rec(p_system_rec);
3121             csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
3122         END IF;
3123         --
3124         IF p_system_rec.customer_id IS NULL THEN
3125            fnd_message.set_name('CSI', 'CSI_API_MANDATORY_CUSTOMER');
3126            fnd_msg_pub.add;
3127            RAISE fnd_api.g_exc_error;
3128         END IF;
3129         --
3130         IF p_system_rec.system_type_code IS NULL THEN
3131            fnd_message.set_name('CSI', 'CSI_API_MANDATORY_SYSTEM_TYPE');
3132            fnd_msg_pub.add;
3133            RAISE fnd_api.g_exc_error;
3134         END IF;
3135         --
3136 
3137       OPEN systems_csr (p_system_rec.system_id);
3138       FETCH systems_csr INTO l_sys_csr;
3139        IF ( (l_sys_csr.object_version_number<>p_system_rec.object_version_number)
3140          AND (p_system_rec.object_version_number <> fnd_api.g_miss_num) ) THEN
3141          fnd_message.set_name('CSI', 'CSI_RECORD_CHANGED');
3142           fnd_msg_pub.add;
3143          RAISE fnd_api.g_exc_error;
3144        END IF;
3145       CLOSE systems_csr;
3146 
3147       OPEN tl_csr (p_system_rec.system_id);
3148       FETCH tl_csr INTO l_tl_csr;
3149       CLOSE tl_csr;
3150 
3151 
3152       -- invoke validation procedures
3153       validate_system_id(
3154                 p_init_msg_list          => fnd_api.g_false,
3155                 p_validation_mode        => 'UPDATE',
3156                 p_system_id              => p_system_rec.system_id,
3157                 x_return_status          => x_return_status,
3158                 x_msg_count              => x_msg_count,
3159                 x_msg_data               => x_msg_data);
3160 
3161       validate_object_version_num(
3162                 p_init_msg_list          => fnd_api.g_false,
3163                 p_validation_mode        => 'UPDATE',
3164                 p_object_version_number  => p_system_rec.object_version_number,
3165                 x_return_status          => x_return_status,
3166                 x_msg_count              => x_msg_count,
3167                 x_msg_data               => x_msg_data);
3168 
3169             IF x_return_status<>fnd_api.g_ret_sts_success THEN
3170                 RAISE fnd_api.g_exc_error;
3171             END IF;
3172 
3173       validate_systems(
3174                 p_init_msg_list           => fnd_api.g_false,
3175                 p_validation_level        => p_validation_level,
3176                 p_validation_mode         => 'UPDATE',
3177                 p_system_rec              => p_system_rec,
3178                 x_return_status           => x_return_status,
3179                 x_msg_count               => x_msg_count,
3180                 x_msg_data                => x_msg_data);
3181 
3182       IF x_return_status<>fnd_api.g_ret_sts_success THEN
3183           RAISE fnd_api.g_exc_error;
3184       END IF;
3185 
3186        validate_start_end_date(
3187               p_init_msg_list          => fnd_api.g_false,
3188               p_validation_mode        => 'UPDATE',
3189               p_system_id              => p_system_rec.system_id,
3190               p_start_date             => p_system_rec.start_date_active,
3191               p_end_date               => p_system_rec.end_date_active,
3192               x_return_status          => x_return_status,
3193               x_msg_count              => x_msg_count,
3194               x_msg_data               => x_msg_data);
3195         IF x_return_status <> fnd_api.g_ret_sts_success THEN
3196               RAISE fnd_api.g_exc_error;
3197         END IF;
3198 
3199       IF (x_return_status = fnd_api.g_ret_sts_success) THEN
3200 
3201         IF( (p_system_rec.parent_system_id IS NOT NULL) AND (p_system_rec.parent_system_id <> fnd_api.g_miss_num)) THEN
3202 
3203            check_parent_child_constraint(x_system_id            =>  p_system_rec.system_id,
3204                                          x_parent_system_id     =>  p_system_rec.parent_system_id,
3205                                          x_return_status        =>  x_return_status,
3206                                          x_msg_count            =>  x_msg_count,
3207                                          x_msg_data             =>  x_msg_data);
3208         END IF;
3209       END IF;
3210       IF ( (p_system_rec.customer_id IS NOT NULL) AND (p_system_rec.customer_id<>fnd_api.g_miss_num) ) THEN
3211          l_customer_id:=p_system_rec.customer_id;
3212       ELSE
3213          l_customer_id:=l_sys_csr.customer_id;
3214       END IF;
3215 
3216 
3217       IF (x_return_status = fnd_api.g_ret_sts_success) THEN
3218         -- check for unique system name
3219             Check_Unique(
3220                           p_System_id     =>     p_system_rec.system_id
3221                          ,p_Name          =>     p_system_rec.name
3222                          ,p_Customer_ID   =>     l_customer_id
3223                          ,p_System_number =>     p_system_rec.system_number
3224                          ,x_return_status =>     x_return_status
3225                          ,x_msg_count     =>     x_msg_count
3226                          ,x_msg_data      =>     x_msg_data);
3227 
3228         END IF;
3229 
3230         IF ((p_system_rec.coterminate_day_month IS NOT NULL) AND
3231             (p_system_rec.coterminate_day_month <> FND_API.G_MISS_CHAR))
3232         THEN
3233            BEGIN
3234              l_month := p_system_rec.coterminate_day_month||'-1996';
3235              l_date  := to_date(l_month, 'DD-MM-YYYY');
3236            EXCEPTION
3237              WHEN OTHERS THEN
3238               fnd_message.set_name('CSI','CSI_INVALID_COTERM_DATE');
3239               fnd_message.set_token('Coterminate_Day_Month',p_system_rec.coterminate_day_month);
3240               fnd_msg_pub.add;
3241               RAISE fnd_api.g_exc_error;
3242            END;
3243         END IF;
3244 
3245       -- Validate Operating_unit_id
3246 	 IF p_system_rec.operating_unit_id IS NOT NULL AND
3247 	    p_system_rec.operating_unit_id <> FND_API.G_MISS_NUM AND
3248 	    p_system_rec.operating_unit_id <> nvl(l_sys_csr.operating_unit_id,-999) THEN
3249 	    IF NOT csi_org_unit_vld_pvt.Is_Valid_operating_unit_id(p_system_rec.operating_unit_id) THEN
3250             RAISE fnd_api.g_exc_error;
3251 	    END IF;
3252       END IF;
3253 	 --
3254       csi_gen_utility_pvt.put_line('p_system_rec.end_date_active is '||to_char(p_system_rec.end_date_active,'DD-MON-YYYY HH24:MI:SS'));
3255       IF   (p_system_rec.end_date_active IS NOT NULL
3256        AND p_system_rec.end_date_active <> fnd_api.g_miss_date
3257 	  AND p_system_rec.end_date_active <> nvl(l_sys_csr.end_date_active,fnd_api.g_miss_date)
3258        AND p_system_rec.end_date_active >= SYSDATE)
3259                     -- srramakr. Since HTML has the time component, TRUNC has been removed.
3260       THEN
3261       csi_systems_pvt.expire_system(
3262                  p_api_version       => p_api_version,
3263                  p_commit            => fnd_api.g_false,
3264                  p_init_msg_list     => p_init_msg_list,
3265                  p_validation_level  => p_validation_level,
3266                  p_system_rec        => p_system_rec,
3267                  p_txn_rec           => p_txn_rec,
3268                  x_instance_id_lst   => l_instance_id_lst,
3269                  x_return_status     => x_return_status,
3270                  x_msg_count         => x_msg_count,
3271                  x_msg_data          => x_msg_data
3272                   );
3273 
3274          IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
3275               fnd_message.set_name('CSI','CSI_FAILED_TO_EXPIRE_SYSTEM');
3276               fnd_message.set_token('SYSTEM_ID',p_system_rec.system_id );
3277               fnd_msg_pub.add;
3278               RAISE fnd_api.g_exc_error;
3279          END IF;
3280       ELSIF ( p_system_rec.end_date_active IS NOT NULL
3281           AND p_system_rec.end_date_active <> fnd_api.g_miss_date
3282 	     AND p_system_rec.end_date_active <> nvl(l_sys_csr.end_date_active,fnd_api.g_miss_date)
3283           AND p_system_rec.end_date_active < SYSDATE)
3284                     -- srramakr. Since HTML has the time component, TRUNC has been removed.
3285       THEN
3286         BEGIN
3287           SELECT MAX(t.transaction_date)
3288           INTO   l_transaction_date
3289           FROM   csi_systems_h s,
3290                  csi_transactions t
3291           WHERE  s.system_id=p_system_rec.system_id
3292           AND    s.transaction_id=t.transaction_id;
3293           -- srramakar. Exception handled right after select rather than at the end.
3294           -- Group function does not raise exception. Since it was there I am leaving as it is.
3295         EXCEPTION
3296           WHEN OTHERS THEN
3297            NULL;
3298         END;
3299 
3300           IF l_transaction_date > p_system_rec.end_date_active
3301           THEN
3302             fnd_message.set_name('CSI','CSI_HAS_TXNS');
3303             fnd_message.set_token('END_DATE_ACTIVE',p_system_rec.end_date_active );
3304             fnd_msg_pub.add;
3305             RAISE fnd_api.g_exc_error;
3306 	    -- srramakr. If the Active end date is < sysdate, then call to Expire_System
3307 	    -- was missed. Fixed as a part of Bug 2230262.
3308           ELSE
3309 		  csi_systems_pvt.expire_system(
3310 				   p_api_version       => p_api_version,
3311 				   p_commit            => fnd_api.g_false,
3312 				   p_init_msg_list     => p_init_msg_list,
3313 				   p_validation_level  => p_validation_level,
3314 				   p_system_rec        => p_system_rec,
3315 				   p_txn_rec           => p_txn_rec,
3316 				   x_instance_id_lst   => l_instance_id_lst,
3317 				   x_return_status     => x_return_status,
3318 				   x_msg_count         => x_msg_count,
3319 				   x_msg_data          => x_msg_data
3320 				    );
3321 
3322 			IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
3323 				fnd_message.set_name('CSI','CSI_FAILED_TO_EXPIRE_SYSTEM');
3324 				fnd_message.set_token('SYSTEM_ID',p_system_rec.system_id );
3325 				fnd_msg_pub.add;
3326 				RAISE fnd_api.g_exc_error;
3327 			END IF;
3328           END IF;
3329           -- The exception has moved up since any Raise wihin the block will hit this exception
3330           -- rather than going to the actual fnd_api.g_exc_error.
3331       ELSE
3332 
3333         IF x_return_status = fnd_api.g_ret_sts_success THEN
3334           -- invoke table handler(csi_systems_b_pkg.update_row)
3335           IF p_txn_rec.source_group_ref = 'XFER' THEN
3336 
3337            csi_systems_b_pkg.update_row_for_mu(
3338                     p_system_id                   =>  p_system_rec.system_id,
3339                     p_customer_id                 =>  p_system_rec.customer_id,
3340                     p_system_type_code            =>  p_system_rec.system_type_code,
3341                     p_system_number               =>  p_system_rec.system_number,
3342                     p_parent_system_id            =>  p_system_rec.parent_system_id,
3343                     p_ship_to_contact_id          =>  p_system_rec.ship_to_contact_id,
3344                     p_bill_to_contact_id          =>  p_system_rec.bill_to_contact_id,
3345                     p_technical_contact_id        =>  p_system_rec.technical_contact_id,
3346                     p_service_admin_contact_id    =>  p_system_rec.service_admin_contact_id,
3347                     p_ship_to_site_use_id         =>  p_system_rec.ship_to_site_use_id,
3348                     p_bill_to_site_use_id         =>  p_system_rec.bill_to_site_use_id,
3349                     p_install_site_use_id         =>  p_system_rec.install_site_use_id,
3350                     p_coterminate_day_month       =>  p_system_rec.coterminate_day_month,
3351                     p_autocreated_from_system_id  =>  p_system_rec.autocreated_from_system_id,
3352                     p_start_date_active           =>  p_system_rec.start_date_active,
3353                     p_end_date_active             =>  p_system_rec.end_date_active,
3354                     p_context                     =>  p_system_rec.context,
3355                     p_attribute1                  =>  p_system_rec.attribute1,
3356                     p_attribute2                  =>  p_system_rec.attribute2,
3357                     p_attribute3                  =>  p_system_rec.attribute3,
3358                     p_attribute4                  =>  p_system_rec.attribute4,
3359                     p_attribute5                  =>  p_system_rec.attribute5,
3360                     p_attribute6                  =>  p_system_rec.attribute6,
3361                     p_attribute7                  =>  p_system_rec.attribute7,
3362                     p_attribute8                  =>  p_system_rec.attribute8,
3363                     p_attribute9                  =>  p_system_rec.attribute9,
3364                     p_attribute10                 =>  p_system_rec.attribute10,
3365                     p_attribute11                 =>  p_system_rec.attribute11,
3366                     p_attribute12                 =>  p_system_rec.attribute12,
3367                     p_attribute13                 =>  p_system_rec.attribute13,
3368                     p_attribute14                 =>  p_system_rec.attribute14,
3369                     p_attribute15                 =>  p_system_rec.attribute15,
3370                     p_created_by                  =>  fnd_api.g_miss_num,
3371                     p_creation_date               =>  fnd_api.g_miss_date,
3372                     p_last_updated_by             =>  fnd_global.user_id,
3373                     p_last_update_date            =>  SYSDATE,
3374                     p_last_update_login           =>  fnd_global.conc_login_id,
3375                     p_object_version_number       =>  p_system_rec.object_version_number,
3376                     p_name                        =>  p_system_rec.name,
3377                     p_description                 =>  p_system_rec.description,
3378                     p_operating_unit_id           =>  p_system_rec.operating_unit_id,
3379                     p_request_id                  =>  p_system_rec.request_id,
3380                     p_program_application_id      =>  p_system_rec.program_application_id,
3381                     p_program_id                  =>  p_system_rec.program_id,
3382                     p_program_update_date         =>  p_system_rec.program_update_date);
3383           ELSE
3384 
3385           csi_systems_b_pkg.update_row(
3386                     p_system_id                   =>  p_system_rec.system_id,
3387                     p_customer_id                 =>  p_system_rec.customer_id,
3388                     p_system_type_code            =>  p_system_rec.system_type_code,
3389                     p_system_number               =>  p_system_rec.system_number,
3390                     p_parent_system_id            =>  p_system_rec.parent_system_id,
3391                     p_ship_to_contact_id          =>  p_system_rec.ship_to_contact_id,
3392                     p_bill_to_contact_id          =>  p_system_rec.bill_to_contact_id,
3393                     p_technical_contact_id        =>  p_system_rec.technical_contact_id,
3394                     p_service_admin_contact_id    =>  p_system_rec.service_admin_contact_id,
3395                     p_ship_to_site_use_id         =>  p_system_rec.ship_to_site_use_id,
3396                     p_bill_to_site_use_id         =>  p_system_rec.bill_to_site_use_id,
3397                     p_install_site_use_id         =>  p_system_rec.install_site_use_id,
3398                     p_coterminate_day_month       =>  p_system_rec.coterminate_day_month,
3399                     p_autocreated_from_system_id  =>  p_system_rec.autocreated_from_system_id,
3400                     p_start_date_active           =>  p_system_rec.start_date_active,
3401                     p_end_date_active             =>  p_system_rec.end_date_active,
3402                     p_context                     =>  p_system_rec.context,
3403                     p_attribute1                  =>  p_system_rec.attribute1,
3404                     p_attribute2                  =>  p_system_rec.attribute2,
3405                     p_attribute3                  =>  p_system_rec.attribute3,
3406                     p_attribute4                  =>  p_system_rec.attribute4,
3407                     p_attribute5                  =>  p_system_rec.attribute5,
3408                     p_attribute6                  =>  p_system_rec.attribute6,
3409                     p_attribute7                  =>  p_system_rec.attribute7,
3410                     p_attribute8                  =>  p_system_rec.attribute8,
3411                     p_attribute9                  =>  p_system_rec.attribute9,
3412                     p_attribute10                 =>  p_system_rec.attribute10,
3413                     p_attribute11                 =>  p_system_rec.attribute11,
3414                     p_attribute12                 =>  p_system_rec.attribute12,
3415                     p_attribute13                 =>  p_system_rec.attribute13,
3416                     p_attribute14                 =>  p_system_rec.attribute14,
3417                     p_attribute15                 =>  p_system_rec.attribute15,
3418                     p_created_by                  =>  fnd_api.g_miss_num,
3419                     p_creation_date               =>  fnd_api.g_miss_date,
3420                     p_last_updated_by             =>  fnd_global.user_id,
3421                     p_last_update_date            =>  SYSDATE,
3422                     p_last_update_login           =>  fnd_global.conc_login_id,
3423                     p_object_version_number       =>  p_system_rec.object_version_number,
3424                     p_name                        =>  p_system_rec.name,
3425                     p_description                 =>  p_system_rec.description,
3426                     p_operating_unit_id           =>  p_system_rec.operating_unit_id,
3427                     p_request_id                  =>  p_system_rec.request_id,
3428                     p_program_application_id      =>  p_system_rec.program_application_id,
3429                     p_program_id                  =>  p_system_rec.program_id,
3430                     p_program_update_date         =>  p_system_rec.program_update_date);
3431            END IF;
3432 
3433             csi_transactions_pvt.create_transaction
3434           (
3435              p_api_version            => p_api_version
3436             ,p_commit                 => p_commit
3437             ,p_init_msg_list          => p_init_msg_list
3438             ,p_validation_level       => p_validation_level
3439             ,p_success_if_exists_flag => 'Y'
3440             ,p_transaction_rec        => p_txn_rec
3441             ,x_return_status          => x_return_status
3442             ,x_msg_count              => x_msg_count
3443             ,x_msg_data               => x_msg_data
3444           );
3445 
3446          IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
3447               fnd_message.set_name('CSI','CSI_FAILED_TO_VALIDATE_TXN');
3448               fnd_message.set_token('transaction_id',p_txn_rec.transaction_id );
3449                   fnd_msg_pub.add;
3450 
3451               RAISE fnd_api.g_exc_error;
3452               RETURN;
3453          END IF;
3454 
3455             l_old_systems_rec.system_id:=l_sys_csr.system_id;
3456             l_old_systems_rec.customer_id:=l_sys_csr.customer_id;
3457             l_old_systems_rec.system_type_code:=l_sys_csr.system_type_code;
3458             l_old_systems_rec.system_number:=l_sys_csr.system_number;
3459             l_old_systems_rec.parent_system_id:=l_sys_csr.parent_system_id;
3460             l_old_systems_rec.ship_to_contact_id:=l_sys_csr.ship_to_contact_id;
3461             l_old_systems_rec.bill_to_contact_id:=l_sys_csr.bill_to_contact_id;
3462             l_old_systems_rec.technical_contact_id:=l_sys_csr.technical_contact_id;
3463             l_old_systems_rec.service_admin_contact_id:=l_sys_csr.service_admin_contact_id;
3464             l_old_systems_rec.ship_to_site_use_id:=l_sys_csr.ship_to_site_use_id;
3465             l_old_systems_rec.bill_to_site_use_id:=l_sys_csr.bill_to_site_use_id;
3466             l_old_systems_rec.install_site_use_id:=l_sys_csr.install_site_use_id;
3467             l_old_systems_rec.coterminate_day_month:=l_sys_csr.coterminate_day_month;
3468             l_old_systems_rec.start_date_active:=l_sys_csr.start_date_active;
3469             l_old_systems_rec.end_date_active:=l_sys_csr.end_date_active;
3470             l_old_systems_rec.context:=l_sys_csr.context;
3471             l_old_systems_rec.attribute1:=l_sys_csr.attribute1;
3472             l_old_systems_rec.attribute2:=l_sys_csr.attribute2;
3473             l_old_systems_rec.attribute3:=l_sys_csr.attribute3;
3474             l_old_systems_rec.attribute4:=l_sys_csr.attribute4;
3475             l_old_systems_rec.attribute5:=l_sys_csr.attribute5;
3476             l_old_systems_rec.attribute6:=l_sys_csr.attribute6;
3477             l_old_systems_rec.attribute7:=l_sys_csr.attribute7;
3478             l_old_systems_rec.attribute8:=l_sys_csr.attribute8;
3479             l_old_systems_rec.attribute9:=l_sys_csr.attribute9;
3480             l_old_systems_rec.attribute10:=l_sys_csr.attribute10;
3481             l_old_systems_rec.attribute11:=l_sys_csr.attribute11;
3482             l_old_systems_rec.attribute12:=l_sys_csr.attribute12;
3483             l_old_systems_rec.attribute13:=l_sys_csr.attribute13;
3484             l_old_systems_rec.attribute14:=l_sys_csr.attribute14;
3485             l_old_systems_rec.attribute15:=l_sys_csr.attribute15;
3486             l_old_systems_rec.object_version_number:=l_sys_csr.object_version_number;
3487             l_old_systems_rec.name:=l_tl_csr.name;
3488             l_old_systems_rec.description:=l_tl_csr.description;
3489 		  l_old_systems_rec.operating_unit_id := l_sys_csr.operating_unit_id;
3490 
3491                 validate_history(p_old_systems_rec  =>  l_old_systems_rec,
3492                                  p_new_systems_rec  =>  l_new_systems_rec,
3493                                  p_transaction_id   =>  p_txn_rec.transaction_id,
3494                                  p_flag             =>  NULL,
3495                                  p_sysdate          =>  NULL,
3496                                  x_return_status    =>  x_return_status,
3497                                  x_msg_count        =>  x_msg_count,
3498                                  x_msg_data         =>  x_msg_data
3499                                  );
3500 
3501 
3502      /************* COMMENTED SINCE API SHOULD BE CALLED RATHER THAN DIRECT UPDATE
3503        check version 115.54 for the old code
3504      ***********************  END OF COMMENT ****************/
3505    END IF;
3506       -- Bug # 2199317 srramakr
3507       -- When a system is Xferred, based on Cascade_cust_to_inst_flag, we need to cascade the account
3508       -- changes to Instances.
3509       l_xfer_flag := 'N';
3510 
3511       IF ( (p_system_rec.customer_id IS NOT NULL) AND (p_system_rec.customer_id<>fnd_api.g_miss_num) AND
3512            (p_system_rec.customer_id <> l_sys_csr.customer_id) AND
3513            (nvl(p_system_rec.CASCADE_CUST_TO_INS_FLAG,'N') = 'Y') ) THEN
3514 	 Begin
3515 	    select party_id
3516 	    into l_party_id
3517 	    from HZ_CUST_ACCOUNTS
3518 	    where cust_account_id = p_system_rec.customer_id;
3519 	 Exception
3520 	    when others then
3521 	       null;
3522 	 End;
3523          --
3524          l_xfer_flag := 'Y';
3525          -- srramakr Bug 3621181. Bill_to and Ship_to should get changed accordingly
3526          IF nvl(p_system_rec.bill_to_site_use_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3527             l_bill_to_address := null;
3528          ELSE
3529             l_bill_to_address := p_system_rec.bill_to_site_use_id;
3530          END IF;
3531          --
3532          IF nvl(p_system_rec.ship_to_site_use_id,fnd_api.g_miss_num) = fnd_api.g_miss_num THEN
3533             l_ship_to_address := null;
3534          ELSE
3535             l_ship_to_address := p_system_rec.ship_to_site_use_id;
3536          END IF;
3537          --
3538          For v_rec in ins_csr
3539          Loop
3540             Begin
3541                l_exists := 'N';
3542                Begin
3543                   select 'Y'
3544                   into l_exists
3545                   from CSI_ITEM_INSTANCES
3546                   where instance_id = v_rec.instance_id
3547                   and   owner_party_id = l_party_id
3548                   and   nvl(owner_party_account_id,-999) = p_system_rec.customer_id;
3549                Exception
3550                   when no_data_found then
3551                      l_exists := 'N';
3552                End;
3553                --
3554                -- srramakr Bug # 3531056
3555                -- If the child instance also belongs to the same system then the ownership would have got
3556                -- cascaded from the parent. So, there is no need to change the owner again.
3557                IF l_exists = 'Y' THEN
3558                   csi_gen_utility_pvt.put_line('Instance '||to_char(v_rec.instance_id)||'  Already Transfered');
3559                   Raise Process_next;
3560                END IF;
3561                --
3562 	       l_party_tbl := l_init_party_tbl;
3563 	       l_party_account_tbl := l_init_party_account_tbl;
3564 	       l_party_tbl(1).party_id := l_party_id;
3565 	       l_party_tbl(1).instance_id := v_rec.instance_id;
3566 	       l_party_tbl(1).instance_party_id := v_rec.instance_party_id;
3567 	       l_party_tbl(1).relationship_type_code := 'OWNER';
3568 	       l_party_tbl(1).object_version_number := v_rec.party_obj_version_number;
3569 	       l_party_account_tbl(1).instance_party_id := v_rec.instance_party_id;
3570 	       l_party_account_tbl(1).parent_tbl_index := 1;
3571 	       l_party_account_tbl(1).party_account_id := p_system_rec.customer_id;
3572 	       l_party_account_tbl(1).relationship_type_code := 'OWNER';
3573 	       l_party_account_tbl(1).object_version_number := v_rec.account_obj_version_number;
3574 	       l_party_account_tbl(1).system_id := p_system_rec.system_id;
3575                l_party_account_tbl(1).bill_to_address := l_bill_to_address;
3576                l_party_account_tbl(1).ship_to_address := l_ship_to_address;
3577 	       --
3578 	       csi_party_relationships_pub.update_inst_party_relationship
3579 		   (p_api_version      => p_api_version
3580 		   ,p_commit           => fnd_api.g_false
3581 		   ,p_init_msg_list    => p_init_msg_list
3582 		   ,p_validation_level => p_validation_level
3583 		   ,p_party_tbl        => l_party_tbl
3584 		   ,p_party_account_tbl=> l_party_account_tbl
3585 		   ,p_txn_rec          => p_txn_rec
3586                    ,p_oks_txn_inst_tbl => px_oks_txn_inst_tbl
3587 		   ,x_return_status    => x_return_status
3588 		   ,x_msg_count        => x_msg_count
3589 		   ,x_msg_data         => x_msg_data
3590 		     );
3591 
3592 	       IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
3593 		  csi_gen_utility_pvt.put_line('Error from CSI_PARTY_RELATIONSHIPS_PUB.. ');
3594 		  l_msg_index := 1;
3595 		  l_msg_count := x_msg_count;
3596 		  WHILE l_msg_count > 0
3597 		     LOOP
3598 			x_msg_data := FND_MSG_PUB.GET
3599 				       ( l_msg_index,
3600 					 FND_API.G_FALSE );
3601 			 csi_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
3602 			 l_msg_index := l_msg_index + 1;
3603 			 l_msg_count := l_msg_count - 1;
3604 		      END LOOP;
3605 		      RAISE FND_API.G_EXC_ERROR;
3606 	       END IF;
3607             Exception
3608                when Process_next then
3609                   null;
3610             End;
3611          End Loop;
3612          --
3613          IF px_oks_txn_inst_tbl.count > 0 THEN
3614             csi_gen_utility_pvt.dump_oks_txn_inst_tbl(px_oks_txn_inst_tbl);
3615             csi_gen_utility_pvt.put_line('Calling OKS Core API...');
3616 	    --
3617 	    IF p_txn_rec.transaction_type_id = 3 THEN
3618 	       l_batch_id := p_txn_rec.source_header_ref_id;
3619 	       l_batch_type := p_txn_rec.source_group_ref;
3620 	    ELSE
3621 	       l_batch_id := NULL;
3622 	       l_batch_type := NULL;
3623 	    END IF;
3624 	    --
3625             UPDATE CSI_TRANSACTIONS
3626             set contracts_invoked = 'Y'
3627             where transaction_id = p_txn_rec.transaction_id;
3628             --
3629 	    OKS_IBINT_PUB.IB_interface
3630 	       (
3631 		 P_Api_Version           =>  1.0,
3632 		 P_init_msg_list         =>  p_init_msg_list,
3633 		 P_single_txn_date_flag  =>  'Y',
3634 		 P_Batch_type            =>  l_batch_type,
3635 		 P_Batch_ID              =>  l_batch_id,
3636 		 P_OKS_Txn_Inst_tbl      =>  px_oks_txn_inst_tbl,
3637 		 x_return_status         =>  x_return_status,
3638 		 x_msg_count             =>  x_msg_count,
3639 		 x_msg_data              =>  x_msg_data
3640 	      );
3641 	    --
3642 	    IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
3643 	       l_msg_index := 1;
3644 	       l_msg_count := x_msg_count;
3645 	       WHILE l_msg_count > 0 LOOP
3646 		  x_msg_data := FND_MSG_PUB.GET
3647 			  (  l_msg_index,
3648 			     FND_API.G_FALSE        );
3649 		  csi_gen_utility_pvt.put_line( 'Error from OKS_IBINT_PUB.IB_interface..');
3650 		  csi_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
3651 		  l_msg_index := l_msg_index + 1;
3652 		  l_msg_count := l_msg_count - 1;
3653 	       END LOOP;
3654 	       RAISE FND_API.G_EXC_ERROR;
3655 	    END IF;
3656          END IF;
3657       END IF;
3658       --
3659       --
3660       -- Bug # 3072178 rtalluri
3661       -- When a install_site_use_id changes for a system, then the install details should be cascaded to
3662       -- all the underlying instances associated to the system
3663       --
3664       If ( ((nvl(p_system_rec.install_site_use_id,-999) <> fnd_api.g_miss_num) AND
3665             (nvl(p_system_rec.install_site_use_id,-999) <> nvl(l_sys_csr.install_site_use_id,-999))) AND
3666             (nvl(p_system_rec.INSTALL_TO_SITE_CHANGE_FLAG,'N') = 'Y') )
3667       Then
3668 
3669          For v_install_rec in install_csr(l_sys_csr.system_id)
3670          Loop
3671             Begin
3672 	       l_instance_rec :=l_temp_instance_rec;
3673 	       l_call_flag := 'N';
3674 	       IF nvl(v_install_rec.install_location_id,-999) = nvl(l_sys_csr.install_site_use_id,-999) THEN
3675 		  IF p_system_rec.install_site_use_id = FND_API.G_MISS_NUM OR
3676 		     nvl(p_system_rec.INSTALL_TO_SITE_CHANGE_FLAG,'N') <> 'Y' THEN
3677 		     l_install_to := v_install_rec.install_location_id;
3678 		  ELSE
3679 		     l_install_to := p_system_rec.install_site_use_id;
3680 		     l_call_flag := 'Y';
3681 		  END IF;
3682 	       ELSE
3683 		  l_install_to := v_install_rec.install_location_id;
3684 	       END IF;
3685 
3686 	       IF l_call_flag = 'Y' THEN
3687 		  l_exists := 'N';
3688 		  Begin
3689 	   	     select 'Y'
3690 	             into l_exists
3691 	             from CSI_ITEM_INSTANCES
3692 		     where instance_id = v_install_rec.instance_id
3693 		     and   nvl(install_location_id,-999) = l_install_to;
3694                   Exception
3695                      when no_data_found then
3696                         l_exists := 'N';
3697 		  End;
3698                   --
3699                   -- srramakr Bug # 3531056
3700                   -- If the child instance also belongs to the same system then the install location
3701                   -- would have got cascaded from the parent. So, there is no need to change this again.
3702                   --
3703                   IF l_exists = 'Y' THEN
3704                      csi_gen_utility_pvt.put_line('Install Location for instance '||to_char(v_install_rec.instance_id)||' already changed..');
3705                      Raise Process_next;
3706                   END IF;
3707                   --
3708 		  l_instance_rec.instance_id           := v_install_rec.instance_id;
3709 		  l_instance_rec.object_version_number := v_install_rec.object_version_number;
3710 		  l_instance_rec.install_location_id   := l_install_to; --p_system_rec.install_site_use_id;
3711 
3712 		  csi_item_instance_pvt.update_Item_Instance
3713 		  (
3714 		    p_api_version         => p_api_version
3715 		   ,p_commit              => fnd_api.g_false
3716 		   ,p_init_msg_list       => p_init_msg_list
3717 		   ,p_validation_level    => p_validation_level
3718 		   ,p_instance_rec        => l_instance_rec
3719 		   ,p_txn_rec             => p_txn_rec
3720 		   ,x_instance_id_lst     => l_instance_id_lst
3721 		   ,x_return_status       => x_return_status
3722 		   ,x_msg_count           => x_msg_count
3723 		   ,x_msg_data            => x_msg_data
3724 		   ,p_item_attribute_tbl  => l_item_attribute_tbl
3725 		   ,p_location_tbl        => l_location_tbl
3726 		   ,p_generic_id_tbl      => l_generic_id_tbl
3727 		   ,p_lookup_tbl          => l_lookup_tbl
3728 		   ,p_ins_count_rec       => l_ins_count_rec
3729                    ,p_oks_txn_inst_tbl    => px_oks_txn_inst_tbl
3730                    ,p_child_inst_tbl      => px_child_inst_tbl
3731 		   );
3732 		  If NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) Then
3733 		     csi_gen_utility_pvt.put_line('Error from csi_item_instance_pvt.update_item_instance while updating Install Location.');
3734 		     l_msg_index := 1;
3735 		     l_msg_count := x_msg_count;
3736 		     While l_msg_count > 0
3737 			Loop
3738 			  x_msg_data := FND_MSG_PUB.GET
3739 			    ( l_msg_index,
3740 			      FND_API.G_FALSE );
3741 			      csi_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
3742 			    l_msg_index := l_msg_index + 1;
3743 			    l_msg_count := l_msg_count - 1;
3744 			End Loop;
3745 		     Raise FND_API.G_EXC_ERROR;
3746 		  End If;
3747 	       End If;
3748             Exception
3749                when Process_next then
3750                   null;
3751             End;
3752          End Loop;
3753       End If;
3754       --
3755       -- srramakr Bug # 2368440. When Bill_to or Ship_to address is changed, it should cascade to
3756       -- instances. The change will take place for the Owner Party Account with the same addresses.
3757       -- srramakr Bug 3621181 No need to cascade the addresses if ownership xfer occured.
3758       IF l_xfer_flag <> 'Y' THEN
3759 	 IF ( (((nvl(p_system_rec.bill_to_site_use_id,-999) <> fnd_api.g_miss_num) AND
3760 	      (nvl(p_system_rec.bill_to_site_use_id,-999) <> nvl(l_sys_csr.bill_to_site_use_id,-999))) OR
3761 	      ((nvl(p_system_rec.ship_to_site_use_id,-999) <> fnd_api.g_miss_num) AND
3762 	       (nvl(p_system_rec.ship_to_site_use_id,-999) <> nvl(l_sys_csr.ship_to_site_use_id,-999)))) AND
3763 	      ((nvl(p_system_rec.BILL_TO_SITE_CHANGE_FLAG,'N') = 'Y') OR
3764 	       (nvl(p_system_rec.SHIP_TO_SITE_CHANGE_FLAG,'N') = 'Y')) ) THEN
3765 	    For v_rec in ip_acct_csr(l_sys_csr.bill_to_site_use_id,l_sys_csr.ship_to_site_use_id)
3766 	    Loop
3767 	       l_party_account_tbl := l_init_party_account_tbl;
3768 	       l_call_flag := 'N';
3769 	       IF nvl(v_rec.bill_to_address,-999) = nvl(l_sys_csr.bill_to_site_use_id,-999) THEN
3770 		  IF p_system_rec.bill_to_site_use_id = FND_API.G_MISS_NUM OR
3771 		     nvl(p_system_rec.BILL_TO_SITE_CHANGE_FLAG,'N') <> 'Y' THEN
3772 		     l_bill_to := v_rec.bill_to_address;
3773 		  ELSE
3774 		     l_bill_to := p_system_rec.bill_to_site_use_id;
3775 		     l_call_flag := 'Y';
3776 		  END IF;
3777 	       ELSE
3778 		  l_bill_to := v_rec.bill_to_address;
3779 	       END IF;
3780 	       --
3781 	       IF nvl(v_rec.ship_to_address,-999) = nvl(l_sys_csr.ship_to_site_use_id,-999) THEN
3782 		  IF p_system_rec.ship_to_site_use_id = FND_API.G_MISS_NUM OR
3783 		     nvl(p_system_rec.SHIP_TO_SITE_CHANGE_FLAG,'N') <> 'Y' THEN
3784 		     l_ship_to := v_rec.ship_to_address;
3785 		  ELSE
3786 		     l_ship_to := p_system_rec.ship_to_site_use_id;
3787 		     l_call_flag := 'Y';
3788 		  END IF;
3789 	       ELSE
3790 		  l_ship_to := v_rec.ship_to_address;
3791 	       END IF;
3792 	       --
3793 	       IF l_call_flag = 'Y' THEN
3794 		  l_party_account_tbl(1).ip_account_id := v_rec.ip_account_id;
3795 		  l_party_account_tbl(1).object_version_number := v_rec.object_version_number;
3796 		  l_party_account_tbl(1).bill_to_address := l_bill_to;
3797 		  l_party_account_tbl(1).ship_to_address := l_ship_to;
3798 		 --
3799 		 -- Call Update_Inst_party_account
3800 		  csi_party_relationships_pvt.update_inst_party_account
3801 			      (    p_api_version         => p_api_version
3802 				  ,p_commit              => fnd_api.g_false
3803 				  ,p_init_msg_list       => p_init_msg_list
3804 				  ,p_validation_level    => p_validation_level
3805 				  ,p_party_account_rec   => l_party_account_tbl(1)
3806 				  ,p_txn_rec             => p_txn_rec
3807                                   ,p_oks_txn_inst_tbl => px_oks_txn_inst_tbl
3808 				  ,x_return_status       => x_return_status
3809 				  ,x_msg_count           => x_msg_count
3810 				  ,x_msg_data            => x_msg_data
3811 			      );
3812 		  IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
3813 		    csi_gen_utility_pvt.put_line('Error from while updating Accounts.');
3814 		    l_msg_index := 1;
3815 		    l_msg_count := x_msg_count;
3816 		    WHILE l_msg_count > 0
3817 		    LOOP
3818 		       x_msg_data := FND_MSG_PUB.GET
3819 				      ( l_msg_index,
3820 					 FND_API.G_FALSE );
3821 		       csi_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
3822 		       l_msg_index := l_msg_index + 1;
3823 		       l_msg_count := l_msg_count - 1;
3824 		    END LOOP;
3825 		    RAISE FND_API.G_EXC_ERROR;
3826 		  END IF;
3827 	       END IF;
3828 		 --
3829 	    End Loop;
3830 	 END IF;
3831       END IF; -- l_xfer_flag check
3832 	 --
3833       -- Updating the contact information
3834       IF (nvl(p_system_rec.BILL_TO_CONT_CHANGE_FLAG,'N') = 'Y' OR
3835          nvl(p_system_rec.SHIP_TO_CONT_CHANGE_FLAG,'N') = 'Y' OR
3836          nvl(p_system_rec.TECH_CONT_CHANGE_FLAG,'N') = 'Y' OR
3837          nvl(p_system_rec.SERV_ADMIN_CONT_CHANGE_FLAG,'N') = 'Y') THEN
3838          For party_rec in ins_party_csr
3839          Loop
3840             For cont_rec in contact_ip_csr(party_rec.instance_party_id)
3841             Loop
3842                l_party_tbl := l_init_party_tbl;
3843                l_call_flag := 'N';
3844                IF cont_rec.relationship_type_code = 'BILL_TO' AND
3845                   nvl(cont_rec.party_id,-999) = nvl(l_sys_csr.bill_to_contact_id,-999) THEN
3846                   IF p_system_rec.bill_to_contact_id = FND_API.G_MISS_NUM OR
3847                      p_system_rec.bill_to_contact_id IS NULL OR
3848                      nvl(p_system_rec.bill_to_cont_change_flag,'N') <> 'Y' THEN
3849                      l_contact_party_id := cont_rec.party_id;
3850                   ELSE
3851                      l_contact_party_id := p_system_rec.bill_to_contact_id;
3852                      l_call_flag := 'Y';
3853                   END IF;
3854                END IF; -- End of Bill To
3855                --
3856                IF cont_rec.relationship_type_code = 'SHIP_TO' AND
3857                   nvl(cont_rec.party_id,-999) = nvl(l_sys_csr.ship_to_contact_id,-999) THEN
3858                   IF p_system_rec.ship_to_contact_id = FND_API.G_MISS_NUM OR
3859                      p_system_rec.ship_to_contact_id IS NULL OR
3860                      nvl(p_system_rec.ship_to_cont_change_flag,'N') <> 'Y' THEN
3861                      l_contact_party_id := cont_rec.party_id;
3862                   ELSE
3863                      l_contact_party_id := p_system_rec.ship_to_contact_id;
3864                      l_call_flag := 'Y';
3865                   END IF;
3866                END IF; -- End of Ship To
3867                --
3868                IF cont_rec.relationship_type_code = 'TECHNICAL' AND
3869                   nvl(cont_rec.party_id,-999) = nvl(l_sys_csr.technical_contact_id,-999) THEN
3870                   IF p_system_rec.technical_contact_id = FND_API.G_MISS_NUM OR
3871                      p_system_rec.technical_contact_id IS NULL OR
3872                      nvl(p_system_rec.tech_cont_change_flag,'N') <> 'Y' THEN
3873                      l_contact_party_id := cont_rec.party_id;
3874                   ELSE
3875                      l_contact_party_id := p_system_rec.technical_contact_id;
3876                      l_call_flag := 'Y';
3877                   END IF;
3878                END IF; -- End of Technical
3879                --
3880                IF cont_rec.relationship_type_code = 'SERV_ADMIN' AND
3881                   nvl(cont_rec.party_id,-999) = nvl(l_sys_csr.service_admin_contact_id,-999) THEN
3882                   IF p_system_rec.service_admin_contact_id = FND_API.G_MISS_NUM OR
3883                      p_system_rec.service_admin_contact_id IS NULL OR
3884                      nvl(p_system_rec.serv_admin_cont_change_flag,'N') <> 'Y' THEN
3885                      l_contact_party_id := cont_rec.party_id;
3886                   ELSE
3887                      l_contact_party_id := p_system_rec.service_admin_contact_id;
3888                      l_call_flag := 'Y';
3889                   END IF;
3890                END IF; -- End of Service Admin
3891                -- Build the Party_tbl and call Update_inst_party_relationship API
3892                IF l_call_flag = 'Y' THEN
3893 		  l_party_tbl(1).instance_party_id := cont_rec.instance_party_id;
3894 		  l_party_tbl(1).object_version_number := cont_rec.object_version_number;
3895 		  l_party_tbl(1).party_id := l_contact_party_id;
3896 		  --
3897 		  csi_party_relationships_pvt.update_inst_party_relationship
3898 		      (p_api_version      => p_api_version
3899 		      ,p_commit           => fnd_api.g_false
3900 		      ,p_init_msg_list    => p_init_msg_list
3901 		      ,p_validation_level => p_validation_level
3902 		      ,p_party_rec        => l_party_tbl(1)
3903 		      ,p_txn_rec          => p_txn_rec
3904 		      ,x_return_status    => x_return_status
3905 		      ,x_msg_count        => x_msg_count
3906 		      ,x_msg_data         => x_msg_data
3907 			);
3908 
3909 		 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
3910 		      csi_gen_utility_pvt.put_line('Error from CSI_PARTY_RELATIONSHIPS_PVT.. ');
3911 		      l_msg_index := 1;
3912 		      l_msg_count := x_msg_count;
3913 		     WHILE l_msg_count > 0
3914 			LOOP
3915 			   x_msg_data := FND_MSG_PUB.GET
3916 					  ( l_msg_index,
3917 					    FND_API.G_FALSE );
3918 			    csi_gen_utility_pvt.put_line('MESSAGE DATA = '||x_msg_data);
3919 			    l_msg_index := l_msg_index + 1;
3920 			    l_msg_count := l_msg_count - 1;
3921 			 END LOOP;
3922 			 RAISE FND_API.G_EXC_ERROR;
3923 		 END IF;
3924 	       END IF; -- End of call_flag check
3925 		 --
3926             End Loop;
3927          End Loop;
3928       END IF;
3929 
3930         IF x_return_status <> fnd_api.g_ret_sts_success THEN
3931               RAISE fnd_api.g_exc_error;
3932         END IF;
3933       -- standard check for p_commit
3934       IF fnd_api.to_boolean( p_commit )
3935       THEN
3936           COMMIT WORK;
3937       END IF;
3938 
3939       -- standard call to get message count and if count is 1, get message info.
3940       fnd_msg_pub.count_and_get
3941       (  p_count          =>   x_msg_count,
3942          p_data           =>   x_msg_data
3943       );
3944       END IF;
3945       EXCEPTION
3946           WHEN fnd_api.g_exc_error THEN
3947                 ROLLBACK TO update_system_pvt;
3948                 x_return_status := fnd_api.g_ret_sts_error ;
3949                 fnd_msg_pub.count_and_get
3950                         (p_count => x_msg_count ,
3951                          p_data => x_msg_data
3952                         );
3953 
3954           WHEN fnd_api.g_exc_unexpected_error THEN
3955                 ROLLBACK TO update_system_pvt;
3956                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
3957                 fnd_msg_pub.count_and_get
3958                        (p_count => x_msg_count ,
3959                         p_data => x_msg_data
3960                         );
3961 
3962           WHEN OTHERS THEN
3963                 ROLLBACK TO update_system_pvt;
3964                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
3965                   IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
3966                          fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
3967                   END IF;
3968                 fnd_msg_pub.count_and_get
3969                         (p_count => x_msg_count ,
3970                          p_data => x_msg_data
3971                         );
3972 
3973 END update_system;
3974 
3975 PROCEDURE expire_system
3976  (
3977      p_api_version                 IN     NUMBER,
3978      p_commit                      IN     VARCHAR2,
3979      p_init_msg_list               IN     VARCHAR2,
3980      p_validation_level            IN     NUMBER,
3981      p_system_rec                  IN     csi_datastructures_pub.system_rec,
3982      p_txn_rec                     IN OUT NOCOPY csi_datastructures_pub.transaction_rec,
3983      x_instance_id_lst             OUT NOCOPY    csi_datastructures_pub.id_tbl,
3984      x_return_status               OUT NOCOPY    VARCHAR2,
3985      x_msg_count                   OUT NOCOPY    NUMBER,
3986      x_msg_data                    OUT NOCOPY    VARCHAR2
3987  ) IS
3988  CURSOR  systems_csr (p_system_id NUMBER) IS
3989      SELECT system_id,
3990             customer_id,
3991             system_type_code,
3992             system_number,
3993             parent_system_id,
3994             ship_to_contact_id,
3995             bill_to_contact_id,
3996             technical_contact_id,
3997             service_admin_contact_id,
3998             ship_to_site_use_id,
3999             bill_to_site_use_id,
4000             install_site_use_id,
4001             coterminate_day_month,
4002             start_date_active,
4003             end_date_active,
4004             context,
4005             attribute1,
4006             attribute2,
4007             attribute3,
4008             attribute4,
4009             attribute5,
4010             attribute6,
4011             attribute7,
4012             attribute8,
4013             attribute9,
4014             attribute10,
4015             attribute11,
4016             attribute12,
4017             attribute13,
4018             attribute14,
4019             attribute15,
4020             object_version_number,
4021 		  operating_unit_id
4022      FROM   csi_systems_b
4023      WHERE  system_id=p_system_id
4024      FOR UPDATE OF object_version_number ;
4025 
4026 CURSOR  tl_csr (sys_id NUMBER) IS
4027     SELECT name,
4028            description
4029     FROM   csi_systems_tl
4030     WHERE  system_id=sys_id
4031     FOR UPDATE OF system_id;
4032 
4033 
4034 CURSOR expire_instance_csr(p_system_id  NUMBER) IS
4035        SELECT *
4036        FROM   csi_item_instances
4037        WHERE  system_id=p_system_id
4038        AND   sysdate BETWEEN NVL(active_start_date,(sysdate -1))
4039                  AND     NVL(active_end_date,(sysdate +1));
4040 
4041 l_sys_csr                          systems_csr%ROWTYPE;
4042 l_tl_csr                           tl_csr%ROWTYPE;
4043 l_sysdate                          DATE     :=SYSDATE;
4044 l_api_version_number      CONSTANT NUMBER   := 1.0;
4045 l_api_name                CONSTANT VARCHAR2(30) := 'expire_system';
4046 l_system_rec                       csi_datastructures_pub.system_rec;
4047 l_old_systems_rec                  csi_datastructures_pub.system_rec;
4048 l_new_systems_rec                  csi_datastructures_pub.system_rec;
4049 l_instance_rec                     csi_datastructures_pub.instance_rec;
4050 l_init_instance_rec                csi_datastructures_pub.instance_rec;
4051 l_debug_level                      NUMBER;
4052 l_ext_attrib_values_tbl            csi_datastructures_pub.extend_attrib_values_tbl;
4053 l_party_tbl                        csi_datastructures_pub.party_tbl;
4054 l_account_tbl                      csi_datastructures_pub.party_account_tbl;
4055 l_pricing_attrib_tbl               csi_datastructures_pub.pricing_attribs_tbl;
4056 l_org_assignments_tbl              csi_datastructures_pub.organization_units_tbl;
4057 l_asset_assignment_tbl             csi_datastructures_pub.instance_asset_tbl;
4058 l_exists                           VARCHAR2(1);
4059 --
4060 Process_next                       EXCEPTION;
4061 
4062  BEGIN
4063 
4064       -- standard start of api savepoint
4065       SAVEPOINT expire_system_pvt;
4066 
4067       -- standard call to check for call compatibility.
4068       IF NOT fnd_api.compatible_api_call ( l_api_version_number,
4069                                            p_api_version,
4070                                            l_api_name,
4071                                            g_pkg_name)
4072       THEN
4073           RAISE fnd_api.g_exc_unexpected_error;
4074       END IF;
4075 
4076 
4077       -- initialize message list if p_init_msg_list is set to true.
4078       IF fnd_api.to_boolean( p_init_msg_list )
4079       THEN
4080           fnd_msg_pub.initialize;
4081       END IF;
4082 
4083       -- initialize api return status to success
4084       x_return_status := fnd_api.g_ret_sts_success;
4085 
4086        l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
4087         IF (l_debug_level > 0) THEN
4088           csi_gen_utility_pvt.put_line( 'expire_system');
4089         END IF;
4090 
4091         IF (l_debug_level > 1) THEN
4092              csi_gen_utility_pvt.put_line(
4093                                 p_api_version             ||'-'||
4094                                 p_Commit                  ||'-'||
4095                                 p_Init_Msg_list           ||'-'||
4096                                 p_Validation_level
4097                                 );
4098             csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
4099             csi_gen_utility_pvt.dump_sys_rec(p_system_rec);
4100         END IF;
4101 
4102       OPEN systems_csr (p_system_rec.system_id);
4103       FETCH systems_csr INTO l_sys_csr;
4104        IF ( (l_sys_csr.object_version_number<>p_system_rec.object_version_number)
4105          AND (p_system_rec.object_version_number <> fnd_api.g_miss_num) ) THEN
4106          fnd_message.set_name('CSI', 'CSI_RECORD_CHANGED');
4107           fnd_msg_pub.add;
4108          RAISE fnd_api.g_exc_error;
4109        END IF;
4110       CLOSE systems_csr;
4111 
4112       OPEN tl_csr (p_system_rec.system_id);
4113       FETCH tl_csr INTO l_tl_csr;
4114       CLOSE tl_csr;
4115 
4116        validate_system_id(
4117                 p_init_msg_list          => fnd_api.g_false,
4118                 p_validation_mode        => 'EXPIRE',
4119                 p_system_id              => p_system_rec.system_id,
4120                 x_return_status          => x_return_status,
4121                 x_msg_count              => x_msg_count,
4122                 x_msg_data               => x_msg_data);
4123 
4124         validate_object_version_num(
4125                 p_init_msg_list          => fnd_api.g_false,
4126                 p_validation_mode        => 'EXPIRE',
4127                 p_object_version_number  => p_system_rec.object_version_number,
4128                 x_return_status          => x_return_status,
4129                 x_msg_count              => x_msg_count,
4130                 x_msg_data               => x_msg_data);
4131 
4132        csi_gen_utility_pvt.put_line('Inside Expire System');
4133        IF x_return_status<>fnd_api.g_ret_sts_success THEN
4134           RAISE fnd_api.g_exc_error;
4135        END IF;
4136 
4137        IF    p_system_rec.end_date_active IS NOT NULL
4138          AND p_system_rec.end_date_active <> FND_API.G_MISS_DATE
4139        THEN
4140         l_sysdate := p_system_rec.end_date_active;
4141        END IF;
4142        -- srramakr Bug # 3031086. Moving the Update Table handler after cascading the changes to instances.
4143        -- This is because, as a part of bug # 2783027, we enforced system_id validation to make sure that
4144        -- no update is allowed on an instance that is attachaed to an expired system.
4145        -- In this case, if the system is already expired then cascade can't be done.
4146        --
4147        csi_transactions_pvt.create_transaction
4148           (
4149              p_api_version            => p_api_version
4150             ,p_commit                 => p_commit
4151             ,p_init_msg_list          => p_init_msg_list
4152             ,p_validation_level       => p_validation_level
4153             ,p_success_if_exists_flag => 'Y'
4154             ,p_transaction_rec        => p_txn_rec
4155             ,x_return_status          => x_return_status
4156             ,x_msg_count              => x_msg_count
4157             ,x_msg_data               => x_msg_data
4158           );
4159 
4160          IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
4161               fnd_message.set_name('CSI','CSI_FAILED_TO_VALIDATE_TXN');
4162               fnd_message.set_token('transaction_id',p_txn_rec.transaction_id );
4163               fnd_msg_pub.add;
4164 
4165               RAISE fnd_api.g_exc_error;
4166               RETURN;
4167          END IF;
4168 	    -- srramakr Bug # 2230262. Expire_Item_Instance was called for updating the Active_end_Date
4169 	    -- for the instances irrespective of whether the passed active_end_date is > sysdate or
4170 	    -- <= sysdate. Changed this to call Update_Item_Instance which takes care of changing the
4171 	    -- status to EXPIRED when the active_end_Date is <= sysdate. For active_end_date > sysdate,
4172 	    -- only the date component should change for the instances and status should remain as it is.
4173 	    --
4174          IF NVL(fnd_profile.value('CSI_CASCADE_SYS_TERMINATE'),'N')='Y' THEN
4175 
4176             FOR expire_csr IN expire_instance_csr(p_system_rec.system_id)
4177             LOOP
4178                Begin
4179                   l_exists := 'N';
4180                   Begin
4181                      select 'Y'
4182                      into l_exists
4183                      from CSI_ITEM_INSTANCES
4184                      where instance_id = expire_csr.instance_id
4185                      and   nvl(active_end_date,(sysdate+1)) <= sysdate;
4186                   Exception
4187                      when no_data_found then
4188                         l_exists := 'N';
4189                   End;
4190                   --
4191                   -- srramakr Bug # 3531056
4192                   -- If the child instance also belongs to the same system then it would have got
4193                   -- terminated when its parent got terminated. So, there is no need terminate it again.
4194                   IF l_exists = 'Y' THEN
4195                      csi_gen_utility_pvt.put_line('Instance '||to_char(expire_csr.instance_id)||'  Already expired');
4196                      Raise Process_next;
4197                   END IF;
4198                   --
4199 		  l_instance_rec := l_init_instance_rec;  -- srramakr need to be initialized everytime.
4200 		  l_ext_attrib_values_tbl.DELETE;
4201 		  l_party_tbl.DELETE;
4202 		  l_account_tbl.DELETE;
4203 		  l_pricing_attrib_tbl.DELETE;
4204 		  l_org_assignments_tbl.DELETE;
4205 		  l_asset_assignment_tbl.DELETE;
4206 		  l_instance_rec.instance_id := expire_csr.instance_id;
4207 		  l_instance_rec.active_end_date := l_sysdate;-- modified by sguthiva for bug 2401398 p_system_rec.end_date_active;
4208 		  l_instance_rec.object_version_number := expire_csr.object_version_number;
4209 		  --
4210 		  csi_gen_utility_pvt.put_line('Calling Update for instance_id '||to_char(l_instance_rec.instance_id));
4211 		  csi_item_instance_pub.update_item_instance
4212 		     (
4213 		       p_api_version      => p_api_version
4214 		       ,p_commit           => fnd_api.g_false
4215 		       ,p_init_msg_list    => p_init_msg_list
4216 		       ,p_validation_level => p_validation_level
4217 		       ,p_instance_rec     => l_instance_rec
4218 		       ,p_ext_attrib_values_tbl => l_ext_attrib_values_tbl
4219 		       ,p_party_tbl        => l_party_tbl
4220 		       ,p_account_tbl      => l_account_tbl
4221 		       ,p_pricing_attrib_tbl => l_pricing_attrib_tbl
4222 		       ,p_org_assignments_tbl => l_org_assignments_tbl
4223 		       ,p_asset_assignment_tbl => l_asset_assignment_tbl
4224 		       ,p_txn_rec          => p_txn_rec
4225 		       ,x_instance_id_lst  => x_instance_id_lst
4226 		       ,x_return_status    => x_return_status
4227 		       ,x_msg_count        => x_msg_count
4228 		       ,x_msg_data         => x_msg_data
4229 		     );
4230 		  IF NOT(x_return_status = fnd_api.g_ret_sts_success) THEN
4231 		     fnd_message.set_name('CSI','CSI_FAILED_TO_VALIDATE_INS');
4232 		     fnd_message.set_token('instance_id',expire_csr.instance_id);
4233 		     fnd_msg_pub.add;
4234 		     RAISE fnd_api.g_exc_error;
4235 		     RETURN;
4236 		  END IF;
4237                Exception
4238                   when Process_next then
4239                      null;
4240                End;
4241             END LOOP; -- Instance loop
4242          END IF; -- cascade profile check
4243          --
4244          -- Moved down for Bug # 3031086.
4245          csi_systems_b_pkg.update_row(
4246                     p_system_id                   =>  p_system_rec.system_id,
4247                     p_customer_id                 =>  p_system_rec.customer_id,
4248                     p_system_type_code            =>  p_system_rec.system_type_code,
4249                     p_system_number               =>  p_system_rec.system_number,
4250                     p_parent_system_id            =>  p_system_rec.parent_system_id,
4251                     p_ship_to_contact_id          =>  p_system_rec.ship_to_contact_id,
4252                     p_bill_to_contact_id          =>  p_system_rec.bill_to_contact_id,
4253                     p_technical_contact_id        =>  p_system_rec.technical_contact_id,
4254                     p_service_admin_contact_id    =>  p_system_rec.service_admin_contact_id,
4255                     p_ship_to_site_use_id         =>  p_system_rec.ship_to_site_use_id,
4256                     p_bill_to_site_use_id         =>  p_system_rec.bill_to_site_use_id,
4257                     p_install_site_use_id         =>  p_system_rec.install_site_use_id,
4258                     p_coterminate_day_month       =>  p_system_rec.coterminate_day_month,
4259                     p_autocreated_from_system_id  =>  p_system_rec.autocreated_from_system_id,
4260                     p_start_date_active           =>  p_system_rec.start_date_active,
4261                     p_end_date_active             =>  l_sysdate,
4262                     p_context                     =>  p_system_rec.context,
4263                     p_attribute1                  =>  p_system_rec.attribute1,
4264                     p_attribute2                  =>  p_system_rec.attribute2,
4265                     p_attribute3                  =>  p_system_rec.attribute3,
4266                     p_attribute4                  =>  p_system_rec.attribute4,
4267                     p_attribute5                  =>  p_system_rec.attribute5,
4268                     p_attribute6                  =>  p_system_rec.attribute6,
4269                     p_attribute7                  =>  p_system_rec.attribute7,
4270                     p_attribute8                  =>  p_system_rec.attribute8,
4271                     p_attribute9                  =>  p_system_rec.attribute9,
4272                     p_attribute10                 =>  p_system_rec.attribute10,
4273                     p_attribute11                 =>  p_system_rec.attribute11,
4274                     p_attribute12                 =>  p_system_rec.attribute12,
4275                     p_attribute13                 =>  p_system_rec.attribute13,
4276                     p_attribute14                 =>  p_system_rec.attribute14,
4277                     p_attribute15                 =>  p_system_rec.attribute15,
4278                     p_created_by                  =>  fnd_api.g_miss_num,
4279                     p_creation_date               =>  fnd_api.g_miss_date,
4280                     p_last_updated_by             =>  fnd_global.user_id,
4281                     p_last_update_date            =>  SYSDATE,
4282                     p_last_update_login           =>  fnd_global.conc_login_id,
4283                     p_object_version_number       =>  fnd_api.g_miss_num,
4284                     p_name                        =>  p_system_rec.name,
4285                     p_description                 =>  p_system_rec.description,
4286                     p_operating_unit_id           =>  p_system_rec.operating_unit_id,
4287                     p_request_id                  =>  p_system_rec.request_id,
4288                     p_program_application_id      =>  p_system_rec.program_application_id,
4289                     p_program_id                  =>  p_system_rec.program_id,
4290                     p_program_update_date         =>  p_system_rec.program_update_date);
4291 
4292             l_old_systems_rec.system_id:=l_sys_csr.system_id;
4293             l_old_systems_rec.customer_id:=l_sys_csr.customer_id;
4294             l_old_systems_rec.system_type_code:=l_sys_csr.system_type_code;
4295             l_old_systems_rec.system_number:=l_sys_csr.system_number;
4296             l_old_systems_rec.parent_system_id:=l_sys_csr.parent_system_id;
4297             l_old_systems_rec.ship_to_contact_id:=l_sys_csr.ship_to_contact_id;
4298             l_old_systems_rec.bill_to_contact_id:=l_sys_csr.bill_to_contact_id;
4299             l_old_systems_rec.technical_contact_id:=l_sys_csr.technical_contact_id;
4300             l_old_systems_rec.service_admin_contact_id:=l_sys_csr.service_admin_contact_id;
4301             l_old_systems_rec.ship_to_site_use_id:=l_sys_csr.ship_to_site_use_id;
4302             l_old_systems_rec.bill_to_site_use_id:=l_sys_csr.bill_to_site_use_id;
4303             l_old_systems_rec.install_site_use_id:=l_sys_csr.install_site_use_id;
4304             l_old_systems_rec.coterminate_day_month:=l_sys_csr.coterminate_day_month;
4305             l_old_systems_rec.start_date_active:=l_sys_csr.start_date_active;
4306             l_old_systems_rec.end_date_active:=l_sys_csr.end_date_active;
4307             l_old_systems_rec.context:=l_sys_csr.context;
4308             l_old_systems_rec.attribute1:=l_sys_csr.attribute1;
4309             l_old_systems_rec.attribute2:=l_sys_csr.attribute2;
4310             l_old_systems_rec.attribute3:=l_sys_csr.attribute3;
4311             l_old_systems_rec.attribute4:=l_sys_csr.attribute4;
4312             l_old_systems_rec.attribute5:=l_sys_csr.attribute5;
4313             l_old_systems_rec.attribute6:=l_sys_csr.attribute6;
4314             l_old_systems_rec.attribute7:=l_sys_csr.attribute7;
4315             l_old_systems_rec.attribute8:=l_sys_csr.attribute8;
4316             l_old_systems_rec.attribute9:=l_sys_csr.attribute9;
4317             l_old_systems_rec.attribute10:=l_sys_csr.attribute10;
4318             l_old_systems_rec.attribute11:=l_sys_csr.attribute11;
4319             l_old_systems_rec.attribute12:=l_sys_csr.attribute12;
4320             l_old_systems_rec.attribute13:=l_sys_csr.attribute13;
4321             l_old_systems_rec.attribute14:=l_sys_csr.attribute14;
4322             l_old_systems_rec.attribute15:=l_sys_csr.attribute15;
4323             l_old_systems_rec.object_version_number:=l_sys_csr.object_version_number;
4324             l_old_systems_rec.name:=l_tl_csr.name;
4325             l_old_systems_rec.description:=l_tl_csr.description;
4326 		  l_old_systems_rec.operating_unit_id := l_sys_csr.operating_unit_id;
4327 
4328             l_new_systems_rec := p_system_rec;
4329 
4330                 validate_history(p_old_systems_rec  =>  l_old_systems_rec,
4331                                  p_new_systems_rec  =>  l_new_systems_rec,
4332                                  p_transaction_id   =>  p_txn_rec.transaction_id,
4333                                  p_flag             =>  'EXPIRE',
4334                                  p_sysdate          =>  l_sysdate,
4335                                  x_return_status    =>  x_return_status,
4336                                  x_msg_count        =>  x_msg_count,
4337                                  x_msg_data         =>  x_msg_data
4338                                  );
4339 
4340         IF x_return_status <> fnd_api.g_ret_sts_success THEN
4341               RAISE fnd_api.g_exc_error;
4342         END IF;
4343       -- standard check for p_commit
4344       IF fnd_api.to_boolean( p_commit )
4345       THEN
4346           COMMIT WORK;
4347       END IF;
4348 
4349       -- standard call to get message count and if count is 1, get message info.
4350       fnd_msg_pub.count_and_get
4351       (  p_count          =>   x_msg_count,
4352          p_data           =>   x_msg_data
4353       );
4354 
4355       EXCEPTION
4356           WHEN fnd_api.g_exc_error THEN
4357                 ROLLBACK TO expire_system_pvt;
4358                 x_return_status := fnd_api.g_ret_sts_error ;
4359                 fnd_msg_pub.count_and_get
4360                         (p_count => x_msg_count ,
4361                          p_data => x_msg_data
4362                         );
4363 
4364           WHEN fnd_api.g_exc_unexpected_error THEN
4365                 ROLLBACK TO expire_system_pvt;
4366                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4367                 fnd_msg_pub.count_and_get
4368                        (p_count => x_msg_count ,
4369                         p_data => x_msg_data
4370                         );
4371 
4372           WHEN OTHERS THEN
4373                 ROLLBACK TO expire_system_pvt;
4374                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
4375                   IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
4376                          fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
4377                   END IF;
4378                 fnd_msg_pub.count_and_get
4379                         (p_count => x_msg_count ,
4380                          p_data => x_msg_data
4381                         );
4382 
4383 
4384 
4385  END expire_system;
4386 
4387 
4388 -- item-level validation procedures
4389 PROCEDURE validate_system_id (
4390     p_init_msg_list              IN   VARCHAR2,
4391     p_validation_mode            IN   VARCHAR2,
4392     p_system_id                  IN   NUMBER,
4393     x_return_status              OUT NOCOPY  VARCHAR2,
4394     x_msg_count                  OUT NOCOPY  NUMBER,
4395     x_msg_data                   OUT NOCOPY  VARCHAR2
4396     )
4397 IS
4398 l_dummy             VARCHAR2(1);
4399 BEGIN
4400       -- initialize message list if p_init_msg_list is set to true.
4401       IF fnd_api.to_boolean( p_init_msg_list )
4402       THEN
4403           fnd_msg_pub.initialize;
4404       END IF;
4405 
4406 
4407       -- initialize api return status to success
4408       x_return_status := fnd_api.g_ret_sts_success;
4409 
4410       -- validate not null column
4411       IF p_validation_mode='CREATE' THEN
4412          IF ( (p_system_id IS NOT NULL) AND (p_system_id<>fnd_api.g_miss_num) )
4413              THEN
4414                 BEGIN
4415                 SELECT  'x'
4416                 INTO    l_dummy
4417                 FROM    csi_systems_b
4418                 WHERE   system_id=p_system_id;
4419                   fnd_message.set_name('CSI', 'CSI_INVALID_SYSTEM_ID');
4420                   fnd_message.set_token('system_id',p_system_id);
4421                   fnd_msg_pub.add;
4422                   x_return_status := fnd_api.g_ret_sts_error;
4423                 EXCEPTION
4424                 WHEN no_data_found THEN
4425                   x_return_status := fnd_api.g_ret_sts_success;
4426                 END;
4427          END IF;
4428 
4429        ELSIF p_validation_mode='UPDATE' OR  p_validation_mode='EXPIRE' THEN
4430          IF ( (p_system_id IS NOT NULL) AND (p_system_id<>fnd_api.g_miss_num) )
4431              THEN
4432                 BEGIN
4433                 SELECT  'x'
4434                 INTO    l_dummy
4435                 FROM    csi_systems_b
4436                 WHERE   system_id=p_system_id;
4437                 EXCEPTION
4438                 WHEN no_data_found THEN
4439                      fnd_message.set_name('CSI', 'CSI_INVALID_SYSTEM_ID');
4440                      fnd_message.set_token('system_id',p_system_id);
4441                      fnd_msg_pub.add;
4442                      x_return_status := fnd_api.g_ret_sts_error;
4443                 END;
4444           ELSE
4445                      fnd_message.set_name('CSI', 'CSI_NO_SYSTEM_ID');
4446                      fnd_message.set_token('REQUIRED_PARAM','SYSTEM_ID');
4447                      fnd_msg_pub.add;
4448                      x_return_status := fnd_api.g_ret_sts_error;
4449           END IF;
4450 
4451        END IF;
4452 
4453 
4454 
4455       -- standard call to get message count and if count is 1, get message info.
4456       fnd_msg_pub.count_and_get
4457       (  p_count          =>   x_msg_count,
4458          p_data           =>   x_msg_data
4459       );
4460 
4461 END validate_system_id;
4462 
4463 
4464 PROCEDURE validate_customer_id (
4465     p_init_msg_list              IN   VARCHAR2,
4466     p_validation_mode            IN   VARCHAR2,
4467     p_customer_id                IN   NUMBER,
4468     x_return_status              OUT NOCOPY  VARCHAR2,
4469     x_msg_count                  OUT NOCOPY  NUMBER,
4470     x_msg_data                   OUT NOCOPY  VARCHAR2
4471     )
4472 IS
4473 l_dummy             VARCHAR2(1);
4474 BEGIN
4475       -- initialize message list if p_init_msg_list is set to true.
4476       IF fnd_api.to_boolean( p_init_msg_list )
4477       THEN
4478           fnd_msg_pub.initialize;
4479       END IF;
4480 
4481 
4482       -- initialize api return status to success
4483       x_return_status := fnd_api.g_ret_sts_success;
4484 
4485       -- validate not null column
4486       IF p_validation_mode='CREATE' THEN
4487          IF ( (p_customer_id IS NOT NULL) AND (p_customer_id<>fnd_api.g_miss_num) )
4488              THEN
4489                 BEGIN
4490                   SELECT 'x'
4491                   INTO   l_dummy
4492                   FROM   hz_cust_accounts hzc
4493                         ,hz_parties hz
4494                   WHERE  hzc.cust_account_id = p_customer_id
4495                   AND    hzc.party_id=hz.party_id;
4496 
4497                  /*SELECT  'x'
4498                    INTO    l_dummy
4499                    FROM    hz_parties
4500                    WHERE   party_id=p_customer_id; */
4501 
4502                 EXCEPTION
4503                 WHEN no_data_found THEN
4504                      fnd_message.set_name('CSI', 'CSI_INVALID_CUSTOMER_ID');
4505                      fnd_message.set_token('customer_id',p_customer_id);
4506                      fnd_msg_pub.add;
4507                      x_return_status := fnd_api.g_ret_sts_error;
4508                 END;
4509           ELSE
4510                      fnd_message.set_name('CSI', 'CSI_CUST_ID_NOT_PASSED');
4511                      fnd_message.set_token('REQUIRED_PARAM','CUSTOMER_ID');
4512                      fnd_msg_pub.add;
4513                      x_return_status := fnd_api.g_ret_sts_error;
4514 
4515           END IF;
4516        ELSIF p_validation_mode='UPDATE' THEN
4517          IF ( (p_customer_id IS NOT NULL) AND (p_customer_id<>fnd_api.g_miss_num) )
4518              THEN
4519                 BEGIN
4520                   SELECT 'x'
4521                   INTO   l_dummy
4522                   FROM   hz_cust_accounts hzc
4523                         ,hz_parties hz
4524                   WHERE  hzc.cust_account_id = p_customer_id
4525                   AND    hzc.party_id=hz.party_id;
4526 
4527                 /* SELECT  'x'
4528                    INTO    l_dummy
4529                    FROM    hz_parties
4530                    WHERE   party_id=p_customer_id; */
4531                 EXCEPTION
4532                 WHEN no_data_found THEN
4533                      fnd_message.set_name('CSI', 'CSI_INVALID_CUSTOMER_ID');
4534                      fnd_message.set_token('customer_id',p_customer_id);
4535                      fnd_msg_pub.add;
4536                      x_return_status := fnd_api.g_ret_sts_error;
4537                 END;
4538           END IF;
4539        END IF;
4540       -- standard call to get message count and if count is 1, get message info.
4541       fnd_msg_pub.count_and_get
4542       (  p_count          =>   x_msg_count,
4543          p_data           =>   x_msg_data
4544       );
4545 
4546 END validate_customer_id;
4547 
4548 
4549 PROCEDURE validate_system_type_code (
4550     p_init_msg_list              IN   VARCHAR2,
4551     p_validation_mode            IN   VARCHAR2,
4552     p_system_type_code           IN   VARCHAR2,
4553     x_return_status              OUT NOCOPY  VARCHAR2,
4554     x_msg_count                  OUT NOCOPY  NUMBER,
4555     x_msg_data                   OUT NOCOPY  VARCHAR2
4556     )
4557 IS
4558 l_dummy             VARCHAR2(1);
4559 l_sys_lookup_type   VARCHAR2(30) := 'CSI_SYSTEM_TYPE';
4560 BEGIN
4561       -- initialize message list if p_init_msg_list is set to true.
4562       IF fnd_api.to_boolean( p_init_msg_list )
4563       THEN
4564           fnd_msg_pub.initialize;
4565       END IF;
4566 
4567 
4568       -- initialize api return status to success
4569       x_return_status := fnd_api.g_ret_sts_success;
4570 
4571       -- validate not null column
4572       IF p_validation_mode='CREATE' THEN
4573 
4574          IF ( (p_system_type_code IS NOT NULL) AND (p_system_type_code<>fnd_api.g_miss_char) )
4575              THEN
4576                 BEGIN
4577                 SELECT  'x'
4578                 INTO    l_dummy
4579                 FROM    csi_lookups
4580                 WHERE   lookup_type=l_sys_lookup_type
4581                 AND     lookup_code=p_system_type_code;
4582                 EXCEPTION
4583                 WHEN no_data_found THEN
4584                      fnd_message.set_name('CSI', 'CSI_INVALID_SYS_TYPE_CODE');
4585                      fnd_message.set_token('system_type_code',p_system_type_code);
4586                      fnd_msg_pub.add;
4587                      x_return_status := fnd_api.g_ret_sts_error;
4588                 END;
4589           ELSE
4590                      fnd_message.set_name('CSI', 'CSI_NO_SYS_TYPE_CODE');
4591                      fnd_message.set_token('REQUIRED_PARAM','SYSTEM_TYPE_CODE');
4592 
4593                      fnd_msg_pub.add;
4594                      x_return_status := fnd_api.g_ret_sts_error;
4595 
4596           END IF;
4597        ELSIF p_validation_mode='UPDATE' THEN
4598          IF ( (p_system_type_code IS NOT NULL) AND (p_system_type_code<>fnd_api.g_miss_char) )
4599              THEN
4600                 BEGIN
4601                 SELECT  'x'
4602                 INTO    l_dummy
4603                 FROM    csi_lookups
4604                 WHERE   lookup_type=l_sys_lookup_type
4605                 AND     lookup_code=p_system_type_code;
4606                 EXCEPTION
4607                 WHEN no_data_found THEN
4608                      fnd_message.set_name('CSI', 'CSI_INVALID_SYS_TYPE_CODE');
4609                      fnd_message.set_token('system_type_code',p_system_type_code);
4610                      fnd_msg_pub.add;
4611                      x_return_status := fnd_api.g_ret_sts_error;
4612                 END;
4613           END IF;
4614        END IF;
4615 
4616 
4617       -- standard call to get message count and if count is 1, get message info.
4618       fnd_msg_pub.count_and_get
4619       (  p_count          =>   x_msg_count,
4620          p_data           =>   x_msg_data
4621       );
4622 
4623 END validate_system_type_code;
4624 
4625 
4626 
4627 
4628 PROCEDURE validate_parent_system_id (
4629     p_init_msg_list              IN   VARCHAR2,
4630     p_validation_mode            IN   VARCHAR2,
4631     p_parent_system_id           IN   NUMBER,
4632     x_return_status              OUT NOCOPY  VARCHAR2,
4633     x_msg_count                  OUT NOCOPY  NUMBER,
4634     x_msg_data                   OUT NOCOPY  VARCHAR2
4635     )
4636 IS
4637 l_dummy             VARCHAR2(1);
4638 BEGIN
4639       -- initialize message list IF p_init_msg_list IS set to true.
4640       IF fnd_api.to_boolean( p_init_msg_list )
4641       THEN
4642           fnd_msg_pub.initialize;
4643       END IF;
4644 
4645 
4646       -- initialize api return status to success
4647       x_return_status := fnd_api.g_ret_sts_success;
4648 
4649       -- validate not null column
4650       IF p_validation_mode='CREATE' THEN
4651          IF ( (p_parent_system_id IS NOT NULL) AND (p_parent_system_id<>fnd_api.g_miss_num) )
4652              THEN
4653                 BEGIN
4654                 SELECT  'x'
4655                 INTO    l_dummy
4656                 FROM    csi_systems_b
4657                 WHERE   system_id=p_parent_system_id;
4658                 EXCEPTION
4659                 WHEN no_data_found THEN
4660                      fnd_message.set_name('CSI', 'CSI_INVALID_PARENT_SYS_ID');
4661                      fnd_message.set_token('parent_system_id',p_parent_system_id);
4662                      fnd_msg_pub.add;
4663                      x_return_status := fnd_api.g_ret_sts_error;
4664                 END;
4665           END IF;
4666 
4667 
4668        ELSIF p_validation_mode='UPDATE' THEN
4669          IF ( (p_parent_system_id IS NOT NULL) AND (p_parent_system_id<>fnd_api.g_miss_num) )
4670              THEN
4671                 BEGIN
4672                 SELECT  'x'
4673                 INTO    l_dummy
4674                 FROM    csi_systems_b
4675                 WHERE   system_id=p_parent_system_id;
4676                 EXCEPTION
4677                 WHEN no_data_found THEN
4678                      fnd_message.set_name('CSI', 'CSI_INVALID_PARENT_SYS_ID');
4679                      fnd_message.set_token('parent_system_id',p_parent_system_id);
4680                      fnd_msg_pub.add;
4681                      x_return_status := fnd_api.g_ret_sts_error;
4682                 END;
4683           END IF;
4684        END IF;
4685 
4686       -- standard call to get message count and if count is 1, get message info.
4687       fnd_msg_pub.count_and_get
4688       (  p_count          =>   x_msg_count,
4689          p_data           =>   x_msg_data
4690       );
4691 
4692 END validate_parent_system_id;
4693 
4694 
4695 PROCEDURE validate_ship_to_contact_id (
4696     p_init_msg_list              IN   VARCHAR2,
4697     p_validation_mode            IN   VARCHAR2,
4698     p_ship_to_contact_id         IN   NUMBER,
4699     x_return_status              OUT NOCOPY  VARCHAR2,
4700     x_msg_count                  OUT NOCOPY  NUMBER,
4701     x_msg_data                   OUT NOCOPY  VARCHAR2
4702     )
4703 IS
4704 l_dummy             VARCHAR2(1);
4705 BEGIN
4706       -- initialize message list if p_init_msg_list is set to true.
4707       IF fnd_api.to_boolean( p_init_msg_list )
4708       THEN
4709           fnd_msg_pub.initialize;
4710       END IF;
4711 
4712 
4713       -- initialize api return status to success
4714       x_return_status := fnd_api.g_ret_sts_success;
4715 
4716       -- validate not null column
4717       IF p_validation_mode='CREATE' THEN
4718          IF ( (p_ship_to_contact_id IS NOT NULL) AND (p_ship_to_contact_id<>fnd_api.g_miss_num) )
4719              THEN
4720                 BEGIN
4721                 SELECT  'x'
4722                 INTO    l_dummy
4723                 FROM    hz_parties
4724                 WHERE   party_id=p_ship_to_contact_id;
4725                 EXCEPTION
4726                 WHEN no_data_found THEN
4727                      fnd_message.set_name('CSI', 'CSI_INVALID_SHIPTO_CT_ID');
4728                      fnd_message.set_token('ship_to_contact_id',p_ship_to_contact_id);
4729                      fnd_msg_pub.add;
4730                      x_return_status := fnd_api.g_ret_sts_error;
4731                 END;
4732 
4733          END IF;
4734        ELSIF p_validation_mode='UPDATE' THEN
4735          IF ( (p_ship_to_contact_id IS NOT NULL) AND (p_ship_to_contact_id<>fnd_api.g_miss_num) )
4736              THEN
4737                 BEGIN
4738                 SELECT  'x'
4739                 INTO    l_dummy
4740                 FROM    hz_parties
4741                 WHERE   party_id=p_ship_to_contact_id;
4742                 EXCEPTION
4743                 WHEN no_data_found THEN
4744                      fnd_message.set_name('CSI', 'CSI_INVALID_SHIPTO_CT_ID');
4745                      fnd_message.set_token('ship_to_contact_id',p_ship_to_contact_id);
4746                      fnd_msg_pub.add;
4747                      x_return_status := fnd_api.g_ret_sts_error;
4748                 END;
4749           END IF;
4750        END IF;
4751 
4752       -- standard call to get message count and if count is 1, get message info.
4753       fnd_msg_pub.count_and_get
4754       (  p_count          =>   x_msg_count,
4755          p_data           =>   x_msg_data
4756       );
4757 
4758 END validate_ship_to_contact_id;
4759 
4760 
4761 PROCEDURE validate_bill_to_contact_id (
4762     p_init_msg_list              IN   VARCHAR2,
4763     p_validation_mode            IN   VARCHAR2,
4764     p_bill_to_contact_id         IN   NUMBER,
4765     x_return_status              OUT NOCOPY  VARCHAR2,
4766     x_msg_count                  OUT NOCOPY  NUMBER,
4767     x_msg_data                   OUT NOCOPY  VARCHAR2
4768     )
4769 IS
4770 l_dummy             VARCHAR2(1);
4771 BEGIN
4772       -- initialize message list if p_init_msg_list is set to true.
4773       IF fnd_api.to_boolean( p_init_msg_list )
4774       THEN
4775           fnd_msg_pub.initialize;
4776       END IF;
4777 
4778 
4779       -- initialize api return status to success
4780       x_return_status := fnd_api.g_ret_sts_success;
4781 
4782       -- validate not null column
4783       IF p_validation_mode='CREATE' THEN
4784          IF ( (p_bill_to_contact_id IS NOT NULL) AND (p_bill_to_contact_id<>fnd_api.g_miss_num) )
4785              THEN
4786                 BEGIN
4787                 SELECT  'x'
4788                 INTO    l_dummy
4789                 FROM    hz_parties
4790                 WHERE   party_id=p_bill_to_contact_id;
4791                 EXCEPTION
4792                 WHEN no_data_found THEN
4793                      fnd_message.set_name('CSI', 'CSI_INVALID_BILLTO_CT_ID');
4794                      fnd_message.set_token('bill_to_contact_id',p_bill_to_contact_id);
4795                      fnd_msg_pub.add;
4796                      x_return_status := fnd_api.g_ret_sts_error;
4797                 END;
4798          END IF;
4799        ELSIF p_validation_mode='UPDATE' THEN
4800          IF ( (p_bill_to_contact_id IS NOT NULL) AND (p_bill_to_contact_id<>fnd_api.g_miss_num) )
4801              THEN
4802                 BEGIN
4803                 SELECT  'x'
4804                 INTO    l_dummy
4805                 FROM    hz_parties
4806                 WHERE   party_id=p_bill_to_contact_id;
4807                 EXCEPTION
4808                 WHEN no_data_found THEN
4809                      fnd_message.set_name('CSI', 'CSI_INVALID_BILLTO_CT_ID');
4810                      fnd_message.set_token('bill_to_contact_id',p_bill_to_contact_id);
4811                      fnd_msg_pub.add;
4812                      x_return_status := fnd_api.g_ret_sts_error;
4813                 END;
4814           END IF;
4815        END IF;
4816 
4817       -- standard call to get message count and if count is 1, get message info.
4818       fnd_msg_pub.count_and_get
4819       (  p_count          =>   x_msg_count,
4820          p_data           =>   x_msg_data
4821       );
4822 
4823 END validate_bill_to_contact_id;
4824 
4825 
4826 PROCEDURE validate_technical_contact_id (
4827     p_init_msg_list              IN   VARCHAR2,
4828     p_validation_mode            IN   VARCHAR2,
4829     p_technical_contact_id       IN   NUMBER,
4830     x_return_status              OUT NOCOPY  VARCHAR2,
4831     x_msg_count                  OUT NOCOPY  NUMBER,
4832     x_msg_data                   OUT NOCOPY  VARCHAR2
4833     )
4834 IS
4835 l_dummy             VARCHAR2(1);
4836 BEGIN
4837       -- initialize message list if p_init_msg_list is set to true.
4838       IF fnd_api.to_boolean( p_init_msg_list )
4839       THEN
4840           fnd_msg_pub.initialize;
4841       END IF;
4842 
4843 
4844       -- initialize api return status to success
4845       x_return_status := fnd_api.g_ret_sts_success;
4846 
4847       -- validate not null column
4848       IF p_validation_mode='CREATE' THEN
4849          IF ( (p_technical_contact_id IS NOT NULL) AND (p_technical_contact_id<>fnd_api.g_miss_num) )
4850              THEN
4851                 BEGIN
4852                 SELECT  'x'
4853                 INTO    l_dummy
4854                 FROM    hz_parties
4855                 WHERE   party_id=p_technical_contact_id;
4856                 EXCEPTION
4857                 WHEN no_data_found THEN
4858                      fnd_message.set_name('CSI', 'CSI_INVALID_TECH_CT_ID');
4859                      fnd_message.set_token('technical_contact_id',p_technical_contact_id);
4860                      fnd_msg_pub.add;
4861                      x_return_status := fnd_api.g_ret_sts_error;
4862                 END;
4863          END IF;
4864        ELSIF p_validation_mode='UPDATE' THEN
4865          IF ( (p_technical_contact_id IS NOT NULL) AND (p_technical_contact_id<>fnd_api.g_miss_num) )
4866              THEN
4867                 BEGIN
4868                 SELECT  'x'
4869                 INTO    l_dummy
4870                 FROM    hz_parties
4871                 WHERE   party_id=p_technical_contact_id;
4872                 EXCEPTION
4873                 WHEN no_data_found THEN
4874                      fnd_message.set_name('CSI', 'CSI_INVALID_TECH_CT_ID');
4875                      fnd_message.set_token('technical_contact_id',p_technical_contact_id);
4876                      fnd_msg_pub.add;
4877                      x_return_status := fnd_api.g_ret_sts_error;
4878                 END;
4879           END IF;
4880        END IF;
4881       -- standard call to get message count and if count is 1, get message info.
4882       fnd_msg_pub.count_and_get
4883       (  p_count          =>   x_msg_count,
4884          p_data           =>   x_msg_data
4885       );
4886 
4887 END validate_technical_contact_id;
4888 
4889 
4890 PROCEDURE validate_srv_admin_cont_id (
4891     p_init_msg_list              IN   VARCHAR2,
4892     p_validation_mode            IN   VARCHAR2,
4893     p_service_admin_contact_id   IN   NUMBER,
4894     x_return_status              OUT NOCOPY  VARCHAR2,
4895     x_msg_count                  OUT NOCOPY  NUMBER,
4896     x_msg_data                   OUT NOCOPY  VARCHAR2
4897     )
4898 IS
4899 l_dummy             VARCHAR2(1);
4900 BEGIN
4901       -- initialize message list if p_init_msg_list is set to true.
4902       IF fnd_api.to_boolean( p_init_msg_list )
4903       THEN
4904           fnd_msg_pub.initialize;
4905       END IF;
4906 
4907 
4908       -- initialize api return status to success
4909       x_return_status := fnd_api.g_ret_sts_success;
4910 
4911       -- validate not null column
4912       IF p_validation_mode='CREATE' THEN
4913          IF ( (p_service_admin_contact_id IS NOT NULL) AND (p_service_admin_contact_id<>fnd_api.g_miss_num) )
4914              THEN
4915                 BEGIN
4916                 SELECT  'x'
4917                 INTO    l_dummy
4918                 FROM    hz_parties
4919                 WHERE   party_id=p_service_admin_contact_id;
4920                 EXCEPTION
4921                 WHEN no_data_found THEN
4922                      fnd_message.set_name('CSI', 'CSI_INVALID_SRVADMIN_CT_ID');
4923                      fnd_message.set_token('service_admin_contact_id',p_service_admin_contact_id);
4924                      fnd_msg_pub.add;
4925                      x_return_status := fnd_api.g_ret_sts_error;
4926                 END;
4927          END IF;
4928        ELSIF p_validation_mode='UPDATE' THEN
4929          IF ( (p_service_admin_contact_id IS NOT NULL) AND (p_service_admin_contact_id<>fnd_api.g_miss_num) )
4930              THEN
4931                 BEGIN
4932                 SELECT  'x'
4933                 INTO    l_dummy
4934                 FROM    hz_parties
4935                 WHERE   party_id=p_service_admin_contact_id;
4936                 EXCEPTION
4937                 WHEN no_data_found THEN
4938                      fnd_message.set_name('CSI', 'CSI_INVALID_SRVADMIN_CT_ID');
4939                      fnd_message.set_token('service_admin_contact_id',p_service_admin_contact_id);
4940                      fnd_msg_pub.add;
4941                      x_return_status := fnd_api.g_ret_sts_error;
4942                 END;
4943           END IF;
4944        END IF;
4945       -- standard call to get message count and if count is 1, get message info.
4946       fnd_msg_pub.count_and_get
4947       (  p_count          =>   x_msg_count,
4948          p_data           =>   x_msg_data
4949       );
4950 
4951 END validate_srv_admin_cont_id;
4952 
4953 
4954 PROCEDURE validate_ship_to_site_use_id (
4955     p_init_msg_list              IN   VARCHAR2,
4956     p_validation_mode            IN   VARCHAR2,
4957     p_ship_to_site_use_id        IN   NUMBER,
4958     x_return_status              OUT NOCOPY  VARCHAR2,
4959     x_msg_count                  OUT NOCOPY  NUMBER,
4960     x_msg_data                   OUT NOCOPY  VARCHAR2
4961     )
4962 IS
4963 l_dummy             VARCHAR2(1);
4964 BEGIN
4965       -- initialize message list if p_init_msg_list is set to true.
4966       IF fnd_api.to_boolean( p_init_msg_list )
4967       THEN
4968           fnd_msg_pub.initialize;
4969       END IF;
4970 
4971 
4972       -- initialize api return status to success
4973       x_return_status := fnd_api.g_ret_sts_success;
4974 
4975       -- validate not null column
4976       IF p_validation_mode='CREATE' THEN
4977          IF ( (p_ship_to_site_use_id IS NOT NULL) AND (p_ship_to_site_use_id<>fnd_api.g_miss_num) )
4978              THEN
4979                 BEGIN
4980                 SELECT  'x'
4981                 INTO    l_dummy
4982                 FROM    hz_cust_site_uses_all--hz_party_sites
4983                 WHERE   site_use_id = p_ship_to_site_use_id
4984                 AND     site_use_code = 'SHIP_TO';
4985                 EXCEPTION
4986                 WHEN no_data_found THEN
4987                      fnd_message.set_name('CSI', 'CSI_INVALID_SHIP_TO_ID');
4988                      fnd_message.set_token('ship_to_site_use_id',p_ship_to_site_use_id);
4989                      fnd_msg_pub.add;
4990                      x_return_status := fnd_api.g_ret_sts_error;
4991                 END;
4992          END IF;
4993        ELSIF p_validation_mode='UPDATE' THEN
4994          IF ( (p_ship_to_site_use_id IS NOT NULL) AND (p_ship_to_site_use_id<>fnd_api.g_miss_num) )
4995              THEN
4996                 BEGIN
4997                 SELECT  'x'
4998                 INTO    l_dummy
4999                 FROM    hz_cust_site_uses_all --hz_party_sites
5000                 WHERE   site_use_id = p_ship_to_site_use_id
5001                 AND     site_use_code = 'SHIP_TO';
5002                 EXCEPTION
5003                 WHEN no_data_found THEN
5004                      fnd_message.set_name('CSI', 'CSI_INVALID_SHIP_TO_ID');
5005                      fnd_message.set_token('ship_to_site_use_id',p_ship_to_site_use_id);
5006                      fnd_msg_pub.add;
5007                      x_return_status := fnd_api.g_ret_sts_error;
5008                 END;
5009           END IF;
5010        END IF;
5011 
5012       -- standard call to get message count and if count is 1, get message info.
5013       fnd_msg_pub.count_and_get
5014       (  p_count          =>   x_msg_count,
5015          p_data           =>   x_msg_data
5016       );
5017 
5018 END validate_ship_to_site_use_id;
5019 
5020 
5021 PROCEDURE validate_bill_to_site_use_id (
5022     p_init_msg_list              IN   VARCHAR2,
5023     p_validation_mode            IN   VARCHAR2,
5024     p_bill_to_site_use_id        IN   NUMBER,
5025     x_return_status              OUT NOCOPY  VARCHAR2,
5026     x_msg_count                  OUT NOCOPY  NUMBER,
5027     x_msg_data                   OUT NOCOPY  VARCHAR2
5028     )
5029 IS
5030 l_dummy             VARCHAR2(1);
5031 BEGIN
5032       -- initialize message list if p_init_msg_list is set to true.
5033       IF fnd_api.to_boolean( p_init_msg_list )
5034       THEN
5035           fnd_msg_pub.initialize;
5036       END IF;
5037 
5038 
5039       -- initialize api return status to success
5040       x_return_status := fnd_api.g_ret_sts_success;
5041 
5042       -- validate not null column
5043       IF p_validation_mode='CREATE' THEN
5044          IF ( (p_bill_to_site_use_id IS NOT NULL) AND (p_bill_to_site_use_id<>fnd_api.g_miss_num) )
5045              THEN
5046                 BEGIN
5047                 SELECT  'x'
5048                 INTO    l_dummy
5049                 FROM    hz_cust_site_uses_all  --hz_cust_acct_sites_all
5050                 WHERE   site_use_id = p_bill_to_site_use_id
5051                 AND     site_use_code = 'BILL_TO';
5052                 EXCEPTION
5053                 WHEN no_data_found THEN
5054                      fnd_message.set_name('CSI', 'CSI_INVALID_BILL_TO_ID');
5055                      fnd_message.set_token('bill_to_site_use_id',p_bill_to_site_use_id);
5056                      fnd_msg_pub.add;
5057                      x_return_status := fnd_api.g_ret_sts_error;
5058                 END;
5059          END IF;
5060        ELSIF p_validation_mode='UPDATE' THEN
5061          IF ( (p_bill_to_site_use_id IS NOT NULL) AND (p_bill_to_site_use_id<>fnd_api.g_miss_num) )
5062              THEN
5063                 BEGIN
5064                 SELECT  'x'
5065                 INTO    l_dummy
5066                 FROM    hz_cust_site_uses_all  --hz_cust_acct_sites_all
5067                 WHERE   site_use_id = p_bill_to_site_use_id
5068                 AND     site_use_code = 'BILL_TO';
5069                 EXCEPTION
5070                 WHEN no_data_found THEN
5071                      fnd_message.set_name('CSI', 'CSI_INVALID_BILL_TO_ID');
5072                      fnd_message.set_token('bill_to_site_use_id',p_bill_to_site_use_id);
5073                      fnd_msg_pub.add;
5074                      x_return_status := fnd_api.g_ret_sts_error;
5075                 END;
5076           END IF;
5077 
5078        END IF;
5079             -- standard call to get message count and if count is 1, get message info.
5080       fnd_msg_pub.count_and_get
5081       (  p_count          =>   x_msg_count,
5082          p_data           =>   x_msg_data
5083       );
5084 
5085 END validate_bill_to_site_use_id;
5086 
5087 
5088 PROCEDURE validate_install_site_use_id (
5089     p_init_msg_list              IN   VARCHAR2,
5090     p_validation_mode            IN   VARCHAR2,
5091     p_install_site_use_id        IN   NUMBER,
5092     x_return_status              OUT NOCOPY  VARCHAR2,
5093     x_msg_count                  OUT NOCOPY  NUMBER,
5094     x_msg_data                   OUT NOCOPY  VARCHAR2
5095     )
5096 IS
5097 l_dummy             VARCHAR2(1);
5098 BEGIN
5099 
5100       -- initialize message list if p_init_msg_list is set to true.
5101       IF fnd_api.to_boolean( p_init_msg_list )
5102       THEN
5103           fnd_msg_pub.initialize;
5104       END IF;
5105 
5106 
5107       -- initialize api return status to success
5108       x_return_status := fnd_api.g_ret_sts_success;
5109 
5110       -- validate not null column
5111     IF p_validation_mode='CREATE' THEN
5112          IF ( (p_install_site_use_id IS NOT NULL) AND (p_install_site_use_id<>fnd_api.g_miss_num) )
5113              THEN
5114                 BEGIN
5115                 SELECT  'x'
5116                 INTO    l_dummy
5117                 FROM    hz_party_sites
5118                 WHERE   party_site_id=p_install_site_use_id;
5119                 EXCEPTION
5120                 WHEN no_data_found THEN
5121                      fnd_message.set_name('CSI', 'CSI_INVALID_INSTALL_ID');
5122                      fnd_message.set_token('install_site_use_id',p_install_site_use_id);
5123                      fnd_msg_pub.add;
5124                      x_return_status := fnd_api.g_ret_sts_error;
5125                 END;
5126          END IF;
5127        ELSIF p_validation_mode='UPDATE' THEN
5128          IF ( (p_install_site_use_id IS NOT NULL) AND (p_install_site_use_id<>fnd_api.g_miss_num) )
5129              THEN
5130                 BEGIN
5131                 SELECT  'x'
5132                 INTO    l_dummy
5133                 FROM    hz_party_sites
5134                 WHERE   party_site_id=p_install_site_use_id;
5135                 EXCEPTION
5136                 WHEN no_data_found THEN
5137                       fnd_message.set_name('CSI', 'CSI_INVALID_INSTALL_ID');
5138                      fnd_message.set_token('install_site_use_id',p_install_site_use_id);
5139                      fnd_msg_pub.add;
5140                      x_return_status := fnd_api.g_ret_sts_error;
5141                 END;
5142           END IF;
5143        END IF;
5144 
5145       -- standard call to get message count and if count is 1, get message info.
5146       fnd_msg_pub.count_and_get
5147       (  p_count          =>   x_msg_count,
5148          p_data           =>   x_msg_data
5149       );
5150 
5151 END validate_install_site_use_id;
5152 
5153 PROCEDURE validate_auto_sys_id (
5154     p_init_msg_list              IN   VARCHAR2,
5155     p_validation_mode            IN   VARCHAR2  ,
5156     p_auto_sys_id                IN   NUMBER    ,
5157     x_return_status              OUT NOCOPY  VARCHAR2  ,
5158     x_msg_count                  OUT NOCOPY  NUMBER    ,
5159     x_msg_data                   OUT NOCOPY  VARCHAR2
5160     )
5161 IS
5162 l_dummy             VARCHAR2(1);
5163 BEGIN
5164 
5165       IF fnd_api.to_boolean( p_init_msg_list )
5166       THEN
5167           fnd_msg_pub.initialize;
5168       END IF;
5169 
5170 
5171       x_return_status := fnd_api.g_ret_sts_success;
5172 
5173     IF p_validation_mode='CREATE' THEN
5174          IF ( (p_auto_sys_id IS NOT NULL) AND (p_auto_sys_id<>fnd_api.g_miss_num) )
5175              THEN
5176                 BEGIN
5177                 SELECT  'x'
5178                 INTO    l_dummy
5179                 FROM    csi_systems_b
5180                 WHERE   system_id=p_auto_sys_id;
5181                 EXCEPTION
5182                 WHEN no_data_found THEN
5183                      fnd_message.set_name('CSI', 'CSI_INVALID_AUTOSYS_ID');
5184                      fnd_message.set_token('autocreated_from_system_id',p_auto_sys_id);
5185                      fnd_msg_pub.add;
5186                      x_return_status := fnd_api.g_ret_sts_error;
5187                 END;
5188            END IF;
5189       END IF;
5190 
5191       -- standard call to get message count and if count is 1, get message info.
5192       fnd_msg_pub.count_and_get
5193       (  p_count          =>   x_msg_count,
5194          p_data           =>   x_msg_data
5195       );
5196 
5197 END validate_auto_sys_id;
5198 
5199 PROCEDURE validate_start_end_date (
5200     p_init_msg_list              IN   VARCHAR2,
5201     p_validation_mode            IN   VARCHAR2  ,
5202     p_system_id                  IN   NUMBER    ,
5203     p_start_date                 IN   DATE      ,
5204     p_end_date                   IN   DATE      ,
5205     x_return_status              OUT NOCOPY  VARCHAR2  ,
5206     x_msg_count                  OUT NOCOPY  NUMBER    ,
5207     x_msg_data                   OUT NOCOPY  VARCHAR2
5208     )
5209 IS
5210 l_start_date_active             DATE;
5211 BEGIN
5212 
5213       IF fnd_api.to_boolean( p_init_msg_list )
5214       THEN
5215           fnd_msg_pub.initialize;
5216       END IF;
5217 
5218 
5219       x_return_status := fnd_api.g_ret_sts_success;
5220 
5221     IF p_validation_mode='CREATE' THEN
5222          IF    ( (p_start_date IS NOT NULL) AND (p_start_date<>fnd_api.g_miss_date) )
5223            AND ( (p_end_date IS NOT NULL) AND (p_end_date<>fnd_api.g_miss_date) )
5224              THEN
5225                 IF (p_start_date > p_end_date)
5226                 THEN
5227                      fnd_message.set_name('CSI', 'CSI_INVALID_START_DATE');
5228                      fnd_message.set_token('START_DATE_ACTIVE',p_start_date);
5229                      fnd_msg_pub.add;
5230                      x_return_status := fnd_api.g_ret_sts_error;
5231                 END IF;
5232          ELSIF ( (p_start_date IS NULL) OR (p_start_date = fnd_api.g_miss_date) )
5233            AND ( (p_end_date IS NOT NULL) AND (p_end_date<>fnd_api.g_miss_date) )
5234          THEN
5235               fnd_message.set_name('CSI', 'CSI_INVALID_END_DATE');
5236               fnd_message.set_token('END_DATE_ACTIVE',p_end_date);
5237               fnd_msg_pub.add;
5238               x_return_status := fnd_api.g_ret_sts_error;
5239          END IF;
5240       END IF;
5241 
5242       IF p_validation_mode='UPDATE' THEN
5243          IF    ( (p_start_date IS NOT NULL) AND (p_start_date<>fnd_api.g_miss_date) )
5244            AND ( (p_end_date IS NOT NULL) AND (p_end_date<>fnd_api.g_miss_date) )
5245              THEN
5246                 IF (p_start_date > p_end_date)
5247                 THEN
5248                      fnd_message.set_name('CSI', 'CSI_START_DATE_GREATER');
5249                      fnd_message.set_token('START_DATE_ACTIVE',p_start_date);
5250                      fnd_message.set_token('END_DATE_ACTIVE',p_end_date);
5251                      fnd_msg_pub.add;
5252                      x_return_status := fnd_api.g_ret_sts_error;
5253                 END IF;
5254          ELSIF ( (p_start_date IS NULL) OR (p_start_date = fnd_api.g_miss_date) )
5255            AND ( (p_end_date IS NOT NULL) AND (p_end_date<>fnd_api.g_miss_date) )
5256          THEN
5257               BEGIN
5258                  SELECT  start_date_active
5259                  INTO    l_start_date_active
5260                  FROM    csi_systems_b
5261                  WHERE   system_id = p_system_id;
5262                  IF l_start_date_active > p_end_date
5263                  THEN
5264                      fnd_message.set_name('CSI', 'CSI_START_DATE_GREATER');
5265                      fnd_message.set_token('START_DATE_ACTIVE',l_start_date_active);
5266                      fnd_message.set_token('END_DATE_ACTIVE',p_end_date);
5267                      fnd_msg_pub.add;
5268                      x_return_status := fnd_api.g_ret_sts_error;
5269                  END IF;
5270               EXCEPTION
5271                   WHEN NO_DATA_FOUND THEN
5272                      fnd_message.set_name('CSI', 'CSI_INVALID_END_DATE');
5273                      fnd_message.set_token('END_DATE_ACTIVE',p_end_date);
5274                      fnd_msg_pub.add;
5275                      x_return_status := fnd_api.g_ret_sts_error;
5276               END;
5277          END IF;
5278       END IF;
5279 
5280       -- standard call to get message count and if count is 1, get message info.
5281       fnd_msg_pub.count_and_get
5282       (  p_count          =>   x_msg_count,
5283          p_data           =>   x_msg_data
5284       );
5285 
5286 END validate_start_end_date;
5287 
5288 
5289 
5290 PROCEDURE validate_name (
5291     p_init_msg_list              IN   VARCHAR2,
5292     p_validation_mode            IN   VARCHAR2,
5293     p_name                       IN   VARCHAR2,
5294     x_return_status              OUT NOCOPY  VARCHAR2,
5295     x_msg_count                  OUT NOCOPY  NUMBER,
5296     x_msg_data                   OUT NOCOPY  VARCHAR2
5297     )
5298 IS
5299 l_dummy             VARCHAR2(1);
5300 BEGIN
5301       -- initialize message list if p_init_msg_list is set to true.
5302       IF fnd_api.to_boolean( p_init_msg_list )
5303       THEN
5304           fnd_msg_pub.initialize;
5305       END IF;
5306 
5307 
5308       -- initialize api return status to success
5309       x_return_status := fnd_api.g_ret_sts_success;
5310 
5311       -- validate not null column
5312       IF p_validation_mode='CREATE'  THEN
5313          IF ( (p_name IS NULL) OR (p_name=fnd_api.g_miss_char) ) THEN
5314             IF (fnd_profile.value('CSI_AUTO_GEN_SYS_NAME') = 'Y')
5315             THEN
5316               NULL;
5317             ELSE
5318                      fnd_message.set_name('CSI', 'CSI_SYS_NAME_NOT_PASSED');
5319                      fnd_message.set_token('REQUIRED_PARAM','SYSTEM_NAME');
5320                      fnd_msg_pub.add;
5321                      x_return_status := fnd_api.g_ret_sts_error;
5322             END IF;
5323          END IF;
5324       END IF;
5325 
5326       IF p_validation_mode='UPDATE' THEN
5327          IF ( (p_name IS NULL) OR (p_name=fnd_api.g_miss_char) ) THEN
5328                      fnd_message.set_name('CSI', 'CSI_SYS_NAME_NOT_PASSED');
5329                      fnd_message.set_token('REQUIRED_PARAM','SYSTEM_NAME');
5330                      fnd_msg_pub.add;
5331                      x_return_status := fnd_api.g_ret_sts_error;
5332          END IF;
5333       END IF;
5334 
5335 
5336       -- standard call to get message count and if count is 1, get message info.
5337       fnd_msg_pub.count_and_get
5338       (  p_count          =>   x_msg_count,
5339          p_data           =>   x_msg_data
5340       );
5341 
5342 END validate_name;
5343 
5344 
5345 PROCEDURE validate_object_version_num (
5346     p_init_msg_list              IN   VARCHAR2,
5347     p_validation_mode            IN   VARCHAR2,
5348     p_object_version_number      IN   NUMBER,
5349     x_return_status              OUT NOCOPY  VARCHAR2,
5350     x_msg_count                  OUT NOCOPY  NUMBER,
5351     x_msg_data                   OUT NOCOPY  VARCHAR2
5352     )
5353 IS
5354 l_dummy         VARCHAR2(1);
5355 BEGIN
5356 
5357       -- initialize message list if p_init_msg_list is set to true.
5358       IF fnd_api.to_boolean( p_init_msg_list )
5359       THEN
5360           fnd_msg_pub.initialize;
5361       END IF;
5362 
5363 
5364       -- initialize api return status to success
5365       x_return_status := fnd_api.g_ret_sts_success;
5366 
5367       -- validate not null column
5368 
5369 
5370        IF ( (p_validation_mode = 'UPDATE') OR (p_validation_mode = 'EXPIRE') ) THEN
5371           IF ( (p_object_version_number IS NULL) OR (p_object_version_number = fnd_api.g_miss_num) ) THEN
5372              fnd_message.set_name('CSI', 'CSI_MISSING_OBJ_VER_NUM');
5373              fnd_msg_pub.add;
5374              x_return_status := fnd_api.g_ret_sts_error;
5375           END IF;
5376        END IF;
5377 
5378       -- standard call to get message count and if count is 1, get message info.
5379       fnd_msg_pub.count_and_get
5380       (  p_count          =>   x_msg_count,
5381          p_data           =>   x_msg_data
5382       );
5383 
5384 END validate_object_version_num;
5385 
5386 
5387 
5388 
5389 PROCEDURE validate_systems(
5390     p_init_msg_list              IN   VARCHAR2,
5391     p_validation_level           IN   NUMBER,
5392     p_validation_mode            IN   VARCHAR2,
5393     p_system_rec                 IN   csi_datastructures_pub.system_rec,
5394     x_return_status              OUT NOCOPY  VARCHAR2,
5395     x_msg_count                  OUT NOCOPY  NUMBER,
5396     x_msg_data                   OUT NOCOPY  VARCHAR2
5397     )
5398 IS
5399 l_api_name   CONSTANT VARCHAR2(30) := 'validate_systems';
5400  BEGIN
5401 
5402       -- initialize api return status to success
5403       x_return_status := fnd_api.g_ret_sts_success;
5404 
5405 -- The following IF statement has been commented out for Bug: 3271806
5406 --      IF (p_validation_level >= fnd_api.g_valid_level_full) THEN
5407 
5408           validate_customer_id(
5409               p_init_msg_list          => fnd_api.g_false,
5410               p_validation_mode        => p_validation_mode,
5411               p_customer_id            => p_system_rec.customer_id,
5412               x_return_status          => x_return_status,
5413               x_msg_count              => x_msg_count,
5414               x_msg_data               => x_msg_data);
5415           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5416               RAISE fnd_api.g_exc_error;
5417           END IF;
5418 
5419           validate_system_type_code(
5420               p_init_msg_list          => fnd_api.g_false,
5421               p_validation_mode        => p_validation_mode,
5422               p_system_type_code       => p_system_rec.system_type_code,
5423               x_return_status          => x_return_status,
5424               x_msg_count              => x_msg_count,
5425               x_msg_data               => x_msg_data);
5426           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5427               RAISE fnd_api.g_exc_error;
5428           END IF;
5429 
5430           validate_parent_system_id(
5431               p_init_msg_list          => fnd_api.g_false,
5432               p_validation_mode        => p_validation_mode,
5433               p_parent_system_id       => p_system_rec.parent_system_id,
5434               x_return_status          => x_return_status,
5435               x_msg_count              => x_msg_count,
5436               x_msg_data               => x_msg_data);
5437           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5438               RAISE fnd_api.g_exc_error;
5439           END IF;
5440 
5441           validate_ship_to_contact_id(
5442               p_init_msg_list          => fnd_api.g_false,
5443               p_validation_mode        => p_validation_mode,
5444               p_ship_to_contact_id     => p_system_rec.ship_to_contact_id,
5445               x_return_status          => x_return_status,
5446               x_msg_count              => x_msg_count,
5447               x_msg_data               => x_msg_data);
5448           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5449               RAISE fnd_api.g_exc_error;
5450           END IF;
5451 
5452           validate_bill_to_contact_id(
5453               p_init_msg_list          => fnd_api.g_false,
5454               p_validation_mode        => p_validation_mode,
5455               p_bill_to_contact_id     => p_system_rec.bill_to_contact_id,
5456               x_return_status          => x_return_status,
5457               x_msg_count              => x_msg_count,
5458               x_msg_data               => x_msg_data);
5459           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5460               RAISE fnd_api.g_exc_error;
5461           END IF;
5462 
5463           validate_technical_contact_id(
5464               p_init_msg_list          => fnd_api.g_false,
5465               p_validation_mode        => p_validation_mode,
5466               p_technical_contact_id   => p_system_rec.technical_contact_id,
5467               x_return_status          => x_return_status,
5468               x_msg_count              => x_msg_count,
5469               x_msg_data               => x_msg_data);
5470           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5471               RAISE fnd_api.g_exc_error;
5472           END IF;
5473 
5474           validate_srv_admin_cont_id(
5475               p_init_msg_list              => fnd_api.g_false,
5476               p_validation_mode            => p_validation_mode,
5477               p_service_admin_contact_id   => p_system_rec.service_admin_contact_id,
5478               x_return_status              => x_return_status,
5479               x_msg_count                  => x_msg_count,
5480               x_msg_data                   => x_msg_data);
5481           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5482               RAISE fnd_api.g_exc_error;
5483           END IF;
5484 
5485           validate_ship_to_site_use_id(
5486               p_init_msg_list          => fnd_api.g_false,
5487               p_validation_mode        => p_validation_mode,
5488               p_ship_to_site_use_id    => p_system_rec.ship_to_site_use_id,
5489               x_return_status          => x_return_status,
5490               x_msg_count              => x_msg_count,
5491               x_msg_data               => x_msg_data);
5492           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5493               RAISE fnd_api.g_exc_error;
5494           END IF;
5495 
5496           validate_bill_to_site_use_id(
5497               p_init_msg_list          => fnd_api.g_false,
5498               p_validation_mode        => p_validation_mode,
5499               p_bill_to_site_use_id    => p_system_rec.bill_to_site_use_id,
5500               x_return_status          => x_return_status,
5501               x_msg_count              => x_msg_count,
5502               x_msg_data               => x_msg_data);
5503           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5504               RAISE fnd_api.g_exc_error;
5505           END IF;
5506 
5507           validate_install_site_use_id(
5508               p_init_msg_list          => fnd_api.g_false,
5509               p_validation_mode        => p_validation_mode,
5510               p_install_site_use_id    => p_system_rec.install_site_use_id,
5511               x_return_status          => x_return_status,
5512               x_msg_count              => x_msg_count,
5513               x_msg_data               => x_msg_data);
5514           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5515               RAISE fnd_api.g_exc_error;
5516           END IF;
5517 
5518            validate_name(
5519               p_init_msg_list          => fnd_api.g_false,
5520               p_validation_mode        => p_validation_mode,
5521               p_name                   => p_system_rec.name,
5522               x_return_status          => x_return_status,
5523               x_msg_count              => x_msg_count,
5524               x_msg_data               => x_msg_data);
5525           IF x_return_status <> fnd_api.g_ret_sts_success THEN
5526               RAISE fnd_api.g_exc_error;
5527           END IF;
5528 
5529   --      END IF;
5530 END validate_systems;
5531 --
5532  PROCEDURE Get_System_Details
5533  (
5534      p_api_version               IN  NUMBER  ,
5535      p_commit                    IN  VARCHAR2,
5536      p_init_msg_list             IN  VARCHAR2,
5537      p_validation_level          IN  NUMBER,
5538      p_system_query_rec          IN  csi_datastructures_pub.system_query_rec,
5539      p_time_stamp                IN  DATE,
5540      p_active_systems_only       IN  VARCHAR2,
5541      x_system_header_tbl         OUT NOCOPY csi_datastructures_pub.system_header_tbl,
5542      x_return_status             OUT NOCOPY VARCHAR2,
5543      x_msg_count                 OUT NOCOPY NUMBER,
5544      x_msg_data                  OUT NOCOPY VARCHAR2
5545  )
5546  IS
5547 
5548 l_api_name                 CONSTANT VARCHAR2(30)    := 'get_system_details';
5549 l_api_version              CONSTANT NUMBER          := 1.0;
5550 l_return_status_full                VARCHAR2(1);
5551 l_crit_systems_rec                  csi_datastructures_pub.system_query_rec := p_system_query_rec;
5552 l_systems_where                     VARCHAR2(2000)  := '';
5553 l_cur_get_systems                   NUMBER;
5554 l_select_cl                         VARCHAR2(2000)  := '';
5555 l_def_systems_rec                   csi_datastructures_pub.system_rec;
5556 l_ignore                            NUMBER;
5557 l_return_tot_count                  VARCHAR2(1)     := fnd_api.g_false;
5558 l_returned_rec_count                NUMBER          := 0;
5559 l_sys_rec                           csi_datastructures_pub.system_rec;
5560 l_tot_rec_count                     NUMBER          := 0;
5561 l_start_rec_prt                     NUMBER          :=1;
5562 l_rec_requested                     NUMBER          :=1000000;
5563 l_new_rec                           csi_datastructures_pub.system_rec;
5564 l_flag                              VARCHAR2(4);
5565 l_active_systems_only               VARCHAR2(1):= p_active_systems_only;
5566 l_debug_level                       NUMBER;
5567 l_systems_tbl                       csi_datastructures_pub.systems_tbl;
5568 l_sys_hdr_count                     NUMBER := 0;
5569 l_last_purge_date                   DATE;
5570 --
5571 Process_next                        EXCEPTION;
5572 BEGIN
5573 
5574       -- standard start of api savepoint
5575       SAVEPOINT get_systems_details;
5576 
5577       -- standard call to check for call compatibility.
5578       IF NOT fnd_api.compatible_api_call ( l_api_version,
5579                                            p_api_version,
5580                                            l_api_name,
5581                                            g_pkg_name)
5582       THEN
5583           RAISE fnd_api.g_exc_unexpected_error;
5584       END IF;
5585 
5586 
5587       -- initialize message list if p_init_msg_list is set to true.
5588       IF fnd_api.to_boolean( p_init_msg_list )
5589       THEN
5590           fnd_msg_pub.initialize;
5591       END IF;
5592 
5593 
5594 
5595 
5596       -- initialize api return status to success
5597       x_return_status := fnd_api.g_ret_sts_success;
5598 
5599       l_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
5600         IF (l_debug_level > 0) THEN
5601           csi_gen_utility_pvt.put_line( 'get_system_details');
5602         END IF;
5603 
5604         IF (l_debug_level > 1) THEN
5605              csi_gen_utility_pvt.put_line(
5606                                 p_api_version             ||'-'||
5607                                 p_Commit                  ||'-'||
5608                                 p_Init_Msg_list           ||'-'||
5609                                 p_Validation_level        ||'-'||
5610                                 p_time_stamp              ||'-'||
5611                                 p_active_systems_only
5612                                 );
5613             csi_gen_utility_pvt.dump_sys_query_rec(p_system_query_rec);
5614         END IF;
5615 
5616       IF
5617       ( ((p_system_query_rec.system_id IS NULL)         OR (p_system_query_rec.system_id = fnd_api.g_miss_num))
5618     AND ((p_system_query_rec.system_type_code IS NULL)  OR (p_system_query_rec.system_type_code = fnd_api.g_miss_char))
5619     AND ((p_system_query_rec.system_number IS NULL)     OR (p_system_query_rec.system_number  = fnd_api.g_miss_char))
5620       )
5621       THEN
5622        fnd_message.set_name('CSI', 'CSI_INVALID_PARAMETERS');
5623        fnd_msg_pub.add;
5624        x_return_status := fnd_api.g_ret_sts_error;
5625        RAISE fnd_api.g_exc_error;
5626       END IF;
5627 
5628       gen_select(l_crit_systems_rec,l_select_cl);
5629 
5630 
5631       gen_systems_where(l_crit_systems_rec,l_active_systems_only, l_systems_where);
5632           IF dbms_sql.is_open(l_cur_get_systems) THEN
5633           dbms_sql.close_CURSOR(l_cur_get_systems);
5634           END IF;
5635 
5636        l_cur_get_systems := dbms_sql.open_CURSOR;
5637 
5638        dbms_sql.parse(l_cur_get_systems, l_select_cl||l_systems_where , dbms_sql.native);
5639 
5640        bind(l_crit_systems_rec, l_cur_get_systems);
5641 
5642        define_columns(l_def_systems_rec, l_cur_get_systems);
5643 
5644        l_ignore := dbms_sql.execute(l_cur_get_systems);
5645      --
5646      -- Get the last purge date from csi_item_instances table
5647      --
5648      BEGIN
5649        SELECT last_purge_date
5650        INTO   l_last_purge_date
5651        FROM   CSI_ITEM_INSTANCES
5652        WHERE  rownum < 2;
5653      EXCEPTION
5654        WHEN no_data_found THEN
5655          NULL;
5656        WHEN others THEN
5657          NULL;
5658      END;
5659      --
5660      LOOP
5661      IF((dbms_sql.fetch_rows(l_cur_get_systems)>0) AND ( (l_returned_rec_count<l_rec_requested) OR (l_rec_requested=fnd_api.g_miss_num)))
5662       THEN
5663 
5664              get_column_values(l_cur_get_systems, l_sys_rec);
5665 
5666               l_tot_rec_count := l_tot_rec_count + 1 ;
5667 
5668               IF  (l_returned_rec_count < l_rec_requested)
5669               THEN
5670                    l_returned_rec_count := l_returned_rec_count + 1;
5671                    IF ( (p_time_stamp IS NOT NULL) AND (p_time_stamp <> FND_API.G_MISS_DATE) )
5672                    THEN
5673                        IF ( (l_last_purge_date IS NOT NULL) AND (p_time_stamp <= l_last_purge_date) )
5674                        THEN
5675                            csi_gen_utility_pvt.put_line('Warning! History for this entity has already been purged for the datetime stamp passed. ' ||
5676                            'Please provide a valid datetime stamp.');
5677                            FND_MESSAGE.Set_Name('CSI', 'CSI_API_HIST_AFTER_PURGE_REQ');
5678                            FND_MSG_PUB.ADD;
5679                        ELSE
5680                            get_history( p_sys_rec    => l_sys_rec
5681                                        ,p_new_rec    => l_new_rec
5682                                        ,p_flag       => l_flag
5683                                        ,p_time_stamp => p_time_stamp);
5684                                IF l_flag='ADD' THEN
5685                                   l_systems_tbl(l_returned_rec_count) :=l_new_rec;--l_sys_rec;
5686                                END IF;
5687                        END IF;
5688                    ELSE
5689                       l_systems_tbl(l_returned_rec_count) :=l_sys_rec;
5690                    END IF;
5691               END IF;
5692       ELSE
5693           EXIT;
5694       END IF;
5695       END LOOP;
5696       --
5697       -- END of api body
5698       --
5699      dbms_sql.close_cursor(l_cur_get_systems);
5700       --
5701       IF l_systems_tbl.count > 0 THEN
5702          FOR sys_row IN l_systems_tbl.FIRST .. l_systems_tbl.LAST
5703          LOOP
5704           BEGIN
5705             IF l_systems_tbl.EXISTS(sys_row) THEN
5706                -- Construct Systems Header Tbl using Systems Tbl
5707                -- Ignore the Expired Systems
5708                IF l_active_systems_only = 'T' THEN
5709                   IF l_systems_tbl(sys_row).end_date_active IS NOT NULL AND
5710                      l_systems_tbl(sys_row).end_date_active < SYSDATE THEN
5711                      RAISE Process_next;
5712                   END IF;
5713                END IF;
5714                l_sys_hdr_count := l_sys_hdr_count + 1;
5715                x_system_header_tbl(l_sys_hdr_count).system_id := l_systems_tbl(sys_row).system_id;
5716 	       x_system_header_tbl(l_sys_hdr_count).operating_unit_id := l_systems_tbl(sys_row).operating_unit_id;
5717 	       x_system_header_tbl(l_sys_hdr_count).customer_id := l_systems_tbl(sys_row).customer_id;
5718 	       x_system_header_tbl(l_sys_hdr_count).system_type_code := l_systems_tbl(sys_row).system_type_code;
5719 	       x_system_header_tbl(l_sys_hdr_count).system_number := l_systems_tbl(sys_row).system_number;
5720 	       x_system_header_tbl(l_sys_hdr_count).parent_system_id := l_systems_tbl(sys_row).parent_system_id;
5721 	       x_system_header_tbl(l_sys_hdr_count).technical_contact_id := l_systems_tbl(sys_row).technical_contact_id;
5722 	       x_system_header_tbl(l_sys_hdr_count).service_admin_contact_id := l_systems_tbl(sys_row).service_admin_contact_id;
5723 	       x_system_header_tbl(l_sys_hdr_count).install_site_use_id := l_systems_tbl(sys_row).install_site_use_id;
5724 	       x_system_header_tbl(l_sys_hdr_count).bill_to_contact_id := l_systems_tbl(sys_row).bill_to_contact_id;
5725 	       x_system_header_tbl(l_sys_hdr_count).bill_to_site_use_id := l_systems_tbl(sys_row).bill_to_site_use_id;
5726 	       x_system_header_tbl(l_sys_hdr_count).ship_to_site_use_id := l_systems_tbl(sys_row).ship_to_site_use_id;
5727 	       x_system_header_tbl(l_sys_hdr_count).ship_to_contact_id := l_systems_tbl(sys_row).ship_to_contact_id;
5728 	       x_system_header_tbl(l_sys_hdr_count).coterminate_day_month := l_systems_tbl(sys_row).coterminate_day_month;
5729 	       x_system_header_tbl(l_sys_hdr_count).start_date_active := l_systems_tbl(sys_row).start_date_active;
5730 	       x_system_header_tbl(l_sys_hdr_count).end_date_active := l_systems_tbl(sys_row).end_date_active;
5731 	       x_system_header_tbl(l_sys_hdr_count).autocreated_from_system_id := l_systems_tbl(sys_row).autocreated_from_system_id;
5732 	       x_system_header_tbl(l_sys_hdr_count).attribute1 := l_systems_tbl(sys_row).attribute1;
5733 	       x_system_header_tbl(l_sys_hdr_count).attribute2 := l_systems_tbl(sys_row).attribute2;
5734 	       x_system_header_tbl(l_sys_hdr_count).attribute3 := l_systems_tbl(sys_row).attribute3;
5735 	       x_system_header_tbl(l_sys_hdr_count).attribute4 := l_systems_tbl(sys_row).attribute4;
5736 	       x_system_header_tbl(l_sys_hdr_count).attribute5 := l_systems_tbl(sys_row).attribute5;
5737 	       x_system_header_tbl(l_sys_hdr_count).attribute6 := l_systems_tbl(sys_row).attribute6;
5738 	       x_system_header_tbl(l_sys_hdr_count).attribute7 := l_systems_tbl(sys_row).attribute7;
5739 	       x_system_header_tbl(l_sys_hdr_count).attribute8 := l_systems_tbl(sys_row).attribute8;
5740 	       x_system_header_tbl(l_sys_hdr_count).attribute9 := l_systems_tbl(sys_row).attribute9;
5741 	       x_system_header_tbl(l_sys_hdr_count).attribute10 := l_systems_tbl(sys_row).attribute10;
5742 	       x_system_header_tbl(l_sys_hdr_count).attribute11 := l_systems_tbl(sys_row).attribute11;
5743 	       x_system_header_tbl(l_sys_hdr_count).attribute12 := l_systems_tbl(sys_row).attribute12;
5744 	       x_system_header_tbl(l_sys_hdr_count).attribute13 := l_systems_tbl(sys_row).attribute13;
5745 	       x_system_header_tbl(l_sys_hdr_count).attribute14 := l_systems_tbl(sys_row).attribute14;
5746 	       x_system_header_tbl(l_sys_hdr_count).attribute15 := l_systems_tbl(sys_row).attribute15;
5747 	       x_system_header_tbl(l_sys_hdr_count).context := l_systems_tbl(sys_row).context;
5748 	       x_system_header_tbl(l_sys_hdr_count).config_system_type := l_systems_tbl(sys_row).config_system_type;
5749 	       x_system_header_tbl(l_sys_hdr_count).object_version_number := l_systems_tbl(sys_row).object_version_number;
5750             END IF;
5751           EXCEPTION
5752              WHEN Process_next THEN
5753                 NULL;
5754           END;
5755          END LOOP;
5756          --
5757          csi_systems_pvt.Resolve_ID_Columns(p_system_header_tbl => x_system_header_tbl);
5758       END IF;
5759 
5760       -- standard call to get message count and if count is 1, get message info.
5761       fnd_msg_pub.count_and_get
5762       (  p_count          =>   x_msg_count,
5763          p_data           =>   x_msg_data
5764       );
5765       EXCEPTION
5766          WHEN fnd_api.g_exc_error THEN
5767                ROLLBACK TO get_system_details;
5768                x_return_status := fnd_api.g_ret_sts_error ;
5769                fnd_msg_pub.count_and_get
5770                         (p_count => x_msg_count ,
5771                          p_data => x_msg_data
5772                         );
5773 
5774           WHEN fnd_api.g_exc_unexpected_error THEN
5775                 ROLLBACK TO get_system_details;
5776                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
5777                 fnd_msg_pub.count_and_get
5778                          (p_count => x_msg_count ,
5779                           p_data => x_msg_data
5780                          );
5781 
5782           WHEN OTHERS THEN
5783                 ROLLBACK TO get_system_details;
5784                 x_return_status := fnd_api.g_ret_sts_unexp_error ;
5785                   IF fnd_msg_pub.check_msg_level(fnd_msg_pub.g_msg_lvl_unexp_error) THEN
5786                          fnd_msg_pub.add_exc_msg(g_pkg_name ,l_api_name);
5787                   END IF;
5788                 fnd_msg_pub.count_and_get
5789                          (p_count => x_msg_count ,
5790                           p_data => x_msg_data
5791                          );
5792 
5793  END get_system_details;
5794  --
5795  PROCEDURE Resolve_ID_Columns
5796               (p_system_header_tbl IN OUT NOCOPY csi_datastructures_pub.system_header_tbl)
5797  IS
5798  --
5799    l_sys_type                VARCHAR2(30) := 'CSI_SYSTEM_TYPE';
5800  BEGIN
5801     IF p_system_header_tbl.count > 0 THEN
5802        FOR sys_row in p_system_header_tbl.FIRST .. p_system_header_tbl.LAST
5803        LOOP
5804           IF p_system_header_tbl.EXISTS(sys_row) THEN
5805              IF ( (p_system_header_tbl(sys_row).system_id IS NOT NULL) AND
5806                   (p_system_header_tbl(sys_row).system_id <> FND_API.G_MISS_NUM) ) THEN
5807                 BEGIN
5808                    SELECT name
5809                          ,description
5810                    INTO p_system_header_tbl(sys_row).name
5811                        ,p_system_header_tbl(sys_row).description
5812                    FROM CSI_SYSTEMS_VL
5813                    WHERE system_id = p_system_header_tbl(sys_row).system_id;
5814                 EXCEPTION
5815                    WHEN OTHERS THEN
5816                       NULL;
5817                 END;
5818              END IF;
5819              --
5820              IF ( (p_system_header_tbl(sys_row).customer_id IS NOT NULL) AND
5821                   (p_system_header_tbl(sys_row).customer_id <> FND_API.G_MISS_NUM) ) THEN
5822                 BEGIN
5823                    SELECT hza.account_number
5824                          ,hza.account_name
5825                          ,hza.party_id
5826                          ,hzp.party_number
5827                          ,hzp.party_name
5828                    INTO p_system_header_tbl(sys_row).customer_number
5829                        ,p_system_header_tbl(sys_row).customer_name
5830                        ,p_system_header_tbl(sys_row).party_id
5831                        ,p_system_header_tbl(sys_row).customer_party_number
5832                        ,p_system_header_tbl(sys_row).party_name
5833                    FROM HZ_CUST_ACCOUNTS hza
5834                        ,HZ_PARTIES hzp
5835                    WHERE hza.cust_account_id = p_system_header_tbl(sys_row).customer_id
5836                    AND   hza.party_id = hzp.party_id;
5837                 EXCEPTION
5838                    WHEN OTHERS THEN
5839                       NULL;
5840                 END;
5841              END IF;
5842              --
5843              IF ( (p_system_header_tbl(sys_row).ship_to_site_use_id IS NOT NULL) AND
5844                   (p_system_header_tbl(sys_row).ship_to_site_use_id <> FND_API.G_MISS_NUM) ) THEN
5845                 BEGIN
5846                    SELECT hzp.party_id
5847                          ,hzp.party_number
5848                          ,hzp.party_name
5849                          ,hzp.party_type
5850                          ,hls.address1
5851                          ,hls.address2
5852                          ,hls.address3
5853                          ,hls.address4
5854                          ,hls.city
5855                          ,hls.state
5856                          ,hls.postal_code
5857                          ,hls.country
5858                          ,hls.description
5859                          ,hls.location_id
5860                          ,hps.party_site_number
5861                    INTO p_system_header_tbl(sys_row).ship_to_customer_id
5862                        ,p_system_header_tbl(sys_row).ship_to_customer_number
5863                        ,p_system_header_tbl(sys_row).ship_to_customer
5864                        ,p_system_header_tbl(sys_row).ship_party_type
5865                        ,p_system_header_tbl(sys_row).ship_to_address1
5866                        ,p_system_header_tbl(sys_row).ship_to_address2
5867                        ,p_system_header_tbl(sys_row).ship_to_address3
5868                        ,p_system_header_tbl(sys_row).ship_to_address4
5869                        ,p_system_header_tbl(sys_row).ship_to_location
5870                        ,p_system_header_tbl(sys_row).ship_state
5871                        ,p_system_header_tbl(sys_row).ship_postal_code
5872                        ,p_system_header_tbl(sys_row).ship_country
5873                        ,p_system_header_tbl(sys_row).ship_description
5874                        ,p_system_header_tbl(sys_row).ship_to_location_id
5875                        ,p_system_header_tbl(sys_row).ship_to_site_number
5876                    FROM HZ_CUST_SITE_USES_ALL hzsu
5877                        ,HZ_CUST_ACCT_SITES_ALL hzca
5878                        ,HZ_PARTY_SITES hps
5879                        ,HZ_PARTIES hzp
5880                        ,HZ_LOCATIONS hls
5881                    WHERE hzsu.site_use_id = p_system_header_tbl(sys_row).ship_to_site_use_id
5882                    AND   hzca.cust_acct_site_id = hzsu.cust_acct_site_id
5883                    AND   hzca.party_site_id = hps.party_site_id
5884                    AND   hps.party_id = hzp.party_id
5885                    AND   hps.location_id = hls.location_id;
5886                 EXCEPTION
5887                    WHEN OTHERS THEN
5888                       NULL;
5889                 END;
5890              END IF;
5891              --
5892              IF ( (p_system_header_tbl(sys_row).bill_to_site_use_id IS NOT NULL) AND
5893                   (p_system_header_tbl(sys_row).bill_to_site_use_id <> FND_API.G_MISS_NUM) ) THEN
5894                 BEGIN
5895                    SELECT hzp.party_id
5896                          ,hzp.party_number
5897                          ,hzp.party_name
5898                          ,hzp.party_type
5899                          ,hls.address1
5900                          ,hls.address2
5901                          ,hls.address3
5902                          ,hls.address4
5903                          ,hls.city
5904                          ,hls.state
5905                          ,hls.postal_code
5906                          ,hls.country
5907                          ,hls.description
5908                          ,hls.location_id
5909                          ,hps.party_site_number
5910                    INTO p_system_header_tbl(sys_row).bill_to_customer_id
5911                        ,p_system_header_tbl(sys_row).bill_to_customer_number
5912                        ,p_system_header_tbl(sys_row).bill_to_customer
5913                        ,p_system_header_tbl(sys_row).bill_party_type
5914                        ,p_system_header_tbl(sys_row).bill_to_address1
5915                        ,p_system_header_tbl(sys_row).bill_to_address2
5916                        ,p_system_header_tbl(sys_row).bill_to_address3
5917                        ,p_system_header_tbl(sys_row).bill_to_address4
5918                        ,p_system_header_tbl(sys_row).bill_to_location
5919                        ,p_system_header_tbl(sys_row).bill_state
5920                        ,p_system_header_tbl(sys_row).bill_postal_code
5921                        ,p_system_header_tbl(sys_row).bill_country
5922                        ,p_system_header_tbl(sys_row).bill_description
5923                        ,p_system_header_tbl(sys_row).bill_to_location_id
5924                        ,p_system_header_tbl(sys_row).bill_to_site_number
5925                    FROM HZ_CUST_SITE_USES_ALL hzsu
5926                        ,HZ_CUST_ACCT_SITES_ALL hzca
5927                        ,HZ_PARTY_SITES hps
5928                        ,HZ_PARTIES hzp
5929                        ,HZ_LOCATIONS hls
5930                    WHERE hzsu.site_use_id = p_system_header_tbl(sys_row).bill_to_site_use_id
5931                    AND   hzca.cust_acct_site_id = hzsu.cust_acct_site_id
5932                    AND   hzca.party_site_id = hps.party_site_id
5933                    AND   hps.party_id = hzp.party_id
5934                    AND   hps.location_id = hls.location_id;
5935                 EXCEPTION
5936                    WHEN OTHERS THEN
5937                       NULL;
5938                 END;
5939              END IF;
5940              --
5941              IF ( (p_system_header_tbl(sys_row).install_site_use_id IS NOT NULL) AND
5942                   (p_system_header_tbl(sys_row).install_site_use_id <> FND_API.G_MISS_NUM) ) THEN
5943                 BEGIN
5944                    SELECT hzp.party_id
5945                          ,hzp.party_number
5946                          ,hzp.party_name
5947                          ,hzp.party_type
5948                          ,hls.address1
5949                          ,hls.address2
5950                          ,hls.address3
5951                          ,hls.address4
5952                          ,hls.city
5953                          ,hls.state
5954                          ,hls.postal_code
5955                          ,hls.country
5956                          ,hls.description
5957                          ,hls.location_id
5958                          ,hps.party_site_number
5959                    INTO p_system_header_tbl(sys_row).install_customer_id
5960                        ,p_system_header_tbl(sys_row).install_customer_number
5961                        ,p_system_header_tbl(sys_row).install_customer
5962                        ,p_system_header_tbl(sys_row).install_party_type
5963                        ,p_system_header_tbl(sys_row).install_address1
5964                        ,p_system_header_tbl(sys_row).install_address2
5965                        ,p_system_header_tbl(sys_row).install_address3
5966                        ,p_system_header_tbl(sys_row).install_address4
5967                        ,p_system_header_tbl(sys_row).install_location
5968                        ,p_system_header_tbl(sys_row).install_state
5969                        ,p_system_header_tbl(sys_row).install_postal_code
5970                        ,p_system_header_tbl(sys_row).install_country
5971                        ,p_system_header_tbl(sys_row).install_description
5972                        ,p_system_header_tbl(sys_row).install_location_id
5973                        ,p_system_header_tbl(sys_row).install_site_number
5974                    FROM HZ_PARTY_SITES hps
5975                        ,HZ_PARTIES hzp
5976                        ,HZ_LOCATIONS hls
5977                    WHERE hps.party_site_id = p_system_header_tbl(sys_row).install_site_use_id
5978                    AND   hps.party_id = hzp.party_id
5979                    AND   hps.location_id = hls.location_id;
5980                 EXCEPTION
5981                    WHEN OTHERS THEN
5982                       NULL;
5983                 END;
5984              END IF;
5985              --
5986              IF ( (p_system_header_tbl(sys_row).technical_contact_id IS NOT NULL) AND
5987                   (p_system_header_tbl(sys_row).technical_contact_id <> FND_API.G_MISS_NUM) ) THEN
5988                 BEGIN
5989                    SELECT hzp.party_number
5990                          ,hzp.party_name
5991                    INTO p_system_header_tbl(sys_row).technical_contact_number
5992                        ,p_system_header_tbl(sys_row).technical_contact
5993                    FROM HZ_PARTIES hzp
5994                    WHERE hzp.party_id = p_system_header_tbl(sys_row).technical_contact_id;
5995                 EXCEPTION
5996                    WHEN OTHERS THEN
5997                       NULL;
5998                 END;
5999              END IF;
6000              --
6001              IF ( (p_system_header_tbl(sys_row).service_admin_contact_id IS NOT NULL) AND
6002                   (p_system_header_tbl(sys_row).service_admin_contact_id <> FND_API.G_MISS_NUM) ) THEN
6003                 BEGIN
6004                    SELECT hzp.party_number
6005                          ,hzp.party_name
6006                    INTO p_system_header_tbl(sys_row).service_admin_contact_number
6007                        ,p_system_header_tbl(sys_row).service_admin_contact
6008                    FROM HZ_PARTIES hzp
6009                    WHERE hzp.party_id = p_system_header_tbl(sys_row).service_admin_contact_id;
6010                 EXCEPTION
6011                    WHEN OTHERS THEN
6012                       NULL;
6013                 END;
6014              END IF;
6015              --
6016              IF ( (p_system_header_tbl(sys_row).bill_to_contact_id IS NOT NULL) AND
6017                   (p_system_header_tbl(sys_row).bill_to_contact_id <> FND_API.G_MISS_NUM) ) THEN
6018                 BEGIN
6019                    SELECT hzp.party_number
6020                          ,hzp.party_name
6021                    INTO p_system_header_tbl(sys_row).bill_to_contact_number
6022                        ,p_system_header_tbl(sys_row).bill_to_contact
6023                    FROM HZ_PARTIES hzp
6024                    WHERE hzp.party_id = p_system_header_tbl(sys_row).bill_to_contact_id;
6025                 EXCEPTION
6026                    WHEN OTHERS THEN
6027                       NULL;
6028                 END;
6029              END IF;
6030              --
6031              IF ( (p_system_header_tbl(sys_row).ship_to_contact_id IS NOT NULL) AND
6032                   (p_system_header_tbl(sys_row).ship_to_contact_id <> FND_API.G_MISS_NUM) ) THEN
6033                 BEGIN
6034                    SELECT hzp.party_number
6035                          ,hzp.party_name
6036                    INTO p_system_header_tbl(sys_row).ship_to_contact_number
6037                        ,p_system_header_tbl(sys_row).ship_to_contact
6038                    FROM HZ_PARTIES hzp
6039                    WHERE hzp.party_id = p_system_header_tbl(sys_row).ship_to_contact_id;
6040                 EXCEPTION
6041                    WHEN OTHERS THEN
6042                       NULL;
6043                 END;
6044              END IF;
6045              --
6046              IF ( (p_system_header_tbl(sys_row).operating_unit_id IS NOT NULL) AND
6047                   (p_system_header_tbl(sys_row).operating_unit_id <> FND_API.G_MISS_NUM) ) THEN
6048                 BEGIN
6049                    SELECT name
6050                    INTO p_system_header_tbl(sys_row).operating_unit_name
6051                    FROM HR_OPERATING_UNITS
6052                    WHERE organization_id = p_system_header_tbl(sys_row).operating_unit_id;
6053                 EXCEPTION
6054                    WHEN OTHERS THEN
6055                       NULL;
6056                 END;
6057              END IF;
6058              --
6059              IF ( (p_system_header_tbl(sys_row).parent_system_id IS NOT NULL) AND
6060                   (p_system_header_tbl(sys_row).parent_system_id <> FND_API.G_MISS_NUM) ) THEN
6061                 BEGIN
6062                    SELECT name
6063                          ,description
6064                    INTO p_system_header_tbl(sys_row).parent_name
6065                        ,p_system_header_tbl(sys_row).parent_description
6066                    FROM CSI_SYSTEMS_VL
6067                    WHERE system_id = p_system_header_tbl(sys_row).parent_system_id;
6068                 EXCEPTION
6069                    WHEN OTHERS THEN
6070                       NULL;
6071                 END;
6072              END IF;
6073              --
6074              IF ( (p_system_header_tbl(sys_row).system_type_code IS NOT NULL) AND
6075                   (p_system_header_tbl(sys_row).system_type_code <> FND_API.G_MISS_CHAR) ) THEN
6076                 BEGIN
6077                    SELECT meaning
6078                    INTO p_system_header_tbl(sys_row).system_type
6079                    FROM CSI_LOOKUPS
6080                    WHERE lookup_type = l_sys_type
6081                    AND   lookup_code = p_system_header_tbl(sys_row).system_type_code;
6082                 EXCEPTION
6083                    WHEN OTHERS THEN
6084                       NULL;
6085                 END;
6086              END IF;
6087              --
6088           END IF; -- sys_row EXISTS check
6089        END LOOP;
6090     END IF;
6091  END Resolve_ID_Columns;
6092  --
6093  PROCEDURE Get_System_History
6094    ( p_api_version                IN  NUMBER
6095     ,p_commit                     IN  VARCHAR2
6096     ,p_init_msg_list              IN  VARCHAR2
6097     ,p_validation_level           IN  NUMBER
6098     ,p_transaction_id             IN  NUMBER
6099     ,p_system_id                  IN  NUMBER
6100     ,x_system_history_tbl         OUT NOCOPY csi_datastructures_pub.systems_history_tbl
6101     ,x_return_status              OUT NOCOPY VARCHAR2
6102     ,x_msg_count                  OUT NOCOPY NUMBER
6103     ,x_msg_data                   OUT NOCOPY VARCHAR2
6104    ) IS
6105  --
6106    CURSOR txn_hist_csr(p_txn_id IN NUMBER
6107                       ,p_sys_id IN NUMBER) IS
6108    SELECT *
6109    FROM CSI_SYSTEMS_H
6110    WHERE transaction_id = p_txn_id
6111    AND   system_id = p_sys_id;
6112    --
6113    l_old_sys_header_rec      csi_datastructures_pub.system_header_rec;
6114    l_new_sys_header_rec      csi_datastructures_pub.system_header_rec;
6115    l_old_sys_header_tbl      csi_datastructures_pub.system_header_tbl;
6116    l_new_sys_header_tbl      csi_datastructures_pub.system_header_tbl;
6117    l_sys_history_rec         csi_datastructures_pub.system_history_rec;
6118    l_temp_sys_hist_rec       csi_datastructures_pub.system_history_rec;
6119    l_temp_sys_header_rec     csi_datastructures_pub.system_header_rec;
6120    l_api_name                CONSTANT   VARCHAR2(30) := 'get_system_history';
6121    l_api_version             CONSTANT   NUMBER       := 1.0;
6122    l_sys_count               NUMBER := 0;
6123  BEGIN
6124     IF fnd_api.to_boolean(p_commit) THEN
6125        SAVEPOINT    get_system_history;
6126     END IF;
6127 
6128     -- Standard call to check for call compatibility.
6129     IF NOT FND_API.Compatible_API_Call (l_api_version       ,
6130                                         p_api_version       ,
6131                                         l_api_name              ,
6132                                         G_PKG_NAME              )
6133     THEN
6134        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6135     END IF;
6136 
6137     -- Initialize message list if p_init_msg_list is set to TRUE.
6138     IF FND_API.to_Boolean( p_init_msg_list ) THEN
6139        FND_MSG_PUB.initialize;
6140     END IF;
6141 
6142     --  Initialize API return status to success
6143     x_return_status := FND_API.G_RET_STS_SUCCESS;
6144 
6145     /***** srramakr commented for bug # 3304439
6146     -- Check for the profile option and enable trace
6147     IF (fnd_profile.value('CSI_ENABLE_SQL_TRACE') = 'Y') THEN
6148        dbms_session.set_sql_trace(TRUE);
6149     END IF;
6150 
6151     -- End enable trace
6152     ****/
6153 
6154     -- Start API body
6155     --
6156     FOR l_hist_csr  IN txn_hist_csr(p_transaction_id,p_system_id)
6157     LOOP
6158        l_sys_history_rec := l_temp_sys_hist_rec;
6159        l_old_sys_header_rec := l_temp_sys_header_rec;
6160        l_new_sys_header_rec := l_temp_sys_header_rec;
6161        --
6162        IF NVL(l_hist_csr.old_customer_id,fnd_api.g_miss_num) =
6163                                          NVL(l_hist_csr.new_customer_id,fnd_api.g_miss_num) THEN
6164           l_old_sys_header_rec.customer_id := NULL;
6165           l_new_sys_header_rec.customer_id := NULL;
6166        ELSE
6167           l_old_sys_header_rec.customer_id := l_hist_csr.old_customer_id;
6168           l_new_sys_header_rec.customer_id := l_hist_csr.new_customer_id;
6169        END IF;
6170        --
6171        IF NVL(l_hist_csr.old_system_type_code,fnd_api.g_miss_char) =
6172                                          NVL(l_hist_csr.new_system_type_code,fnd_api.g_miss_char) THEN
6173           l_old_sys_header_rec.system_type_code := NULL;
6174           l_new_sys_header_rec.system_type_code := NULL;
6175        ELSE
6176           l_old_sys_header_rec.system_type_code := l_hist_csr.old_system_type_code;
6177           l_new_sys_header_rec.system_type_code := l_hist_csr.new_system_type_code;
6178        END IF;
6179        --
6180        IF NVL(l_hist_csr.old_system_number,fnd_api.g_miss_char) =
6181                                          NVL(l_hist_csr.new_system_number,fnd_api.g_miss_char) THEN
6182           l_old_sys_header_rec.system_number := NULL;
6183           l_new_sys_header_rec.system_number := NULL;
6184        ELSE
6185           l_old_sys_header_rec.system_number := l_hist_csr.old_system_number;
6186           l_new_sys_header_rec.system_number := l_hist_csr.new_system_number;
6187        END IF;
6188        --
6189        IF NVL(l_hist_csr.old_parent_system_id,fnd_api.g_miss_num) =
6190                                          NVL(l_hist_csr.new_parent_system_id,fnd_api.g_miss_num) THEN
6191           l_old_sys_header_rec.parent_system_id := NULL;
6192           l_new_sys_header_rec.parent_system_id := NULL;
6193        ELSE
6194           l_old_sys_header_rec.parent_system_id := l_hist_csr.old_parent_system_id;
6195           l_new_sys_header_rec.parent_system_id := l_hist_csr.new_parent_system_id;
6196        END IF;
6197        --
6198        IF NVL(l_hist_csr.old_ship_to_contact_id,fnd_api.g_miss_num) =
6199                                          NVL(l_hist_csr.new_ship_to_contact_id,fnd_api.g_miss_num) THEN
6200           l_old_sys_header_rec.ship_to_contact_id := NULL;
6201           l_new_sys_header_rec.ship_to_contact_id := NULL;
6202        ELSE
6203           l_old_sys_header_rec.ship_to_contact_id := l_hist_csr.old_ship_to_contact_id;
6204           l_new_sys_header_rec.ship_to_contact_id := l_hist_csr.new_ship_to_contact_id;
6205        END IF;
6206        --
6207        IF NVL(l_hist_csr.old_bill_to_contact_id,fnd_api.g_miss_num) =
6208                                          NVL(l_hist_csr.new_bill_to_contact_id,fnd_api.g_miss_num) THEN
6209           l_old_sys_header_rec.bill_to_contact_id := NULL;
6210           l_new_sys_header_rec.bill_to_contact_id := NULL;
6211        ELSE
6212           l_old_sys_header_rec.bill_to_contact_id := l_hist_csr.old_bill_to_contact_id;
6213           l_new_sys_header_rec.bill_to_contact_id := l_hist_csr.new_bill_to_contact_id;
6214        END IF;
6215        --
6216        IF NVL(l_hist_csr.old_technical_contact_id,fnd_api.g_miss_num) =
6217                                          NVL(l_hist_csr.new_technical_contact_id,fnd_api.g_miss_num) THEN
6218           l_old_sys_header_rec.technical_contact_id := NULL;
6219           l_new_sys_header_rec.technical_contact_id := NULL;
6220        ELSE
6221           l_old_sys_header_rec.technical_contact_id := l_hist_csr.old_technical_contact_id;
6222           l_new_sys_header_rec.technical_contact_id := l_hist_csr.new_technical_contact_id;
6223        END IF;
6224        --
6225        IF NVL(l_hist_csr.old_service_admin_contact_id,fnd_api.g_miss_num) =
6226                                          NVL(l_hist_csr.new_service_admin_contact_id,fnd_api.g_miss_num) THEN
6227           l_old_sys_header_rec.service_admin_contact_id := NULL;
6228           l_new_sys_header_rec.service_admin_contact_id := NULL;
6229        ELSE
6230           l_old_sys_header_rec.service_admin_contact_id := l_hist_csr.old_service_admin_contact_id;
6231           l_new_sys_header_rec.service_admin_contact_id := l_hist_csr.new_service_admin_contact_id;
6232        END IF;
6233        --
6234        IF NVL(l_hist_csr.old_ship_to_site_use_id,fnd_api.g_miss_num) =
6235                                          NVL(l_hist_csr.new_ship_to_site_use_id,fnd_api.g_miss_num) THEN
6236           l_old_sys_header_rec.ship_to_site_use_id := NULL;
6237           l_new_sys_header_rec.ship_to_site_use_id := NULL;
6238        ELSE
6239           l_old_sys_header_rec.ship_to_site_use_id := l_hist_csr.old_ship_to_site_use_id;
6240           l_new_sys_header_rec.ship_to_site_use_id := l_hist_csr.new_ship_to_site_use_id;
6241        END IF;
6242        --
6243        IF NVL(l_hist_csr.old_bill_to_site_use_id,fnd_api.g_miss_num) =
6244                                          NVL(l_hist_csr.new_bill_to_site_use_id,fnd_api.g_miss_num) THEN
6245           l_old_sys_header_rec.bill_to_site_use_id := NULL;
6246           l_new_sys_header_rec.bill_to_site_use_id := NULL;
6247        ELSE
6248           l_old_sys_header_rec.bill_to_site_use_id := l_hist_csr.old_bill_to_site_use_id;
6249           l_new_sys_header_rec.bill_to_site_use_id := l_hist_csr.new_bill_to_site_use_id;
6250        END IF;
6251        --
6252        IF NVL(l_hist_csr.old_install_site_use_id,fnd_api.g_miss_num) =
6253                                          NVL(l_hist_csr.new_install_site_use_id,fnd_api.g_miss_num) THEN
6254           l_old_sys_header_rec.install_site_use_id := NULL;
6255           l_new_sys_header_rec.install_site_use_id := NULL;
6256        ELSE
6257           l_old_sys_header_rec.install_site_use_id := l_hist_csr.old_install_site_use_id;
6258           l_new_sys_header_rec.install_site_use_id := l_hist_csr.new_install_site_use_id;
6259        END IF;
6260        --
6261        IF NVL(l_hist_csr.old_coterminate_day_month,fnd_api.g_miss_char) =
6262                                          NVL(l_hist_csr.new_coterminate_day_month,fnd_api.g_miss_char) THEN
6263           l_old_sys_header_rec.coterminate_day_month := NULL;
6264           l_new_sys_header_rec.coterminate_day_month := NULL;
6265        ELSE
6266           l_old_sys_header_rec.coterminate_day_month := l_hist_csr.old_coterminate_day_month;
6267           l_new_sys_header_rec.coterminate_day_month := l_hist_csr.new_coterminate_day_month;
6268        END IF;
6269        --
6270        IF NVL(l_hist_csr.old_start_date_active,fnd_api.g_miss_date) =
6271                                          NVL(l_hist_csr.new_start_date_active,fnd_api.g_miss_date) THEN
6272           l_old_sys_header_rec.start_date_active := NULL;
6273           l_new_sys_header_rec.start_date_active := NULL;
6274        ELSE
6275           l_old_sys_header_rec.start_date_active := l_hist_csr.old_start_date_active;
6276           l_new_sys_header_rec.start_date_active := l_hist_csr.new_start_date_active;
6277        END IF;
6278        --
6279        IF NVL(l_hist_csr.old_end_date_active,fnd_api.g_miss_date) =
6280                                          NVL(l_hist_csr.new_end_date_active,fnd_api.g_miss_date) THEN
6281           l_old_sys_header_rec.end_date_active := NULL;
6282           l_new_sys_header_rec.end_date_active := NULL;
6283        ELSE
6284           l_old_sys_header_rec.end_date_active := l_hist_csr.old_end_date_active;
6285           l_new_sys_header_rec.end_date_active := l_hist_csr.new_end_date_active;
6286        END IF;
6287        --
6288        IF NVL(l_hist_csr.old_autocreated_from_system,fnd_api.g_miss_num) =
6289                                          NVL(l_hist_csr.new_autocreated_from_system,fnd_api.g_miss_num) THEN
6290           l_old_sys_header_rec.autocreated_from_system_id := NULL;
6291           l_new_sys_header_rec.autocreated_from_system_id := NULL;
6292        ELSE
6293           l_old_sys_header_rec.autocreated_from_system_id := l_hist_csr.old_autocreated_from_system;
6294           l_new_sys_header_rec.autocreated_from_system_id := l_hist_csr.new_autocreated_from_system;
6295        END IF;
6296        --
6297        IF NVL(l_hist_csr.old_config_system_type,fnd_api.g_miss_char) =
6298                                          NVL(l_hist_csr.new_config_system_type,fnd_api.g_miss_char) THEN
6299           l_old_sys_header_rec.config_system_type := NULL;
6300           l_new_sys_header_rec.config_system_type := NULL;
6301        ELSE
6302           l_old_sys_header_rec.config_system_type := l_hist_csr.old_config_system_type;
6303           l_new_sys_header_rec.config_system_type := l_hist_csr.new_config_system_type;
6304        END IF;
6305        --
6306        IF NVL(l_hist_csr.old_name,fnd_api.g_miss_char) =
6307                                          NVL(l_hist_csr.new_name,fnd_api.g_miss_char) THEN
6308           l_old_sys_header_rec.name := NULL;
6309           l_new_sys_header_rec.name := NULL;
6310        ELSE
6311           l_old_sys_header_rec.name := l_hist_csr.old_name;
6312           l_new_sys_header_rec.name := l_hist_csr.new_name;
6313        END IF;
6314        --
6315        IF NVL(l_hist_csr.old_description,fnd_api.g_miss_char) =
6316                                          NVL(l_hist_csr.new_description,fnd_api.g_miss_char) THEN
6317           l_old_sys_header_rec.description := NULL;
6318           l_new_sys_header_rec.description := NULL;
6319        ELSE
6320           l_old_sys_header_rec.description := l_hist_csr.old_description;
6321           l_new_sys_header_rec.description := l_hist_csr.new_description;
6322        END IF;
6323        --
6324        IF NVL(l_hist_csr.old_context,fnd_api.g_miss_char) =
6325                                          NVL(l_hist_csr.new_context,fnd_api.g_miss_char) THEN
6326           l_old_sys_header_rec.context := NULL;
6327           l_new_sys_header_rec.context := NULL;
6328        ELSE
6329           l_old_sys_header_rec.context := l_hist_csr.old_context;
6330           l_new_sys_header_rec.context := l_hist_csr.new_context;
6331        END IF;
6332        --
6333        IF NVL(l_hist_csr.old_attribute1,fnd_api.g_miss_char) =
6334                                          NVL(l_hist_csr.new_attribute1,fnd_api.g_miss_char) THEN
6335           l_old_sys_header_rec.attribute1 := NULL;
6336           l_new_sys_header_rec.attribute1 := NULL;
6337        ELSE
6338           l_old_sys_header_rec.attribute1 := l_hist_csr.old_attribute1;
6339           l_new_sys_header_rec.attribute1 := l_hist_csr.new_attribute1;
6340        END IF;
6341        --
6342        IF NVL(l_hist_csr.old_attribute2,fnd_api.g_miss_char) =
6343                                          NVL(l_hist_csr.new_attribute2,fnd_api.g_miss_char) THEN
6344           l_old_sys_header_rec.attribute2 := NULL;
6345           l_new_sys_header_rec.attribute2 := NULL;
6346        ELSE
6347           l_old_sys_header_rec.attribute2 := l_hist_csr.old_attribute2;
6348           l_new_sys_header_rec.attribute2 := l_hist_csr.new_attribute2;
6349        END IF;
6350        --
6351        IF NVL(l_hist_csr.old_attribute3,fnd_api.g_miss_char) =
6352                                          NVL(l_hist_csr.new_attribute3,fnd_api.g_miss_char) THEN
6353           l_old_sys_header_rec.attribute3 := NULL;
6354           l_new_sys_header_rec.attribute3 := NULL;
6355        ELSE
6356           l_old_sys_header_rec.attribute3 := l_hist_csr.old_attribute3;
6357           l_new_sys_header_rec.attribute3 := l_hist_csr.new_attribute3;
6358        END IF;
6359        --
6360        IF NVL(l_hist_csr.old_attribute4,fnd_api.g_miss_char) =
6361                                          NVL(l_hist_csr.new_attribute4,fnd_api.g_miss_char) THEN
6362           l_old_sys_header_rec.attribute4 := NULL;
6363           l_new_sys_header_rec.attribute4 := NULL;
6364        ELSE
6365           l_old_sys_header_rec.attribute4 := l_hist_csr.old_attribute4;
6366           l_new_sys_header_rec.attribute4 := l_hist_csr.new_attribute4;
6367        END IF;
6368        --
6369        IF NVL(l_hist_csr.old_attribute5,fnd_api.g_miss_char) =
6370                                          NVL(l_hist_csr.new_attribute5,fnd_api.g_miss_char) THEN
6371           l_old_sys_header_rec.attribute5 := NULL;
6372           l_new_sys_header_rec.attribute5 := NULL;
6373        ELSE
6374           l_old_sys_header_rec.attribute5 := l_hist_csr.old_attribute5;
6375           l_new_sys_header_rec.attribute5 := l_hist_csr.new_attribute5;
6376        END IF;
6377        --
6378        IF NVL(l_hist_csr.old_attribute6,fnd_api.g_miss_char) =
6379                                          NVL(l_hist_csr.new_attribute6,fnd_api.g_miss_char) THEN
6380           l_old_sys_header_rec.attribute6 := NULL;
6381           l_new_sys_header_rec.attribute6 := NULL;
6382        ELSE
6383           l_old_sys_header_rec.attribute6 := l_hist_csr.old_attribute6;
6384           l_new_sys_header_rec.attribute6 := l_hist_csr.new_attribute6;
6385        END IF;
6386        --
6387        IF NVL(l_hist_csr.old_attribute7,fnd_api.g_miss_char) =
6388                                          NVL(l_hist_csr.new_attribute7,fnd_api.g_miss_char) THEN
6389           l_old_sys_header_rec.attribute7 := NULL;
6390           l_new_sys_header_rec.attribute7 := NULL;
6391        ELSE
6392           l_old_sys_header_rec.attribute7 := l_hist_csr.old_attribute7;
6393           l_new_sys_header_rec.attribute7 := l_hist_csr.new_attribute7;
6394        END IF;
6395        --
6396        IF NVL(l_hist_csr.old_attribute8,fnd_api.g_miss_char) =
6397                                          NVL(l_hist_csr.new_attribute8,fnd_api.g_miss_char) THEN
6398           l_old_sys_header_rec.attribute8 := NULL;
6399           l_new_sys_header_rec.attribute8 := NULL;
6400        ELSE
6401           l_old_sys_header_rec.attribute8 := l_hist_csr.old_attribute8;
6402           l_new_sys_header_rec.attribute8 := l_hist_csr.new_attribute8;
6403        END IF;
6404        --
6405        IF NVL(l_hist_csr.old_attribute9,fnd_api.g_miss_char) =
6406                                          NVL(l_hist_csr.new_attribute9,fnd_api.g_miss_char) THEN
6407           l_old_sys_header_rec.attribute9 := NULL;
6408           l_new_sys_header_rec.attribute9 := NULL;
6409        ELSE
6410           l_old_sys_header_rec.attribute9 := l_hist_csr.old_attribute9;
6411           l_new_sys_header_rec.attribute9 := l_hist_csr.new_attribute9;
6412        END IF;
6413        --
6414        IF NVL(l_hist_csr.old_attribute10,fnd_api.g_miss_char) =
6415                                          NVL(l_hist_csr.new_attribute10,fnd_api.g_miss_char) THEN
6416           l_old_sys_header_rec.attribute10 := NULL;
6417           l_new_sys_header_rec.attribute10 := NULL;
6418        ELSE
6419           l_old_sys_header_rec.attribute10 := l_hist_csr.old_attribute10;
6420           l_new_sys_header_rec.attribute10 := l_hist_csr.new_attribute10;
6421        END IF;
6422        --
6423        IF NVL(l_hist_csr.old_attribute11,fnd_api.g_miss_char) =
6424                                          NVL(l_hist_csr.new_attribute11,fnd_api.g_miss_char) THEN
6425           l_old_sys_header_rec.attribute11 := NULL;
6426           l_new_sys_header_rec.attribute11 := NULL;
6427        ELSE
6428           l_old_sys_header_rec.attribute11 := l_hist_csr.old_attribute11;
6429           l_new_sys_header_rec.attribute11 := l_hist_csr.new_attribute11;
6430        END IF;
6431        --
6432        IF NVL(l_hist_csr.old_attribute12,fnd_api.g_miss_char) =
6433                                          NVL(l_hist_csr.new_attribute12,fnd_api.g_miss_char) THEN
6434           l_old_sys_header_rec.attribute12 := NULL;
6435           l_new_sys_header_rec.attribute12 := NULL;
6436        ELSE
6437           l_old_sys_header_rec.attribute12 := l_hist_csr.old_attribute12;
6438           l_new_sys_header_rec.attribute12 := l_hist_csr.new_attribute12;
6439        END IF;
6440        --
6441        IF NVL(l_hist_csr.old_attribute13,fnd_api.g_miss_char) =
6442                                          NVL(l_hist_csr.new_attribute13,fnd_api.g_miss_char) THEN
6443           l_old_sys_header_rec.attribute13 := NULL;
6444           l_new_sys_header_rec.attribute13 := NULL;
6445        ELSE
6446           l_old_sys_header_rec.attribute13 := l_hist_csr.old_attribute13;
6447           l_new_sys_header_rec.attribute13 := l_hist_csr.new_attribute13;
6448        END IF;
6449        --
6450        IF NVL(l_hist_csr.old_attribute14,fnd_api.g_miss_char) =
6451                                          NVL(l_hist_csr.new_attribute14,fnd_api.g_miss_char) THEN
6452           l_old_sys_header_rec.attribute14 := NULL;
6453           l_new_sys_header_rec.attribute14 := NULL;
6454        ELSE
6455           l_old_sys_header_rec.attribute14 := l_hist_csr.old_attribute14;
6456           l_new_sys_header_rec.attribute14 := l_hist_csr.new_attribute14;
6457        END IF;
6458        --
6459        IF NVL(l_hist_csr.old_attribute15,fnd_api.g_miss_char) =
6460                                          NVL(l_hist_csr.new_attribute15,fnd_api.g_miss_char) THEN
6461           l_old_sys_header_rec.attribute15 := NULL;
6462           l_new_sys_header_rec.attribute15 := NULL;
6463        ELSE
6464           l_old_sys_header_rec.attribute15 := l_hist_csr.old_attribute15;
6465           l_new_sys_header_rec.attribute15 := l_hist_csr.new_attribute15;
6466        END IF;
6467        --
6468        IF NVL(l_hist_csr.old_operating_unit_id,fnd_api.g_miss_num) =
6469                                          NVL(l_hist_csr.new_operating_unit_id,fnd_api.g_miss_num) THEN
6470           l_old_sys_header_rec.operating_unit_id := NULL;
6471           l_new_sys_header_rec.operating_unit_id := NULL;
6472        ELSE
6473           l_old_sys_header_rec.operating_unit_id := l_hist_csr.old_operating_unit_id;
6474           l_new_sys_header_rec.operating_unit_id := l_hist_csr.new_operating_unit_id;
6475        END IF;
6476        --
6477        -- Resolve the IDs
6478        l_old_sys_header_tbl(1) := l_old_sys_header_rec;
6479        csi_systems_pvt.Resolve_ID_Columns(p_system_header_tbl => l_old_sys_header_tbl);
6480        l_old_sys_header_rec := l_old_sys_header_tbl(1);
6481        --
6482        l_new_sys_header_tbl(1) := l_new_sys_header_rec;
6483        csi_systems_pvt.Resolve_ID_Columns(p_system_header_tbl => l_new_sys_header_tbl);
6484        l_new_sys_header_rec := l_new_sys_header_tbl(1);
6485        --
6486        -- Check for the Resolved Column values and assign NULL appropriately
6487        IF NVL(l_old_sys_header_rec.name,fnd_api.g_miss_char) =
6488                                    NVL(l_new_sys_header_rec.name,fnd_api.g_miss_char) THEN
6489           l_old_sys_header_rec.name := NULL;
6490           l_new_sys_header_rec.name := NULL;
6491        END IF;
6492        --
6493        IF NVL(l_old_sys_header_rec.description,fnd_api.g_miss_char) =
6494                                    NVL(l_new_sys_header_rec.description,fnd_api.g_miss_char) THEN
6495           l_old_sys_header_rec.description := NULL;
6496           l_new_sys_header_rec.description := NULL;
6497        END IF;
6498        --
6499        -- Build the l_system_history_rec
6500        l_sys_history_rec.system_history_id := l_hist_csr.system_history_id;
6501        l_sys_history_rec.system_id := l_hist_csr.system_id;
6502        l_sys_history_rec.transaction_id := l_hist_csr.transaction_id;
6503        l_sys_history_rec.old_customer_id := l_old_sys_header_rec.customer_id;
6504        l_sys_history_rec.new_customer_id := l_new_sys_header_rec.customer_id;
6505        l_sys_history_rec.old_system_type_code := l_old_sys_header_rec.system_type_code;
6506        l_sys_history_rec.new_system_type_code := l_new_sys_header_rec.system_type_code;
6507        l_sys_history_rec.old_system_number := l_old_sys_header_rec.system_number;
6508        l_sys_history_rec.new_system_number := l_new_sys_header_rec.system_number;
6509        l_sys_history_rec.old_parent_system_id := l_old_sys_header_rec.parent_system_id;
6510        l_sys_history_rec.new_parent_system_id := l_new_sys_header_rec.parent_system_id;
6511        l_sys_history_rec.old_ship_to_contact_id := l_old_sys_header_rec.ship_to_contact_id;
6512        l_sys_history_rec.new_ship_to_contact_id := l_new_sys_header_rec.ship_to_contact_id;
6513        l_sys_history_rec.old_bill_to_contact_id := l_old_sys_header_rec.bill_to_contact_id;
6514        l_sys_history_rec.new_bill_to_contact_id := l_new_sys_header_rec.bill_to_contact_id;
6515        l_sys_history_rec.old_technical_contact_id := l_old_sys_header_rec.technical_contact_id;
6516        l_sys_history_rec.new_technical_contact_id := l_new_sys_header_rec.technical_contact_id;
6517        l_sys_history_rec.old_service_admin_contact_id := l_old_sys_header_rec.service_admin_contact_id;
6518        l_sys_history_rec.new_service_admin_contact_id := l_new_sys_header_rec.service_admin_contact_id;
6519        l_sys_history_rec.old_ship_to_site_use_id := l_old_sys_header_rec.ship_to_site_use_id;
6520        l_sys_history_rec.new_ship_to_site_use_id := l_new_sys_header_rec.ship_to_site_use_id;
6521        l_sys_history_rec.old_bill_to_site_use_id := l_old_sys_header_rec.bill_to_site_use_id;
6522        l_sys_history_rec.new_bill_to_site_use_id := l_new_sys_header_rec.bill_to_site_use_id;
6523        l_sys_history_rec.old_install_site_use_id := l_old_sys_header_rec.install_site_use_id;
6524        l_sys_history_rec.new_install_site_use_id := l_new_sys_header_rec.install_site_use_id;
6525        l_sys_history_rec.old_coterminate_day_month := l_old_sys_header_rec.coterminate_day_month;
6526        l_sys_history_rec.new_coterminate_day_month := l_new_sys_header_rec.coterminate_day_month;
6527        l_sys_history_rec.old_start_date_active := l_old_sys_header_rec.start_date_active;
6528        l_sys_history_rec.new_start_date_active := l_new_sys_header_rec.start_date_active;
6529        l_sys_history_rec.old_end_date_active := l_old_sys_header_rec.end_date_active;
6530        l_sys_history_rec.new_end_date_active := l_new_sys_header_rec.end_date_active;
6531        l_sys_history_rec.old_autocreated_from_system := l_old_sys_header_rec.autocreated_from_system_id;
6532        l_sys_history_rec.new_autocreated_from_system := l_new_sys_header_rec.autocreated_from_system_id;
6533        l_sys_history_rec.old_config_system_type := l_old_sys_header_rec.config_system_type;
6534        l_sys_history_rec.new_config_system_type := l_new_sys_header_rec.config_system_type;
6535        l_sys_history_rec.old_context := l_old_sys_header_rec.context;
6536        l_sys_history_rec.new_context := l_new_sys_header_rec.context;
6537        l_sys_history_rec.old_attribute1 := l_old_sys_header_rec.attribute1;
6538        l_sys_history_rec.new_attribute1 := l_new_sys_header_rec.attribute1;
6539        l_sys_history_rec.old_attribute2 := l_old_sys_header_rec.attribute2;
6540        l_sys_history_rec.new_attribute2 := l_new_sys_header_rec.attribute2;
6541        l_sys_history_rec.old_attribute3 := l_old_sys_header_rec.attribute3;
6542        l_sys_history_rec.new_attribute3 := l_new_sys_header_rec.attribute3;
6543        l_sys_history_rec.old_attribute4 := l_old_sys_header_rec.attribute4;
6544        l_sys_history_rec.new_attribute4 := l_new_sys_header_rec.attribute4;
6545        l_sys_history_rec.old_attribute5 := l_old_sys_header_rec.attribute5;
6546        l_sys_history_rec.new_attribute5 := l_new_sys_header_rec.attribute5;
6547        l_sys_history_rec.old_attribute6 := l_old_sys_header_rec.attribute6;
6548        l_sys_history_rec.new_attribute6 := l_new_sys_header_rec.attribute6;
6549        l_sys_history_rec.old_attribute7 := l_old_sys_header_rec.attribute7;
6550        l_sys_history_rec.new_attribute7 := l_new_sys_header_rec.attribute7;
6551        l_sys_history_rec.old_attribute8 := l_old_sys_header_rec.attribute8;
6552        l_sys_history_rec.new_attribute8 := l_new_sys_header_rec.attribute8;
6553        l_sys_history_rec.old_attribute9 := l_old_sys_header_rec.attribute9;
6554        l_sys_history_rec.new_attribute9 := l_new_sys_header_rec.attribute9;
6555        l_sys_history_rec.old_attribute10 := l_old_sys_header_rec.attribute10;
6556        l_sys_history_rec.new_attribute10 := l_new_sys_header_rec.attribute10;
6557        l_sys_history_rec.old_attribute11 := l_old_sys_header_rec.attribute11;
6558        l_sys_history_rec.new_attribute11 := l_new_sys_header_rec.attribute11;
6559        l_sys_history_rec.old_attribute12 := l_old_sys_header_rec.attribute12;
6560        l_sys_history_rec.new_attribute12 := l_new_sys_header_rec.attribute12;
6561        l_sys_history_rec.old_attribute13 := l_old_sys_header_rec.attribute13;
6562        l_sys_history_rec.new_attribute13 := l_new_sys_header_rec.attribute13;
6563        l_sys_history_rec.old_attribute14 := l_old_sys_header_rec.attribute14;
6564        l_sys_history_rec.new_attribute14 := l_new_sys_header_rec.attribute14;
6565        l_sys_history_rec.old_attribute15 := l_old_sys_header_rec.attribute15;
6566        l_sys_history_rec.new_attribute15 := l_new_sys_header_rec.attribute15;
6567        l_sys_history_rec.old_name := l_old_sys_header_rec.name;
6568        l_sys_history_rec.new_name := l_new_sys_header_rec.name;
6569        l_sys_history_rec.old_description := l_old_sys_header_rec.description;
6570        l_sys_history_rec.new_description := l_new_sys_header_rec.description;
6571        l_sys_history_rec.old_operating_unit_id := l_old_sys_header_rec.operating_unit_id;
6572        l_sys_history_rec.new_operating_unit_id := l_new_sys_header_rec.operating_unit_id;
6573        l_sys_history_rec.old_operating_unit_name := l_old_sys_header_rec.operating_unit_name;
6574        l_sys_history_rec.new_operating_unit_name := l_new_sys_header_rec.operating_unit_name;
6575        l_sys_history_rec.old_system_type := l_old_sys_header_rec.system_type;
6576        l_sys_history_rec.new_system_type := l_new_sys_header_rec.system_type;
6577        l_sys_history_rec.old_parent_name := l_old_sys_header_rec.parent_name;
6578        l_sys_history_rec.new_parent_name := l_new_sys_header_rec.parent_name;
6579        l_sys_history_rec.old_ship_to_address1 := l_old_sys_header_rec.ship_to_address1;
6580        l_sys_history_rec.new_ship_to_address1 := l_new_sys_header_rec.ship_to_address1;
6581        l_sys_history_rec.old_ship_to_address2 := l_old_sys_header_rec.ship_to_address2;
6582        l_sys_history_rec.new_ship_to_address2 := l_new_sys_header_rec.ship_to_address2;
6583        l_sys_history_rec.old_ship_to_address3 := l_old_sys_header_rec.ship_to_address3;
6584        l_sys_history_rec.new_ship_to_address3 := l_new_sys_header_rec.ship_to_address3;
6585        l_sys_history_rec.old_ship_to_address4 := l_old_sys_header_rec.ship_to_address4;
6586        l_sys_history_rec.new_ship_to_address4 := l_new_sys_header_rec.ship_to_address4;
6587        l_sys_history_rec.old_ship_to_location := l_old_sys_header_rec.ship_to_location;
6588        l_sys_history_rec.new_ship_to_location := l_new_sys_header_rec.ship_to_location;
6589        l_sys_history_rec.old_ship_state := l_old_sys_header_rec.ship_state;
6590        l_sys_history_rec.new_ship_state := l_new_sys_header_rec.ship_state;
6591        l_sys_history_rec.old_ship_postal_code := l_old_sys_header_rec.ship_postal_code;
6592        l_sys_history_rec.new_ship_postal_code := l_new_sys_header_rec.ship_postal_code;
6593        l_sys_history_rec.old_ship_country := l_old_sys_header_rec.ship_country;
6594        l_sys_history_rec.new_ship_country := l_new_sys_header_rec.ship_country;
6595        l_sys_history_rec.old_ship_to_customer := l_old_sys_header_rec.ship_to_customer;
6596        l_sys_history_rec.new_ship_to_customer := l_new_sys_header_rec.ship_to_customer;
6597        l_sys_history_rec.old_ship_to_customer_number := l_old_sys_header_rec.ship_to_customer_number;
6598        l_sys_history_rec.new_ship_to_customer_number := l_new_sys_header_rec.ship_to_customer_number;
6599        l_sys_history_rec.old_bill_to_address1 := l_old_sys_header_rec.bill_to_address1;
6600        l_sys_history_rec.new_bill_to_address1 := l_new_sys_header_rec.bill_to_address1;
6601        l_sys_history_rec.old_bill_to_address2 := l_old_sys_header_rec.bill_to_address2;
6602        l_sys_history_rec.new_bill_to_address2 := l_new_sys_header_rec.bill_to_address2;
6603        l_sys_history_rec.old_bill_to_address3 := l_old_sys_header_rec.bill_to_address3;
6604        l_sys_history_rec.new_bill_to_address3 := l_new_sys_header_rec.bill_to_address3;
6605        l_sys_history_rec.old_bill_to_address4 := l_old_sys_header_rec.bill_to_address4;
6606        l_sys_history_rec.new_bill_to_address4 := l_new_sys_header_rec.bill_to_address4;
6607        l_sys_history_rec.old_bill_to_location := l_old_sys_header_rec.bill_to_location;
6608        l_sys_history_rec.new_bill_to_location := l_new_sys_header_rec.bill_to_location;
6609        l_sys_history_rec.old_bill_state := l_old_sys_header_rec.bill_state;
6610        l_sys_history_rec.new_bill_state := l_new_sys_header_rec.bill_state;
6611        l_sys_history_rec.old_bill_postal_code := l_old_sys_header_rec.bill_postal_code;
6612        l_sys_history_rec.new_bill_postal_code := l_new_sys_header_rec.bill_postal_code;
6613        l_sys_history_rec.old_bill_country := l_old_sys_header_rec.bill_country;
6614        l_sys_history_rec.new_bill_country := l_new_sys_header_rec.bill_country;
6615        l_sys_history_rec.old_bill_to_customer := l_old_sys_header_rec.bill_to_customer;
6616        l_sys_history_rec.new_bill_to_customer := l_new_sys_header_rec.bill_to_customer;
6617        l_sys_history_rec.old_bill_to_customer_number := l_old_sys_header_rec.bill_to_customer_number;
6618        l_sys_history_rec.new_bill_to_customer_number := l_new_sys_header_rec.bill_to_customer_number;
6619        l_sys_history_rec.old_install_address1 := l_old_sys_header_rec.install_address1;
6620        l_sys_history_rec.new_install_address1 := l_new_sys_header_rec.install_address1;
6621        l_sys_history_rec.old_install_address2 := l_old_sys_header_rec.install_address2;
6622        l_sys_history_rec.new_install_address2 := l_new_sys_header_rec.install_address2;
6623        l_sys_history_rec.old_install_address3 := l_old_sys_header_rec.install_address3;
6624        l_sys_history_rec.new_install_address3 := l_new_sys_header_rec.install_address3;
6625        l_sys_history_rec.old_install_address4 := l_old_sys_header_rec.install_address4;
6626        l_sys_history_rec.new_install_address4 := l_new_sys_header_rec.install_address4;
6627        l_sys_history_rec.old_install_location := l_old_sys_header_rec.install_location;
6628        l_sys_history_rec.new_install_location := l_new_sys_header_rec.install_location;
6629        l_sys_history_rec.old_install_state := l_old_sys_header_rec.install_state;
6630        l_sys_history_rec.new_install_state := l_new_sys_header_rec.install_state;
6631        l_sys_history_rec.old_install_postal_code := l_old_sys_header_rec.install_postal_code;
6632        l_sys_history_rec.new_install_postal_code := l_new_sys_header_rec.install_postal_code;
6633        l_sys_history_rec.old_install_country := l_old_sys_header_rec.install_country;
6634        l_sys_history_rec.new_install_country := l_new_sys_header_rec.install_country;
6635        l_sys_history_rec.old_install_customer := l_old_sys_header_rec.install_customer;
6636        l_sys_history_rec.new_install_customer := l_new_sys_header_rec.install_customer;
6637        l_sys_history_rec.old_install_customer_number := l_old_sys_header_rec.install_customer_number;
6638        l_sys_history_rec.new_install_customer_number := l_new_sys_header_rec.install_customer_number;
6639        l_sys_history_rec.old_ship_to_contact_number := l_old_sys_header_rec.ship_to_contact_number;
6640        l_sys_history_rec.new_ship_to_contact_number := l_new_sys_header_rec.ship_to_contact_number;
6641        l_sys_history_rec.old_bill_to_contact_number := l_old_sys_header_rec.bill_to_contact_number;
6642        l_sys_history_rec.new_bill_to_contact_number := l_new_sys_header_rec.bill_to_contact_number;
6643        l_sys_history_rec.old_technical_contact_number := l_old_sys_header_rec.technical_contact_number;
6644        l_sys_history_rec.new_technical_contact_number := l_new_sys_header_rec.technical_contact_number;
6645        l_sys_history_rec.old_serv_admin_contact_number := l_old_sys_header_rec.service_admin_contact_number;
6646        l_sys_history_rec.new_serv_admin_contact_number := l_new_sys_header_rec.service_admin_contact_number;
6647        l_sys_history_rec.old_ship_to_contact := l_old_sys_header_rec.ship_to_contact;
6648        l_sys_history_rec.new_ship_to_contact := l_new_sys_header_rec.ship_to_contact;
6649        l_sys_history_rec.old_bill_to_contact := l_old_sys_header_rec.bill_to_contact;
6650        l_sys_history_rec.new_bill_to_contact := l_new_sys_header_rec.bill_to_contact;
6651        l_sys_history_rec.old_technical_contact := l_old_sys_header_rec.technical_contact;
6652        l_sys_history_rec.new_technical_contact := l_new_sys_header_rec.technical_contact;
6653        l_sys_history_rec.old_serv_admin_contact := l_old_sys_header_rec.service_admin_contact;
6654        l_sys_history_rec.new_serv_admin_contact := l_new_sys_header_rec.service_admin_contact;
6655        l_sys_history_rec.object_version_number := l_hist_csr.object_version_number;
6656        --
6657        l_sys_count := l_sys_count + 1;
6658        x_system_history_tbl(l_sys_count) := l_sys_history_rec;
6659     END LOOP;
6660     -- End of API body
6661 
6662     -- Standard check of p_commit.
6663     IF FND_API.To_Boolean( p_commit ) THEN
6664        COMMIT WORK;
6665     END IF;
6666 
6667     /***** srramakr commented for bug # 3304439
6668     -- Check for the profile option and disable the trace
6669     IF (fnd_profile.value('CSI_ENABLE_SQL_TRACE') = 'Y') THEN
6670        dbms_session.set_sql_trace(false);
6671     END IF;
6672     -- End disable trace
6673     ****/
6674 
6675     -- Standard call to get message count and if count is  get message info.
6676     FND_MSG_PUB.Count_And_Get
6677                (p_count        =>      x_msg_count ,
6678                 p_data     =>      x_msg_data      );
6679  EXCEPTION
6680     WHEN OTHERS THEN
6681          X_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6682          IF fnd_api.to_boolean(p_commit) THEN
6683             ROLLBACK TO get_system_history;
6684          END IF;
6685          IF FND_MSG_PUB.Check_Msg_Level
6686             (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6687          THEN
6688             FND_MSG_PUB.Add_Exc_Msg
6689                   ( G_PKG_NAME, l_api_name );
6690          END IF;
6691          FND_MSG_PUB.Count_And_Get
6692                ( p_count         =>      x_msg_count,
6693                  p_data      =>      x_msg_data);
6694 
6695  END Get_System_History;
6696  --
6697 END csi_systems_pvt;