1 PACKAGE BODY csi_party_relationships_pub AS
2 /* $Header: csipipb.pls 120.10.12020000.4 2012/11/12 10:57:13 sjawaji ship $ */
3
4 g_pkg_name CONSTANT VARCHAR2(30) := 'CSI_PARTY_RELATIONSHIPS_PUB';
5
6 /*------------------------------------------------------------*/
7 /* Procedure name: Get_inst_party_relationships */
8 /* Description : Procedure used to get party relationships */
9 /* for an item instance */
10 /*------------------------------------------------------------*/
11
12 PROCEDURE get_inst_party_relationships
13 ( p_api_version IN NUMBER
14 ,p_commit IN VARCHAR2
15 ,p_init_msg_list IN VARCHAR2
16 ,p_validation_level IN NUMBER
17 ,p_party_query_rec IN csi_datastructures_pub.party_query_rec
18 ,p_resolve_id_columns IN VARCHAR2
19 ,p_time_stamp IN DATE
20 ,x_party_header_tbl OUT NOCOPY csi_datastructures_pub.party_header_tbl
21 ,x_return_status OUT NOCOPY VARCHAR2
22 ,x_msg_count OUT NOCOPY NUMBER
23 ,x_msg_data OUT NOCOPY VARCHAR2
24 ) IS
25
26 l_api_name CONSTANT VARCHAR2(30) := 'GET_INST_PARTY_RELATIONSHIP' ;
27 l_api_version CONSTANT NUMBER := 1.0 ;
28 l_csi_debug_level NUMBER ;
29 l_instance_party_id NUMBER ;
30 l_contact_party_id NUMBER ;
31 l_contact_flag VARCHAR2(1);
32 l_party_source_tbl VARCHAR2(30) ;
33 l_contact_details csi_datastructures_pub.contact_details_rec ;
34 l_count NUMBER := 0 ;
35 l_where_clause VARCHAR2(2000) := '' ;
36 l_get_party_cursor_id NUMBER ;
37 l_party_rec csi_datastructures_pub.party_header_rec ;
38 l_flag VARCHAR2(1) :='N' ;
39 l_rows_processed NUMBER ;
40 l_pty_lookup_type VARCHAR2(30) := 'CSI_PARTY_SOURCE_TABLE' ;
41 l_select_stmt VARCHAR2(20000) := ' SELECT instance_party_id, instance_id, party_source_table, '||
42 ' party_id, relationship_type_code,contact_flag ,contact_ip_id, active_start_date, '||
43 ' active_end_date, context,attribute1,attribute2,attribute3, attribute4,attribute5, '||
44 ' attribute6, attribute7, attribute8, attribute9, attribute10 ,attribute11, '||
45 ' attribute12,attribute13,attribute14,attribute15 ,object_version_number, '||
46 ' primary_flag, preferred_flag'||
47 ' FROM CSI_I_PARTIES ';
48 l_pty_name VARCHAR2(360);
49
50 BEGIN
51 -- Standard Start of API savepoint
52 -- SAVEPOINT get_inst_party_rel_pub;
53
54 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
55
56 csi_utility_grp.check_ib_active;
57
58 -- Standard call to check for call compatibility.
59 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
60 p_api_version ,
61 l_api_name ,
62 g_pkg_name )
63 THEN
64 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
65 END IF;
66
67 -- Initialize message list if p_init_msg_list is set to TRUE.
68 IF FND_API.to_Boolean( p_init_msg_list ) THEN
69 FND_MSG_PUB.initialize;
70 END IF;
71
72 -- Initialize API return status to success
73 x_return_status := FND_API.G_RET_STS_SUCCESS;
74
75 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
76 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
77
78 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
79 IF (l_csi_debug_level > 0) THEN
80 csi_gen_utility_pvt.put_line( 'get_inst_party_relationship');
81 END IF;
82
83 -- If the debug level = 2 then dump all the parameters values.
84 IF (l_csi_debug_level > 1) THEN
85 csi_gen_utility_pvt.put_line( 'get_inst_party_relationship' ||
86 p_api_version ||'-'||
87 p_commit ||'-'||
88 p_init_msg_list ||'-'||
89 p_validation_level ||'-'||
90 p_time_stamp );
91 -- dump the in parameter in the log file
92 csi_gen_utility_pvt.dump_party_query_rec(p_party_query_rec) ;
93 END IF;
94
95 /***** srramakr commented for bug # 3304439
96 -- Check for the profile option and enable trace
97 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
98 -- End enable trace
99 ****/
100
101 -- Start API body
102 -- check if atleast one query parameters are passed else
103 -- raise an error
104 IF (p_party_query_rec.instance_party_id = FND_API.G_MISS_NUM)
105 AND (p_party_query_rec.instance_id = FND_API.G_MISS_NUM)
106 AND (p_party_query_rec.party_id = FND_API.G_MISS_NUM)
107 AND (p_party_query_rec.relationship_type_code = FND_API.G_MISS_CHAR) THEN
108
109 FND_MESSAGE.Set_Name('CSI', 'CSI_API_INVALID_PARAMETERS');
110 FND_MSG_PUB.Add;
111 RAISE FND_API.G_EXC_ERROR;
112 END IF;
113
114 -- Generate the where clause dynamically
115 csi_party_relationships_pvt.Gen_Pty_Where_Clause
116 ( p_party_query_rec => p_party_query_rec,
117 x_where_clause => l_where_clause );
118
119 -- Build the select statement
120 l_select_stmt := l_select_stmt || ' where '||l_where_clause;
121
122 -- Open the cursor
123 l_get_party_cursor_id := dbms_sql.open_cursor;
124
125 --Parse the select statement
126 dbms_sql.parse(l_get_party_cursor_id, l_select_stmt , dbms_sql.native);
127
128 -- Bind the variables
129 csi_party_relationships_pvt.Bind_pty_variable(p_party_query_rec, l_get_party_cursor_id);
130
131 -- Define output variables
132 csi_party_relationships_pvt.Define_Pty_Columns(l_get_party_cursor_id);
133
134 -- execute the select statement
135 l_rows_processed := dbms_sql.execute(l_get_party_cursor_id);
136
137 LOOP
138 EXIT WHEN DBMS_SQL.FETCH_ROWS(l_get_party_cursor_id) = 0;
139 -- get the values after executing the selecl statement
140 csi_party_relationships_pvt.Get_pty_Column_Values(l_get_party_cursor_id, l_party_rec);
141 l_count := l_count + 1;
142 x_party_header_tbl(l_count) := l_party_rec;
143 END LOOP;
144
145 -- Close the cursor
146 DBMS_SQL.CLOSE_CURSOR(l_get_party_cursor_id);
147
148 IF ((p_time_stamp IS NOT NULL) AND (p_time_stamp <> FND_API.G_MISS_DATE)) THEN
149
150 IF p_time_stamp <= sysdate THEN
151 -- contruct from the history if the p_time_stamp
152 -- is < than sysdate
153 csi_party_relationships_pvt.Construct_pty_from_hist(x_party_header_tbl, p_time_stamp);
154 ELSE
155 FND_MESSAGE.Set_Name('CSI', 'CSI_API_INVALID_HIST_PARAMS');
156 FND_MSG_PUB.ADD;
157 RAISE FND_API.G_EXC_ERROR;
158 END IF;
159 END IF;
160 --start of the new code for resolve_id_columns 08/24/01
161
162 IF p_resolve_id_columns = fnd_api.g_true THEN
163
164 IF x_party_header_tbl.count > 0 THEN
165
166 FOR i IN x_party_header_tbl.FIRST.. x_party_header_tbl.LAST
167 LOOP
168 --l_contact_party_id := x_party_header_tbl(i).party_id ;
169 l_contact_party_id := x_party_header_tbl(i).instance_party_id ;
170 l_contact_flag := x_party_header_tbl(i).contact_flag;
171 l_party_source_tbl := x_party_header_tbl(i).party_source_table;
172
173 csi_party_relationships_pvt.get_contact_details
174 (
175 p_api_version => p_api_version
176 ,p_commit => p_commit
177 ,p_init_msg_list => p_init_msg_list
178 ,p_validation_level => p_validation_level
179 ,p_contact_party_id => l_contact_party_id
180 ,p_contact_flag => l_contact_flag
181 ,p_party_tbl => l_party_source_tbl
182 ,x_contact_details => l_contact_details
183 ,x_return_status => x_return_status
184 ,x_msg_count => x_msg_count
185 ,x_msg_data => x_msg_data
186 );
187
188 x_party_header_tbl(i).party_name := l_contact_details.party_name;
189 x_party_header_tbl(i).work_phone_number := l_contact_details.officephone;
190 x_party_header_tbl(i).address1 := l_contact_details.address1;
191 x_party_header_tbl(i).address2 := l_contact_details.address2;
192 x_party_header_tbl(i).address3 := l_contact_details.address3;
193 x_party_header_tbl(i).address4 := l_contact_details.address4;
194 x_party_header_tbl(i).city := l_contact_details.city;
195 x_party_header_tbl(i).postal_code := l_contact_details.postal_code;
196 x_party_header_tbl(i).state := l_contact_details.state;
197 x_party_header_tbl(i).country := l_contact_details.country;
198 x_party_header_tbl(i).email_address := l_contact_details.email;
199 -- Start of bug fix 2092790
200 IF l_party_source_tbl = 'EMPLOYEE' THEN
201 BEGIN
202 SELECT pf.employee_number
203 ,cl.meaning --party_type
204 INTO x_party_header_tbl(i).party_number
205 ,x_party_header_tbl(i).party_type
206 FROM per_all_people_f pf
207 ,csi_lookups cl
208 ,csi_item_instances cii
209 WHERE pf.person_id = x_party_header_tbl(i).party_id
210 AND cl.lookup_type=l_pty_lookup_type
211 AND cl.lookup_code=l_party_source_tbl
212 AND cii.instance_id=x_party_header_tbl(i).instance_id
213 AND pf.effective_end_date > SYSDATE
214 AND ROWNUM = 1 ;
215 EXCEPTION
216 WHEN OTHERS THEN
217 NULL;
218 END;
219 ELSIF l_party_source_tbl = 'HZ_PARTIES' THEN
220 BEGIN
221 SELECT hz.party_number
222 ,cl.meaning --party_type
223 ,hz.party_name
224 INTO x_party_header_tbl(i).party_number
225 ,x_party_header_tbl(i).party_type
226 ,l_pty_name
227 FROM hz_parties hz
228 ,csi_lookups cl
229 ,csi_item_instances cii
230 WHERE party_id = x_party_header_tbl(i).party_id
231 AND cl.lookup_type=l_pty_lookup_type
232 AND cl.lookup_code=l_party_source_tbl
233 AND cii.instance_id=x_party_header_tbl(i).instance_id;
234
235 IF x_party_header_tbl(i).party_name IS NULL OR
236 x_party_header_tbl(i).party_name = fnd_api.g_miss_char
237 THEN
238 x_party_header_tbl(i).party_name :=l_pty_name;
239 END IF;
240
241 EXCEPTION
242 WHEN OTHERS THEN
243 NULL;
244 END;
245 ELSIF l_party_source_tbl = 'PO_VENDORS' THEN
246 BEGIN
247 SELECT po.segment1
248 ,cl.meaning --party_type
249 INTO x_party_header_tbl(i).party_number
250 ,x_party_header_tbl(i).party_type
251 FROM csi_lookups cl
252 ,csi_item_instances cii
253 ,po_vendors po
254 WHERE cl.lookup_type=l_pty_lookup_type
255 AND cl.lookup_code=l_party_source_tbl
256 AND cii.instance_id=x_party_header_tbl(i).instance_id
257 AND po.vendor_id = x_party_header_tbl(i).party_id;
258 EXCEPTION
259 WHEN OTHERS THEN
260 NULL;
261 END;
262 ELSIF l_party_source_tbl = 'TEAM' THEN
263 BEGIN
264 SELECT jt.team_number
265 ,cl.meaning --party_type
266 INTO x_party_header_tbl(i).party_number
267 ,x_party_header_tbl(i).party_type
268 FROM jtf_rs_teams_vl jt
269 ,csi_lookups cl
270 ,csi_item_instances cii
271 WHERE jt.team_id = x_party_header_tbl(i).party_id
272 and cl.lookup_type=l_pty_lookup_type
273 and cl.lookup_code=l_party_source_tbl
274 and cii.instance_id=x_party_header_tbl(i).instance_id;
275 EXCEPTION
276 WHEN OTHERS THEN
277 NULL;
278 END;
279 ELSIF l_party_source_tbl = 'GROUP' THEN
280 BEGIN
281 SELECT jg.group_number
282 ,cl.meaning --party_type
283 INTO x_party_header_tbl(i).party_number
284 ,x_party_header_tbl(i).party_type
285 FROM jtf_rs_groups_vl jg
286 ,csi_lookups cl
287 ,csi_item_instances cii
288 WHERE jg.group_id = x_party_header_tbl(i).party_id
289 and cl.lookup_type=l_pty_lookup_type
290 and cl.lookup_code=l_party_source_tbl
291 and cii.instance_id=x_party_header_tbl(i).instance_id;
292 EXCEPTION
293 WHEN OTHERS THEN
294 NULL;
295 END;
296 END IF;
297 -- End of bug fix 2092790
298
299
300 END LOOP;
301 END IF;
302 END IF;
303 --end of the new code for resolve_id_columns 08/24/01
304 --
305 -- End of API body
306
307 -- Standard check of p_commit.
308 /*
309 IF FND_API.To_Boolean( p_commit ) THEN
310 COMMIT WORK;
311 END IF;
312 */
313
314 /***** srramakr commented for bug # 3304439
315 -- Check for the profile option and disable the trace
316 IF (l_flag = 'Y') THEN
317 dbms_session.set_sql_trace(false);
318 END IF;
319 -- End disable trace
320 ****/
321
322 -- Standard call to get message count and if count is get message info.
323 FND_MSG_PUB.Count_And_Get
324 (p_count => x_msg_count ,
325 p_data => x_msg_data );
326 EXCEPTION
327 WHEN FND_API.G_EXC_ERROR THEN
328 -- ROLLBACK TO get_inst_party_rel_pub;
329 x_return_status := FND_API.G_RET_STS_ERROR ;
330 FND_MSG_PUB.Count_And_Get
331 ( p_count => x_msg_count,
332 p_data => x_msg_data );
333 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
334 -- ROLLBACK TO get_inst_party_rel_pub;
335 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
336 FND_MSG_PUB.Count_And_Get
337 ( p_count => x_msg_count,
338 p_data => x_msg_data );
339 WHEN OTHERS THEN
340 IF DBMS_SQL.IS_OPEN(l_get_party_cursor_id) THEN
341 DBMS_SQL.CLOSE_CURSOR(l_get_party_cursor_id);
342 END IF;
343 -- ROLLBACK TO get_inst_party_rel_pub;
344 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
345 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
346 FND_MSG_PUB.Add_Exc_Msg
347 ( g_pkg_name ,
348 l_api_name );
349 END IF;
350 FND_MSG_PUB.Count_And_Get
351 ( p_count => x_msg_count,
352 p_data => x_msg_data );
353
354 END get_inst_party_relationships;
355
356
357 /*-------------------------------------------------------------*/
358 /* Procedure name: Create_inst_party_relationships */
359 /* Description : Procedure used to create new instance-party */
360 /* relationships */
361 /*-------------------------------------------------------------*/
362
363 PROCEDURE create_inst_party_relationship
364 ( p_api_version IN NUMBER
365 ,p_commit IN VARCHAR2
366 ,p_init_msg_list IN VARCHAR2
367 ,p_validation_level IN NUMBER
368 ,p_party_tbl IN OUT NOCOPY csi_datastructures_pub.party_tbl
369 ,p_party_account_tbl IN OUT NOCOPY csi_datastructures_pub.party_account_tbl
370 ,p_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec
371 ,p_oks_txn_inst_tbl IN OUT NOCOPY oks_ibint_pub.txn_instance_tbl
372 ,x_return_status OUT NOCOPY VARCHAR2
373 ,x_msg_count OUT NOCOPY NUMBER
374 ,x_msg_data OUT NOCOPY VARCHAR2
375 ) IS
376 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_INST_PARTY_RELATIONSHIP';
377 l_api_version CONSTANT NUMBER := 1.0;
378 l_csi_debug_level NUMBER;
379 l_party_rec csi_datastructures_pub.party_rec;
380 l_party_has_correct_acct BOOLEAN := FALSE;
381 l_internal_party_id NUMBER;
382 l_msg_index NUMBER;
383 l_msg_count NUMBER;
384 l_flag VARCHAR2(1) :='N';
385 l_party_source_tbl csi_party_relationships_pvt.party_source_tbl;
386 l_party_id_tbl csi_party_relationships_pvt.party_id_tbl;
387 l_contact_tbl csi_party_relationships_pvt.contact_tbl;
388 l_party_rel_type_tbl csi_party_relationships_pvt.party_rel_type_tbl;
389 l_party_count_rec csi_party_relationships_pvt.party_count_rec;
390 l_inst_party_tbl csi_party_relationships_pvt.inst_party_tbl;
391 l_acct_rel_type_tbl csi_party_relationships_pvt.acct_rel_type_tbl;
392 l_site_use_tbl csi_party_relationships_pvt.site_use_tbl;
393 l_account_count_rec csi_party_relationships_pvt.account_count_rec;
394 l_account_found VARCHAR2(1) :=NULL;
395 BEGIN
396 -- Standard Start of API savepoint
397 SAVEPOINT create_inst_party_rel_pub;
398
399 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
400
401 csi_utility_grp.check_ib_active;
402
403 -- Standard call to check for call compatibility.
404 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
405 p_api_version ,
406 l_api_name ,
407 g_pkg_name )
408 THEN
409 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
410 END IF;
411
412 -- Initialize message list if p_init_msg_list is set to TRUE.
413 IF FND_API.to_Boolean( p_init_msg_list ) THEN
414 FND_MSG_PUB.initialize;
415 END IF;
416
417 -- Initialize API return status to success
418 x_return_status := FND_API.G_RET_STS_SUCCESS;
419
420 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
421 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
422
423 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
424 IF (l_csi_debug_level > 0) THEN
425 csi_gen_utility_pvt.put_line( 'create_inst_party_relationship');
426 END IF;
427
428
429 -- If the debug level = 2 then dump all the parameters values.
430 IF (l_csi_debug_level > 1) THEN
431 csi_gen_utility_pvt.put_line( 'create_inst_party_relationship'||
432 p_api_version ||'-'||
433 p_commit ||'-'||
434 p_init_msg_list ||'-'||
435 p_validation_level );
436 -- Dump the records in the log file
437 csi_gen_utility_pvt.dump_party_tbl(p_party_tbl);
438 csi_gen_utility_pvt.dump_party_account_tbl(p_party_account_tbl);
439 csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
440 END IF;
441
442 /***** srramakr commented for bug # 3304439
443 -- Check for the profile option and enable trace
444 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
445 -- End enable trace
446 ****/
447
448 -- Start API body
449 --
450 -- Grab the internal party id from csi_installed paramters
451 IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
452 csi_gen_utility_pvt.populate_install_param_rec;
453 END IF;
454 --
455 l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
456 --
457 IF l_internal_party_id IS NULL THEN
458 FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
459 FND_MSG_PUB.ADD;
460 RAISE FND_API.G_EXC_ERROR;
461 END IF;
462 -- Check if the table is not empty and then loop
463 IF p_party_tbl.count > 0 THEN
464 FOR l_party_row IN p_party_tbl.FIRST..p_party_tbl.LAST LOOP
465 IF p_party_tbl.EXISTS(l_party_row) -- Added for bug 3776650
466 THEN
467 -- Find out if one of the accounts for external parties is an owner account
468 IF ((p_party_tbl(l_party_row).party_source_table = 'HZ_PARTIES')
469 AND (p_party_tbl(l_party_row).party_id <> l_internal_party_id)
470 AND (p_party_tbl(l_party_row).relationship_type_code = 'OWNER')) THEN
471
472 l_party_has_correct_acct := FALSE;
473 IF p_party_account_tbl.COUNT > 0 THEN
474 FOR l_acct_row IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
475 IF p_party_account_tbl.EXISTS(l_acct_row) -- Added for bug 3776650
476 THEN
477 -- Check if the party and its accounts are mapped
478 IF ((p_party_account_tbl(l_acct_row).parent_tbl_index IS NULL)
479 OR (p_party_account_tbl(l_acct_row).parent_tbl_index = FND_API.G_MISS_NUM)
480 OR (NOT(p_party_tbl.EXISTS(p_party_account_tbl(l_acct_row).parent_tbl_index)))
481 ) THEN
482 FND_MESSAGE.SET_NAME('CSI','CSI_API_PARTY_ACCT_NOT_MAPPED');
483 FND_MSG_PUB.Add;
484 RAISE FND_API.G_EXC_ERROR;
485 END IF;
486
487 IF ((p_party_account_tbl(l_acct_row).parent_tbl_index = l_party_row)
488 AND (p_party_account_tbl(l_acct_row).relationship_type_code = 'OWNER')) THEN
489 l_party_has_correct_acct := TRUE;
490 END IF;
491 END IF;
492 END LOOP;
493 END IF;
494
495 -- Raise an exception if external parties don't have an owner account
496 IF NOT l_party_has_correct_acct THEN
497 FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_OWNER_ACCT');
498 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_tbl(l_party_row).party_id);
499 FND_MSG_PUB.ADD;
500 RAISE FND_API.G_EXC_ERROR;
501 END IF;
502
503 END IF;
504
505 -- Adding att enhancements by sguthiva
506 IF p_party_tbl(l_party_row).contact_flag='Y'
507 AND (p_party_tbl(l_party_row).contact_ip_id IS NULL OR
508 p_party_tbl(l_party_row).contact_ip_id=fnd_api.g_miss_num )
509 AND (p_party_tbl(l_party_row).contact_parent_tbl_index IS NOT NULL AND
510 p_party_tbl(l_party_row).contact_parent_tbl_index <> fnd_api.g_miss_num )
511 THEN
512 FOR cont_row IN p_party_tbl.FIRST .. p_party_tbl.LAST
513 LOOP
514 IF cont_row=p_party_tbl(l_party_row).contact_parent_tbl_index
515 THEN
516 p_party_tbl(l_party_row).contact_ip_id:=p_party_tbl(cont_row).instance_party_id;
517 END IF;
518 END LOOP;
519 END IF;
520
521 -- End of addition by sguthiva
522
523 -- Call Private package to validate and create party relationship
524 csi_party_relationships_pvt.create_inst_party_relationship
525 ( p_api_version => p_api_version
526 ,p_commit => p_commit
527 ,p_init_msg_list => p_init_msg_list
528 ,p_validation_level => p_validation_level
529 ,p_party_rec => p_party_tbl(l_party_row)
530 ,p_txn_rec => p_txn_rec
531 ,x_return_status => x_return_status
532 ,x_msg_count => x_msg_count
533 ,x_msg_data => x_msg_data
534 ,p_party_source_tbl => l_party_source_tbl
535 ,p_party_id_tbl => l_party_id_tbl
536 ,p_contact_tbl => l_contact_tbl
537 ,p_party_rel_type_tbl => l_party_rel_type_tbl
538 ,p_party_count_rec => l_party_count_rec
539 ) ;
540
541 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
542 l_msg_index := 1;
543 l_msg_count := x_msg_count;
544 WHILE l_msg_count > 0 LOOP
545 x_msg_data := FND_MSG_PUB.GET
546 ( l_msg_index,
547 FND_API.G_FALSE );
548 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
549 l_msg_index := l_msg_index + 1;
550 l_msg_count := l_msg_count - 1;
551 END LOOP;
552 RAISE FND_API.G_EXC_ERROR;
553 END IF;
554 END IF;
555 END LOOP; -- End of party loop
556 END IF; -- End of party count if
557
558 -- Create party accounts
559 IF (p_party_account_tbl.COUNT > 0) THEN
560 FOR l_acct_row IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
561 IF p_party_account_tbl.EXISTS(l_acct_row) THEN
562 IF ((p_party_account_tbl(l_acct_row).parent_tbl_index IS NULL)
563 OR (p_party_account_tbl(l_acct_row).parent_tbl_index = FND_API.G_MISS_NUM)
564 OR (NOT(p_party_tbl.EXISTS(p_party_account_tbl(l_acct_row).parent_tbl_index)))
565 ) THEN
566 FND_MESSAGE.SET_NAME('CSI','CSI_API_PARTY_ACCT_NOT_MAPPED');
567 FND_MSG_PUB.Add;
568 RAISE FND_API.G_EXC_ERROR;
569 END IF;
570
571 p_party_account_tbl(l_acct_row).instance_party_id :=
572 p_party_tbl(p_party_account_tbl(l_acct_row).parent_tbl_index).instance_party_id;
573 -- Strat Addition for bug 1893100
574 IF p_party_account_tbl(l_acct_row).active_start_date IS NULL
575 OR p_party_account_tbl(l_acct_row).active_start_date = fnd_api.g_miss_date
576 AND (p_party_account_tbl(l_acct_row).ip_account_id IS NULL
577 OR p_party_account_tbl(l_acct_row).ip_account_id = fnd_api.g_miss_num)
578 THEN
579 p_party_account_tbl(l_acct_row).active_start_date :=
580 p_party_tbl(p_party_account_tbl(l_acct_row).parent_tbl_index).active_start_date;
581 END IF;
582 -- End Addition for bug 1893100
583 -- The following code has been added for bug 2990027
584 -- to avoid lock record error.
585 BEGIN
586 l_account_found:=NULL;
587 SELECT 'x'
588 INTO l_account_found
589 FROM csi_ip_accounts
590 WHERE ip_account_id =p_party_account_tbl(l_acct_row).ip_account_id;
591 EXCEPTION
592 WHEN OTHERS THEN
593 l_account_found:=NULL;
594 END ;
595 -- End addition.
596
597 -- Call Private package to validate and create party accounts
598 IF p_party_account_tbl(l_acct_row).ip_account_id IS NOT NULL
599 AND p_party_account_tbl(l_acct_row).ip_account_id <> fnd_api.g_miss_num
600 AND l_account_found IS NOT NULL
601 THEN
602 csi_party_relationships_pvt.update_inst_party_account
603 ( p_api_version => p_api_version
604 ,p_commit => p_commit
605 ,p_init_msg_list => p_init_msg_list
606 ,p_validation_level => p_validation_level
607 ,p_party_account_rec => p_party_account_tbl(l_acct_row)
608 ,p_txn_rec => p_txn_rec
609 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
610 ,x_return_status => x_return_status
611 ,x_msg_count => x_msg_count
612 ,x_msg_data => x_msg_data);
613 ELSE
614 csi_party_relationships_pvt.create_inst_party_account
615 ( p_api_version => p_api_version
616 ,p_commit => p_commit
617 ,p_init_msg_list => p_init_msg_list
618 ,p_validation_level => p_validation_level
619 ,p_party_account_rec => p_party_account_tbl(l_acct_row)
620 ,p_txn_rec => p_txn_rec
621 ,x_return_status => x_return_status
622 ,x_msg_count => x_msg_count
623 ,x_msg_data => x_msg_data
624 ,p_inst_party_tbl => l_inst_party_tbl
625 ,p_acct_rel_type_tbl => l_acct_rel_type_tbl
626 ,p_site_use_tbl => l_site_use_tbl
627 ,p_account_count_rec => l_account_count_rec
628 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
629 );
630
631 END IF;
632
633 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
634 l_msg_index := 1;
635 l_msg_count := x_msg_count;
636 WHILE l_msg_count > 0 LOOP
637 x_msg_data := FND_MSG_PUB.GET(
638 l_msg_index,
639 FND_API.G_FALSE );
640 csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
641 l_msg_index := l_msg_index + 1;
642 l_msg_count := l_msg_count - 1;
643 END LOOP;
644 RAISE FND_API.G_EXC_ERROR;
645 END IF;
646 END IF;
647 END LOOP;
648 END IF;
649
650
651 --
652 -- End of API body
653 -- Standard check of p_commit.
654
655 IF FND_API.To_Boolean( p_commit ) THEN
656 COMMIT WORK;
657 END IF;
658
659 /***** srramakr commented for bug # 3304439
660 -- Check for the profile option and disable the trace
661 IF (l_flag = 'Y') THEN
662 dbms_session.set_sql_trace(false);
663 END IF;
664 -- End disable trace
665 ****/
666
667 -- Standard call to get message count and if count is get message info.
668 FND_MSG_PUB.Count_And_Get
669 (p_count => x_msg_count ,
670 p_data => x_msg_data );
671 EXCEPTION
672 WHEN FND_API.G_EXC_ERROR THEN
673 x_return_status := FND_API.G_RET_STS_ERROR ;
674 ROLLBACK TO create_inst_party_rel_pub;
675 FND_MSG_PUB.Count_And_Get
676 ( p_count => x_msg_count,
677 p_data => x_msg_data );
678
679 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
680 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
681 ROLLBACK TO create_inst_party_rel_pub;
682 FND_MSG_PUB.Count_And_Get
683 ( p_count => x_msg_count,
684 p_data => x_msg_data );
685
686 WHEN OTHERS THEN
687 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
688 ROLLBACK TO create_inst_party_rel_pub;
689 IF FND_MSG_PUB.Check_Msg_Level
690 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
691 THEN
692 FND_MSG_PUB.Add_Exc_Msg
693 ( g_pkg_name ,
694 l_api_name );
695 END IF;
696 FND_MSG_PUB.Count_And_Get
697 ( p_count => x_msg_count,
698 p_data => x_msg_data );
699 END create_inst_party_relationship;
700
701 /*-------------------------------------------------------------*/
702 /* Procedure name: Update_inst_party_relationship */
703 /* Description : Procedure used to update the existing */
704 /* instance -party relationships */
705 /*-------------------------------------------------------------*/
706
707
708 PROCEDURE update_inst_party_relationship
709 ( p_api_version IN NUMBER
710 ,p_commit IN VARCHAR2
711 ,p_init_msg_list IN VARCHAR2
712 ,p_validation_level IN NUMBER
713 ,p_party_tbl IN csi_datastructures_pub.party_tbl
714 ,p_party_account_tbl IN OUT NOCOPY csi_datastructures_pub.party_account_tbl
715 ,p_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec
716 ,p_oks_txn_inst_tbl IN OUT NOCOPY oks_ibint_pub.txn_instance_tbl
717 ,x_return_status OUT NOCOPY VARCHAR2
718 ,x_msg_count OUT NOCOPY NUMBER
719 ,x_msg_data OUT NOCOPY VARCHAR2
720 ) IS
721 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_INST_PARTY_RELATIONSHIP';
722 l_api_version CONSTANT NUMBER := 1.0;
723 l_csi_debug_level NUMBER;
724 l_party_rec csi_datastructures_pub.party_rec;
725 l_temp_party_rec csi_datastructures_pub.party_rec;
726 l_curr_party_rec csi_datastructures_pub.party_rec;
727 l_exp_party_rec csi_datastructures_pub.party_rec;
728 l_party_tbl csi_datastructures_pub.party_tbl;
729 l_internal_party_id NUMBER;
730 l_party_has_correct_acct BOOLEAN := FALSE;
731 l_msg_index NUMBER;
732 l_msg_count NUMBER;
733 l_line_count NUMBER;
734 l_flag VARCHAR2(1) :='N';
735 l_inst_party_tbl csi_party_relationships_pvt.inst_party_tbl;
736 l_acct_rel_type_tbl csi_party_relationships_pvt.acct_rel_type_tbl;
737 l_site_use_tbl csi_party_relationships_pvt.site_use_tbl;
738 l_account_count_rec csi_party_relationships_pvt.account_count_rec;
739 p_rel_query_rec csi_datastructures_pub.relationship_query_rec;
740 l_rel_tbl csi_datastructures_pub.ii_relationship_tbl;
741 l_ii_relationship_level_tbl csi_ii_relationships_pvt.ii_relationship_level_tbl;
742 l_cascade_ownership_uimu VARCHAR2(1) :='N'; --Added for Bug 10414588
743 l_force_cascade VARCHAR2(1) :='N'; --Added for Bug 10414588
744
745 -- Added by sk on 12/06/01 for contracts TRF fix bug 2133944
746
747 CURSOR acct_csr (p_ins_pty_id IN NUMBER) IS
748 SELECT acct.party_account_id
749 ,acct.active_end_date
750 ,pty.instance_id
751 FROM csi_ip_accounts acct
752 ,csi_i_parties pty
753 WHERE acct.instance_party_id = p_ins_pty_id
754 AND acct.relationship_type_code = 'OWNER'
755 AND ((acct.active_end_date IS NULL) OR (acct.active_end_date>SYSDATE))
756 AND pty.instance_party_id= acct.instance_party_id;
757 -- Following cursor has been added for fixing the bug 2151750
758 /* CURSOR party_csr (p_object_id IN NUMBER) IS
759 SELECT instance_id subject_id -- added by sguthiva for 2608706
760 FROM csi_item_instances
761 WHERE instance_id IN(
762 SELECT subject_id
763 FROM csi_ii_relationships
764 WHERE relationship_type_code = 'COMPONENT-OF'
765 START WITH object_id = p_object_id
766 CONNECT BY object_id = PRIOR subject_id)
767 AND (active_end_date IS NULL OR active_end_date> SYSDATE); */
768
769 CURSOR old_party_csr (p_ins_pty_id IN NUMBER) IS
770 SELECT instance_party_id,
771 party_id
772 FROM csi_i_parties
773 WHERE instance_party_id = p_ins_pty_id
774 AND relationship_type_code = 'OWNER'
775 AND (active_end_date IS NULL OR active_end_date > sysdate);
776
777 CURSOR exp_pty_csr (p_ins_id IN NUMBER) IS
778 SELECT instance_party_id,
779 party_id,
780 relationship_type_code,
781 object_version_number,
782 active_end_date -- Added for bug 7333900
783 FROM csi_i_parties
784 WHERE instance_id = p_ins_id
785 AND relationship_type_code<>'OWNER'
786 AND (active_end_date IS NULL
787 OR (trunc(active_end_date,'MI') > trunc(sysdate,'MI'))); -- Modified for bug 7333900 -- changed to trunc for bug 12564475
788
789 --included for bug 5511689
790 CURSOR exp_acct_csr (p_inst_party_id IN NUMBER) IS
791 SELECT ip_account_id,
792 relationship_type_code,
793 object_version_number,
794 active_end_date -- Added for bug 7333900
795 FROM csi_ip_accounts
796 WHERE instance_party_id=p_inst_party_id
797 AND relationship_type_code <>'OWNER'
798 AND nvl(active_end_date, sysdate+1) >= sysdate;
799 --end of fix
800
801 l_acct_csr acct_csr%ROWTYPE;
802 l_old_party_csr old_party_csr%ROWTYPE;
803 l_acct_tbl csi_datastructures_pub.party_account_tbl;
804 l_count NUMBER;
805 la_count NUMBER;
806 l_act_tbl csi_datastructures_pub.party_account_tbl;
807 l_row NUMBER;
808 l_obj_ver_number NUMBER;
809 l_found BOOLEAN := FALSE;
810 l_end_date DATE;
811
812 -- End Addition by sk on 12/06/01 for contracts TRF fix bug 2133944
813 -- Start of code addition for fixing the bug 2151750
814 l_old_party_tbl csi_datastructures_pub.party_tbl := p_party_tbl;
815 l_cld_party_rec csi_datastructures_pub.party_rec;
816 l_new_curr_party_rec csi_datastructures_pub.party_rec;
817 l_ip_acct_rec csi_datastructures_pub.party_account_rec;
818 l_temp_acct_rec csi_datastructures_pub.party_account_rec;
819 l_new_ip_acct_rec csi_datastructures_pub.party_account_rec;
820 l_pty_count NUMBER;
821 lp_count NUMBER;
822 lpa_count NUMBER;
823 l_cld_party_id NUMBER;
824 l_cld_party_acct_id NUMBER;
825 l_last_vld_org NUMBER;
826 l_last_vld_org1 NUMBER;
827 l_exp_acct_rec csi_datastructures_pub.party_account_rec; -- Added by sguthiva for bug 2307804
828 l_grp_call_contracts VARCHAR2(1);
829 -- End of code addition for fixing the bug 2151750
830 -- Start of code addition for fixing bug 6368172, section 1 of 5
831 l_old_parent_owner_pty_acct_id NUMBER;
832 l_old_child_owner_pty_acct_id NUMBER;
833 -- End of code addition for fixing bug 6368172, section 1 of 5
834 BEGIN
835 -- Standard Start of API savepoint
836 SAVEPOINT update_inst_party_rel_pub ;
837
838 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
839
840 csi_utility_grp.check_ib_active;
841
842 -- Standard call to check for call compatibility.
843 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
844 p_api_version ,
845 l_api_name ,
846 g_pkg_name )
847 THEN
848 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
849 END IF;
850
851 -- Initialize message list if p_init_msg_list is set to TRUE.
852 IF FND_API.to_Boolean( p_init_msg_list ) THEN
853 FND_MSG_PUB.initialize;
854 END IF;
855
856
857 -- Initialize API return status to success
858 x_return_status := FND_API.G_RET_STS_SUCCESS;
859
860 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
861 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
862
863 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
864 IF (l_csi_debug_level > 0) THEN
865 csi_gen_utility_pvt.put_line( 'update_inst_party_relationship ');
866 END IF;
867
868
869 -- If the debug level = 2 then dump all the parameters values.
870 IF (l_csi_debug_level > 1) THEN
871 csi_gen_utility_pvt.put_line( 'update_inst_party_relationship:' ||
872 p_api_version ||'-'||
873 p_commit ||'-'||
874 p_init_msg_list ||'-'||
875 p_validation_level );
876 -- Dump the records in the log file
877 csi_gen_utility_pvt.dump_party_tbl(p_party_tbl);
878 csi_gen_utility_pvt.dump_party_account_tbl(p_party_account_tbl);
879 csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
880
881 END IF;
882
883 /***** srramakr commented for bug # 3304439
884 -- Check for the profile option and enable trace
885 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
886 -- End enable trace
887 ****/
888
889 -- Start API body
890 --
891 -- Assign the value for l_grp_call_contracts
892 -- Since all the records will have the same value for grp_call_contracts, we just take the first one.
893 l_grp_call_contracts := FND_API.G_FALSE;
894 IF p_party_account_tbl.count > 0 THEN
895 FOR tab_row in p_party_account_tbl.FIRST .. p_party_account_tbl.LAST
896 LOOP
897 IF p_party_account_tbl.EXISTS(tab_row) THEN
898 l_grp_call_contracts := p_party_account_tbl(tab_row).grp_call_contracts;
899 EXIT;
900 END IF;
901 END LOOP;
902 END IF;
903 --
904 -- Grab the internal party id from csi_installed paramters
905 -- Added by sk on 12/06/01 for contracts TRF fix bug 2133944
906 -- End Added by sk on 12/06/01 for contracts TRF fix bug 2133944
907 -- Added for bug 2151750
908 -- The following code has been written to grab the old owner party_id
909 -- for an instance.
910 l_pty_count:= p_party_tbl.count;
911 lp_count:=0;
912 IF l_pty_count > 0 THEN
913 FOR p_csr IN 1..l_pty_count
914 LOOP
915 IF p_party_tbl(p_csr).relationship_type_code = 'OWNER'
916 THEN
917 OPEN old_party_csr (p_party_tbl(p_csr).instance_party_id);
918 FETCH old_party_csr into l_old_party_csr;
919 IF old_party_csr%FOUND
920 THEN
921 lp_count:=lp_count+1;
922 l_old_party_tbl(lp_count).instance_party_id := l_old_party_csr.instance_party_id;
923 l_old_party_tbl(lp_count).party_id := l_old_party_csr.party_id;
924 l_old_party_tbl(lp_count).cascade_ownership_flag := nvl(p_party_tbl(p_csr).cascade_ownership_flag,'N'); --Added for cascade 2972082
925 l_old_party_tbl(lp_count).call_contracts := p_party_tbl(p_csr).call_contracts; -- added for bug #14843691
926 csi_gen_utility_pvt.put_line('l_old_party_tbl(lp_count).call_contracts'||l_old_party_tbl(lp_count).call_contracts);
927 -- The following code has been written to grab the old owner party_id
928 -- for an instance.
929 lpa_count:= p_party_account_tbl.count;
930 IF lpa_count > 0 THEN
931 FOR pa_csr IN 1..lpa_count
932 LOOP
933 IF p_party_account_tbl(pa_csr).instance_party_id = l_old_party_tbl(lp_count).instance_party_id AND
934 p_party_account_tbl(pa_csr).relationship_type_code ='OWNER'
935 THEN
936 -- The following line has been written to grab the vld_organization_id
937 -- of the account.
938 l_old_party_tbl(lp_count).attribute1 := p_party_account_tbl(pa_csr).vld_organization_id;
939 EXIT;
940 END IF;
941 END LOOP;
942 END IF; -- end if for lpa_count > 0
943 END IF; -- end if for old_party_csr%FOUND
944 CLOSE old_party_csr;
945 END IF; -- end if for p_party_tbl(p_csr).relationship_type_code = 'OWNER'
946 END LOOP; -- end loop for p_csr IN 1..l_count
947 END IF; -- end if for l_pty_count > 0
948 -- End addition for bug 2151750
949 --
950 IF csi_datastructures_pub.g_install_param_rec.fetch_flag IS NULL THEN
951 csi_gen_utility_pvt.populate_install_param_rec;
952 END IF;
953 --
954 l_internal_party_id := csi_datastructures_pub.g_install_param_rec.internal_party_id;
955 --
956 IF l_internal_party_id IS NULL THEN
957 FND_MESSAGE.SET_NAME('CSI','CSI_API_UNINSTALLED_PARAMETER');
958 FND_MSG_PUB.ADD;
959 RAISE FND_API.G_EXC_ERROR;
960 END IF;
961 -- Check if the table is not empty
962 IF p_party_tbl.count > 0 THEN
963 FOR l_party_row IN p_party_tbl.FIRST..p_party_tbl.LAST LOOP
964 IF p_party_tbl.EXISTS(l_party_row) THEN
965
966 -- Get Current Party record
967 IF NOT(CSI_Instance_parties_vld_pvt.Get_Party_Record
968 ( p_party_tbl(l_party_row).instance_party_id,
969 l_curr_party_rec)) THEN
970 RAISE FND_API.G_EXC_ERROR;
971 END IF;
972
973 -- Check if this is Transfer of ownership (i.e. owner to a new owner)
974 -- If so, then a new owner account is needed for the new party
975 IF ((p_party_tbl(l_party_row).PARTY_ID <> FND_API.G_MISS_NUM)
976 AND (p_party_tbl(l_party_row).PARTY_ID IS NOT NULL)
977 AND (p_party_tbl(l_party_row).party_id <> l_internal_party_id)
978 AND (p_party_tbl(l_party_row).PARTY_ID <> l_curr_party_rec.PARTY_ID)
979 AND (p_party_tbl(l_party_row).PARTY_SOURCE_TABLE = 'HZ_PARTIES')
980 AND (p_party_tbl(l_party_row).RELATIONSHIP_TYPE_CODE = l_curr_party_rec.RELATIONSHIP_TYPE_CODE )
981 AND (p_party_tbl(l_party_row).RELATIONSHIP_TYPE_CODE = 'OWNER'
982 ))
983 THEN
984
985 -- Find out if one of the accounts for external parties is an owner account
986 l_party_has_correct_acct := FALSE;
987 IF p_party_account_tbl.COUNT > 0 THEN
988 FOR l_acct_row IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
989 IF p_party_account_tbl.EXISTS(l_acct_row) -- Added for bug 3776650
990 THEN
991 -- Check if the party and its accounts are mapped
992 IF ((p_party_account_tbl(l_acct_row).parent_tbl_index IS NULL)
993 OR (p_party_account_tbl(l_acct_row).parent_tbl_index = FND_API.G_MISS_NUM)
994 OR (NOT(p_party_tbl.EXISTS(p_party_account_tbl(l_acct_row).parent_tbl_index)))
995 ) THEN
996 FND_MESSAGE.SET_NAME('CSI','CSI_API_PARTY_ACCT_NOT_MAPPED');
997 FND_MSG_PUB.Add;
998 RAISE FND_API.G_EXC_ERROR;
999 END IF;
1000
1001 IF ((p_party_account_tbl(l_acct_row).parent_tbl_index = l_party_row)
1002 AND (p_party_account_tbl(l_acct_row).relationship_type_code = 'OWNER')) THEN
1003 l_party_has_correct_acct := TRUE;
1004 -- Check whether bill_to and ship_to are passed. If not make them null
1005 IF p_party_account_tbl(l_acct_row).bill_to_address IS NULL OR
1006 p_party_account_tbl(l_acct_row).bill_to_address = FND_API.G_MISS_NUM THEN
1007 p_party_account_tbl(l_acct_row).bill_to_address := NULL;
1008 END IF;
1009 --
1010 IF p_party_account_tbl(l_acct_row).ship_to_address IS NULL OR
1011 p_party_account_tbl(l_acct_row).ship_to_address = FND_API.G_MISS_NUM THEN
1012 p_party_account_tbl(l_acct_row).ship_to_address := NULL;
1013 END IF;
1014 --
1015 END IF;
1016 END IF;
1017 END LOOP;
1018 END IF; -- End of Transfer of Ownership check
1019
1020 -- Raise an exception if external parties don't have an owner account
1021 IF NOT l_party_has_correct_acct THEN
1022 FND_MESSAGE.SET_NAME('CSI','CSI_API_INVALID_OWNER_ACCT');
1023 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_tbl(l_party_row).party_id);
1024 FND_MSG_PUB.ADD;
1025 RAISE FND_API.G_EXC_ERROR;
1026 END IF;
1027
1028 END IF;
1029
1030
1031 l_party_rec.instance_party_id := p_party_tbl(l_party_row).instance_party_id ;
1032 l_party_rec.instance_id := p_party_tbl(l_party_row).instance_id;
1033 l_party_rec.party_source_table := p_party_tbl(l_party_row).party_source_table ;
1034 l_party_rec.party_id := p_party_tbl(l_party_row).party_id ;
1035 l_party_rec.relationship_type_code := p_party_tbl(l_party_row).relationship_type_code;
1036 l_party_rec.contact_flag := p_party_tbl(l_party_row).contact_flag;
1037 l_party_rec.contact_ip_id := p_party_tbl(l_party_row).contact_ip_id;
1038 l_party_rec.active_start_date := p_party_tbl(l_party_row).active_start_date;
1039 l_party_rec.active_end_date := p_party_tbl(l_party_row).active_end_date;
1040 l_party_rec.context := p_party_tbl(l_party_row).context;
1041 l_party_rec.attribute1 := p_party_tbl(l_party_row). attribute1;
1042 l_party_rec.attribute2 := p_party_tbl(l_party_row).attribute2;
1043 l_party_rec.attribute3 := p_party_tbl(l_party_row).attribute3;
1044 l_party_rec.attribute4 := p_party_tbl(l_party_row).attribute4;
1045 l_party_rec.attribute5 := p_party_tbl(l_party_row).attribute5;
1046 l_party_rec.attribute6 := p_party_tbl(l_party_row).attribute6;
1047 l_party_rec.attribute7 := p_party_tbl(l_party_row).attribute7;
1048 l_party_rec.attribute8 := p_party_tbl(l_party_row).attribute8;
1049 l_party_rec.attribute9 := p_party_tbl(l_party_row).attribute9;
1050 l_party_rec.attribute10 := p_party_tbl(l_party_row).attribute10;
1051 l_party_rec.attribute11 := p_party_tbl(l_party_row).attribute11;
1052 l_party_rec.attribute12 := p_party_tbl(l_party_row).attribute12;
1053 l_party_rec.attribute13 := p_party_tbl(l_party_row).attribute13;
1054 l_party_rec.attribute14 := p_party_tbl(l_party_row).attribute14;
1055 l_party_rec.attribute15 := p_party_tbl(l_party_row).attribute15;
1056 l_party_rec.preferred_flag := p_party_tbl(l_party_row).preferred_flag;
1057 l_party_rec.primary_flag := p_party_tbl(l_party_row).primary_flag;
1058 l_party_rec.object_version_number := p_party_tbl(l_party_row).object_version_number;
1059
1060 -- Start of code addition for fixing bug 6368172, section 2 of 5
1061 -- Need to grab the account id before it gets changed
1062 IF l_party_rec.instance_party_id IS NOT NULL THEN
1063 BEGIN
1064 SELECT party_account_id
1065 INTO l_old_parent_owner_pty_acct_id
1066 FROM csi_ip_accounts
1067 WHERE instance_party_id = l_party_rec.instance_party_id
1068 AND relationship_type_code = 'OWNER';
1069 EXCEPTION
1070 WHEN NO_DATA_FOUND THEN
1071 l_old_parent_owner_pty_acct_id := NULL;
1072 END;
1073 END IF;
1074 -- End of code addition for fixing bug 6368172, section 2 of 5
1075
1076 -- added by sk on 12/07 for accounts fix
1077 IF p_party_account_tbl.COUNT > 0 THEN
1078 FOR l_row IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
1079 IF p_party_account_tbl.EXISTS(l_row) THEN
1080 l_obj_ver_number := NULL;
1081 BEGIN
1082 IF p_party_account_tbl(l_row).ip_account_id IS NOT NULL
1083 AND p_party_account_tbl(l_row).ip_account_id <> fnd_api.g_miss_num
1084 THEN
1085 SELECT acct.object_version_number
1086 INTO l_obj_ver_number
1087 FROM csi_ip_accounts acct
1088 WHERE acct.ip_account_id= p_party_account_tbl(l_row).ip_account_id;
1089 END IF;
1090 EXCEPTION
1091 WHEN OTHERS THEN
1092 l_obj_ver_number := NULL;
1093 END;
1094 IF (p_party_account_tbl(l_row).ip_account_id IS NOT NULL AND p_party_account_tbl(l_row).ip_account_id <> fnd_api.g_miss_num)
1095 AND p_party_account_tbl(l_row).relationship_type_code = 'OWNER'
1096 AND p_party_account_tbl(l_row).instance_party_id = l_party_rec.instance_party_id
1097 AND p_party_account_tbl(l_row).object_version_number = l_obj_ver_number
1098 THEN
1099 l_act_tbl(l_party_row).attribute1:='Y';
1100 l_act_tbl(l_party_row).ip_account_id :=p_party_account_tbl(l_row).ip_account_id;
1101 END IF;
1102 END IF;
1103 END LOOP;
1104 END IF;
1105 -- end of addition by sk on 12/07 for accounts fix
1106
1107 csi_party_relationships_pvt.update_inst_party_relationship
1108 ( p_api_version => p_api_version
1109 ,p_commit => p_commit
1110 ,p_init_msg_list => p_init_msg_list
1111 ,p_validation_level => p_validation_level
1112 ,p_party_rec => l_party_rec
1113 ,p_txn_rec => p_txn_rec
1114 ,x_return_status => x_return_status
1115 ,x_msg_count => x_msg_count
1116 ,x_msg_data => x_msg_data ) ;
1117
1118 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1119 l_msg_index := 1;
1120 l_msg_count := x_msg_count;
1121 WHILE l_msg_count > 0 LOOP
1122 x_msg_data := FND_MSG_PUB.GET(
1123 l_msg_index,
1124 FND_API.G_FALSE );
1125 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1126 l_msg_index := l_msg_index + 1;
1127 l_msg_count := l_msg_count - 1;
1128 END LOOP;
1129 RAISE FND_API.G_EXC_ERROR;
1130 ELSE
1131 -- Grab the new party rec
1132 l_party_tbl(l_party_row) := l_party_rec;
1133 END IF;
1134 END IF;
1135 END LOOP;
1136
1137 END IF;
1138
1139 -- Update accounts
1140 -- Check if the table is not empty
1141 IF p_party_account_tbl.count > 0 THEN
1142 FOR l_acct_row IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
1143 IF p_party_account_tbl.EXISTS(l_acct_row) THEN
1144
1145
1146 IF ( (p_party_account_tbl(l_acct_row).ip_account_id IS NULL)
1147 OR
1148 (p_party_account_tbl(l_acct_row).ip_account_id = FND_API.G_MISS_NUM) ) THEN
1149 -- Call Private package to validate and create party accounts
1150 csi_party_relationships_pvt.create_inst_party_account
1151 ( p_api_version => p_api_version
1152 ,p_commit => p_commit
1153 ,p_init_msg_list => p_init_msg_list
1154 ,p_validation_level => p_validation_level
1155 ,p_party_account_rec => p_party_account_tbl(l_acct_row)
1156 ,p_txn_rec => p_txn_rec
1157 ,x_return_status => x_return_status
1158 ,x_msg_count => x_msg_count
1159 ,x_msg_data => x_msg_data
1160 ,p_inst_party_tbl => l_inst_party_tbl
1161 ,p_acct_rel_type_tbl => l_acct_rel_type_tbl
1162 ,p_site_use_tbl => l_site_use_tbl
1163 ,p_account_count_rec => l_account_count_rec
1164 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
1165 );
1166 ELSE
1167 -- dbms_output.put_line('PUB: caling update_inst_party_account');
1168 -- added by sk on 12/07 for accounts fix
1169
1170 l_found := FALSE;
1171 IF l_act_tbl.COUNT > 0 THEN
1172 FOR l_arow IN l_act_tbl.FIRST..l_act_tbl.LAST LOOP
1173 IF l_found
1174 THEN
1175 EXIT;
1176 END IF;
1177 IF l_act_tbl.EXISTS(l_arow) THEN
1178 IF l_act_tbl(l_arow).ip_account_id = p_party_account_tbl(l_acct_row).ip_account_id
1179 AND l_act_tbl(l_arow).attribute1 = 'Y'
1180 THEN
1181 l_found := TRUE;
1182 BEGIN
1183 SELECT acct.object_version_number
1184 INTO p_party_account_tbl(l_arow).object_version_number
1185 FROM csi_ip_accounts acct
1186 WHERE acct.ip_account_id= p_party_account_tbl(l_arow).ip_account_id;
1187 EXCEPTION
1188 WHEN OTHERS THEN
1189 NULL;
1190 END;
1191 END IF;
1192 END IF;
1193 END LOOP;
1194 END IF;
1195 -- End addition by sk on 12/07 for accounts fix
1196 -- srramakr Fix for Bug # 3117552
1197 IF p_txn_rec.transaction_type_id = 7 THEN -- only for Account Merge
1198 BEGIN
1199 SELECT acct.object_version_number,acct.active_end_date
1200 INTO p_party_account_tbl(l_acct_row).object_version_number,l_end_date
1201 FROM csi_ip_accounts acct
1202 WHERE acct.ip_account_id= p_party_account_tbl(l_acct_row).ip_account_id;
1203 -- Commenting for bug 3692167 as it will fail the unique constraint.
1204 -- At any time there should be one active record in combination of
1205 -- (party_account_id,relationship_type_code) associated to an
1206 -- party entity.
1207 /*
1208 IF nvl(l_end_date,(sysdate+1)) <= sysdate THEN
1209 p_party_account_tbl(l_acct_row).active_end_date := NULL;
1210 END IF;
1211 */
1212 EXCEPTION
1213 WHEN OTHERS THEN
1214 NULL;
1215 END;
1216 END IF;
1217 --
1218 csi_party_relationships_pvt.update_inst_party_account
1219 ( p_api_version => p_api_version
1220 ,p_commit => p_commit
1221 ,p_init_msg_list => p_init_msg_list
1222 ,p_validation_level => p_validation_level
1223 ,p_party_account_rec => p_party_account_tbl(l_acct_row)
1224 ,p_txn_rec => p_txn_rec
1225 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
1226 ,x_return_status => x_return_status
1227 ,x_msg_count => x_msg_count
1228 ,x_msg_data => x_msg_data);
1229 END IF;
1230
1231 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1232 l_msg_index := 1;
1233 l_msg_count := x_msg_count;
1234 WHILE l_msg_count > 0 LOOP
1235 x_msg_data := FND_MSG_PUB.GET(
1236 l_msg_index,
1237 FND_API.G_FALSE );
1238 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1239 l_msg_index := l_msg_index + 1;
1240 l_msg_count := l_msg_count - 1;
1241 END LOOP;
1242 RAISE FND_API.G_EXC_ERROR;
1243 END IF;
1244 END IF;
1245 END LOOP;
1246 -- Added by sguthiva for bug 2307804
1247 ELSE
1248 -- The following code has wrritten specifically for expiring the ownership of
1249 -- an external party during the transfer of ownership from external to internal.
1250
1251 FOR p_row IN p_party_tbl.FIRST..p_party_tbl.LAST
1252 LOOP
1253 FOR l_row IN l_old_party_tbl.FIRST..l_old_party_tbl.LAST
1254 LOOP
1255 IF l_old_party_tbl(l_row).instance_party_id = p_party_tbl(p_row).instance_party_id
1256 AND l_old_party_tbl(l_row).party_id <> l_internal_party_id
1257 AND p_party_tbl(p_row).party_id = l_internal_party_id
1258 OR ((l_old_party_tbl(l_row).instance_party_id = p_party_tbl(p_row).instance_party_id)
1259 AND (p_party_tbl(p_row).party_source_table IN ('EMPLOYEE', 'PO_VENDORS')))
1260 THEN
1261 -- Adding for bug 3294748
1262 -- Wrote the following code to expire all non-owner parties and its contacts (if any)
1263 -- in the case of ownership transfer from external-to-internal party,
1264 -- however we do not expire non-owner accounts.
1265 IF l_old_party_tbl(l_row).instance_party_id = p_party_tbl(p_row).instance_party_id
1266 AND l_old_party_tbl(l_row).party_id <> l_internal_party_id
1267 AND p_party_tbl(p_row).party_id = l_internal_party_id
1268 AND ( p_party_tbl(p_row).instance_id IS NOT NULL AND
1269 p_party_tbl(p_row).instance_id <> fnd_api.g_miss_num)
1270 AND p_party_tbl(p_row).relationship_type_code='OWNER'
1271 THEN
1272 FOR l_exp_pty IN exp_pty_csr(p_party_tbl(p_row).instance_id)
1273 LOOP
1274 -- Bug 10007311
1275 -- Modified the order in which the party and accounts are expired
1276 -- The correct order is to expire the account followed by the
1277 -- party
1278
1279 -- Bug 10007311
1280 -- Start of account expiration code
1281 --fix for bug 5511689:To expire non-owner accounts while expiring non-owner parties.
1282 FOR exp_acct_rec IN exp_acct_csr(l_exp_pty.instance_party_id) LOOP
1283 l_exp_acct_rec:=l_temp_acct_rec;
1284 l_exp_acct_rec.ip_account_id := exp_acct_rec.ip_account_id;
1285 l_exp_acct_rec.relationship_type_code := exp_acct_rec.relationship_type_code;
1286 l_exp_acct_rec.object_version_number := exp_acct_rec.object_version_number ;
1287 l_exp_acct_rec.active_end_date :=SYSDATE;
1288 l_exp_acct_rec.expire_flag :=fnd_api.g_true;
1289 -- Add log output for bug 7333900
1290 IF (l_csi_debug_level > 0) THEN
1291 csi_gen_utility_pvt.put_line('Expiring account record '||l_exp_acct_rec.ip_account_id||' of account type '||l_exp_acct_rec.relationship_type_code);
1292 csi_gen_utility_pvt.put_line(' account old active_end_date : '||exp_acct_rec.active_end_date);
1293 csi_gen_utility_pvt.put_line(' account new active_end_date : '||l_exp_acct_rec.active_end_date);
1294 csi_gen_utility_pvt.put_line(' sysdate : '||SYSDATE);
1295 END IF;
1296 IF l_exp_acct_rec.ip_account_id IS NOT NULL
1297 AND l_exp_acct_rec.ip_account_id <> fnd_api.g_miss_num
1298 THEN
1299 l_exp_acct_rec.grp_call_contracts := l_grp_call_contracts;
1300 csi_party_relationships_pvt.update_inst_party_account
1301 ( p_api_version => p_api_version
1302 ,p_commit => p_commit
1303 ,p_init_msg_list => p_init_msg_list
1304 ,p_validation_level => p_validation_level
1305 ,p_party_account_rec => l_exp_acct_rec
1306 ,p_txn_rec => p_txn_rec
1307 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
1308 ,x_return_status => x_return_status
1309 ,x_msg_count => x_msg_count
1310 ,x_msg_data => x_msg_data);
1311
1312 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1313 l_msg_index := 1;
1314 l_msg_count := x_msg_count;
1315 WHILE l_msg_count > 0 LOOP
1316 x_msg_data := FND_MSG_PUB.GET(
1317 l_msg_index,
1318 FND_API.G_FALSE );
1319 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1320 l_msg_index := l_msg_index + 1;
1321 l_msg_count := l_msg_count - 1;
1322 END LOOP;
1323 RAISE FND_API.G_EXC_ERROR;
1324 END IF;
1325 END IF;
1326 END LOOP;-- exp_acct_rec IN exp_acct_csr
1327 --end of fix 5511689
1328 -- End of party account expiration code
1329 -- Start of Party expiration code
1330
1331 l_exp_party_rec:= l_temp_party_rec;
1332 l_exp_party_rec.instance_id:= p_party_tbl(p_row).instance_id;
1333 l_exp_party_rec.instance_party_id := l_exp_pty.instance_party_id;
1334 l_exp_party_rec.relationship_type_code := l_exp_pty.relationship_type_code;
1335 l_exp_party_rec.object_version_number := l_exp_pty.object_version_number;
1336 -- Bug 3804960
1337 -- srramakr Need to use the same the date used by the item instance
1338 IF p_txn_rec.src_txn_creation_date IS NULL OR
1339 p_txn_rec.src_txn_creation_date = FND_API.G_MISS_DATE THEN
1340 l_exp_party_rec.active_end_date := sysdate;
1341 ELSE
1342 l_exp_party_rec.active_end_date := p_txn_rec.src_txn_creation_date;
1343 END IF;
1344 -- End of 3804960
1345 -- Add log output for bug 7333900
1346 IF (l_csi_debug_level > 0) THEN
1347 csi_gen_utility_pvt.put_line('Expiring party record '||l_exp_party_rec.instance_party_id||' of party type '||l_exp_party_rec.relationship_type_code);
1348 csi_gen_utility_pvt.put_line(' party old active_end_date : '||l_exp_pty.active_end_date);
1349 csi_gen_utility_pvt.put_line(' party new active_end_date : '||l_exp_party_rec.active_end_date);
1350 csi_gen_utility_pvt.put_line(' sysdate : '||SYSDATE);
1351 END IF;
1352 csi_party_relationships_pvt.update_inst_party_relationship
1353 ( p_api_version => p_api_version
1354 ,p_commit => p_commit
1355 ,p_init_msg_list => p_init_msg_list
1356 ,p_validation_level => p_validation_level
1357 ,p_party_rec => l_exp_party_rec
1358 ,p_txn_rec => p_txn_rec
1359 ,x_return_status => x_return_status
1360 ,x_msg_count => x_msg_count
1361 ,x_msg_data => x_msg_data ) ;
1362
1363 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1364 l_msg_index := 1;
1365 l_msg_count := x_msg_count;
1366 WHILE l_msg_count > 0
1367 LOOP
1368 x_msg_data := FND_MSG_PUB.GET(
1369 l_msg_index,
1370 FND_API.G_FALSE );
1371 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1372 l_msg_index := l_msg_index + 1;
1373 l_msg_count := l_msg_count - 1;
1374 END LOOP;
1375 RAISE FND_API.G_EXC_ERROR;
1376 END IF;
1377 -- Bug 10007311 End of party expiration code
1378 END LOOP;
1379 END IF;
1380 --End addition for bug 3294748
1381
1382 l_exp_acct_rec:=l_temp_acct_rec;
1383 BEGIN
1384 SELECT ip_account_id,
1385 relationship_type_code,
1386 object_version_number
1387 INTO l_exp_acct_rec.ip_account_id,
1388 l_exp_acct_rec.relationship_type_code,
1389 l_exp_acct_rec.object_version_number
1390 FROM csi_ip_accounts
1391 WHERE instance_party_id=p_party_tbl(p_row).instance_party_id
1392 AND relationship_type_code ='OWNER'
1393 AND nvl(active_end_date, sysdate+1) >= sysdate;
1394 l_exp_acct_rec.active_end_date :=SYSDATE;
1395 l_exp_acct_rec.expire_flag :=fnd_api.g_true;
1396 EXCEPTION
1397 WHEN OTHERS THEN
1398 NULL;
1399 END;
1400
1401 IF l_exp_acct_rec.ip_account_id IS NOT NULL
1402 AND l_exp_acct_rec.ip_account_id <> fnd_api.g_miss_num
1403 THEN
1404 l_exp_acct_rec.grp_call_contracts := l_grp_call_contracts;
1405 csi_party_relationships_pvt.update_inst_party_account
1406 ( p_api_version => p_api_version
1407 ,p_commit => p_commit
1408 ,p_init_msg_list => p_init_msg_list
1409 ,p_validation_level => p_validation_level
1410 ,p_party_account_rec => l_exp_acct_rec
1411 ,p_txn_rec => p_txn_rec
1412 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
1413 ,x_return_status => x_return_status
1414 ,x_msg_count => x_msg_count
1415 ,x_msg_data => x_msg_data);
1416
1417 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1418 l_msg_index := 1;
1419 l_msg_count := x_msg_count;
1420 WHILE l_msg_count > 0 LOOP
1421 x_msg_data := FND_MSG_PUB.GET(
1422 l_msg_index,
1423 FND_API.G_FALSE );
1424 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1425 l_msg_index := l_msg_index + 1;
1426 l_msg_count := l_msg_count - 1;
1427 END LOOP;
1428 RAISE FND_API.G_EXC_ERROR;
1429 END IF;
1430 END IF;
1431 END IF;
1432 END LOOP;
1433 END LOOP;
1434 -- End addition by sguthiva for bug 2307804
1435
1436 END IF;
1437 -- Start of code addition for fixing the bug 2151750
1438 /* If the owner of the root of a configuration changes, the ownership should
1439 be inherited by all child component (children in component-of tree) having the
1440 same initial owner as the root.
1441 Here grab the root instance owner party and its owner account.
1442 Retreive if it has any child instances from csi_ii_relationships table of relationship_type_code
1443 as 'COMPONENT-OF'.
1444 */
1445
1446 IF l_old_party_tbl.count > 0 THEN
1447 FOR l_old_party_row IN l_old_party_tbl.FIRST..l_old_party_tbl.LAST
1448 LOOP
1449 IF l_old_party_tbl.EXISTS(l_old_party_row) THEN
1450 IF l_old_party_tbl(l_old_party_row).relationship_type_code = 'OWNER' AND
1451 l_old_party_tbl(l_old_party_row).party_id IS NOT NULL AND
1452 l_old_party_tbl(l_old_party_row).party_id <> fnd_api.g_miss_num
1453 THEN
1454 -- Get Current Party record
1455 IF NOT(CSI_Instance_parties_vld_pvt.Get_Party_Record
1456 ( l_old_party_tbl(l_old_party_row).instance_party_id,
1457 l_new_curr_party_rec)) THEN
1458 RAISE FND_API.G_EXC_ERROR;
1459 END IF;
1460
1461 -- Start of code addition for fixing bug 6368172, section 3 of 5
1462 -- grab the owner account of the parent
1463 l_ip_acct_rec := l_temp_acct_rec;
1464 l_new_ip_acct_rec := l_temp_acct_rec;
1465 BEGIN
1466 SELECT instance_party_id
1467 ,party_account_id
1468 ,relationship_type_code
1469 ,bill_to_address
1470 ,ship_to_address
1471 ,active_start_date
1472 ,active_end_date
1473 ,context
1474 ,attribute1
1475 ,attribute2
1476 ,attribute3
1477 ,attribute4
1478 ,attribute5
1479 ,attribute6
1480 ,attribute7
1481 ,attribute8
1482 ,attribute9
1483 ,attribute10
1484 ,attribute11
1485 ,attribute12
1486 ,attribute13
1487 ,attribute14
1488 ,attribute15
1489 INTO l_ip_acct_rec.instance_party_id
1490 ,l_ip_acct_rec.party_account_id
1491 ,l_ip_acct_rec.relationship_type_code
1492 ,l_ip_acct_rec.bill_to_address
1493 ,l_ip_acct_rec.ship_to_address
1494 ,l_ip_acct_rec.active_start_date
1495 ,l_ip_acct_rec.active_end_date
1496 ,l_ip_acct_rec.context
1497 ,l_ip_acct_rec.attribute1
1498 ,l_ip_acct_rec.attribute2
1499 ,l_ip_acct_rec.attribute3
1500 ,l_ip_acct_rec.attribute4
1501 ,l_ip_acct_rec.attribute5
1502 ,l_ip_acct_rec.attribute6
1503 ,l_ip_acct_rec.attribute7
1504 ,l_ip_acct_rec.attribute8
1505 ,l_ip_acct_rec.attribute9
1506 ,l_ip_acct_rec.attribute10
1507 ,l_ip_acct_rec.attribute11
1508 ,l_ip_acct_rec.attribute12
1509 ,l_ip_acct_rec.attribute13
1510 ,l_ip_acct_rec.attribute14
1511 ,l_ip_acct_rec.attribute15
1512 FROM csi_ip_accounts
1513 WHERE instance_party_id = l_old_party_tbl(l_old_party_row).instance_party_id
1514 AND relationship_type_code = 'OWNER'
1515 AND SYSDATE BETWEEN nvl(active_start_date, SYSDATE-1)
1516 AND nvl(active_end_date, SYSDATE+1);
1517
1518 l_new_ip_acct_rec := l_ip_acct_rec;
1519 EXCEPTION
1520 WHEN OTHERS THEN
1521 l_ip_acct_rec := l_temp_acct_rec;
1522 l_new_ip_acct_rec :=l_temp_acct_rec;
1523 END;
1524 l_ip_acct_rec.call_contracts := l_old_party_tbl(l_old_party_row).call_contracts;--Added for Bug#14843691
1525 csi_gen_utility_pvt.put_line('l_ip_acct_rec.call_contracts : '||l_ip_acct_rec.call_contracts);
1526 -- End of code addition for fixing bug 6368172, section 3 of 5
1527
1528 -- If the retreived party records party_id has been changed then
1529 -- we can assume that a transfer of ownership has taken place in
1530 -- the above procedure.
1531 IF l_old_party_tbl(l_old_party_row).party_id <> l_new_curr_party_rec.party_id
1532 -- Start of code addition for fixing bug 6368172, section 4 of 5
1533 OR (l_old_party_tbl(l_old_party_row).party_id = l_new_curr_party_rec.party_id
1534 AND l_old_parent_owner_pty_acct_id IS NOT NULL
1535 AND l_old_parent_owner_pty_acct_id <> fnd_api.g_miss_num
1536 AND l_old_parent_owner_pty_acct_id <> l_new_ip_acct_rec.party_account_id)
1537 -- End of code addition for fixing bug 6368172, section 4 of 5
1538 OR nvl(l_old_party_tbl(l_old_party_row).cascade_ownership_flag,'N')='Y' -- Added for cascade 2972082
1539 THEN
1540 -- the l_new_ip_acct_rec account needs to be passed to all the children
1541 -- we got an instance whose owner party, or owner account has been changed
1542 -- we need to grab all its children if it has any and change the
1543 -- ownership of them also.
1544 -- Here I'm grabbing the children
1545
1546 -- Added for cascade bug 2972082
1547 IF l_old_party_tbl(l_old_party_row).instance_id IS NULL OR
1548 l_old_party_tbl(l_old_party_row).instance_id = fnd_api.g_miss_num
1549 THEN
1550 BEGIN
1551 SELECT instance_id
1552 INTO l_old_party_tbl(l_old_party_row).instance_id
1553 FROM csi_i_parties
1554 WHERE instance_party_id=l_old_party_tbl(l_old_party_row).instance_party_id;
1555 EXCEPTION
1556 WHEN NO_DATA_FOUND THEN
1557 NULL;
1558 END;
1559 END IF;
1560 -- End addition for bug 2972082
1561
1562 p_rel_query_rec.object_id := l_old_party_tbl(l_old_party_row).instance_id;
1563 p_rel_query_rec.relationship_type_code := 'COMPONENT-OF';
1564 --
1565 IF p_rel_query_rec.object_id IS NOT NULL AND
1566 p_rel_query_rec.object_id <> FND_API.G_MISS_NUM THEN
1567 csi_ii_relationships_pvt.Get_Children
1568 ( p_relationship_query_rec => p_rel_query_rec,
1569 p_rel_tbl => l_rel_tbl,
1570 p_depth => NULL,
1571 p_active_relationship_only => FND_API.G_TRUE,
1572 p_time_stamp => FND_API.G_MISS_DATE,
1573 p_get_dfs => FND_API.G_FALSE,
1574 p_ii_relationship_level_tbl => l_ii_relationship_level_tbl,
1575 x_return_status => x_return_status,
1576 x_msg_count => x_msg_count,
1577 x_msg_data => x_msg_data
1578 );
1579 --
1580 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1581 FND_MESSAGE.SET_NAME('CSI','CSI_API_GET_CHILDREN_ERROR');
1582 FND_MSG_PUB.Add;
1583 RAISE FND_API.G_EXC_ERROR;
1584 END IF;
1585 END IF;
1586 --
1587 IF l_rel_tbl.count > 0 THEN
1588 -- FOR l_old_pty_csr IN party_csr(l_old_party_tbl(l_old_party_row).instance_id)
1589 FOR j in l_rel_tbl.FIRST .. l_rel_tbl.LAST LOOP
1590 -- After grabbing the child instances one by one I'll call
1591 -- the pvt.update_inst_party_relationship for a transfer
1592 -- to new owner.
1593 -- Now grab the child instances instance_party_id
1594 BEGIN
1595 l_cld_party_rec := l_new_curr_party_rec;
1596 l_cld_party_id := null;
1597 l_cld_party_rec.active_start_date := fnd_api.g_miss_date;
1598 l_cld_party_rec.active_end_date := fnd_api.g_miss_date;
1599 SELECT instance_party_id,
1600 instance_id,
1601 party_id,
1602 object_version_number
1603 INTO l_cld_party_rec.instance_party_id,
1604 l_cld_party_rec.instance_id,
1605 l_cld_party_id,
1606 l_cld_party_rec.object_version_number
1607 FROM csi_i_parties
1608 WHERE instance_id = l_rel_tbl(j).subject_id
1609 AND relationship_type_code = 'OWNER'
1610 AND (active_end_date IS NULL OR active_end_date > SYSDATE);
1611
1612 EXCEPTION
1613 WHEN OTHERS THEN
1614 l_cld_party_rec := l_temp_party_rec;
1615 END;
1616
1617 BEGIN
1618 SELECT party_account_id
1619 INTO l_cld_party_acct_id
1620 FROM csi_ip_accounts
1621 WHERE instance_party_id = l_cld_party_rec.instance_party_id
1622 AND relationship_type_code = 'OWNER'
1623 AND SYSDATE BETWEEN nvl(active_start_date, sysdate-1)
1624 AND nvl(active_end_date, sysdate+1);
1625 EXCEPTION
1626 WHEN OTHERS THEN
1627 NULL;
1628 END;
1629
1630 -- The following is modified for cascade bug 2972082
1631 -- to make sure parties were updated only for new party
1632 -- which is different from the original party if
1633 -- cascade_ownership_flag=fnd_api.g_true.
1634 /*
1635 IF l_cld_party_rec.instance_party_id IS NOT NULL AND
1636 l_cld_party_rec.instance_party_id <> fnd_api.g_miss_num AND
1637 ((l_cld_party_id = l_old_party_tbl(l_old_party_row).party_id AND
1638 l_cld_party_id <> l_cld_party_rec.party_id)
1639 OR
1640 (l_cld_party_id <> l_old_party_tbl(l_old_party_row).party_id AND
1641 l_cld_party_id <> l_cld_party_rec.party_id AND
1642 nvl(l_old_party_tbl(l_old_party_row).cascade_ownership_flag,'N')='Y') -- Added for cascade 2972082
1643 )
1644 THEN
1645 */
1646 -- Start of code addition for fixing bug 6368172, section 5 of 5
1647 -- Need to grab the old child account id before it gets changed
1648 IF l_cld_party_rec.instance_party_id IS NOT NULL THEN
1649 BEGIN
1650 SELECT party_account_id
1651 INTO l_old_child_owner_pty_acct_id
1652 FROM csi_ip_accounts
1653 WHERE instance_party_id = l_cld_party_rec.instance_party_id
1654 AND relationship_type_code = 'OWNER';
1655 EXCEPTION
1656 WHEN NO_DATA_FOUND THEN
1657 l_old_child_owner_pty_acct_id := NULL;
1658 END;
1659 END IF;
1660
1661 --Added for Bug 10414588
1662 l_cascade_ownership_uimu := FND_PROFILE.VALUE('CSI_FORCE_CASCADE_OWNER_UIMU');
1663 csi_gen_utility_pvt.put_line('l_cascade_ownership_uimu: ' || l_cascade_ownership_uimu);
1664 csi_gen_utility_pvt.put_line('cascade_ownership_flag: ' || l_old_party_tbl(l_old_party_row).cascade_ownership_flag);
1665
1666 l_force_cascade := 'N';
1667 IF p_txn_rec.transaction_type_id IN (1,3) THEN
1668 l_force_cascade := NVL(l_cascade_ownership_uimu, 'N');
1669 ELSE
1670 l_force_cascade := nvl(l_old_party_tbl(l_old_party_row).cascade_ownership_flag,'N');
1671 END IF;
1672
1673 csi_gen_utility_pvt.put_line('l_force_cascade: ' || l_force_cascade);
1674 --End of code for Bug 10414588
1675
1676 IF l_cld_party_rec.instance_party_id IS NOT NULL AND
1677 l_cld_party_rec.instance_party_id <> fnd_api.g_miss_num AND
1678 ((l_cld_party_id = l_old_party_tbl(l_old_party_row).party_id AND
1679 l_cld_party_id <> l_cld_party_rec.party_id)
1680 OR
1681 (l_cld_party_id = l_old_party_tbl(l_old_party_row).party_id AND
1682 l_cld_party_id = l_cld_party_rec.party_id AND
1683 l_old_parent_owner_pty_acct_id IS NOT NULL AND
1684 l_old_parent_owner_pty_acct_id <> fnd_api.g_miss_num AND
1685 l_old_child_owner_pty_acct_id IS NOT NULL AND
1686 l_old_child_owner_pty_acct_id <> fnd_api.g_miss_num AND
1687 (l_old_child_owner_pty_acct_id = l_old_parent_owner_pty_acct_id OR nvl(l_force_cascade,'N')='Y') AND --Changed for Bug 10414588
1688 l_old_child_owner_pty_acct_id <> l_new_ip_acct_rec.party_account_id)
1689 OR
1690 (l_cld_party_id <> l_old_party_tbl(l_old_party_row).party_id AND
1691 l_cld_party_id <> l_cld_party_rec.party_id AND
1692 nvl(l_force_cascade,'N')='Y') -- Added for cascade 2972082 --Changed for Bug 10414588
1693 )
1694 THEN
1695 -- End of code addition for fixing bug 6368172, section 5 of 5
1696
1697 csi_party_relationships_pvt.update_inst_party_relationship
1698 ( p_api_version => p_api_version
1699 ,p_commit => p_commit
1700 ,p_init_msg_list => p_init_msg_list
1701 ,p_validation_level => p_validation_level
1702 ,p_party_rec => l_cld_party_rec
1703 ,p_txn_rec => p_txn_rec
1704 ,x_return_status => x_return_status
1705 ,x_msg_count => x_msg_count
1706 ,x_msg_data => x_msg_data ) ;
1707
1708 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1709 l_msg_index := 1;
1710 l_msg_count := x_msg_count;
1711 WHILE l_msg_count > 0 LOOP
1712 x_msg_data := FND_MSG_PUB.GET(
1713 l_msg_index,
1714 FND_API.G_FALSE );
1715 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1716 l_msg_index := l_msg_index + 1;
1717 l_msg_count := l_msg_count - 1;
1718 END LOOP;
1719 RAISE FND_API.G_EXC_ERROR;
1720 END IF;
1721
1722 --added may15
1723 -- Added by sguthiva for bug 2307804
1724 -- The following code has wrritten specifically for expiring the ownership of
1725 -- an external party during the transfer of ownership from external to internal.
1726 IF l_cld_party_rec.party_id = l_internal_party_id
1727 THEN
1728 -- Adding for bug 3294748
1729 -- Wrote the following code to expire all non-owner parties and its contacts (if any)
1730 -- in the case of ext-to-int ownership transfer, however we do not expire non-owner accounts.
1731 IF l_cld_party_rec.relationship_type_code='OWNER'
1732 THEN
1733 FOR l_exp_pty IN exp_pty_csr(l_cld_party_rec.instance_id)
1734 LOOP
1735 l_exp_party_rec:= l_temp_party_rec;
1736 l_exp_party_rec.instance_id:= l_cld_party_rec.instance_id;
1737 l_exp_party_rec.instance_party_id := l_exp_pty.instance_party_id;
1738 l_exp_party_rec.relationship_type_code := l_exp_pty.relationship_type_code;
1739 l_exp_party_rec.object_version_number := l_exp_pty.object_version_number;
1740 -- Bug 3804960
1741 -- srramakr Need to use the same the date used by the item instance
1742 IF p_txn_rec.src_txn_creation_date IS NULL OR
1743 p_txn_rec.src_txn_creation_date = FND_API.G_MISS_DATE THEN
1744 l_exp_party_rec.active_end_date := sysdate;
1745 ELSE
1746 l_exp_party_rec.active_end_date := p_txn_rec.src_txn_creation_date;
1747 END IF;
1748 -- End of 3804960
1749 csi_party_relationships_pvt.update_inst_party_relationship
1750 ( p_api_version => p_api_version
1751 ,p_commit => p_commit
1752 ,p_init_msg_list => p_init_msg_list
1753 ,p_validation_level => p_validation_level
1754 ,p_party_rec => l_exp_party_rec
1755 ,p_txn_rec => p_txn_rec
1756 ,x_return_status => x_return_status
1757 ,x_msg_count => x_msg_count
1758 ,x_msg_data => x_msg_data ) ;
1759
1760 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1761 l_msg_index := 1;
1762 l_msg_count := x_msg_count;
1763 WHILE l_msg_count > 0
1764 LOOP
1765 x_msg_data := FND_MSG_PUB.GET(
1766 l_msg_index,
1767 FND_API.G_FALSE );
1768 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1769 l_msg_index := l_msg_index + 1;
1770 l_msg_count := l_msg_count - 1;
1771 END LOOP;
1772 RAISE FND_API.G_EXC_ERROR;
1773 END IF;
1774 END LOOP;
1775 END IF;
1776 --End addition for bug 3294748
1777 l_exp_acct_rec:=l_temp_acct_rec;
1778 BEGIN
1779 SELECT ip_account_id,
1780 relationship_type_code,
1781 object_version_number
1782 INTO l_exp_acct_rec.ip_account_id,
1783 l_exp_acct_rec.relationship_type_code,
1784 l_exp_acct_rec.object_version_number
1785 FROM csi_ip_accounts
1786 WHERE instance_party_id=l_cld_party_rec.instance_party_id
1787 AND relationship_type_code ='OWNER';
1788 -- Bug 3804960
1789 -- srramakr Need to use the same the date used by the item instance
1790 IF p_txn_rec.src_txn_creation_date IS NULL OR
1791 p_txn_rec.src_txn_creation_date = FND_API.G_MISS_DATE THEN
1792 l_exp_acct_rec.active_end_date := sysdate;
1793 ELSE
1794 l_exp_acct_rec.active_end_date := p_txn_rec.src_txn_creation_date;
1795 END IF;
1796 -- End of 3804960
1797 l_exp_acct_rec.expire_flag :=fnd_api.g_true;
1798 EXCEPTION
1799 WHEN OTHERS THEN
1800 NULL;
1801 END;
1802
1803 IF l_exp_acct_rec.ip_account_id IS NOT NULL
1804 AND l_exp_acct_rec.ip_account_id <> fnd_api.g_miss_num
1805 THEN
1806 l_exp_acct_rec.grp_call_contracts := l_grp_call_contracts;
1807 csi_party_relationships_pvt.update_inst_party_account
1808 ( p_api_version => p_api_version
1809 ,p_commit => p_commit
1810 ,p_init_msg_list => p_init_msg_list
1811 ,p_validation_level => p_validation_level
1812 ,p_party_account_rec => l_exp_acct_rec
1813 ,p_txn_rec => p_txn_rec
1814 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
1815 ,x_return_status => x_return_status
1816 ,x_msg_count => x_msg_count
1817 ,x_msg_data => x_msg_data);
1818
1819 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1820 l_msg_index := 1;
1821 l_msg_count := x_msg_count;
1822 WHILE l_msg_count > 0 LOOP
1823 x_msg_data := FND_MSG_PUB.GET(
1824 l_msg_index,
1825 FND_API.G_FALSE );
1826 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1827 l_msg_index := l_msg_index + 1;
1828 l_msg_count := l_msg_count - 1;
1829 END LOOP;
1830 RAISE FND_API.G_EXC_ERROR;
1831 END IF;
1832 END IF;
1833 END IF;
1834 -- End addition by sguthiva for bug 2307804
1835 IF l_cld_party_rec.party_id <> l_internal_party_id
1836 THEN
1837 IF l_ip_acct_rec.instance_party_id IS NOT NULL AND
1838 l_ip_acct_rec.instance_party_id <> fnd_api.g_miss_num
1839 THEN
1840 l_ip_acct_rec:=l_new_ip_acct_rec; -- added for 2608706
1841 l_ip_acct_rec.instance_party_id := l_cld_party_rec.instance_party_id;
1842 l_ip_acct_rec.ip_account_id := fnd_api.g_miss_num;
1843 -- srramakr Bug 3621181 need to cascade Bill_to and Ship_to address to the children
1844 -- l_ip_acct_rec.bill_to_address := fnd_api.g_miss_num;
1845 -- l_ip_acct_rec.ship_to_address := fnd_api.g_miss_num;
1846 l_ip_acct_rec.active_start_date := fnd_api.g_miss_date; -- added for 2608706
1847 l_ip_acct_rec.active_end_date := fnd_api.g_miss_date; -- added for 2608706
1848 l_ip_acct_rec.grp_call_contracts := l_grp_call_contracts;
1849 -- Added the following code for bug 2972082
1850 IF nvl(l_old_party_tbl(l_old_party_row).cascade_ownership_flag,'N')='Y'
1851 AND l_cld_party_id <> l_cld_party_rec.party_id
1852 AND l_cld_party_id <> l_internal_party_id
1853 THEN
1854 l_ip_acct_rec.cascade_ownership_flag:='Y';
1855 END IF;
1856 -- End of addition for bug 2972082
1857 -- Need to pass the system_id for components also if the Xfer of ownership is
1858 -- initiated from xfer of system. This will be true if both parent and child instances
1859 -- belong to the same system.
1860 l_ip_acct_rec.system_id := fnd_api.g_miss_num;
1861 --
1862 IF p_party_account_tbl.EXISTS(1) AND
1863 p_party_account_tbl(1).system_id IS NOT NULL AND
1864 p_party_account_tbl(1).system_id <> FND_API.G_MISS_NUM AND
1865 NVL(p_party_account_tbl(1).relationship_type_code,FND_API.G_MISS_CHAR) = 'OWNER' THEN
1866 Begin
1867 select system_id
1868 into l_ip_acct_rec.system_id
1869 from csi_item_instances
1870 where instance_id = l_rel_tbl(j).subject_id
1871 and nvl(system_id,fnd_api.g_miss_num) = p_party_account_tbl(1).system_id;
1872 Exception
1873 when no_data_found then
1874 l_ip_acct_rec.system_id := fnd_api.g_miss_num;
1875 End;
1876 END IF;
1877 csi_party_relationships_pvt.create_inst_party_account
1878 ( p_api_version => p_api_version
1879 ,p_commit => p_commit
1880 ,p_init_msg_list => p_init_msg_list
1881 ,p_validation_level => p_validation_level
1882 ,p_party_account_rec => l_ip_acct_rec
1883 ,p_txn_rec => p_txn_rec
1884 ,x_return_status => x_return_status
1885 ,x_msg_count => x_msg_count
1886 ,x_msg_data => x_msg_data
1887 ,p_inst_party_tbl => l_inst_party_tbl
1888 ,p_acct_rel_type_tbl => l_acct_rel_type_tbl
1889 ,p_site_use_tbl => l_site_use_tbl
1890 ,p_account_count_rec => l_account_count_rec
1891 ,p_oks_txn_inst_tbl => p_oks_txn_inst_tbl
1892 );
1893
1894 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1895 l_msg_index := 1;
1896 l_msg_count := x_msg_count;
1897 WHILE l_msg_count > 0 LOOP
1898 x_msg_data := FND_MSG_PUB.GET(
1899 l_msg_index,
1900 FND_API.G_FALSE );
1901 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
1902 l_msg_index := l_msg_index + 1;
1903 l_msg_count := l_msg_count - 1;
1904 END LOOP;
1905 RAISE FND_API.G_EXC_ERROR;
1906 END IF;
1907 END IF;
1908 END IF;
1909 -- End commentation by sguthiva for bug 2307804
1910 END IF;
1911
1912 END LOOP;
1913 END IF; -- l_rel_tbl count check
1914
1915 END IF;
1916 END IF;
1917 END IF;
1918 END LOOP;
1919 END IF;
1920 -- End of code addition for fixing the bug 2151750
1921
1922 -- code written by sk on 12/06/01 for fixing TRF bug 2133944
1923 -- End of API body
1924
1925
1926 -- Standard check of p_commit.
1927 IF FND_API.To_Boolean( p_commit ) THEN
1928 COMMIT WORK;
1929 END IF;
1930
1931 /***** srramakr commented for bug # 3304439
1932 -- Check for the profile option and disable the trace
1933 IF (l_flag = 'Y') THEN
1934 dbms_session.set_sql_trace(false);
1935 END IF;
1936 -- End disable trace
1937 ****/
1938
1939 -- Standard call to get message count and if count is get message info.
1940 FND_MSG_PUB.Count_And_Get
1941 (p_count => x_msg_count ,
1942 p_data => x_msg_data );
1943 EXCEPTION
1944 WHEN FND_API.G_EXC_ERROR THEN
1945 ROLLBACK TO update_inst_party_rel_pub;
1946 x_return_status := FND_API.G_RET_STS_ERROR ;
1947 FND_MSG_PUB.Count_And_Get
1948 ( p_count => x_msg_count,
1949 p_data => x_msg_data );
1950 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1951 ROLLBACK TO update_inst_party_rel_pub;
1952 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1953 FND_MSG_PUB.Count_And_Get
1954 ( p_count => x_msg_count,
1955 p_data => x_msg_data );
1956 WHEN OTHERS THEN
1957 ROLLBACK TO update_inst_party_rel_pub;
1958 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1959 IF FND_MSG_PUB.Check_Msg_Level
1960 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1961 THEN
1962 FND_MSG_PUB.Add_Exc_Msg
1963 ( g_pkg_name, l_api_name );
1964 END IF;
1965 FND_MSG_PUB.Count_And_Get
1966 ( p_count => x_msg_count,
1967 p_data => x_msg_data );
1968 END update_inst_party_relationship ;
1969
1970
1971 /*-------------------------------------------------------------*/
1972 /* Procedure name: Expire_inst_party_relationship */
1973 /* Description : Procedure used to expire an existing */
1974 /* instance -party relationships */
1975 /*-------------------------------------------------------------*/
1976
1977 PROCEDURE expire_inst_party_relationship
1978 ( p_api_version IN NUMBER
1979 ,p_commit IN VARCHAR2
1980 ,p_init_msg_list IN VARCHAR2
1981 ,p_validation_level IN NUMBER
1982 ,p_instance_party_tbl IN csi_datastructures_pub.party_tbl
1983 ,p_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec
1984 ,x_return_status OUT NOCOPY VARCHAR2
1985 ,x_msg_count OUT NOCOPY NUMBER
1986 ,x_msg_data OUT NOCOPY VARCHAR2
1987 ) IS
1988 l_api_name CONSTANT VARCHAR2(30) := 'EXPIRE_INST_PARTY_RELATIONSHIP';
1989 l_api_version CONSTANT NUMBER := 1.0;
1990 l_csi_debug_level NUMBER;
1991 l_party_rec csi_datastructures_pub.party_rec;
1992 l_msg_index NUMBER;
1993 l_msg_count NUMBER;
1994 l_line_count NUMBER;
1995 l_flag VARCHAR2(1) :='N';
1996
1997 BEGIN
1998 -- Standard Start of API savepoint
1999 SAVEPOINT expire_inst_party_rel_pub;
2000
2001 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
2002
2003 csi_utility_grp.check_ib_active;
2004
2005 -- Standard call to check for call compatibility.
2006 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
2007 p_api_version ,
2008 l_api_name ,
2009 g_pkg_name )
2010 THEN
2011 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2012 END IF;
2013
2014 -- Initialize message list if p_init_msg_list is set to TRUE.
2015 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2016 FND_MSG_PUB.initialize;
2017 END IF;
2018
2019 -- Initialize API return status to success
2020 x_return_status := FND_API.G_RET_STS_SUCCESS;
2021
2022 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
2023 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2024
2025 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
2026 IF (l_csi_debug_level > 0) THEN
2027 csi_gen_utility_pvt.put_line( 'expire_inst_party_relationship');
2028 END IF;
2029
2030 -- If the debug level = 2 then dump all the parameters values.
2031 IF (l_csi_debug_level > 1) THEN
2032 csi_gen_utility_pvt.put_line( 'expire_inst_party_relationship:' ||
2033 p_api_version ||'-'||
2034 p_commit ||'-'||
2035 p_init_msg_list ||'-'||
2036 p_validation_level );
2037 -- Dump the records in the log file
2038 csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
2039 csi_gen_utility_pvt.dump_party_tbl(p_instance_party_tbl);
2040 END IF;
2041
2042 /***** srramakr commented for bug # 3304439
2043 -- Check for the profile option and enable trace
2044 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
2045 -- End enable trace
2046 ****/
2047
2048 -- Start API body
2049 --
2050 IF p_instance_party_tbl.count > 0 THEN
2051 FOR l_count IN p_instance_party_tbl.FIRST..p_instance_party_tbl.LAST LOOP
2052 IF p_instance_party_tbl.EXISTS(l_count) THEN
2053 csi_party_relationships_pvt.expire_inst_party_relationship
2054 ( p_api_version => p_api_version,
2055 p_commit => p_commit,
2056 p_init_msg_list => p_init_msg_list,
2057 p_validation_level => p_validation_level,
2058 p_instance_party_rec=> p_instance_party_tbl(l_count),
2059 p_txn_rec => p_txn_rec,
2060 x_return_status => x_return_status ,
2061 x_msg_count => x_msg_count ,
2062 x_msg_data => x_msg_data ) ;
2063
2064 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2065 l_msg_index := 1;
2066 l_msg_count := x_msg_count;
2067 WHILE l_msg_count > 0 LOOP
2068 x_msg_data := FND_MSG_PUB.GET(
2069 l_msg_index,
2070 FND_API.G_FALSE );
2071 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
2072 l_msg_index := l_msg_index + 1;
2073 l_msg_count := l_msg_count - 1;
2074 END LOOP;
2075 RAISE FND_API.G_EXC_ERROR;
2076 END IF;
2077 END IF;
2078 END LOOP;
2079 END IF;
2080 --
2081 -- End of API body
2082
2083 -- Standard check of p_commit.
2084 IF FND_API.To_Boolean( p_commit ) THEN
2085 COMMIT WORK;
2086 END IF;
2087
2088 /***** srramakr commented for bug # 3304439
2089 -- Check for the profile option and disable the trace
2090 IF (l_flag = 'Y') THEN
2091 dbms_session.set_sql_trace(false);
2092 END IF;
2093 -- End disable trace
2094 ****/
2095
2096 -- Standard call to get message count and if count is get message info.
2097 FND_MSG_PUB.Count_And_Get
2098 (p_count => x_msg_count ,
2099 p_data => x_msg_data );
2100 EXCEPTION
2101 WHEN FND_API.G_EXC_ERROR THEN
2102 ROLLBACK TO expire_inst_party_rel_pub;
2103 x_return_status := FND_API.G_RET_STS_ERROR ;
2104 FND_MSG_PUB.Count_And_Get
2105 ( p_count => x_msg_count,
2106 p_data => x_msg_data );
2107
2108 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2109 ROLLBACK TO expire_inst_party_rel_pub;
2110 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2111 FND_MSG_PUB.Count_And_Get
2112 ( p_count => x_msg_count,
2113 p_data => x_msg_data );
2114
2115 WHEN OTHERS THEN
2116 ROLLBACK TO expire_inst_party_relationship;
2117 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2118 IF FND_MSG_PUB.Check_Msg_Level
2119 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2120 THEN
2121 FND_MSG_PUB.Add_Exc_Msg
2122 ( g_pkg_name, l_api_name );
2123 END IF;
2124 FND_MSG_PUB.Count_And_Get
2125 ( p_count => x_msg_count,
2126 p_data => x_msg_data );
2127
2128 END expire_inst_party_relationship;
2129
2130 /*---------------------------------------------------------*/
2131 /* Procedure name: Get_inst_party_account */
2132 /* Description : Procedure used to get information about */
2133 /* the accounts related to an instance-party */
2134 /*---------------------------------------------------------*/
2135
2136 PROCEDURE get_inst_party_accounts
2137 ( p_api_version IN NUMBER
2138 ,p_commit IN VARCHAR2
2139 ,p_init_msg_list IN VARCHAR2
2140 ,p_validation_level IN NUMBER
2141 ,p_account_query_rec IN csi_datastructures_pub.party_account_query_rec
2142 ,p_resolve_id_columns IN VARCHAR2
2143 ,p_time_stamp IN DATE
2144 ,x_account_header_tbl OUT NOCOPY csi_datastructures_pub.party_account_header_tbl
2145 ,x_return_status OUT NOCOPY VARCHAR2
2146 ,x_msg_count OUT NOCOPY NUMBER
2147 ,x_msg_data OUT NOCOPY VARCHAR2
2148 ) IS
2149
2150 l_api_name CONSTANT VARCHAR2(30) := 'GET_INST_PARTY_ACCOUNT';
2151 l_api_version CONSTANT NUMBER := 1.0;
2152 l_csi_debug_level NUMBER;
2153 l_instance_party_account_id NUMBER;
2154 l_party_account_tbl csi_datastructures_pub.party_account_tbl;
2155 l_account_header_tbl csi_datastructures_pub.party_account_header_tbl;
2156 l_line_count NUMBER;
2157 l_msg_index NUMBER;
2158 l_count NUMBER := 0;
2159 l_where_clause VARCHAR2(2000) ;
2160 l_get_acct_cursor_id NUMBER ;
2161 l_rows_processed NUMBER ;
2162 l_flag VARCHAR2(1) :='N';
2163 l_party_account_rec csi_datastructures_pub.party_account_header_rec;
2164 l_select_stmt VARCHAR2(2000) := ' SELECT ip_account_id , instance_party_id, party_account_id, '||
2165 ' relationship_type_code, active_start_date, active_end_date,context , attribute1, '||
2166 ' attribute2, attribute3, attribute4, attribute5, attribute6, attribute7,attribute8, '||
2167 ' attribute9, attribute10,attribute11, attribute12,attribute13,attribute14,attribute15, '||
2168 ' object_version_number, bill_to_address, ship_to_address from csi_ip_accounts ';
2169
2170
2171 BEGIN
2172 -- Standard Start of API savepoint
2173 -- SAVEPOINT get_inst_party_acct_pub;
2174
2175 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
2176
2177 csi_utility_grp.check_ib_active;
2178
2179
2180 -- Standard call to check for call compatibility.
2181 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
2182 p_api_version ,
2183 l_api_name ,
2184 g_pkg_name )
2185 THEN
2186 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2187 END IF;
2188
2189 -- Initialize message list if p_init_msg_list is set to TRUE.
2190 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2191 FND_MSG_PUB.initialize;
2192 END IF;
2193
2194 -- Initialize API return status to success
2195 x_return_status := FND_API.G_RET_STS_SUCCESS;
2196
2197 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
2198 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2199
2200 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
2201 IF (l_csi_debug_level > 0) THEN
2202 csi_gen_utility_pvt.put_line( 'get_inst_party_accounts');
2203 END IF;
2204
2205 -- If the debug level = 2 then dump all the parameters values.
2206 IF (l_csi_debug_level > 1) THEN
2207
2208 csi_gen_utility_pvt.put_line( 'get_inst_party_account:' ||
2209 p_api_version ||'-'||
2210 p_commit ||'-'||
2211 p_init_msg_list ||'-'||
2212 p_validation_level ||'-'||
2213 p_time_stamp );
2214 -- Dump the account query records
2215 csi_gen_utility_pvt.dump_account_query_rec(p_account_query_rec);
2216
2217 END IF;
2218
2219 /***** srramakr commented for bug # 3304439
2220 -- Check for the profile option and enable trace
2221 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
2222 -- End enable trace
2223 ****/
2224
2225 -- Start API body
2226 --
2227 IF (p_account_query_rec.ip_account_id = FND_API.G_MISS_NUM)
2228 AND (p_account_query_rec.instance_party_id = FND_API.G_MISS_NUM)
2229 AND (p_account_query_rec.party_account_id = FND_API.G_MISS_NUM)
2230 AND (p_account_query_rec.relationship_type_code = FND_API.G_MISS_CHAR) THEN
2231
2232 FND_MESSAGE.Set_Name('CSI', 'CSI_API_INVALID_PARAMETERS');
2233 FND_MSG_PUB.ADD;
2234 RAISE FND_API.G_EXC_ERROR;
2235 END IF;
2236
2237 -- Generate the where clause
2238 csi_party_relationships_pvt.Gen_Acct_Where_Clause
2239 ( p_pty_acct_query_rec => p_account_query_rec,
2240 x_where_clause => l_where_clause );
2241
2242 -- Build the select statement
2243 l_select_stmt := l_select_stmt || ' where '||l_where_clause;
2244
2245 -- Open the cursor
2246 l_get_acct_cursor_id := dbms_sql.open_cursor;
2247
2248 --Parse the select statement
2249 dbms_sql.parse(l_get_acct_cursor_id, l_select_stmt , dbms_sql.native);
2250
2251 -- Bind the variables
2252 csi_party_relationships_pvt.Bind_acct_variable(p_account_query_rec, l_get_acct_cursor_id);
2253
2254 -- Define output variables
2255 csi_party_relationships_pvt.Define_Acct_Columns(l_get_acct_cursor_id);
2256
2257 -- execute the select statement
2258 l_rows_processed := dbms_sql.execute(l_get_acct_cursor_id);
2259
2260 LOOP
2261 EXIT WHEN DBMS_SQL.FETCH_ROWS(l_get_acct_cursor_id) = 0;
2262 csi_party_relationships_pvt.Get_acct_Column_Values(l_get_acct_cursor_id, l_party_account_rec);
2263 l_count := l_count + 1;
2264 x_account_header_tbl(l_count) := l_party_account_rec;
2265 END LOOP;
2266
2267 -- Close the cursor
2268 DBMS_SQL.CLOSE_CURSOR(l_get_acct_cursor_id);
2269
2270 IF ((p_time_stamp IS NOT NULL) AND (p_time_stamp <> FND_API.G_MISS_DATE)) THEN
2271 IF p_time_stamp <= sysdate THEN
2272 -- Contruct from the history if p_time_stamp is less than sysdate
2273 csi_party_relationships_pvt.Construct_acct_from_hist(x_account_header_tbl, p_time_stamp);
2274 ELSE
2275 FND_MESSAGE.Set_Name('CSI', 'CSI_API_INVALID_HIST_PARAMS');
2276 FND_MSG_PUB.ADD;
2277 RAISE FND_API.G_EXC_ERROR;
2278 END IF;
2279 END IF;
2280
2281 -- foreign key resolution for the id columns
2282 IF p_resolve_id_columns = fnd_api.g_true THEN
2283 IF x_account_header_tbl.count > 0 THEN
2284 l_account_header_tbl := x_account_header_tbl;
2285 csi_party_relationships_pvt.Resolve_id_columns(l_account_header_tbl);
2286
2287 x_account_header_tbl := l_account_header_tbl;
2288 END IF;
2289 END IF;
2290
2291 --
2292 -- End of API body
2293
2294 -- Standard check of p_commit.
2295 /*
2296 IF FND_API.To_Boolean( p_commit ) THEN
2297 COMMIT WORK;
2298 END IF;
2299 */
2300
2301 /***** srramakr commented for bug # 3304439
2302 -- Check for the profile option and disable the trace
2303 IF (l_flag = 'Y') THEN
2304 dbms_session.set_sql_trace(false);
2305 END IF;
2306 -- End disable trace
2307 ****/
2308
2309 -- Standard call to get message count and if count is get message info.
2310 FND_MSG_PUB.Count_And_Get
2311 (p_count => x_msg_count ,
2312 p_data => x_msg_data );
2313 EXCEPTION
2314 WHEN FND_API.G_EXC_ERROR THEN
2315 -- ROLLBACK TO get_inst_party_acct_pub;
2316 x_return_status := FND_API.G_RET_STS_ERROR ;
2317 FND_MSG_PUB.Count_And_Get
2318 ( p_count => x_msg_count,
2319 p_data => x_msg_data );
2320 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2321 -- ROLLBACK TO get_inst_party_acct_pub;
2322 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2323 FND_MSG_PUB.Count_And_Get
2324 ( p_count => x_msg_count,
2325 p_data => x_msg_data );
2326 WHEN OTHERS THEN
2327 IF dbms_sql.is_open(l_get_acct_cursor_id) then
2328 dbms_sql.close_cursor(l_get_acct_cursor_id);
2329 END IF;
2330 -- ROLLBACK TO get_inst_party_acct_pub;
2331 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2332 IF FND_MSG_PUB.Check_Msg_Level
2333 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2334 THEN
2335 FND_MSG_PUB.Add_Exc_Msg
2336 ( g_pkg_name, l_api_name );
2337 END IF;
2338 FND_MSG_PUB.Count_And_Get
2339 ( p_count => x_msg_count,
2340 p_data => x_msg_data );
2341 END get_inst_party_accountS ;
2342
2343 /*----------------------------------------------------------*/
2344 /* Procedure name: Create_inst_party_account */
2345 /* Description : Procedure used to create new */
2346 /* instance-party account relationships */
2347 /*----------------------------------------------------------*/
2348
2349 PROCEDURE create_inst_party_account
2350 ( p_api_version IN NUMBER
2351 ,p_commit IN VARCHAR2
2352 ,p_init_msg_list IN VARCHAR2
2353 ,p_validation_level IN NUMBER
2354 ,p_party_account_tbl IN OUT NOCOPY csi_datastructures_pub.party_account_tbl
2355 ,p_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec
2356 ,x_return_status OUT NOCOPY VARCHAR2
2357 ,x_msg_count OUT NOCOPY NUMBER
2358 ,x_msg_data OUT NOCOPY VARCHAR2
2359 ) IS
2360
2361 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_INST_PARTY_ACCOUNT';
2362 l_api_version CONSTANT NUMBER := 1.0;
2363 l_csi_debug_level NUMBER;
2364 l_party_account_rec csi_datastructures_pub.party_account_rec;
2365 l_msg_index NUMBER;
2366 l_msg_count NUMBER;
2367 l_line_count NUMBER;
2368 l_flag VARCHAR2(1) :='N';
2369 l_inst_party_tbl csi_party_relationships_pvt.inst_party_tbl;
2370 l_acct_rel_type_tbl csi_party_relationships_pvt.acct_rel_type_tbl;
2371 l_site_use_tbl csi_party_relationships_pvt.site_use_tbl;
2372 l_account_count_rec csi_party_relationships_pvt.account_count_rec;
2373 --
2374 px_oks_txn_inst_tbl oks_ibint_pub.txn_instance_tbl;
2375
2376 BEGIN
2377 -- Standard Start of API savepoint
2378 SAVEPOINT create_inst_party_acct_pub;
2379
2380 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
2381
2382 csi_utility_grp.check_ib_active;
2383
2384
2385 -- Standard call to check for call compatibility.
2386 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
2387 p_api_version ,
2388 l_api_name ,
2389 g_pkg_name )
2390 THEN
2391 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2392 END IF;
2393
2394 -- Initialize message list if p_init_msg_list is set to TRUE.
2395 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2396 FND_MSG_PUB.initialize;
2397 END IF;
2398
2399 -- Initialize API return status to success
2400 x_return_status := FND_API.G_RET_STS_SUCCESS;
2401
2402 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
2403 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2404
2405 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
2406 IF (l_csi_debug_level > 0) THEN
2407 csi_gen_utility_pvt.put_line( 'create_inst_party_account');
2408 END IF;
2409
2410 -- If the debug level = 2 then dump all the parameters values.
2411 IF (l_csi_debug_level > 1) THEN
2412 csi_gen_utility_pvt.put_line( 'create_inst_party_account:'||
2413 p_api_version ||'-'||
2414 p_commit ||'-'||
2415 p_init_msg_list );
2416 -- Dump the records in the log file
2417 csi_gen_utility_pvt.dump_party_account_tbl(p_party_account_tbl);
2418 csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
2419 END IF;
2420
2421 /***** srramakr commented for bug # 3304439
2422 -- Check for the profile option and enable trace
2423 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
2424 -- End enable trace
2425 ****/
2426
2427 -- Start API body
2428 --
2429 -- Check if the table is not empty
2430 IF p_party_account_tbl.count > 0 THEN
2431 FOR l_count IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
2432 IF p_party_account_tbl.EXISTS(l_count) THEN
2433
2434 -- Call Private package to validate and create party accounts
2435 csi_party_relationships_pvt.create_inst_party_account
2436 ( p_api_version => p_api_version
2437 ,p_commit => p_commit
2438 ,p_init_msg_list => p_init_msg_list
2439 ,p_validation_level => p_validation_level
2440 ,p_party_account_rec => p_party_account_tbl(l_count)
2441 ,p_txn_rec => p_txn_rec
2442 ,x_return_status => x_return_status
2443 ,x_msg_count => x_msg_count
2444 ,x_msg_data => x_msg_data
2445 ,p_inst_party_tbl => l_inst_party_tbl
2446 ,p_acct_rel_type_tbl => l_acct_rel_type_tbl
2447 ,p_site_use_tbl => l_site_use_tbl
2448 ,p_account_count_rec => l_account_count_rec
2449 ,p_oks_txn_inst_tbl => px_oks_txn_inst_tbl
2450 );
2451
2452 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2453 l_msg_index := 1;
2454 l_msg_count := x_msg_count;
2455 WHILE l_msg_count > 0 LOOP
2456 x_msg_data := FND_MSG_PUB.GET(
2457 l_msg_index,
2458 FND_API.G_FALSE );
2459 csi_gen_utility_pvt.put_line( 'message data = '||x_msg_data);
2460 l_msg_index := l_msg_index + 1;
2461 l_msg_count := l_msg_count - 1;
2462 END LOOP;
2463 RAISE FND_API.G_EXC_ERROR;
2464 END IF;
2465 END IF;
2466 END LOOP;
2467 END IF;
2468 --
2469 -- End of API body
2470
2471 -- Standard check of p_commit.
2472 IF FND_API.To_Boolean( p_commit ) THEN
2473 COMMIT WORK;
2474 END IF;
2475
2476 /***** srramakr commented for bug # 3304439
2477 -- Check for the profile option and disable the trace
2478 IF (l_flag = 'Y') THEN
2479 dbms_session.set_sql_trace(false);
2480 END IF;
2481 -- End disable trace
2482 ****/
2483
2484 -- Standard call to get message count and if count is get message info.
2485 FND_MSG_PUB.Count_And_Get
2486 (p_count => x_msg_count ,
2487 p_data => x_msg_data );
2488 EXCEPTION
2489 WHEN FND_API.G_EXC_ERROR THEN
2490 ROLLBACK TO create_inst_party_acct_pub;
2491 x_return_status := FND_API.G_RET_STS_ERROR ;
2492 FND_MSG_PUB.Count_And_Get
2493 ( p_count => x_msg_count,
2494 p_data => x_msg_data );
2495 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2496 ROLLBACK TO create_inst_party_acct_pub;
2497 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2498 FND_MSG_PUB.Count_And_Get
2499 ( p_count => x_msg_count,
2500 p_data => x_msg_data );
2501 WHEN OTHERS THEN
2502 ROLLBACK TO create_inst_party_acct_pub;
2503 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2504 IF FND_MSG_PUB.Check_Msg_Level
2505 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2506 THEN
2507 FND_MSG_PUB.Add_Exc_Msg
2508 ( g_pkg_name, l_api_name );
2509 END IF;
2510 FND_MSG_PUB.Count_And_Get
2511 ( p_count => x_msg_count,
2512 p_data => x_msg_data );
2513 END create_inst_party_account;
2514
2515 /*------------------------------------------------------------*/
2516 /* Procedure name: Update_inst_party_account */
2517 /* Description : Procedure used to update the existing */
2518 /* instance-party account relationships */
2519 /*------------------------------------------------------------*/
2520
2521 PROCEDURE update_inst_party_account
2522 ( p_api_version IN NUMBER
2523 ,p_commit IN VARCHAR2
2524 ,p_init_msg_list IN VARCHAR2
2525 ,p_validation_level IN NUMBER
2526 ,p_party_account_tbl IN csi_datastructures_pub.party_account_tbl
2527 ,p_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec
2528 ,x_return_status OUT NOCOPY VARCHAR2
2529 ,x_msg_count OUT NOCOPY NUMBER
2530 ,x_msg_data OUT NOCOPY VARCHAR2
2531 ) IS
2532 /*** CURSOR party_account_csr (p_ins_pty_id IN NUMBER) IS
2533 SELECT subject_id
2534 FROM csi_ii_relationships
2535 WHERE relationship_type_code = 'COMPONENT-OF'
2536 START WITH object_id = (SELECT instance_id+0
2537 FROM csi_i_parties
2538 WHERE instance_party_id = p_ins_pty_id
2539 AND relationship_type_code = 'OWNER'
2540 AND (active_end_date IS NULL OR active_end_date > sysdate)
2541 )
2542 CONNECT BY object_id = PRIOR subject_id; ***/
2543
2544 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_INST_PARTY_ACCOUNT';
2545 l_api_version CONSTANT NUMBER := 1.0;
2546 l_csi_debug_level NUMBER;
2547 l_party_account_rec csi_datastructures_pub.party_account_rec;
2548 l_msg_index NUMBER;
2549 l_msg_count NUMBER;
2550 l_line_count NUMBER;
2551 l_flag VARCHAR2(1) :='N';
2552 l_party_account_tbl csi_datastructures_pub.party_account_tbl := p_party_account_tbl;
2553 l_temp_account_tbl csi_datastructures_pub.party_account_tbl;
2554 old_party_account_id NUMBER;
2555 l_acct_row NUMBER :=1;
2556 old_party_id NUMBER;
2557 l_party_id NUMBER;
2558 p_rel_query_rec csi_datastructures_pub.relationship_query_rec;
2559 l_rel_tbl csi_datastructures_pub.ii_relationship_tbl;
2560 l_object_id NUMBER;
2561 l_ii_relationship_level_tbl csi_ii_relationships_pvt.ii_relationship_level_tbl;
2562 px_oks_txn_inst_tbl oks_ibint_pub.txn_instance_tbl;
2563 BEGIN
2564 -- Standard Start of API savepoint
2565 SAVEPOINT update_inst_party_acct_pub;
2566
2567 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
2568
2569 csi_utility_grp.check_ib_active;
2570
2571
2572 -- Standard call to check for call compatibility.
2573 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
2574 p_api_version ,
2575 l_api_name ,
2576 g_pkg_name )
2577 THEN
2578 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2579 END IF;
2580
2581 -- Initialize message list if p_init_msg_list is set to TRUE.
2582 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2583 FND_MSG_PUB.initialize;
2584 END IF;
2585
2586 -- Initialize API return status to success
2587 x_return_status := FND_API.G_RET_STS_SUCCESS;
2588
2589 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
2590 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2591
2592 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
2593 IF (l_csi_debug_level > 0) THEN
2594 csi_gen_utility_pvt.put_line( 'update_inst_party_account');
2595 END IF;
2596
2597 -- If the debug level = 2 then dump all the parameters values.
2598 IF (l_csi_debug_level > 1) THEN
2599 csi_gen_utility_pvt.put_line( 'update_inst_party_account:'||
2600 p_api_version ||'-'||
2601 p_commit ||'-'||
2602 p_init_msg_list );
2603 -- Dump the records in the log file
2604 csi_gen_utility_pvt.dump_party_account_tbl(p_party_account_tbl);
2605 csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
2606 END IF;
2607
2608 /***** srramakr commented for bug # 3304439
2609 -- Check for the profile option and enable trace
2610 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
2611 -- End enable trace
2612 ****/
2613
2614 -- Start API body
2615 --
2616 -- Check if the table is not empty
2617 IF p_party_account_tbl.count > 0 THEN
2618 FOR l_count IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
2619 IF p_party_account_tbl.EXISTS(l_count) THEN
2620 IF p_party_account_tbl(l_count).ip_account_id IS NOT NULL AND
2621 p_party_account_tbl(l_count).ip_account_id <> fnd_api.g_miss_num
2622 THEN
2623 BEGIN
2624 SELECT acct.ip_account_id,
2625 acct.party_account_id,
2626 pty.party_id
2627 INTO l_temp_account_tbl(l_acct_row).ip_account_id,
2628 l_temp_account_tbl(l_acct_row).party_account_id,
2629 l_temp_account_tbl(l_acct_row).attribute1
2630 FROM csi_ip_accounts acct,
2631 csi_i_parties pty
2632 WHERE acct.ip_account_id = p_party_account_tbl(l_count).ip_account_id
2633 AND acct.instance_party_id = pty.instance_party_id;
2634
2635 l_acct_row := l_acct_row+1;
2636 EXCEPTION
2637 WHEN OTHERS THEN
2638 NULL;
2639 END;
2640 END IF;
2641 -- dbms_output.put_line('PUB: caling update_inst_party_account');
2642 csi_party_relationships_pvt.update_inst_party_account
2643 ( p_api_version => p_api_version
2644 ,p_commit => p_commit
2645 ,p_init_msg_list => p_init_msg_list
2646 ,p_validation_level => p_validation_level
2647 ,p_party_account_rec => p_party_account_tbl(l_count)
2648 ,p_txn_rec => p_txn_rec
2649 ,p_oks_txn_inst_tbl => px_oks_txn_inst_tbl
2650 ,x_return_status => x_return_status
2651 ,x_msg_count => x_msg_count
2652 ,x_msg_data => x_msg_data);
2653
2654 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2655 l_msg_index := 1;
2656 l_msg_count := x_msg_count;
2657 WHILE l_msg_count > 0 LOOP
2658 x_msg_data := FND_MSG_PUB.GET(
2659 l_msg_index,
2660 FND_API.G_FALSE );
2661 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
2662 l_msg_index := l_msg_index + 1;
2663 l_msg_count := l_msg_count - 1;
2664 END LOOP;
2665 RAISE FND_API.G_EXC_ERROR;
2666 END IF;
2667 END IF;
2668 END LOOP;
2669 END IF;
2670
2671 -- If the owner account (party_account_id) has been changed then if the Instance has any children
2672 -- then all the children (in COMPONENT-OF relationship_type_code) has to get the same party_account_id.
2673 -- Start of fix for bug 2151750
2674 IF l_party_account_tbl.count > 0
2675 THEN
2676 FOR l_old_party_row IN l_party_account_tbl.FIRST..l_party_account_tbl.LAST
2677 LOOP
2678 IF l_party_account_tbl.EXISTS(l_old_party_row) -- Added for bug 3776650
2679 THEN
2680 old_party_account_id := NULL;
2681 old_party_id := NULL;
2682 IF l_temp_account_tbl.COUNT > 0
2683 THEN
2684 FOR l_old_acct IN l_temp_account_tbl.FIRST..l_temp_account_tbl.LAST
2685 LOOP
2686 IF l_temp_account_tbl.EXISTS(l_old_acct) -- Added for bug 3776650
2687 THEN
2688 IF l_temp_account_tbl(l_old_acct).ip_account_id = l_party_account_tbl(l_old_party_row).ip_account_id
2689 THEN
2690 old_party_account_id := l_temp_account_tbl(l_old_acct).ip_account_id;
2691 old_party_id := l_temp_account_tbl(l_old_acct).attribute1;
2692 EXIT;
2693 END IF;
2694 END IF;
2695 END LOOP;
2696 END IF;
2697
2698 IF l_party_account_tbl(l_old_party_row).party_account_id IS NOT NULL AND
2699 l_party_account_tbl(l_old_party_row).party_account_id <> FND_API.G_MISS_NUM AND
2700 l_party_account_tbl(l_old_party_row).relationship_type_code = 'OWNER' AND
2701 old_party_account_id IS NOT NULL AND
2702 l_party_account_tbl(l_old_party_row).party_account_id <> old_party_account_id
2703 THEN
2704 l_object_id := null;
2705 Begin
2706 select instance_id
2707 into l_object_id
2708 from CSI_I_PARTIES
2709 where instance_party_id = l_party_account_tbl(l_old_party_row).instance_party_id
2710 and relationship_type_code = 'OWNER'
2711 and (active_end_date IS NULL OR active_end_date > sysdate);
2712 Exception
2713 when no_data_found then
2714 l_object_id := null;
2715 End;
2716 --
2717 IF l_object_id IS NOT NULL THEN
2718 p_rel_query_rec.object_id := l_object_id;
2719 p_rel_query_rec.relationship_type_code := 'COMPONENT-OF';
2720 --
2721 csi_ii_relationships_pvt.Get_Children
2722 ( p_relationship_query_rec => p_rel_query_rec,
2723 p_rel_tbl => l_rel_tbl,
2724 p_depth => NULL,
2725 p_active_relationship_only => FND_API.G_TRUE,
2726 p_time_stamp => FND_API.G_MISS_DATE,
2727 p_get_dfs => FND_API.G_FALSE,
2728 p_ii_relationship_level_tbl => l_ii_relationship_level_tbl,
2729 x_return_status => x_return_status,
2730 x_msg_count => x_msg_count,
2731 x_msg_data => x_msg_data
2732 );
2733 --
2734 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2735 FND_MESSAGE.SET_NAME('CSI','CSI_API_GET_CHILDREN_ERROR');
2736 FND_MSG_PUB.Add;
2737 RAISE FND_API.G_EXC_ERROR;
2738 END IF;
2739 --
2740 IF l_rel_tbl.count > 0 THEN
2741 FOR j in l_rel_tbl.FIRST .. l_rel_tbl.LAST LOOP
2742 -- FOR l_pty_acct_csr IN party_account_csr(l_party_account_tbl(l_old_party_row).instance_party_id)
2743 l_party_account_tbl(l_old_party_row).ip_account_id := fnd_api.g_miss_num;
2744 l_party_account_tbl(l_old_party_row).instance_party_id := fnd_api.g_miss_num;
2745 l_party_account_tbl(l_old_party_row).object_version_number := fnd_api.g_miss_num;
2746 l_party_account_tbl(l_old_party_row).active_start_date :=fnd_api.g_miss_date;
2747 l_party_account_tbl(l_old_party_row).active_end_date :=fnd_api.g_miss_date;
2748 BEGIN
2749 l_party_id := NULL;
2750 SELECT acct.ip_account_id,
2751 acct.object_version_number,
2752 pty.party_id
2753 INTO l_party_account_tbl(l_old_party_row).ip_account_id,
2754 l_party_account_tbl(l_old_party_row).object_version_number,
2755 l_party_id
2756 FROM csi_ip_accounts acct,
2757 csi_i_parties pty
2758 WHERE pty.instance_party_id = acct.instance_party_id
2759 AND pty.instance_id = l_rel_tbl(j).subject_id
2760 AND acct.relationship_type_code = 'OWNER'
2761 AND (acct.active_end_date IS NULL OR
2762 acct.active_end_date > SYSDATE);
2763 EXCEPTION
2764 WHEN OTHERS THEN
2765 NULL;
2766 END;
2767 --
2768 IF l_party_account_tbl(l_old_party_row).ip_account_id IS NOT NULL AND
2769 l_party_account_tbl(l_old_party_row).ip_account_id <> fnd_api.g_miss_num AND
2770 old_party_id = l_party_id
2771 THEN
2772 csi_party_relationships_pvt.update_inst_party_account
2773 ( p_api_version => p_api_version
2774 ,p_commit => p_commit
2775 ,p_init_msg_list => p_init_msg_list
2776 ,p_validation_level => p_validation_level
2777 ,p_party_account_rec => l_party_account_tbl(l_old_party_row)
2778 ,p_txn_rec => p_txn_rec
2779 ,p_oks_txn_inst_tbl => px_oks_txn_inst_tbl
2780 ,x_return_status => x_return_status
2781 ,x_msg_count => x_msg_count
2782 ,x_msg_data => x_msg_data);
2783
2784 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2785 l_msg_index := 1;
2786 l_msg_count := x_msg_count;
2787 WHILE l_msg_count > 0
2788 LOOP
2789 x_msg_data := FND_MSG_PUB.GET(
2790 l_msg_index,
2791 FND_API.G_FALSE );
2792 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
2793 l_msg_index := l_msg_index + 1;
2794 l_msg_count := l_msg_count - 1;
2795 END LOOP;
2796 RAISE FND_API.G_EXC_ERROR;
2797 END IF;
2798 END IF; -- ip_account_id not null check
2799 END LOOP; -- l_rel_tbl loop
2800 END IF; -- l_rel_tbl count check
2801 END IF; -- l_object_id check
2802 END IF;
2803 END IF;
2804 END LOOP;
2805 END IF;
2806
2807 -- End of fix for bug 2151750
2808 --
2809 -- End of API body
2810
2811 -- Standard check of p_commit.
2812 IF FND_API.To_Boolean( p_commit ) THEN
2813 COMMIT WORK;
2814 END IF;
2815
2816 /***** srramakr commented for bug # 3304439
2817 -- Check for the profile option and disable the trace
2818 IF (l_flag = 'Y') THEN
2819 dbms_session.set_sql_trace(false);
2820 END IF;
2821 -- End disable trace
2822 ****/
2823
2824 -- Standard call to get message count and if count is get message info.
2825 FND_MSG_PUB.Count_And_Get
2826 (p_count => x_msg_count ,
2827 p_data => x_msg_data );
2828 EXCEPTION
2829 WHEN FND_API.G_EXC_ERROR THEN
2830 ROLLBACK TO update_inst_party_acct_pub;
2831 x_return_status := FND_API.G_RET_STS_ERROR ;
2832 FND_MSG_PUB.Count_And_Get
2833 ( p_count => x_msg_count,
2834 p_data => x_msg_data );
2835 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2836 ROLLBACK TO update_inst_party_acct_pub;
2837 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2838 FND_MSG_PUB.Count_And_Get
2839 ( p_count => x_msg_count,
2840 p_data => x_msg_data );
2841 WHEN OTHERS THEN
2842 ROLLBACK TO update_inst_party_acct_pub;
2843 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2844 IF FND_MSG_PUB.Check_Msg_Level
2845 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2846 THEN
2847 FND_MSG_PUB.Add_Exc_Msg
2848 ( g_pkg_name, l_api_name );
2849 END IF;
2850
2851 FND_MSG_PUB.Count_And_Get
2852 ( p_count => x_msg_count,
2853 p_data => x_msg_data );
2854 END update_inst_party_account ;
2855
2856 /*--------------------------------------------------------*/
2857 /* Procedure name: Expire_inst_party_account */
2858 /* Description : Procedure used to expire an existing */
2859 /* instance-party account relationships */
2860 /*--------------------------------------------------------*/
2861
2862 PROCEDURE expire_inst_party_account
2863 ( p_api_version IN NUMBER
2864 ,p_commit IN VARCHAR2
2865 ,p_init_msg_list IN VARCHAR2
2866 ,p_validation_level IN NUMBER
2867 ,p_party_account_tbl IN csi_datastructures_pub.party_account_tbl
2868 ,p_txn_rec IN OUT NOCOPY csi_datastructures_pub.transaction_rec
2869 ,x_return_status OUT NOCOPY VARCHAR2
2870 ,x_msg_count OUT NOCOPY NUMBER
2871 ,x_msg_data OUT NOCOPY VARCHAR2
2872 ) IS
2873
2874 l_api_name CONSTANT VARCHAR2(30) := 'EXPIRE_INST_PARTY_ACCOUNT';
2875 l_api_version CONSTANT NUMBER := 1.0;
2876 l_csi_debug_level NUMBER;
2877 l_msg_index NUMBER ;
2878 l_msg_count NUMBER;
2879 l_party_account_rec csi_datastructures_pub.party_account_rec;
2880 l_line_count NUMBER := 0 ;
2881 l_ip_account_id NUMBER ;
2882 l_flag VARCHAR2(1) :='N';
2883
2884 BEGIN
2885 -- Standard Start of API savepoint
2886 SAVEPOINT expire_inst_party_acct_pub;
2887
2888 -- Check for freeze_flag in csi_install_parameters is set to 'Y'
2889
2890 csi_utility_grp.check_ib_active;
2891
2892
2893 -- Standard call to check for call compatibility.
2894 IF NOT FND_API.Compatible_API_Call ( l_api_version ,
2895 p_api_version ,
2896 l_api_name ,
2897 g_pkg_name )
2898 THEN
2899 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2900 END IF;
2901
2902 -- Initialize message list if p_init_msg_list is set to TRUE.
2903 IF FND_API.to_Boolean( p_init_msg_list ) THEN
2904 FND_MSG_PUB.initialize;
2905 END IF;
2906
2907 -- Initialize API return status to success
2908 x_return_status := FND_API.G_RET_STS_SUCCESS;
2909
2910 -- Check the profile option CSI_DEBUG_LEVEL for debug message reporting
2911 l_csi_debug_level:=fnd_profile.value('CSI_DEBUG_LEVEL');
2912
2913 -- If CSI_DEBUG_LEVEL = 1 then dump the procedure name
2914 IF (l_csi_debug_level > 0) THEN
2915 csi_gen_utility_pvt.put_line( 'expire_inst_party_account');
2916 END IF;
2917
2918
2919 -- If the debug level = 2 then dump all the parameters values.
2920 IF (l_csi_debug_level > 1) THEN
2921 csi_gen_utility_pvt.put_line( 'expire_inst_party_account:'||
2922 p_api_version ||'-'||
2923 p_commit ||'-'||
2924 p_init_msg_list );
2925 -- Dump the records in the log file
2926 csi_gen_utility_pvt.dump_party_account_tbl(p_party_account_tbl);
2927 csi_gen_utility_pvt.dump_txn_rec(p_txn_rec);
2928 END IF;
2929
2930 /***** srramakr commented for bug # 3304439
2931 -- Check for the profile option and enable trace
2932 l_flag:=csi_gen_utility_pvt.enable_trace(l_trace_flag => l_flag);
2933 -- End enable trace
2934 ****/
2935
2936 -- Start API body
2937 --
2938 IF p_party_account_tbl.count > 0 THEN
2939 FOR l_count IN p_party_account_tbl.FIRST..p_party_account_tbl.LAST LOOP
2940 IF p_party_account_tbl.EXISTS(l_count) THEN
2941 csi_party_relationships_pvt.expire_inst_party_account
2942 ( p_api_version => p_api_version
2943 ,p_commit => p_commit
2944 ,p_init_msg_list => p_init_msg_list
2945 ,p_validation_level => p_validation_level
2946 ,p_party_account_rec => p_party_account_tbl(l_count)
2947 ,p_txn_rec => p_txn_rec
2948 ,x_return_status => x_return_status
2949 ,x_msg_count => x_msg_count
2950 ,x_msg_data => x_msg_data );
2951
2952
2953 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2954 l_msg_index := 1;
2955 l_msg_count := x_msg_count;
2956 WHILE l_msg_count > 0 LOOP
2957 x_msg_data := FND_MSG_PUB.GET(
2958 l_msg_index,
2959 FND_API.G_FALSE);
2960 csi_gen_utility_pvt.put_line('message data = '||x_msg_data);
2961 l_msg_index := l_msg_index + 1;
2962 l_msg_count := l_msg_count - 1;
2963 END LOOP;
2964 RAISE FND_API.G_EXC_ERROR;
2965 END IF;
2966 END IF;
2967 END LOOP;
2968 END IF;
2969 --
2970 -- End of API body
2971
2972 -- Standard check of p_commit.
2973 IF FND_API.To_Boolean( p_commit ) THEN
2974 COMMIT WORK;
2975 END IF;
2976
2977 /***** srramakr commented for bug # 3304439
2978 -- Check for the profile option and disable the trace
2979 IF (l_flag = 'Y') THEN
2980 dbms_session.set_sql_trace(false);
2981 END IF;
2982 -- End disable trace
2983 ****/
2984
2985 -- Standard call to get message count and if count is get message info.
2986 FND_MSG_PUB.Count_And_Get
2987 (p_count => x_msg_count ,
2988 p_data => x_msg_data );
2989 EXCEPTION
2990 WHEN FND_API.G_EXC_ERROR THEN
2991 ROLLBACK TO expire_inst_party_acct_pub;
2992 x_return_status := FND_API.G_RET_STS_ERROR ;
2993 FND_MSG_PUB.Count_And_Get
2994 ( p_count => x_msg_count,
2995 p_data => x_msg_data );
2996
2997 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2998 ROLLBACK TO expire_inst_party_acct_pub;
2999 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3000 FND_MSG_PUB.Count_And_Get
3001 ( p_count => x_msg_count,
3002 p_data => x_msg_data );
3003 WHEN OTHERS THEN
3004 ROLLBACK TO expire_inst_party_acct_pub;
3005 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3006
3007 IF FND_MSG_PUB.Check_Msg_Level
3008 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3009 THEN
3010 FND_MSG_PUB.Add_Exc_Msg
3011 ( g_pkg_name, l_api_name );
3012 END IF;
3013 FND_MSG_PUB.Count_And_Get
3014 ( p_count => x_msg_count,
3015 p_data => x_msg_data );
3016 END expire_inst_party_account ;
3017 END csi_party_relationships_pub ;
3018