DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_UI_UTIL_PKG

Source


1 PACKAGE BODY HZ_UI_UTIL_PKG AS
2 /* $Header: ARHPUISB.pls 120.19 2006/05/24 13:28:17 idali noship $ */
3 
4 -------------------------------------
5 -- CHECK_ENTITY_CREATION - Signature
6 -------------------------------------
7 
8 PROCEDURE check_entity_creation (
9    p_entity_name        IN VARCHAR2,  -- table name
10    p_data_source        IN VARCHAR2,  -- if applicable
11    p_party_id           IN NUMBER,    -- only pass if available
12    p_parent_entity_name IN VARCHAR2,  -- if applicable
13    p_parent_entity_pk1  IN VARCHAR2,  -- if applicable
14    p_parent_entity_pk2  IN VARCHAR2,  -- if applicable
15    p_function_name      IN VARCHAR2,  -- FND function name
16    x_create_flag        OUT NOCOPY VARCHAR2  -- can we create?
17 ) IS
18   l_entity_attr_id NUMBER;
19   l_return_status  VARCHAR2(1);
20 BEGIN
21 
22   /*
23    *  Call the Third Party Data Integration routine to see if the user can
24    *  create instances of the entity.
25    */
26 
27   IF p_entity_name IN ('HZ_ORGANIZATION_PROFILES','HZ_PERSON_PROFILES') THEN
28     x_create_flag := 'Y';
29   ELSE
30     HZ_MIXNM_UTILITY.CheckUserCreationPrivilege(
31       p_entity_name           => p_entity_name,
32       p_entity_attr_id        => l_entity_attr_id,
33       p_mixnmatch_enabled     => NULL,
34       p_actual_content_source => 'USER_ENTERED',
35       x_return_status         => l_return_status
36     );
37 
38     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
39       x_create_flag := 'N';
40     ELSE
41       x_create_flag := 'Y';
42     END IF;
43   END IF;
44 
45 EXCEPTION
46   WHEN OTHERS THEN
47     x_create_flag := 'N';
48 END check_entity_creation;
49 
50 -------------------------------------
51 -- GET_VIEW_PREDICATE
52 -------------------------------------
53 
54 FUNCTION get_view_predicate (
55   p_entity_name       IN VARCHAR2,  -- entity/table you wish to filter
56   p_entity_alias      IN VARCHAR2,  -- alias for entity as used in SELECT
57   p_function_name     IN VARCHAR2   -- FND function name
58 ) RETURN VARCHAR2
59 IS
60   l_alias  VARCHAR2(30);
61 BEGIN
62 
63   IF p_entity_name = 'HZ_PARTIES' THEN
64     IF p_entity_alias IS NOT NULL THEN
65       l_alias := p_entity_alias;
66     ELSE
67       l_alias := p_entity_name;
68     END IF;
69 
70     RETURN ' (' || l_alias || '.' || 'ORIG_SYSTEM_REF NOT LIKE ''PER%'') ';
71 
72   ELSE
73     RETURN ' (1=1) ';
74   END IF;
75 END get_view_predicate;
76 
77 
78 -------------------------------------
79 -- CHECK_ROW_ACCESS
80 -------------------------------------
81 
82 /*
83 PROCEDURE check_row_access (
84    p_entity_name      IN VARCHAR2,               -- table name
85    p_data_source      IN VARCHAR2 DEFAULT NULL,  -- if applicable
86    p_entity_pk1       IN VARCHAR2,               -- primary key
87    p_entity_pk2       IN VARCHAR2 DEFAULT NULL,  -- primary key pt. 2
88    p_party_id         IN NUMBER   DEFAULT NULL,  -- only pass if available
89    x_viewable_flag    OUT NOCOPY VARCHAR2,       -- can we see it?
90    x_updateable_flag  OUT NOCOPY VARCHAR2,       -- can we mess with it?
91    x_deleteable_flag  OUT NOCOPY VARCHAR2        -- can we get rid of it?
92 ) IS
93 BEGIN
94 
95   --
96   -- This is for those cases where the caller wants to check all the access
97   -- at once.  Merely a wrapper for the individual operation-level checks.
98   --
99 
100   -- Check view access
101 
102   x_viewable_flag := check_row_viewable (
103      p_entity_name      => p_entity_name,
104      p_data_source      => p_data_source,
105      p_entity_pk1       => p_entity_pk1,
106      p_entity_pk2       => p_entity_pk2,
107      p_party_id         => p_party_id
108   );
109 
110   -- Check update access
111 
112   x_updateable_flag := check_row_updateable (
113      p_entity_name      => p_entity_name,
114      p_data_source      => p_data_source,
115      p_entity_pk1       => p_entity_pk1,
116      p_entity_pk2       => p_entity_pk2,
117      p_party_id         => p_party_id
118   );
119 
120   -- Check delete access
121 
122   x_deleteable_flag := check_row_deleteable (
123      p_entity_name      => p_entity_name,
124      p_data_source      => p_data_source,
125      p_entity_pk1       => p_entity_pk1,
126      p_entity_pk2       => p_entity_pk2,
127      p_party_id         => p_party_id
128   );
129 
130 END check_row_access;
131 */
132 
133 -- "Pure" Function versions, that can be used directly in SELECT statements
134 
135 FUNCTION check_row_viewable (
136    p_entity_name      IN VARCHAR2, -- table name
137    p_data_source      IN VARCHAR2, -- if applicable
138    p_entity_pk1       IN VARCHAR2, -- primary key
139    p_entity_pk2       IN VARCHAR2, -- primary key pt. 2
140    p_party_id         IN NUMBER,   -- only pass if available
141    p_function_name    IN VARCHAR2  -- FND function name
142 ) RETURN VARCHAR2  -- "Y" or "N" if we can view the row
143 IS
144   l_viewable_flag   VARCHAR2(1);
145   l_return_status   VARCHAR2(1);
146   l_msg_count       NUMBER;
147   l_msg_data        VARCHAR2(2000);
148 BEGIN
149   /*
150    *  Call the Data Sharing and Security API to check DSS security rules.
151    *  The DSS function returns "T" or "F".
152    */
153 
154   l_viewable_flag := HZ_DSS_UTIL_PUB.TEST_INSTANCE (
155     p_operation_code       => 'SELECT',
156     p_db_object_name       => p_entity_name,
157     p_instance_pk1_value   => p_entity_pk1,
158     p_instance_pk2_value   => p_entity_pk2,
159     x_return_status        => l_return_status,
160     x_msg_count            => l_msg_count,
161     x_msg_data             => l_msg_data
162   );
163 
164   -- Default security to N if API fails
165   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
166     l_viewable_flag := 'N';
167   ELSIF l_viewable_flag = 'T' THEN -- Will return FND_API.G_TRUE from HZ_DSS_UTIL_PUB
168     l_viewable_flag := 'Y';
169   ELSE
170     l_viewable_flag := 'N';
171   END IF;
172 
173   RETURN l_viewable_flag;
174 
175 EXCEPTION
176   WHEN OTHERS THEN
177     RETURN 'N';
178 END check_row_viewable;
179 
180 
181 
182 
183 FUNCTION check_row_updateable (
184    p_entity_name      IN VARCHAR2, -- table name
185    p_data_source      IN VARCHAR2, -- if applicable
186    p_entity_pk1       IN VARCHAR2, -- primary key
187    p_entity_pk2       IN VARCHAR2, -- primary key pt. 2
188    p_party_id         IN NUMBER,   -- only pass if available
189    p_function_name    IN VARCHAR2  -- FND function name
190 ) RETURN VARCHAR2  -- "Y" or "N" if we can update the row
191 IS
192   l_updateable_flag VARCHAR2(1) := 'N';
193   l_return_status   VARCHAR2(1);
194   l_msg_count       NUMBER;
195   l_msg_data        VARCHAR2(2000);
196 BEGIN
197   /*
198    *  Special code added to support MOSR update functionality BASED ON PROFILE
199    */
200   IF p_entity_name = 'HZ_ORIG_SYS_REFERENCES' THEN
201     IF HZ_UTILITY_V2PUB.is_purchased_content_source(p_data_source) = 'Y' THEN
202         l_updateable_flag := 'N';
203     ELSE
204        IF NVL(FND_PROFILE.value('HZ_SSM_VIEW_UPDATE_STATE'), 'VIEW_ONLY') = 'CREATE_AND_UPDATE' THEN
205           l_updateable_flag := 'Y';
206        END IF;
207     END IF;
208     return l_updateable_flag;
209   END IF;
210 
211   /*
212    *  Call the Data Sharing and Security API to check DSS security rules.
213    *  The DSS function returns "T" or "F".
214    */
215 
216   l_updateable_flag := HZ_DSS_UTIL_PUB.TEST_INSTANCE (
217     p_operation_code       => 'UPDATE',
218     p_db_object_name       => p_entity_name,
219     p_instance_pk1_value   => p_entity_pk1,
220     p_instance_pk2_value   => p_entity_pk2,
221     p_user_name            => FND_GLOBAL.User_Name,
222     x_return_status        => l_return_status,
223     x_msg_count            => l_msg_count,
224     x_msg_data             => l_msg_data
225   );
226 
227   -- Default security to N if API fails
228   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
229     l_updateable_flag := 'N';
230   ELSIF l_updateable_flag = 'T' THEN -- Will return FND_API.G_TRUE from HZ_DSS_UTIL_PUB
231     l_updateable_flag := 'Y';
232   ELSE
233     l_updateable_flag := 'N';
234   END IF;
235 
236   -- If DSS check fails,then no need to check any further security.
237 
238   IF l_updateable_flag = 'N' THEN
239     RETURN l_updateable_flag;
240   END IF;
241 
242   /*
243    *  Call the Third Party Data Integration security rules.
244    */
245 -- Bug 4203937 : check Mix-N-Match security only for
246 -- other entities supported by Mix-N-Match
247 /* Bug 4693719 : Do not call CheckUserUpdatePrivilege from CPUI
248  * CPUI should display update enabled icon in the UI so that
249  * primary_flag, start_date, status etc columns can be updated.
250  * Error will be raised from API if the rules are violated
251  *
252 If p_entity_name in ('HZ_RELATIONSHIPS', 'HZ_CODE_ASSIGNMENTS',
253 'HZ_CONTACT_POINTS', 'HZ_CREDIT_RATINGS', 'HZ_FINANCIAL_REPORTS',
254 'HZ_LOCATIONS', 'HZ_PARTY_SITES', 'HZ_FINANCIAL_NUMBERS') then
255 
256   HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege (
257     p_actual_content_source         => p_data_source,
258     p_new_actual_content_source         => 'USER_ENTERED',
259     p_entity_name =>  p_entity_name,
260     x_return_status                 => l_return_status
261   );
262 
263   IF l_return_status = FND_API.G_RET_STS_ERROR THEN
264     l_updateable_flag := 'N';
265   ELSE
266     l_updateable_flag := 'Y';
267   END IF;
268 end if;
269 */
270   RETURN l_updateable_flag;
271 
272 EXCEPTION
273   WHEN OTHERS THEN
274     RETURN 'N';
275 END check_row_updateable;
276 
277 
278 
279 FUNCTION check_row_deleteable (
280    p_entity_name      IN VARCHAR2,  -- table name
281    p_data_source      IN VARCHAR2,  -- if applicable
282    p_entity_pk1       IN VARCHAR2,  -- primary key
283    p_entity_pk2       IN VARCHAR2,  -- primary key pt. 2
284    p_party_id         IN NUMBER,    -- only pass if available
285    p_function_name    IN VARCHAR2   -- FND function name
286 ) RETURN VARCHAR2  -- "Y" or "N" if we can delete the row
287 IS
288   l_deleteable_flag VARCHAR2(1) := 'N';
289   l_return_status   VARCHAR2(1);
290   l_msg_count       NUMBER;
291   l_msg_data        VARCHAR2(2000);
292 BEGIN
293   /*
294    *  Special code added to support MOSR update functionality BASED ON PROFILE
295    */
296   IF p_entity_name = 'HZ_ORIG_SYS_REFERENCES' THEN
297      IF NVL(FND_PROFILE.value('HZ_SSM_VIEW_UPDATE_STATE'), 'VIEW_ONLY') = 'CREATE_AND_UPDATE' THEN
298          l_deleteable_flag := 'Y';
299      END IF;
300      return l_deleteable_flag;
301   END IF;
302 
303   /*
304    *  Call the Data Sharing and Security API to check DSS security rules.
305    *  The DSS function returns "T" or "F".
306    */
307 
308   l_deleteable_flag := HZ_DSS_UTIL_PUB.TEST_INSTANCE (
309     p_operation_code       => 'DELETE',
310     p_db_object_name       => p_entity_name,
311     p_instance_pk1_value   => p_entity_pk1,
312     p_instance_pk2_value   => p_entity_pk2,
313     p_user_name            => FND_GLOBAL.User_Name,
314     x_return_status        => l_return_status,
315     x_msg_count            => l_msg_count,
316     x_msg_data             => l_msg_data
317   );
318 
319   -- Default security to N if API fails
320   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
321     l_deleteable_flag := 'N';
322   ELSIF l_deleteable_flag = 'T' THEN -- Will return FND_API.G_TRUE from HZ_DSS_UTIL_PUB
323     l_deleteable_flag := 'Y';
324   ELSE
325     l_deleteable_flag := 'N';
326   END IF;
327 
328   RETURN l_deleteable_flag;
329 
330 EXCEPTION
331   WHEN OTHERS THEN
332     RETURN 'N';
333 END check_row_deleteable;
334 
335 -------------------------------------
336 -- CHECK_COLUMNS
337 -------------------------------------
338 
339 
340 PROCEDURE check_columns(
341   p_entity_name     IN VARCHAR2, -- table name
342   p_data_source     IN VARCHAR2, -- if applicable
343   p_entity_pk1      IN VARCHAR2, -- primary key
344   p_entity_pk2      IN VARCHAR2, -- primary key pt. 2
345   p_party_id        IN NUMBER ,  -- only pass if available
346   p_function_name   IN VARCHAR2, -- function name
347   p_attribute_list  IN          HZ_MIXNM_UTILITY.INDEXVARCHAR30List, -- pl/sql table of attribute names
348   p_value_is_null_list IN       HZ_MIXNM_UTILITY.INDEXVARCHAR1List,  -- pl/sql table of flags
349   x_viewable_list   OUT NOCOPY  HZ_MIXNM_UTILITY.INDEXVARCHAR1List,  -- pl/sql table of flags
350   x_updateable_list OUT NOCOPY  HZ_MIXNM_UTILITY.INDEXVARCHAR1List   -- pl/sql table of flags
351 ) IS
352   l_return_status VARCHAR2(1);
353   i               NUMBER;
354 BEGIN
355 
356   /*
357    * Call the Third Party Data Integration column checking routine.
358    */
359 
360    HZ_MIXNM_UTILITY.areSSTColumnsUpdeable (
361      p_party_id                 => p_party_id,
362      p_entity_name              => p_entity_name,
363      p_attribute_name_list      => p_attribute_list,
364      p_value_is_null_list       => p_value_is_null_list,
365      p_data_source_type         => p_data_source,
366      x_updatable_flag_list      => x_updateable_list,
367      x_return_status            => l_return_status
368    );
369 
370    IF l_return_status = FND_API.G_RET_STS_ERROR THEN
371       FOR i IN p_attribute_list.FIRST .. p_attribute_list.LAST
372       LOOP
373         x_updateable_list(i) := 'N';
374       END LOOP;
375    END IF;
376 
377   /*
378    * We do not currently have view security at the attribute level, so
379    * all attributes are viewable.
380    */
381 
382   FOR i IN p_attribute_list.FIRST .. p_attribute_list.LAST
383   LOOP
384     x_viewable_list(i) := 'Y';
385   END LOOP;
386 
387 END check_columns;
388 
389 /**
390  * PROCEDURE get_value
391  *
392  * DESCRIPTION
393  *    used by common party UI .
394  *    will return various value
395  * ARGUMENTS
396  *   IN:
397  *     p_org_contact_id          org contact id. If passed in, will return
398  *                               org contact roles.
399  *     p_phone_country_code      phone country code
400  *     p_phone_area_code         phone area_code
401  *     p_phone_number            phone number. If passed in, will return
402  *                               formatted phone number.
403  *     p_phone_extension         phone extension.
404  *     p_phone_line_type         phone_line_type
405  *     p_location_id             location id. If passed in, will return
406  *                               formatted address.
407  *     p_cust_acct_id            Cust account ID, returns the formatted bill_to address
408  *     p_cust_acct_site_id       Cust account site ID, returns the formatted bill_to address
409  */
410 
411  PROCEDURE get_value (
412      p_org_contact_id              IN     VARCHAR2,
413      p_phone_country_code          IN     VARCHAR2,
414      p_phone_area_code             IN     VARCHAR2,
415      p_phone_number                IN     VARCHAR2,
416      p_phone_extension             IN     VARCHAR2,
417      p_phone_line_type             IN     VARCHAR2,
418      p_location_id                 IN     VARCHAR2,
419      x_org_contact_roles           OUT    NOCOPY VARCHAR2,
420      x_formatted_phone             OUT    NOCOPY VARCHAR2,
421      x_formatted_address           OUT    NOCOPY VARCHAR2,
422      p_act_cont_role_id            IN     VARCHAR2,
423      x_act_contact_roles           OUT    NOCOPY VARCHAR2,
424      p_primary_phone_contact_pt_id IN     NUMBER,
425      x_has_contact_restriction     OUT    NOCOPY VARCHAR2,
426      p_relationship_type_id        IN     NUMBER,
427      p_relationship_group_code     IN     VARCHAR2,
428      x_is_in_relationship_group    OUT    NOCOPY VARCHAR2,
429      p_cust_acct_id                IN     VARCHAR2,
430      x_billto_address              OUT    NOCOPY VARCHAR2,
431      p_cust_acct_site_id           IN     VARCHAR2
432  ) IS
433 
434  BEGIN
435 
436      IF p_cust_acct_id IS NOT NULL  THEN
437      BEGIN
438       SELECT hz_format_pub.format_address ( hps.LOCATION_ID , null , null ,' , ' , null , null , null , null )
439              INTO x_billto_address
440              FROM HZ_PARTY_SITES hps , HZ_CUST_ACCT_SITES_ALL hcas
441              WHERE hcas.BILL_TO_FLAG='P'
442              AND hcas.CUST_ACCOUNT_ID = p_cust_acct_id
443              AND hcas.PARTY_SITE_ID = hps.PARTY_SITE_ID;
444       EXCEPTION
445          WHEN OTHERS THEN
446              x_billto_address:=NULL;
447      END;
448      END IF;
449 
450      IF p_org_contact_id IS NOT NULL THEN
451        x_org_contact_roles := hz_utility_v2pub.get_org_contact_role(p_org_contact_id);
452      END IF;
453 
454      IF p_phone_number IS NOT NULL THEN
455        x_formatted_phone :=
456          hz_format_phone_v2pub.get_formatted_phone (
457            p_phone_country_code, p_phone_area_code, p_phone_number,
458            p_phone_extension, p_phone_line_type);
459      END IF;
460 
461      IF p_location_id IS NOT NULL THEN
462        x_formatted_address :=
463          hz_format_pub.format_address(p_location_id, null, null, ', ');
464      END IF;
465 
466      IF p_act_cont_role_id IS NOT NULL THEN
467        x_act_contact_roles := hz_act_util_pub.get_act_contact_roles(p_act_cont_role_id);
468      END IF;
469 
470      IF p_primary_phone_contact_pt_id IS NOT NULL THEN
471        x_has_contact_restriction :=
472                hz_utility_v2pub.is_restriction_exist(
473                       'HZ_CONTACT_POINTS',
474                       p_primary_phone_contact_pt_id,
475                       'DO_NOT');
476      END IF;
477 
478      IF p_relationship_type_id IS NOT NULL AND
479         p_relationship_group_code IS NOT NULL
480      THEN
481        x_is_in_relationship_group :=
482                hz_utility_v2pub.is_role_in_relationship_group(
483                       p_relationship_type_id,
484                       p_relationship_group_code);
485      END IF;
486 
487      IF p_cust_acct_site_id IS NOT NULL
488      THEN
489        BEGIN
490         SELECT HZ_FORMAT_PUB.format_address(party_site.location_id, null, null, ', ')
491                ||decode(acct.PARTY_ID,
492                    party_site.PARTY_ID,'',
493                    ' ('||(select party.PARTY_NAME
494                           from HZ_PARTIES party, HZ_RELATIONSHIPS reln
495                           where party_site.PARTY_ID = reln.PARTY_ID
496                           AND reln.SUBJECT_TYPE = 'PERSON'
497                           AND reln.SUBJECT_ID = party.PARTY_ID)||')')
498           INTO x_formatted_address
499           FROM HZ_CUST_ACCT_SITES_ALL site,
500                HZ_CUST_ACCOUNTS acct,
501                HZ_PARTY_SITES party_site
502          WHERE site.CUST_ACCT_SITE_ID = p_cust_acct_site_id
503            AND party_site.PARTY_SITE_ID = site.PARTY_SITE_ID
504            AND acct.CUST_ACCOUNT_ID = site.CUST_ACCOUNT_ID;
505        EXCEPTION
506          WHEN OTHERS THEN
507              x_formatted_address:=NULL;
508        END;
509      END IF;
510 
511 
512 END get_value;
513 
514 END HZ_UI_UTIL_PKG;