DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_EXTRACT_BO_UTIL_PVT

Source


1 PACKAGE BODY HZ_EXTRACT_BO_UTIL_PVT  AS
2 /*$Header: ARHEUTVB.pls 120.11 2006/06/13 20:27:13 acng noship $ */
3 /*
4  * @rep:scope public
5  * @rep:product HZ
6  * @rep:displayname Contact Point
7  * @rep:category BUSINESS_ENTITY
8  * @rep:lifecycle active
9  * @rep:doccd 115hztig.pdf Oracle Trading Community Architecture Technical Implementation Guide
10  */
11 
12 procedure validate_event_id(p_event_id in number,
13 			    p_party_id in number,
14   			    p_event_type in varchar2,
15 			    p_bo_code in varchar2,
16 			    x_return_status  out nocopy varchar2) is
17 
18 	cursor c1 is
19 	 SELECT 'Y'
20 	 FROM HZ_BUS_OBJ_TRACKING
21 	 WHERE parent_bo_code is null
22 	 and event_id = p_event_id
23 	 and  child_entity_name = 'HZ_PARTIES'
24 	 and child_id  = nvl(p_party_id, child_id)
25 	 and child_bo_code = p_bo_code
26 	 and nvl(parent_event_flag, p_event_type) = p_event_type
27 	 and rownum = 1;
28 
29 l_valid_flag varchar2(1);
30 begin
31 	-- initialize API return status to success.
32     	x_return_status := FND_API.G_RET_STS_SUCCESS;
33 
34 	open c1;
35 	fetch c1 into l_valid_flag;
36 	close c1;
37 
38 	if NVL(l_valid_flag, 'N') <> 'Y'
39 	then
40 		if p_party_id is null
41 	    	then
42 			FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_EVENT_ID');
43 			FND_MSG_PUB.ADD;
44 			x_return_status := FND_API.G_RET_STS_ERROR;
45 			RAISE FND_API.G_EXC_ERROR;
46       		else
47 	    		FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_EVENT_OBJ_ID');
48 			FND_MSG_PUB.ADD;
49 			x_return_status := FND_API.G_RET_STS_ERROR;
50 			RAISE FND_API.G_EXC_ERROR;
51 		end if;
52 	end if;
53 
54 
55 end;
56 
57 FUNCTION get_parent_object_type(
58     p_parent_table_name           IN     VARCHAR2,
59     p_parent_id             IN     NUMBER
60  ) RETURN VARCHAR2 IS
61 
62   l_party_type varchar2(30) := null;
63 
64     cursor c1 is
65 	select party_type
66 	from hz_parties
67 	where party_id = p_parent_id;
68 
69      cursor c2 is
70 	select party_type
71 	from hz_parties p, hz_cust_accounts ca
72 	where p.party_id = ca.party_id
73         and ca.cust_account_id = p_parent_id;
74 
75     cursor c_cp is
76         select contact_point_type
77         from HZ_CONTACT_POINTS
78         where contact_point_id = p_parent_id;
79 
80   BEGIN
81 	if p_parent_table_name = 'HZ_PARTIES'
82 	then
83 		open c1;
84 		fetch c1 into l_party_type;
85 		close c1;
86         elsif p_parent_table_name = 'HZ_CONTACT_POINTS'
87         then
88                 open c_cp;
89                 fetch c_cp into l_party_type;
90                 close c_cp;
91 	elsif p_parent_table_name = 'HZ_CUST_ACCOUNTS'
92 	then
93 		open c2;
94 		fetch c2 into l_party_type;
95 		close c2;
96 	end if;
97 
98     -- Base on owner_table_name to return HZ_BUSINESS_OBJECTS lookup code
99     IF(p_parent_table_name = 'HZ_PARTY_SITES') THEN
100       RETURN 'PARTY_SITE';
101     ELSIF(p_parent_table_name = 'HZ_PARTIES') THEN
102       IF(l_party_type = 'ORGANIZATION') THEN
103         RETURN 'ORG';
104       ELSIF(l_party_type = 'PERSON') THEN
105         RETURN 'PERSON';
106       ELSIF(l_party_type = 'PARTY_RELATIONSHIP') THEN
107         RETURN 'ORG_CONTACT';
108       END IF;
109     ELSIF(p_parent_table_name = 'HZ_CONTACT_POINTS') THEN
110       RETURN l_party_type;
111     ELSIF(p_parent_table_name = 'HZ_CUST_ACCOUNTS') THEN
112       IF(l_party_type = 'ORGANIZATION') THEN
113         RETURN 'ORG_CUST';
114       ELSIF(l_party_type = 'PERSON') THEN
115         RETURN 'PERSON_CUST';
116       ELSIF(l_party_type IS NULL) THEN
117         RETURN 'CUST_ACCT';
118       END IF;
119     ELSIF(p_parent_table_name = 'HZ_CUST_ACCOUNT_ROLES') THEN
120       RETURN 'CUST_ACCT_CONTACT';
121     ELSIF(p_parent_table_name = 'HZ_CUST_ACCT_SITES_ALL') THEN
122       RETURN 'CUST_ACCT_SITE';
123     END IF;
124     RETURN NULL;
125 END get_parent_object_type;
126 
127 FUNCTION get_user_name(p_user_id in number) return varchar2 is
128 	cursor get_user_name_csr is
129 		select user_name
130 		from fnd_user
131 		where user_id = p_user_id;
132 
133 l_name varchar2(100);
134 begin
135 	open  get_user_name_csr;
136 	fetch  get_user_name_csr into l_name;
137 	close  get_user_name_csr;
138 	return l_name;
139 end;
140 
141 
142 -- Central procedure for getting root event id.
143 
144 procedure get_bo_root_ids(
145     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
146     p_event_id            IN           	NUMBER,
147     x_obj_root_ids        OUT NOCOPY    BO_ID_TBL,
148     x_return_status       OUT NOCOPY    VARCHAR2,
149     x_msg_count           OUT NOCOPY    NUMBER,
150     x_msg_data            OUT NOCOPY    VARCHAR2
151   ) is
152 l_debug_prefix              VARCHAR2(30) := '';
153 
154 cursor c1 is
155 	 SELECT child_id
156 	 FROM HZ_BUS_OBJ_TRACKING
157 	 WHERE parent_bo_code is null
158 	 and event_id = p_event_id
159 	 and  child_entity_name = 'HZ_PARTIES';
160 
161 begin
162 	-- initialize API return status to success.
163     	x_return_status := FND_API.G_RET_STS_SUCCESS;
164 
165     	-- Initialize message list if p_init_msg_list is set to TRUE
166     	IF FND_API.to_Boolean(p_init_msg_list) THEN
167       		FND_MSG_PUB.initialize;
168     	END IF;
169 
170 
171 	-- Debug info.
172         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
173         	hz_utility_v2pub.debug(p_message=>'get_bo_root_ids(+)',
174                                p_prefix=>l_debug_prefix,
175                                p_msg_level=>fnd_log.level_procedure);
176     	END IF;
177 
178 
179 	open c1;
180 	fetch c1 bulk collect into x_obj_root_ids;
181 	close c1;
182 
183 	-- Debug info.
184     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
185          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
186                                p_msg_data=>x_msg_data,
187                                p_msg_type=>'WARNING',
188                                p_msg_level=>fnd_log.level_exception);
189     	END IF;
190 
191     	-- Debug info.
192         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
193         	hz_utility_v2pub.debug(p_message=>'get_bo_root_ids (-)',
194                                p_prefix=>l_debug_prefix,
195                                p_msg_level=>fnd_log.level_procedure);
196     	END IF;
197 
198 
199  EXCEPTION
200 
201   WHEN fnd_api.g_exc_error THEN
202       x_return_status := fnd_api.g_ret_sts_error;
203 
204       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
205                                 p_count => x_msg_count,
206                                 p_data  => x_msg_data);
207 
208       -- Debug info.
209       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
210         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
211                                p_msg_data=>x_msg_data,
212                                p_msg_type=>'ERROR',
213                                p_msg_level=>fnd_log.level_error);
214       END IF;
215       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
216         hz_utility_v2pub.debug(p_message=>'get_bo_root_ids(-)',
217                                p_prefix=>l_debug_prefix,
218                                p_msg_level=>fnd_log.level_procedure);
219       END IF;
220     WHEN fnd_api.g_exc_unexpected_error THEN
221       x_return_status := fnd_api.g_ret_sts_unexp_error;
222 
223       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
224                                 p_count => x_msg_count,
225                                 p_data  => x_msg_data);
226 
227       -- Debug info.
228       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
229         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
230                                p_msg_data=>x_msg_data,
231                                p_msg_type=>'UNEXPECTED ERROR',
232                                p_msg_level=>fnd_log.level_error);
233       END IF;
234       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
235         hz_utility_v2pub.debug(p_message=>'get_bo_root_ids(-)',
236                                p_prefix=>l_debug_prefix,
237                                p_msg_level=>fnd_log.level_procedure);
238       END IF;
239     WHEN OTHERS THEN
240       x_return_status := fnd_api.g_ret_sts_unexp_error;
241 
242       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
243       fnd_message.set_token('ERROR' ,SQLERRM);
244       fnd_msg_pub.add;
245 
246       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
247                                 p_count => x_msg_count,
248                                 p_data  => x_msg_data);
249 
250       -- Debug info.
251       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
252         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
253                                p_msg_data=>x_msg_data,
254                                p_msg_type=>'SQL ERROR',
255                                p_msg_level=>fnd_log.level_error);
256       END IF;
257       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
258         hz_utility_v2pub.debug(p_message=>'get_bo_root_ids(-)',
259                                p_prefix=>l_debug_prefix,
260                                p_msg_level=>fnd_log.level_procedure);
261       END IF;
262 
263 end;
264 
265  FUNCTION is_ss_provided(
266     p_os                  IN     VARCHAR2,
267     p_osr                 IN     VARCHAR2
268   ) RETURN VARCHAR2 IS
269   BEGIN
270     IF((p_os is null or p_os = fnd_api.g_miss_char)
271       and (p_osr is null or p_osr = fnd_api.g_miss_char))THEN
272       RETURN 'N';
273     ELSE
274       RETURN 'Y';
275     END IF;
276   END is_ss_provided;
277 
278 PROCEDURE validate_ssm_id(
279     px_id                        IN OUT NOCOPY NUMBER,
280     px_os                        IN OUT NOCOPY VARCHAR2,
281     px_osr                       IN OUT NOCOPY VARCHAR2,
282     p_org_id                     IN            NUMBER := NULL,
283     p_obj_type                   IN            VARCHAR2,
284     x_return_status              OUT NOCOPY    VARCHAR2,
285     x_msg_count                  OUT NOCOPY    NUMBER,
286     x_msg_data                   OUT NOCOPY    VARCHAR2
287   ) IS
288     CURSOR is_cp_valid(l_cp_id NUMBER, l_cp_type VARCHAR2) IS
289     SELECT 'X'
290     FROM HZ_CONTACT_POINTS
291     WHERE contact_point_id = l_cp_id
292     AND contact_point_type = l_cp_type;
293 
294     CURSOR is_oc_valid(l_oc_id NUMBER) IS
295     SELECT 'X'
296     FROM HZ_ORG_CONTACTS
297     WHERE org_contact_id = l_oc_id;
298 
299     CURSOR is_pty_valid(l_pty_id NUMBER, l_pty_type VARCHAR2) IS
300     SELECT 'X'
301     FROM HZ_PARTIES
302     WHERE party_id = l_pty_id
303     AND party_type = l_pty_type
304     AND status in ('A', 'I');
305 
306     CURSOR is_ps_valid(l_ps_id NUMBER) IS
307     SELECT 'X'
308     FROM HZ_PARTY_SITES
309     WHERE party_site_id = l_ps_id;
310 
311     CURSOR is_loc_valid(l_loc_id NUMBER) IS
312     SELECT 'X'
313     FROM HZ_LOCATIONS
314     WHERE location_id = l_loc_id;
315 
316     CURSOR is_cr_valid(l_cr_id NUMBER) IS
317     SELECT 'X'
318     FROM HZ_CUST_ACCOUNT_ROLES
319     WHERE cust_account_role_id = l_cr_id;
320 
321     CURSOR is_ca_valid(l_ca_id NUMBER) IS
322     SELECT 'X'
323     FROM HZ_CUST_ACCOUNTS
324     WHERE cust_account_id = l_ca_id;
325 
326     CURSOR is_cas_valid(l_cas_id NUMBER, l_org_id NUMBER) IS
327     SELECT 'X'
328     FROM HZ_CUST_ACCT_SITES
329     WHERE cust_acct_site_id = l_cas_id;
330 
331     CURSOR is_casu_valid(l_casu_id NUMBER, l_org_id NUMBER) IS
332     SELECT 'X'
333     FROM HZ_CUST_SITE_USES
334     WHERE site_use_id = l_casu_id;
335 
336     l_owner_table_id            NUMBER;
337     l_ss_flag                   VARCHAR2(1);
338     l_debug_prefix              VARCHAR2(30);
339     l_valid_id                  VARCHAR2(1);
340     l_count                     NUMBER;
341     l_org_id                    NUMBER;
342     l_dummy                     VARCHAR2(1);
343     l_obj_type                  VARCHAR2(30);
344   BEGIN
345     -- Debug info.
346     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
347         hz_utility_v2pub.debug(p_message=>'validate_ssm_id(+)',
348                                p_prefix=>l_debug_prefix,
349                                p_msg_level=>fnd_log.level_procedure);
350     END IF;
351 
352     x_return_status := FND_API.G_RET_STS_SUCCESS;
353 
354     l_ss_flag := is_ss_provided(p_os  => px_os,
355                                 p_osr => px_osr);
356 
357     -- if px_id pass in, check if px_id is valid or not
358     IF(px_id IS NOT NULL) THEN
359 
360       IF(p_obj_type in ('PHONE','TLX','EMAIL','WEB','EFT','EDI','SMS')) THEN
361         OPEN is_cp_valid(px_id, p_obj_type);
362         FETCH is_cp_valid INTO l_valid_id;
363         CLOSE is_cp_valid;
364       ELSIF(p_obj_type = 'HZ_ORG_CONTACTS') THEN
365         OPEN is_oc_valid(px_id);
366         FETCH is_oc_valid INTO l_valid_id;
367         CLOSE is_oc_valid;
368       ELSIF(p_obj_type in ('PERSON','ORGANIZATION','PARTY_RELATIONSHIP')) THEN
369         OPEN is_pty_valid(px_id, p_obj_type);
370         FETCH is_pty_valid INTO l_valid_id;
371         CLOSE is_pty_valid;
372       ELSIF(p_obj_type = 'HZ_CUST_ACCOUNT_ROLES') THEN
373         OPEN is_cr_valid(px_id);
374         FETCH is_cr_valid INTO l_valid_id;
375         CLOSE is_cr_valid;
376       ELSIF(p_obj_type = 'HZ_LOCATIONS') THEN
377         OPEN is_loc_valid(px_id);
378         FETCH is_loc_valid INTO l_valid_id;
379         CLOSE is_loc_valid;
380       ELSIF(p_obj_type = 'HZ_PARTY_SITES') THEN
381         OPEN is_ps_valid(px_id);
382         FETCH is_ps_valid INTO l_valid_id;
383         CLOSE is_ps_valid;
384       ELSIF(p_obj_type = 'HZ_CUST_ACCOUNTS') THEN
385         OPEN is_ca_valid(px_id);
386         FETCH is_ca_valid INTO l_valid_id;
387         CLOSE is_ca_valid;
388       ELSIF(p_obj_type = 'HZ_CUST_ACCT_SITES_ALL') THEN
389         OPEN is_cas_valid(px_id, p_org_id);
390         FETCH is_cas_valid INTO l_valid_id;
391         CLOSE is_cas_valid;
392       ELSIF(p_obj_type = 'HZ_CUST_SITE_USES_ALL') THEN
393         OPEN is_casu_valid(px_id, p_org_id);
394         FETCH is_casu_valid INTO l_valid_id;
395         CLOSE is_casu_valid;
396       END IF;
397     END IF;
398 
399 
400     -- if px_os/px_osr pass in, get owner_table_id and set l_ss_flag to 'Y'
401     IF(l_ss_flag = 'Y')THEN
402       IF(p_obj_type in ('PHONE','TLX','EMAIL','WEB','EFT','EDI','SMS')) THEN
403         l_obj_type := 'HZ_CONTACT_POINTS';
404       ELSIF(p_obj_type in ('PERSON','ORGANIZATION','PARTY_RELATIONSHIP')) THEN
405         l_obj_type := 'HZ_PARTIES';
406       ELSE
407         l_obj_type := p_obj_type;
408       END IF;
409 
410 
411       -- Get how many rows return
412       l_count := HZ_MOSR_VALIDATE_PKG.get_orig_system_ref_count(
413                    p_orig_system           => px_os,
414                    p_orig_system_reference => px_osr,
415                    p_owner_table_name      => l_obj_type);
416 
417       IF(l_count = 1) THEN
418         -- Get owner_table_id
419         HZ_ORIG_SYSTEM_REF_PUB.get_owner_table_id(
420           p_orig_system           => px_os,
421           p_orig_system_reference => px_osr,
422           p_owner_table_name      => l_obj_type,
423           x_owner_table_id        => l_owner_table_id,
424           x_return_status         => x_return_status);
425 
426         -- For contact point, check if the id and type is the same
427         IF(p_obj_type in ('PHONE','TLX','EMAIL','WEB','EFT','EDI','SMS')) THEN
428           OPEN is_cp_valid(l_owner_table_id, p_obj_type);
429           FETCH is_cp_valid INTO l_dummy;
430           CLOSE is_cp_valid;
431           IF(l_dummy IS NULL) THEN
432             FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_TCA_ID');
433             FND_MSG_PUB.ADD;
434             RAISE fnd_api.g_exc_error;
435           END IF;
436         END IF;
437       END IF;
438     END IF;
439 
440       -- if px_id pass in
441       IF(px_id IS NOT NULL) THEN
442         -- if px_id is invalid, raise error
443         IF(l_valid_id IS NULL) THEN
444           FND_MESSAGE.SET_NAME('AR','HZ_API_INVALID_TCA_ID');
445           FND_MSG_PUB.ADD();
446           RAISE fnd_api.g_exc_error;
447         -- if px_id is valid
448         ELSE
449           -- check if px_os/px_osr is passed
450           IF(l_ss_flag = 'Y') THEN
451             IF(l_count = 0) THEN
452               FND_MESSAGE.SET_NAME('AR','HZ_API_INVALID_SSM_ID');
453               FND_MSG_PUB.ADD();
454               RAISE fnd_api.g_exc_error;
455             -- if px_os/px_osr is valid
456             ELSE
457               -- if px_os/px_osr is valid, but not same as px_id
458               IF(l_owner_table_id <> px_id) OR (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
459                 FND_MESSAGE.SET_NAME('AR','HZ_API_INVALID_TCA_SSM_ID');
460                 FND_MSG_PUB.ADD();
461                 RAISE fnd_api.g_exc_error;
462               END IF;
463             END IF;
464             -- if px_os/px_osr is valid and return value is same as px_id
465             -- do nothing
466           END IF;
467         END IF;
468       -- if px_id not pass in
469       ELSE
470         -- check if px_os/px_osr can find TCA identifier, owner_table_id
471         -- if not found, raise error
472         -- else, get owner_table_id and assign it to px_id
473         IF(l_ss_flag = 'Y') AND (l_count = 1) AND (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
474           px_id := l_owner_table_id;
475         ELSE
476           FND_MESSAGE.SET_NAME('AR','HZ_API_INVALID_SSM_ID');
477           FND_MSG_PUB.ADD();
478           RAISE fnd_api.g_exc_error;
479         END IF;
480       END IF;
481 
482   EXCEPTION
483     WHEN fnd_api.g_exc_error THEN
484       x_return_status := fnd_api.g_ret_sts_error;
485 
486       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
487                                 p_count => x_msg_count,
488                                 p_data  => x_msg_data);
489 
490       -- Debug info.
491       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
492         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
493                                p_msg_data=>x_msg_data,
494                                p_msg_type=>'ERROR',
495                                p_msg_level=>fnd_log.level_error);
496       END IF;
497       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
498         hz_utility_v2pub.debug(p_message=>'validate_ssm_id(-)',
499                                p_prefix=>l_debug_prefix,
500                                p_msg_level=>fnd_log.level_procedure);
501       END IF;
502     WHEN fnd_api.g_exc_unexpected_error THEN
503       x_return_status := fnd_api.g_ret_sts_unexp_error;
504 
505       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
506                                 p_count => x_msg_count,
507                                 p_data  => x_msg_data);
508 
509       -- Debug info.
510       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
511         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
512                                p_msg_data=>x_msg_data,
513                                p_msg_type=>'UNEXPECTED ERROR',
514                                p_msg_level=>fnd_log.level_error);
515       END IF;
516       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
517         hz_utility_v2pub.debug(p_message=>'validate_ssm_id(-)',
518                                p_prefix=>l_debug_prefix,
519                                p_msg_level=>fnd_log.level_procedure);
520       END IF;
521     WHEN OTHERS THEN
522       x_return_status := fnd_api.g_ret_sts_unexp_error;
523 
524       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
525       fnd_message.set_token('ERROR' ,SQLERRM);
526       fnd_msg_pub.add;
527 
528       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
529                                 p_count => x_msg_count,
530                                 p_data  => x_msg_data);
531 
532       -- Debug info.
533       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
534         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
535                                p_msg_data=>x_msg_data,
536                                p_msg_type=>'SQL ERROR',
537                                p_msg_level=>fnd_log.level_error);
538       END IF;
539       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
540         hz_utility_v2pub.debug(p_message=>'validate_ssm_id(-)',
541                                p_prefix=>l_debug_prefix,
542                                p_msg_level=>fnd_log.level_procedure);
543       END IF;
544   END validate_ssm_id;
545 
546 
547 END HZ_EXTRACT_BO_UTIL_PVT;