DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_REGISTRY_VALIDATE_V2PUB

Source


1 PACKAGE BODY hz_registry_validate_v2pub AS
2 /*$Header: ARH2RGVB.pls 120.131 2011/10/03 05:31:08 drakshit ship $ */
3 
4   -----------------------------------------
5   -- declaration of private global varibles
6   -----------------------------------------
7 
8   g_special_string CONSTANT VARCHAR2(4):= '%#@*';
9   G_LENGTH         CONSTANT NUMBER := LENGTHB(g_special_string);
10 
11   TYPE val_tab_type IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
12 
13   --g_debug                                 BOOLEAN := FALSE;
14   g_debug_count                           NUMBER := 0;
15 
16   ---------------------------------------------------
17 
18   -- define the internal table that will cache values
19   ---------------------------------------------------
20 
21   VAL_TAB                                 VAL_TAB_TYPE;    -- the table of values
22   TABLE_SIZE                              BINARY_INTEGER := 2048; -- the size of above tables
23 
24   ------------------------------------
25   -- declaration of private procedures
26   ------------------------------------
27 /*
28   PROCEDURE enable_debug;
29 
30   PROCEDURE disable_debug;
31 */
32 
33   FUNCTION get_index (
34       p_val                       IN     VARCHAR2
35  ) RETURN BINARY_INTEGER;
36 
37   PROCEDURE put (
38       p_val                       IN     VARCHAR2
39  );
40 
41   FUNCTION search (
42       p_val                       IN     VARCHAR2,
43       p_category                  IN     VARCHAR2
44  ) RETURN BOOLEAN;
45 
46   PROCEDURE validate_rel_code(
47     p_forward_rel_code      IN      VARCHAR2,
48     p_backward_rel_code     IN      VARCHAR2,
49     p_forward_role          IN      VARCHAR2,
50     p_backward_role         IN      VARCHAR2,
51     x_return_status         IN OUT NOCOPY  VARCHAR2
52   );
53 
54  --Bug Number 3099624.
55  PROCEDURE validate_hr_security(
56       p_person_rec                     IN     HZ_PARTY_V2PUB.PERSON_REC_TYPE,
57       p_old_person_rec                 IN     HZ_PARTY_V2PUB.PERSON_REC_TYPE,
58       x_return_status                  IN OUT NOCOPY VARCHAR2
59     );
60 
61  -- Bug 3175816
62  PROCEDURE validate_global_loc_num(
63       global_location_number           IN     HZ_PARTY_SITES.GLOBAL_LOCATION_NUMBER%TYPE,
64       x_return_status                  IN OUT NOCOPY VARCHAR2
65     );
66 
67 PROCEDURE validate_created_by_module (
68     p_create_update_flag          IN     VARCHAR2,
69     p_created_by_module           IN     VARCHAR2,
70     p_old_created_by_module       IN     VARCHAR2,
71     x_return_status               IN OUT NOCOPY VARCHAR2
72 );
73 
74 PROCEDURE validate_application_id (
75     p_create_update_flag          IN     VARCHAR2,
76     p_application_id              IN     NUMBER,
77     p_old_application_id          IN     NUMBER,
78     x_return_status               IN OUT NOCOPY VARCHAR2
79 );
80 
81 PROCEDURE validate_fnd_lookup
82 ( p_lookup_type          IN     VARCHAR2,
83   p_column               IN     VARCHAR2,
84   p_column_value         IN     VARCHAR2,
85   p_content_source_type  IN     VARCHAR2,
86   x_return_status        IN OUT NOCOPY VARCHAR2)
87 IS
88 
89  --Bug 3097166: Added the cursor for 'NACE' lookup type where clause to ignore
90  --the period when comparing the lookup_code.
91 
92  CURSOR c_nace
93  IS
94  SELECT 'Y'
95    FROM fnd_lookup_values
96   WHERE lookup_type = p_lookup_type
97     AND replace(lookup_code, '.', '') = replace(p_column_value, '.', '')
98     AND ROWNUM      = 1;
99 
100  l_exist VARCHAR2(1);
101 BEGIN
102 
103  IF (    p_column_value IS NOT NULL
104      AND p_column_value <> fnd_api.g_miss_char ) THEN
105       OPEN c_nace;
106       FETCH c_nace INTO l_exist;
107       IF c_nace%NOTFOUND THEN
108         fnd_message.set_name('AR','HZ_API_INVALID_LOOKUP');
109         fnd_message.set_token('COLUMN',p_column);
110         fnd_message.set_token('LOOKUP_TYPE', p_lookup_type);
111         fnd_msg_pub.add;
112         x_return_status := fnd_api.g_ret_sts_error;
113       END IF;
114       CLOSE c_nace;
115  END IF;
116 END validate_fnd_lookup;
117 
118 
119 
120   -----------------------------
121   -- body of private procedures
122   -----------------------------
123 
124   /**
125    * PRIVATE PROCEDURE enable_debug
126    *
127    * DESCRIPTION
128    *     Turn on debug mode.
129    *
130    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
131    *     HZ_UTILITY_V2PUB.enable_debug
132    *
133    * MODIFICATION HISTORY
134    *
135    *   07-23-2001    Jianying Huang      o Created.
136    *
137    */
138 
139   /*PROCEDURE enable_debug IS
140 
141   BEGIN
142 
143       g_debug_count := g_debug_count + 1;
144 
145       IF g_debug_count = 1 THEN
146           IF fnd_profile.value('HZ_API_FILE_DEBUG_ON') = 'Y' OR
147              fnd_profile.value('HZ_API_DBMS_DEBUG_ON') = 'Y'
148           THEN
149              hz_utility_v2pub.enable_debug;
150              g_debug := TRUE;
151           END IF;
152       END IF;
153 
154   END enable_debug;
155   */
156 
157 
158   /**
159    * PRIVATE PROCEDURE disable_debug
160    *
161    * DESCRIPTION
162    *     Turn off debug mode.
163    *
164    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
165    *     hz_utility_v2pub.disable_debug
166    *
167    * MODIFICATION HISTORY
168    *
169    *   07-23-2001    Jianying Huang      o Created.
170    *
171    */
172 
173   /*PROCEDURE disable_debug IS
174   BEGIN
175 
176       IF g_debug THEN
177           g_debug_count := g_debug_count - 1;
178 
179           IF g_debug_count = 0 THEN
180               hz_utility_v2pub.disable_debug;
181               g_debug := FALSE;
182           END IF;
183       END IF;
184 
185   END disable_debug;
186   */
187 
188   FUNCTION get_index (
189       p_val                               IN     VARCHAR2
190  ) RETURN BINARY_INTEGER IS
191 
192       l_table_index                       BINARY_INTEGER;
193       l_found                             BOOLEAN := FALSE;
194       l_hash_value                        NUMBER;
195 
196   BEGIN
197 
198       l_table_index := DBMS_UTILITY.get_hash_value(p_val, 1, TABLE_SIZE);
199 
200       IF VAL_TAB.EXISTS(l_table_index) THEN
201           IF VAL_TAB(l_table_index) = p_val THEN
202               RETURN l_table_index;
203           ELSE
204               l_hash_value := l_table_index;
205               l_table_index := l_table_index + 1;
206               l_found := FALSE;
207 
208               WHILE (l_table_index < TABLE_SIZE) AND (NOT l_found) LOOP
209                   IF VAL_TAB.EXISTS(l_table_index) THEN
210                       IF VAL_TAB(l_table_index) = p_val THEN
211                           l_found := TRUE;
212                       ELSE
213                           l_table_index := l_table_index + 1;
214                       END IF;
215                   ELSE
216                       RETURN TABLE_SIZE + 1;
217                   END IF;
218               END LOOP;
219 
220               IF NOT l_found THEN  -- Didn't find any till the end
221                   l_table_index := 1;  -- Start from the beginning
222 
223                   WHILE (l_table_index < l_hash_value) AND (NOT l_found) LOOP
224                       IF VAL_TAB.EXISTS(l_table_index) THEN
225                           IF VAL_TAB(l_table_index) = p_val THEN
226                               l_found := TRUE;
227                           ELSE
228                               l_table_index := l_table_index + 1;
229                           END IF;
230                       ELSE
231                           RETURN TABLE_SIZE + 1;
232                       END IF;
233                   END LOOP;
234               END IF;
235 
236               IF NOT l_found THEN
237                   RETURN TABLE_SIZE + 1;  -- Return a higher value
238               END IF;
239           END IF;
240       ELSE
241           RETURN TABLE_SIZE + 1;
242       END IF;
243 
244       RETURN l_table_index;
245 
246   EXCEPTION
247       WHEN OTHERS THEN  -- The entry doesn't exists
248           RETURN TABLE_SIZE + 1;
249 
250   END get_index;
251 
252   PROCEDURE put (
253       p_val                               IN     VARCHAR2
254   ) IS
255 
256       l_table_index                       BINARY_INTEGER;
257       l_stored                            BOOLEAN := FALSE;
258       l_hash_value                        NUMBER;
259 
260   BEGIN
261 
262       l_table_index := DBMS_UTILITY.get_hash_value(p_val, 1, TABLE_SIZE);
263 
264       IF VAL_TAB.EXISTS(l_table_index) THEN
265           IF VAL_TAB(l_table_index) <> p_val THEN --Collision
266               l_hash_value := l_table_index;
267               l_table_index := l_table_index + 1;
268 
269               WHILE (l_table_index < TABLE_SIZE) AND (NOT l_stored) LOOP
270                   IF VAL_TAB.EXISTS(l_table_index) THEN
271                       IF VAL_TAB(l_table_index) <> p_val THEN
272                           l_table_index := l_table_index + 1;
273                       END IF;
274                   ELSE
275                       VAL_TAB(l_table_index) := p_val;
276                       l_stored := TRUE;
277                   END IF;
278               END LOOP;
279 
280               IF NOT l_stored THEN --Didn't find any free bucket till the end
281                   l_table_index := 1;
282 
283                   WHILE (l_table_index < l_hash_value) AND (NOT l_stored) LOOP
284                       IF VAL_TAB.EXISTS(l_table_index) THEN
285                           IF VAL_TAB(l_table_index) <> p_val THEN
286                               l_table_index := l_table_index + 1;
287                           END IF;
288                       ELSE
289                           VAL_TAB(l_table_index) := p_val;
290                           l_stored := TRUE;
291                       END IF;
292                   END LOOP;
293               END IF;
294 
295           END IF;
296       ELSE
297           VAL_TAB(l_table_index) := p_val;
298       END IF;
299 
300   EXCEPTION
301       WHEN OTHERS THEN
302           NULL;
303 
304   END put;
305 
306   FUNCTION search (
307       p_val                               IN     VARCHAR2,
308       p_category                          IN     VARCHAR2
309   ) RETURN BOOLEAN IS
310 
311       l_table_index                       BINARY_INTEGER;
312       l_return                            BOOLEAN;
313 
314       l_dummy                             VARCHAR2(1);
315       l_position1                         NUMBER;
316       l_position2                         NUMBER;
317 
318       l_lookup_table                      VARCHAR2(30);
319       l_lookup_type                       AR_LOOKUPS.lookup_type%TYPE;
320       l_lookup_code                       AR_LOOKUPS.lookup_code%TYPE;
321       l_territory_code                    VARCHAR2(2);
322 
323   BEGIN
324 
325       -- search for the value
326       l_table_index := get_index(p_val || G_SPECIAL_STRING || p_category);
327 
328       IF l_table_index < table_size THEN
329            l_return := TRUE;
330       ELSE
331 
332           --Can't find the value in the table; look in the database
333           IF p_category = 'LOOKUP' THEN
334 
335               l_position1 := INSTRB(p_val, G_SPECIAL_STRING, 1, 1);
336               l_lookup_table := SUBSTRB(p_val, 1, l_position1 - 1);
337               l_position2 := INSTRB(p_val, G_SPECIAL_STRING, 1, 2);
338               l_lookup_type := SUBSTRB(p_val, l_position1 + G_LENGTH,
339                                        l_position2  - l_position1 - G_LENGTH);
340               l_lookup_code := SUBSTRB(p_val, l_position2 + G_LENGTH);
341 
342               IF UPPER(l_lookup_table) = 'AR_LOOKUPS' THEN
343               BEGIN
344                   SELECT 'Y' INTO l_dummy
345                   FROM   AR_LOOKUPS
346                   WHERE  LOOKUP_TYPE = l_lookup_type
347                   AND    LOOKUP_CODE = l_lookup_code
348                   AND    (ENABLED_FLAG = 'Y' AND
349                           TRUNC(SYSDATE) BETWEEN
350                           TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND
351                           TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
352                         );
353 
354                   l_return := TRUE;
355               EXCEPTION
356                   WHEN NO_DATA_FOUND THEN
357                       l_return := FALSE;
358               END;
359               ELSIF UPPER(l_lookup_table) = 'SO_LOOKUPS' THEN
360               BEGIN
361                   SELECT 'Y' INTO l_dummy
362                   FROM   SO_LOOKUPS
363                   WHERE  LOOKUP_TYPE = l_lookup_type
364                   AND    LOOKUP_CODE = l_lookup_code
365                   AND    (ENABLED_FLAG = 'Y' AND
366                           TRUNC(SYSDATE) BETWEEN
367                           TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND
368                           TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
369                         );
370 
371                   l_return := TRUE;
372               EXCEPTION
373                   WHEN NO_DATA_FOUND THEN
374                       l_return := FALSE;
375               END;
376               ELSIF UPPER(l_lookup_table) = 'OE_SHIP_METHODS_V' THEN
377               BEGIN
378                   SELECT 'Y' INTO l_dummy
379                   FROM   OE_SHIP_METHODS_V
380                   WHERE  LOOKUP_TYPE = l_lookup_type
381                   AND    LOOKUP_CODE = l_lookup_code
382                   AND    (ENABLED_FLAG = 'Y' AND
383                           TRUNC(SYSDATE) BETWEEN
384                           TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND
385                           TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
386                         )
387                   AND    ROWNUM = 1;
388 
389                   l_return := TRUE;
390               EXCEPTION
391                   WHEN NO_DATA_FOUND THEN
392                       l_return := FALSE;
393               END;
394               ELSIF UPPER(l_lookup_table) = 'FND_LOOKUP_VALUES' THEN
395               BEGIN
396                   SELECT 'Y' INTO l_dummy
397                   FROM   FND_LOOKUP_VALUES
398                   WHERE  LOOKUP_TYPE = l_lookup_type
399                   AND    LOOKUP_CODE = l_lookup_code
400                   AND    (ENABLED_FLAG = 'Y' AND
401                           TRUNC(SYSDATE) BETWEEN
402                           TRUNC(NVL(START_DATE_ACTIVE,SYSDATE)) AND
403                           TRUNC(NVL(END_DATE_ACTIVE,SYSDATE))
404                         )
405                   AND    ROWNUM = 1;
406 
407                   l_return := TRUE;
408               EXCEPTION
409                   WHEN NO_DATA_FOUND THEN
410                       l_return := FALSE;
411               END;
412               ELSE
413                   l_return := FALSE;
414               END IF;
415           ELSIF p_category = 'FND_TERRITORIES' THEN
416 
417             l_position1 := INSTRB( p_val, G_SPECIAL_STRING, 1, 1 );
418             l_territory_code := SUBSTRB( p_val, 1, l_position1 - 1 );
419 
420             BEGIN
421                 SELECT null INTO l_dummy
422                 FROM   FND_TERRITORIES
423                 WHERE  TERRITORY_CODE = l_territory_code
424                 AND    OBSOLETE_FLAG = 'N';
425 
426                 l_return := TRUE;
427 
428             EXCEPTION
429                 WHEN NO_DATA_FOUND THEN
430                     l_return := FALSE;
431             END;
432           ELSE
433             l_return := FALSE;
434           END IF;
435 
436           --Cache the value
437           IF l_return THEN
438              put(p_val || G_SPECIAL_STRING || p_category);
439           END IF;
440       END IF;
441       RETURN l_return;
442 
443   END search;
444 
445   --
446   -- PROCEDURE check organization
447   --
448   -- DESCRIPTION
449   --   Checks if the party type is an organization
450   --   point.
451   --
452   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
453   --
454   -- ARGUMENTS
455   --   IN:
456   --     p_party_id           ID identifying the party.
457   --   IN/OUT:
458   --     x_return_status      Return status after the call. The status can
459   --                          be FND_API.G_RET_STS_SUCCESS (success),
460   --                          fnd_api.g_ret_sts_error (error),
461   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
462   --
463   -- NOTES
464   --
465   -- MODIFICATION HISTORY
466   --
467   --   21-NOV-2001    Joe del Callar   bug 2120857: Created to validate party
468   --                                   types for EFT and EDI contact points.
469   --   22-MAY-2002   Joe del Callar    Fixed an issue where the EDI org check
470   --                                   was failing due to a premature cursor
471   --                                   close.
472   --   23-DEC-2003   Rajib R Borah     Bug 2619099.Displayed error message
473   --                                   HZ_EDI_EFT_ORG_PARTIES_ONLY instead of
474   --                                   HZ_API_INVALID_PARTY_TYPE.
475   --
476   PROCEDURE check_organization (
477     p_party_id            IN     NUMBER,
478     x_return_status       IN OUT NOCOPY VARCHAR2
479   ) IS
480     CURSOR c_partytype IS
481       SELECT hp.party_type
482       FROM   hz_parties hp
483       WHERE  hp.party_id = p_party_id;
484 
485     l_party_type          VARCHAR2(30);
486 
487   BEGIN
488 
489     OPEN c_partytype;
490     FETCH c_partytype INTO l_party_type;
491     -- Ensure that a party record was retrieved.
492     IF c_partytype%NOTFOUND THEN
493       -- no party and organization was found for the given ID.
494       CLOSE c_partytype;
495       fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
496       fnd_message.set_token('FK', 'OWNER_TABLE_ID');
497       fnd_message.set_token('COLUMN', 'PARTY_ID');
498       fnd_message.set_token('TABLE', 'HZ_PARTIES');
499       fnd_msg_pub.add;
500       x_return_status := fnd_api.g_ret_sts_error;
501       RETURN;
502     END IF;
503 
504     -- Check that the party is an organization.
505     IF l_party_type <> 'ORGANIZATION' THEN
506       -- This is not an organization.  Only organizations can have EDI
507       -- contact points.
508 
509   /* Bug 2619099.
510   |    fnd_message.set_name('AR', 'HZ_API_INVALID_PARTY_TYPE');      |
511   |    fnd_message.set_token('PARTY_ID', TO_CHAR(p_party_id));       |
512   |    fnd_message.set_token('TYPE', 'ORGANIZATION');               */
513       fnd_message.set_name('AR','HZ_EDI_EFT_ORG_PARTIES_ONLY');
514 
515       fnd_msg_pub.add;
516       x_return_status := fnd_api.g_ret_sts_error;
517     END IF;
518     CLOSE c_partytype;
519   END check_organization;
520 
521   --
522   -- PROCEDURE validate_party_type
523   --
524   -- DESCRIPTION
525   --   Checks if the proper party type is being applied for the given contact
526   --   point.
527   --
528   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
529   --
530   -- ARGUMENTS
531   --   IN:
532   --     p_table_name         Must be 'HZ_PARTIES' for valid execution.
533   --     p_party_id           ID identifying the party.
534   --     p_contact_point_type Type of contact point.  'EFT' and 'EDI'-type
535   --                          contact points are accepted.  Others are ignored.
536   --   IN/OUT:
537   --     x_return_status      Return status after the call. The status can
538   --                          be FND_API.G_RET_STS_SUCCESS (success),
539   --                          fnd_api.g_ret_sts_error (error),
540   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
541   --
542   -- NOTES
543   --
544   -- MODIFICATION HISTORY
545   --
546   --   21-NOV-2001    Joe del Callar   bug 2120857: Created to validate party
547   --                                   types for EFT and EDI contact points.
548   --   23-DEC-2003    Rajib R Borah    Bug 2619099.Displayed the error message
549   --                                   HZ_EDI_EFT_ORG_PARTIES_ONLY instead of
550   --                                   HZ_API_INVALID_FK.
551   --
552   --   06-NOV-2006   Sudhir Gokavarapu Bug 6611955. Added IF ELSE condition after Party Type Check.
553   --                                   Corrected IF ELSE condition for c_class Cursor Open / Close.
554   PROCEDURE validate_party_type (
555     p_table_name          IN     VARCHAR2,
556     p_party_id            IN     NUMBER,
557     p_contact_point_type  IN     VARCHAR2,
558     x_return_status       IN OUT NOCOPY VARCHAR2
559   ) IS
560 
561     CURSOR c_class IS
562       SELECT hca.class_category,
563              hca.object_version_number
564       FROM   hz_code_assignments hca
565       WHERE  hca.owner_table_name = 'HZ_PARTIES'
566              AND hca.owner_table_id = p_party_id
567              AND hca.status = 'A'
568       ORDER BY 2 DESC;
569 
570     l_class_category VARCHAR2(30);
571     l_dummy          NUMBER;
572     l_debug_prefix                     VARCHAR2(30) := '';
573   BEGIN
574     -- data being validated must belong to a party.
575     IF p_table_name <> 'HZ_PARTIES' THEN
576       -- This is not a party type.  This procedure was called incorrectly,
577       -- return a failure.
578 /* Bug 2619099.
579  |     fnd_message.set_name('AR', 'HZ_API_INVALID_FK');  |
580  |     fnd_message.set_token('FK', 'OWNER_TABLE_NAME');  |
581  |     fnd_message.set_token('COLUMN', 'HZ_PARTIES');    |
582  |     fnd_message.set_token('TABLE', 'FND_OBJECTS');   */
583       fnd_message.set_name('AR','HZ_EDI_EFT_ORG_PARTIES_ONLY');
584 
585       fnd_msg_pub.add;
586       x_return_status := fnd_api.g_ret_sts_error;
587       RETURN;
588     END IF;
589 
590     -- validate party type based on the contact point type.
591     IF p_contact_point_type = 'EDI' THEN
592       -- make sure that the contact point belongs to an organization.
593       check_organization(p_party_id, x_return_status);
594     ELSIF p_contact_point_type = 'EFT' THEN
595       -- make sure that the contact point belongs to an organization.
596      check_organization(p_party_id, x_return_status);
597      IF x_return_status <> fnd_api.g_ret_sts_error THEN
598       -- EFT is only currently allowed for banks.
599 
600       OPEN c_class;
601       FETCH c_class INTO l_class_category, l_dummy;
602 
603       -- Ensure that a party record was retrieved.
604       IF c_class%NOTFOUND THEN
605         -- no party and organization was found for the given ID.
606         CLOSE c_class;
607         fnd_message.set_name('AR', 'HZ_API_NO_RECORD');
608         fnd_message.set_token('RECORD', 'Code Assignment');
609         fnd_message.set_token('VALUE', TO_CHAR(p_party_id));
610         fnd_msg_pub.add;
611         x_return_status := fnd_api.g_ret_sts_error;
612 --      END IF;
613       ELSE
614       -- Check that the category class is a bank.
615        IF l_class_category NOT LIKE 'BANK%' THEN
616         -- This is not a bank-type organization.  Only bank-type organizations
617         -- can have EFT contact points.
618         fnd_message.set_name('AR', 'HZ_API_INVALID_PARTY_TYPE');
619         fnd_message.set_token('PARTY_ID', TO_CHAR(p_party_id));
620         fnd_message.set_token('TYPE', 'BANK or BANK BRANCH');
621         fnd_msg_pub.add;
622         x_return_status := fnd_api.g_ret_sts_error;
623        END IF;
624       CLOSE c_class;
625       END IF;
626      END IF;
627     ELSE
628       -- do nothing if not of either type that this procedure recognizes.
629       NULL;
630     END IF;
631   END validate_party_type;
632 
633   PROCEDURE validate_mandatory (
634       p_create_update_flag                    IN     VARCHAR2,
635       p_column                                IN     VARCHAR2,
636       p_column_value                          IN     VARCHAR2,
637       p_restricted                            IN     VARCHAR2 DEFAULT 'N',
638       x_return_status                         IN OUT NOCOPY VARCHAR2
639   ) IS
640 
641       l_error                                 BOOLEAN := FALSE;
642 
643   BEGIN
644 
645       IF p_restricted = 'N' THEN
646           IF (p_create_update_flag = 'C' AND
647                (p_column_value IS NULL OR
648                  p_column_value = fnd_api.g_miss_char)) OR
649              (p_create_update_flag = 'U' AND
650                p_column_value = fnd_api.g_miss_char)
651           THEN
652               l_error := TRUE;
653           END IF;
654       ELSE
655           IF (p_column_value IS NULL OR
656                p_column_value = fnd_api.g_miss_char)
657           THEN
658               l_error := TRUE;
659           END IF;
660       END IF;
661 
662       IF l_error THEN
663           fnd_message.set_name('AR', 'HZ_API_MISSING_COLUMN');
664           fnd_message.set_token('COLUMN', p_column);
665           fnd_msg_pub.add;
666           x_return_status := fnd_api.g_ret_sts_error;
667       END IF;
668 
669   END validate_mandatory;
670 
671   PROCEDURE validate_mandatory (
672       p_create_update_flag                    IN     VARCHAR2,
673       p_column                                IN     VARCHAR2,
674       p_column_value                          IN     NUMBER,
675       p_restricted                            IN     VARCHAR2 DEFAULT 'N',
676       x_return_status                         IN OUT NOCOPY VARCHAR2
677  ) IS
678 
679       l_error                                 BOOLEAN := FALSE;
680 
681   BEGIN
682 
683       IF p_restricted = 'N' THEN
684           IF (p_create_update_flag = 'C' AND
685                (p_column_value IS NULL OR
686                  p_column_value = fnd_api.g_miss_num)) OR
687              (p_create_update_flag = 'U' AND
688                p_column_value = fnd_api.g_miss_num)
689           THEN
690               l_error := TRUE;
691           END IF;
692       ELSE
693           IF (p_column_value IS NULL OR
694                p_column_value = fnd_api.g_miss_num)
695           THEN
696               l_error := TRUE;
697           END IF;
698       END IF;
699 
700       IF l_error THEN
701           fnd_message.set_name('AR', 'HZ_API_MISSING_COLUMN');
702           fnd_message.set_token('COLUMN', p_column);
703           fnd_msg_pub.add;
704           x_return_status := fnd_api.g_ret_sts_error;
705       END IF;
706 
707   END validate_mandatory;
708 
709   PROCEDURE validate_mandatory (
710       p_create_update_flag                    IN     VARCHAR2,
711       p_column                                IN     VARCHAR2,
712       p_column_value                          IN     DATE,
713       p_restricted                            IN     VARCHAR2 DEFAULT 'N',
714       x_return_status                         IN OUT NOCOPY VARCHAR2
715  ) IS
716 
717       l_error                                 BOOLEAN := FALSE;
718 
719   BEGIN
720 
721       IF p_restricted = 'N' THEN
722           IF (p_create_update_flag = 'C' AND
723                (p_column_value IS NULL OR
724                  p_column_value = FND_API.G_MISS_DATE)) OR
725              (p_create_update_flag = 'U' AND
726                p_column_value = FND_API.G_MISS_DATE)
727           THEN
728               l_error := TRUE;
729           END IF;
730       ELSE
731           IF (p_column_value IS NULL OR
732                p_column_value = FND_API.G_MISS_DATE)
733           THEN
734               l_error := TRUE;
735           END IF;
736       END IF;
737 
738       IF l_error THEN
739           fnd_message.set_name('AR', 'HZ_API_MISSING_COLUMN');
740           fnd_message.set_token('COLUMN', p_column);
741           fnd_msg_pub.add;
742           x_return_status := fnd_api.g_ret_sts_error;
743       END IF;
744 
745   END validate_mandatory;
746 
747   PROCEDURE validate_nonupdateable (
748       p_column                                IN     VARCHAR2,
749       p_column_value                          IN     VARCHAR2,
750       p_old_column_value                      IN     VARCHAR2,
751       p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
752       x_return_status                         IN OUT NOCOPY VARCHAR2,
753       p_raise_error                           IN     VARCHAR2 := 'Y'
754  ) IS
755 
756       l_error                                 BOOLEAN := FALSE;
757 
758   BEGIN
759 
760       IF p_column_value IS NOT NULL THEN
761           IF p_restricted = 'Y' THEN
762               IF (p_column_value <> fnd_api.g_miss_char OR
763                    p_old_column_value IS NOT NULL) AND
764                  (p_old_column_value IS NULL OR
765                    p_column_value <> p_old_column_value)
766               THEN
767                  l_error := TRUE;
768               END IF;
769           ELSE
770               IF (p_old_column_value IS NOT NULL AND        -- BUG 3367582.
771                   p_old_column_value <> FND_API.G_MISS_CHAR)
772                   AND
773                  (p_column_value = fnd_api.g_miss_char OR
774                    p_column_value <> p_old_column_value)
775               THEN
776                  l_error := TRUE;
777               END IF;
778           END IF;
779       END IF;
780       IF l_error THEN
781         IF p_raise_error = 'Y' THEN
782           fnd_message.set_name('AR', 'HZ_API_NONUPDATEABLE_COLUMN');
783           fnd_message.set_token('COLUMN', p_column);
784           fnd_msg_pub.add;
785         END IF;
786         x_return_status := fnd_api.g_ret_sts_error;
787       END IF;
788 
789   END validate_nonupdateable;
790 
791   PROCEDURE validate_nonupdateable (
792       p_column                                IN     VARCHAR2,
793       p_column_value                          IN     NUMBER,
794       p_old_column_value                      IN     NUMBER,
795       p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
796       x_return_status                         IN OUT NOCOPY VARCHAR2,
797       p_raise_error                           IN     VARCHAR2 := 'Y'
798  ) IS
799 
800       l_error                                 BOOLEAN := FALSE;
801 
802   BEGIN
803 
804       IF p_column_value IS NOT NULL THEN
805           IF p_restricted = 'Y' THEN
806               IF (p_column_value <> fnd_api.g_miss_num OR
807                    p_old_column_value IS NOT NULL) AND
808                  (p_old_column_value IS NULL OR
809                    p_column_value <> p_old_column_value)
810               THEN
811                  l_error := TRUE;
812               END IF;
813           ELSE
814               IF (p_old_column_value IS NOT NULL AND       -- Bug 3367582.
815                   p_old_column_value <> FND_API.G_MISS_NUM)
816                   AND
817                  (p_column_value = fnd_api.g_miss_num OR
818                    p_column_value <> p_old_column_value)
819               THEN
820                  l_error := TRUE;
821               END IF;
822           END IF;
823       END IF;
824 
825       IF l_error THEN
826         IF p_raise_error = 'Y' THEN
827           fnd_message.set_name('AR', 'HZ_API_NONUPDATEABLE_COLUMN');
828           fnd_message.set_token('COLUMN', p_column);
829           fnd_msg_pub.add;
830         END IF;
831         x_return_status := fnd_api.g_ret_sts_error;
832       END IF;
833 
834   END validate_nonupdateable;
835 
836   PROCEDURE validate_nonupdateable (
837       p_column                                IN     VARCHAR2,
838       p_column_value                          IN     DATE,
839       p_old_column_value                      IN     DATE,
840       p_restricted                            IN     VARCHAR2 DEFAULT 'Y',
841       x_return_status                         IN OUT NOCOPY VARCHAR2,
842       p_raise_error                           IN     VARCHAR2 := 'Y'
843  ) IS
844 
845       l_error                                 BOOLEAN := FALSE;
846 
847   BEGIN
848 
849       IF p_column_value IS NOT NULL THEN
850           IF p_restricted = 'Y' THEN
851               IF (p_column_value <> FND_API.G_MISS_DATE OR
852                    p_old_column_value IS NOT NULL) AND
853                  (p_old_column_value IS NULL OR
854                    p_column_value <> p_old_column_value)
855               THEN
856                  l_error := TRUE;
857               END IF;
858           ELSE
859               IF (p_old_column_value IS NOT NULL AND        -- Bug 3367582
860                   p_old_column_value <> FND_API.G_MISS_DATE)
861                   AND
862                  (p_column_value = FND_API.G_MISS_DATE OR
863                    p_column_value <> p_old_column_value)
864               THEN
865                  l_error := TRUE;
866               END IF;
867           END IF;
868       END IF;
869 
870       IF l_error THEN
871         IF p_raise_error = 'Y' THEN
872           fnd_message.set_name('AR', 'HZ_API_NONUPDATEABLE_COLUMN');
873           fnd_message.set_token('COLUMN', p_column);
874           fnd_msg_pub.add;
875         END IF;
876         x_return_status := fnd_api.g_ret_sts_error;
877       END IF;
878 
879   END validate_nonupdateable;
880 
881   PROCEDURE validate_start_end_date (
882       p_create_update_flag                    IN     VARCHAR2,
883       p_start_date_column_name                IN     VARCHAR2,
884       p_start_date                            IN     DATE,
885       p_old_start_date                        IN     DATE,
886       p_end_date_column_name                  IN     VARCHAR2,
887       p_end_date                              IN     DATE,
888       p_old_end_date                          IN     DATE,
889       x_return_status                         IN OUT NOCOPY VARCHAR2
890  ) IS
891 
892       l_start_date                            DATE := p_old_start_date;
893       l_end_date                              DATE := p_old_end_date;
894 
895   BEGIN
896 
897       IF p_create_update_flag = 'C' THEN
898           l_start_date := p_start_date;
899           l_end_date := p_end_date;
900       ELSIF p_create_update_flag = 'U' THEN
901           IF p_start_date IS NOT NULL
902           THEN
903               IF p_start_date = FND_API.G_MISS_DATE THEN
904                   l_start_date := NULL;
905               ELSE
906                   l_start_date := p_start_date;
907               END IF;
908           END IF;
909 
910           IF p_end_date IS NOT NULL
911           THEN
912               IF p_end_date = FND_API.G_MISS_DATE THEN
913                   l_end_date := NULL;
914               ELSE
915                   l_end_date := p_end_date;
916               END IF;
917           END IF;
918       END IF;
919 
920       IF l_end_date IS NOT NULL AND
921          l_end_date <> FND_API.G_MISS_DATE AND
922          (l_start_date IS NULL OR
923            l_start_date = FND_API.G_MISS_DATE OR
924            l_start_date > l_end_date)
925       THEN
926           fnd_message.set_name('AR', 'HZ_API_DATE_GREATER');
927           fnd_message.set_token('DATE2', p_end_date_column_name);
928           fnd_message.set_token('DATE1', p_start_date_column_name);
929           fnd_msg_pub.add;
930           x_return_status := fnd_api.g_ret_sts_error;
931       END IF;
932 
933   END validate_start_end_date;
934 
935   PROCEDURE validate_cannot_update_to_null (
936       p_column                                IN     VARCHAR2,
937       p_column_value                          IN     VARCHAR2,
938       x_return_status                         IN OUT NOCOPY VARCHAR2
939  ) IS
940 
941   BEGIN
942 
943       IF p_column_value = fnd_api.g_miss_char THEN
944           fnd_message.set_name('AR', 'HZ_API_NONUPDATEABLE_TO_NULL');
945           fnd_message.set_token('COLUMN', p_column);
946           fnd_msg_pub.add;
947           x_return_status := fnd_api.g_ret_sts_error;
948       END IF;
949 
950   END validate_cannot_update_to_null;
951 
952   PROCEDURE validate_cannot_update_to_null (
953       p_column                                IN     VARCHAR2,
954       p_column_value                          IN     NUMBER,
955       x_return_status                         IN OUT NOCOPY VARCHAR2
956  ) IS
957 
958   BEGIN
959 
960       IF p_column_value = fnd_api.g_miss_num THEN
961           fnd_message.set_name('AR', 'HZ_API_NONUPDATEABLE_TO_NULL');
962           fnd_message.set_token('COLUMN', p_column);
963           fnd_msg_pub.add;
964           x_return_status := fnd_api.g_ret_sts_error;
965       END IF;
966 
967   END validate_cannot_update_to_null;
968 
969   PROCEDURE validate_cannot_update_to_null (
970       p_column                                IN     VARCHAR2,
971       p_column_value                          IN     DATE,
972       x_return_status                         IN OUT NOCOPY VARCHAR2
973  ) IS
974 
975   BEGIN
976 
977       IF p_column_value = FND_API.G_MISS_DATE THEN
978           fnd_message.set_name('AR', 'HZ_API_NONUPDATEABLE_TO_NULL');
979           fnd_message.set_token('COLUMN', p_column);
980           fnd_msg_pub.add;
981           x_return_status := fnd_api.g_ret_sts_error;
982       END IF;
983 
984   END validate_cannot_update_to_null;
985 
986   PROCEDURE validate_lookup (
987       p_column                                IN     VARCHAR2,
988       p_lookup_table                          IN     VARCHAR2 DEFAULT 'AR_LOOKUPS',
989       p_lookup_type                           IN     VARCHAR2,
990       p_column_value                          IN     VARCHAR2,
991       x_return_status                         IN OUT NOCOPY VARCHAR2
992  ) IS
993 
994       l_error                                 BOOLEAN := FALSE;
995 
996   BEGIN
997 
998       IF p_column_value IS NOT NULL AND
999          p_column_value <> fnd_api.g_miss_char THEN
1000 
1001           IF p_lookup_type = 'YES/NO' THEN
1002               IF p_column_value NOT IN ('Y', 'N') THEN
1003                   l_error := TRUE;
1004               END IF;
1005           ELSE
1006               IF NOT search(p_lookup_table || G_SPECIAL_STRING ||
1007                             p_lookup_type || G_SPECIAL_STRING || p_column_value,
1008                             'LOOKUP')
1009               THEN
1010                   l_error := TRUE;
1011               END IF;
1012           END IF;
1013 
1014           IF l_error THEN
1015               fnd_message.set_name('AR', 'HZ_API_INVALID_LOOKUP');
1016               fnd_message.set_token('COLUMN', p_column);
1017               fnd_message.set_token('LOOKUP_TYPE', p_lookup_type);
1018               fnd_msg_pub.add;
1019               x_return_status := fnd_api.g_ret_sts_error;
1020           END IF;
1021       END IF;
1022 
1023   END validate_lookup;
1024 
1025   PROCEDURE validate_country_code (
1026       p_column                                IN     VARCHAR2,
1027       p_column_value                          IN     VARCHAR2,
1028       x_return_status                         IN OUT NOCOPY VARCHAR2
1029   ) IS
1030 
1031   BEGIN
1032 
1033       IF p_column_value IS NOT NULL AND
1034          p_column_value <> FND_API.G_MISS_CHAR
1035       THEN
1036         IF NOT search(p_column_value || G_SPECIAL_STRING, 'FND_TERRITORIES')
1037         THEN
1038            fnd_message.set_name('AR', 'HZ_API_INVALID_COUNTRY_CODE');
1039            fnd_msg_pub.add;
1040            x_return_status := fnd_api.g_ret_sts_error;
1041         END IF;
1042       END IF;
1043 
1044   END validate_country_code;
1045 
1046 
1047   --
1048   -- PRIVATE PROCEDURE
1049   --   Main routine for contact point record validation.
1050   --
1051   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1052   --
1053   -- ARGUMENTS
1054   --   IN:
1055   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
1056   --     p_contact_point_rec  Contact point record.
1057   --     p_edi_rec            EDI record.
1058   --     p_eft_rec            EFT record.
1059   --     p_email_rec          Email record.
1060   --     p_phone_rec          Phone record.
1061   --     p_telex_rec          Telex record.
1062   --     p_web_rec            Web record.
1063   --     p_rowid              Rowid of the record (used only in update mode).
1064   --   IN/OUT:
1065   --     x_return_status      Return status after the call. The status can
1066   --                          be FND_API.G_RET_STS_SUCCESS (success),
1067   --                          fnd_api.g_ret_sts_error (error),
1068   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1069   --
1070   -- NOTES
1071   --
1072   -- MODIFICATION HISTORY
1073   --
1074   --   05-DEC-2001   Joe del Callar      Bug 2116225: Modified to accept EFT
1075   --                                     records for bank consolidation.
1076   --                                     Bug 2117973: Modified to comply with
1077   --                                     PL/SQL coding standards.
1078   --   03-JAN-2002   P.Suresh            Bug No : 1946858. Added the validation that
1079   --                                     Inactive contact can never marked as
1080   --                                     preferred.
1081   --   17-FEB-2002   P.Suresh            Bug No : 1946858. Added the validation that
1082   --                                     contact_point_purpose cannot be null when
1083   --                                     primary_by_purpose is 'Y'.
1084   --   23-MAY-2002   Joe del Callar      Modified to NOT validate party type on
1085   --                                     EFT and EDI records during update mode
1086   --                                     since you are not updateable anyway.
1087   --   08-DEC-2003   Rajib Ranjan Borah  o Bug 2807379.Phone number column is not
1088   --                                     updateable to NULL.
1089   --   01-03-2005    Rajib Ranjan Borah  o SSM SST Integration and Extension.
1090   --                                     New user update rules will be used to check
1091   --                                     update privilege instead of checking against 'DNB'
1092   --                                     only.
1093   --   28-SEP-2005   Idris Ali           o Bug 4474646 Modified to make the error message
1094   --                                     more user friendly when the country code is invalid.
1095   --   10-SEP-2007   Neeraj Shinde       o Bug 6367289 : Added Validation - EFT type of
1096   --                                     contact point can only
1097   --                                     be assigned to Parties of type Organization.
1098   --   18-JUL-2008   Ajai Singh          o Bug 7046491 : Updated curser to compare the
1099   --                                     timezone from fnd_timezones_vl view.
1100 
1101   PROCEDURE validate_contact_point_main (
1102     p_create_update_flag  IN     VARCHAR2,
1103     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
1104     p_edi_rec             IN     hz_contact_point_v2pub.edi_rec_type := hz_contact_point_v2pub.g_miss_edi_rec,
1105     p_eft_rec             IN     hz_contact_point_v2pub.eft_rec_type := hz_contact_point_v2pub.g_miss_eft_rec,
1106     p_email_rec           IN     hz_contact_point_v2pub.email_rec_type := hz_contact_point_v2pub.g_miss_email_rec,
1107     p_phone_rec           IN     hz_contact_point_v2pub.phone_rec_type := hz_contact_point_v2pub.g_miss_phone_rec,
1108     p_telex_rec           IN     hz_contact_point_v2pub.telex_rec_type := hz_contact_point_v2pub.g_miss_telex_rec,
1109     p_web_rec             IN     hz_contact_point_v2pub.web_rec_type := hz_contact_point_v2pub.g_miss_web_rec,
1110     p_rowid               IN     ROWID,
1111     x_return_status       IN OUT NOCOPY VARCHAR2
1112   ) IS
1113     l_debug_prefix             VARCHAR2(30) := ''; --'validate_contact_point'
1114     l_dummy                    VARCHAR2(10);
1115     l_fk_exist                 VARCHAR2(1);
1116     l_fk_column                VARCHAR2(30);
1117     l_error                    BOOLEAN := FALSE;
1118     l_return_status            VARCHAR2(1);
1119 
1120     l_owner_table_name         hz_contact_points.owner_table_name%TYPE;
1121     l_owner_table_id           NUMBER;
1122     l_contact_point_type       hz_contact_points.contact_point_type%TYPE :=
1123                                  p_contact_point_rec.contact_point_type;
1124     l_content_source_type      hz_contact_points.content_source_type%TYPE;
1125     l_orig_system_reference    hz_contact_points.orig_system_reference%TYPE;
1126     l_primary_flag             hz_contact_points.primary_flag%TYPE;
1127     l_preferred_flag           hz_contact_points.primary_by_purpose%TYPE;
1128     l_status                   hz_contact_points.status%TYPE;
1129     l_created_by_module        hz_contact_points.created_by_module%TYPE;
1130     l_application_id           NUMBER;
1131     l_contact_point_purpose    hz_contact_points.contact_point_purpose%TYPE;
1132     l_email_format             hz_contact_points.email_format%TYPE;
1133     l_phone_line_type          hz_contact_points.phone_line_type%TYPE;
1134     l_primary_by_purpose       hz_contact_points.primary_by_purpose%TYPE;
1135 
1136     -- Bug 2197181: added for mix-n-match
1137     db_actual_content_source   hz_contact_points.actual_content_source%TYPE;
1138     l_phone_area_code          hz_contact_points.phone_area_code%TYPE;
1139     l_phone_country_code       hz_contact_points.phone_country_code%TYPE;
1140     l_phone_number             hz_contact_points.phone_number%TYPE;
1141     l_phone_extension          hz_contact_points.phone_extension%TYPE;
1142     l_raw_phone_number         hz_contact_points.raw_phone_number%TYPE;
1143 --  Bug 4226199 : Added for update validation
1144     l_email_address            hz_contact_points.email_address%TYPE;
1145     l_telex                    hz_contact_points.telex_number%TYPE;
1146     l_url                      hz_contact_points.url%TYPE;
1147 
1148     l_validate_osr varchar2(1) := 'Y';
1149     l_mosr_owner_table_id number;
1150 
1151     l_temp_return_status   VARCHAR2(10); -- for storing return status from
1152                                          -- hz_orig_system_ref_pub.get_owner_table_id
1153 
1154     -- Bug 2197181: selecting actual_content_source for mix-n-match
1155     -- Bug 4203495  selecting primary_flag
1156     CURSOR c_update IS
1157       SELECT hcp.owner_table_name,
1158              hcp.owner_table_id,
1159              hcp.contact_point_type,
1160              hcp.content_source_type,
1161              hcp.orig_system_reference,
1162              hcp.status,
1163              hcp.primary_flag,
1164              hcp.created_by_module,
1165              hcp.application_id,
1166              hcp.contact_point_purpose,
1167              hcp.email_format,
1168              hcp.phone_line_type,
1169              hcp.phone_country_code,
1170              hcp.primary_by_purpose,
1171              hcp.actual_content_source,
1172              hcp.phone_area_code,
1173              hcp.phone_country_code,
1174              hcp.phone_number,
1175              hcp.phone_extension,
1176              hcp.raw_phone_number,
1177       --  Bug 4226199 : Added for update validation
1178              hcp.email_address,
1179              hcp.telex_number,
1180              hcp.url
1181       FROM   hz_contact_points hcp
1182       WHERE  ROWID = p_rowid;
1183 
1184     CURSOR c_dup (p_contact_point_id IN NUMBER) IS
1185       SELECT 'Y'
1186       FROM   hz_contact_points hcp
1187       WHERE  hcp.contact_point_id = p_contact_point_id;
1188 
1189     CURSOR c_pexist (p_owner_table_id IN NUMBER) IS
1190       SELECT 'Y'
1191       FROM   hz_parties
1192       WHERE  party_id = p_owner_table_id;
1193 
1194     CURSOR c_psexist (p_owner_table_id IN NUMBER) IS
1195       SELECT 'Y'
1196       FROM   hz_party_sites hps
1197       WHERE  hps.party_site_id = p_owner_table_id;
1198 
1199     CURSOR c_timezone (p_timezone_id IN NUMBER) IS--updated against bug 7046491
1200       SELECT 'Y'
1201       FROM   fnd_timezones_vl ftl
1202       WHERE  ftl.upgrade_tz_id = p_timezone_id;
1203 
1204     CURSOR c_countrycode (p_phone_country_code IN VARCHAR2) IS
1205       SELECT 'Y'
1206       FROM   hz_phone_country_codes hpcc
1207       WHERE  hpcc.phone_country_code = p_phone_country_code
1208              AND ROWNUM = 1;
1209 
1210   BEGIN
1211     -- Debug info.
1212     /*IF g_debug THEN
1213       hz_utility_v2pub.debug ('validate_contact_point_main (+)');
1214     END IF;
1215     */
1216     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1217         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_contact_point_main (+)',
1218                                p_msg_level=>fnd_log.level_procedure);
1219     END IF;
1220     -- Select fields for later use during update.
1221     IF p_create_update_flag = 'U' THEN
1222 
1223     -- Bug 2197181: selecting actual_content_source for mix-n-match
1224     -- Bug 4203495: selecting primary_flag
1225       OPEN c_update;
1226       FETCH c_update
1227       INTO  l_owner_table_name,
1228             l_owner_table_id,
1229             l_contact_point_type,
1230             l_content_source_type,
1231             l_orig_system_reference,
1232             l_status,
1233             l_primary_flag,
1234             l_created_by_module,
1235             l_application_id,
1236             l_contact_point_purpose,
1237             l_email_format,
1238             l_phone_line_type,
1239             l_phone_country_code,
1240             l_primary_by_purpose,
1241             db_actual_content_source,
1242             l_phone_area_code,
1243             l_phone_country_code,
1244             l_phone_number,
1245             l_phone_extension,
1246             l_raw_phone_number,
1247       --  Bug 4226199 : Added for update validation
1248             l_email_address,
1249             l_telex,
1250             l_url;
1251       IF c_update%NOTFOUND THEN
1252         CLOSE c_update;
1253         -- Debug info.
1254         /*IF g_debug THEN
1255           hz_utility_v2pub.debug ('could not find record to update, rowid='||
1256                                   p_rowid);
1257         END IF;
1258         */
1259         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1260            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'could not find record to update, rowid='||p_rowid,
1261                                p_msg_level=>fnd_log.level_statement);
1262         END IF;
1263 
1264         RAISE NO_DATA_FOUND;
1265       ELSE
1266         CLOSE c_update;
1267       END IF;
1268     END IF;
1269 
1270     --------------------------------------
1271     -- validate contact_point_id
1272     --------------------------------------
1273 /****Logical APIs - validation not required****/
1274   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1275     -- If primary key value is passed, check for uniqueness.
1276     -- If primary key value is not passed, it will be generated
1277     -- from sequence by table handler.
1278 
1279     IF p_create_update_flag = 'C' THEN
1280       IF p_contact_point_rec.contact_point_id IS NOT NULL AND
1281          p_contact_point_rec.contact_point_id <> fnd_api.g_miss_num
1282       THEN
1283         OPEN c_dup (p_contact_point_rec.contact_point_id);
1284         FETCH c_dup INTO l_dummy;
1285 
1286         -- key is not unique, push an error onto the stack.
1287         IF NVL(c_dup%FOUND, FALSE) THEN
1288           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
1289           fnd_message.set_token('COLUMN', 'contact_point_id');
1290           fnd_msg_pub.add;
1291           x_return_status := fnd_api.g_ret_sts_error;
1292         END IF;
1293         CLOSE c_dup;
1294 
1295         /*IF g_debug THEN
1296           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1297             'check that contact_point_id is unique during creation. ' ||
1298             ' x_return_status = ' || x_return_status, l_debug_prefix);
1299         END IF;
1300         */
1301         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1302            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'check that contact_point_id is unique during creation. ' ||
1303                                              ' x_return_status = ' || x_return_status,
1304 
1305                                   p_msg_level=>fnd_log.level_statement);
1306         END IF;
1307 
1308       END IF;
1309     END IF;
1310 
1311     /*IF g_debug THEN
1312       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1313         '(+) after validate contact_point_id ... ' ||
1314         'x_return_status = ' || x_return_status, l_debug_prefix);
1315     END IF;
1316     */
1317     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1318            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate contact_point_id ... ' ||
1319                                              'x_return_status = ' || x_return_status,
1320 
1321                                   p_msg_level=>fnd_log.level_statement);
1322     END IF;
1323   END IF;
1324 
1325     --------------------------------------
1326     -- validate contact_point_type
1327     --------------------------------------
1328 /****Logical APIs - validation not required****/
1329   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1330     -- contact_point_type is mandatory field
1331     -- Since contact_point_type is non-updateable, we only need to check
1332     -- mandatory during creation.
1333 
1334     IF p_create_update_flag = 'C' THEN
1335       validate_mandatory (
1336         p_create_update_flag     => p_create_update_flag,
1337         p_column                 => 'contact_point_type',
1338         p_column_value           => p_contact_point_rec.contact_point_type,
1339         x_return_status          => x_return_status);
1340 
1341       /*IF g_debug THEN
1342         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1343           'contact_point_type is mandatory. ' ||
1344           'x_return_status = ' || x_return_status, l_debug_prefix);
1345       END IF;
1346       */
1347       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1348            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'contact_point_type is mandatory. ' ||
1349                                                 'x_return_status = ' || x_return_status,
1350 
1351                                   p_msg_level=>fnd_log.level_statement);
1352     END IF;
1353 
1354     END IF;
1355 
1356     -- contact_point_type is non-updateable field
1357     IF p_create_update_flag = 'U' AND
1358        p_contact_point_rec.contact_point_type IS NOT NULL
1359     THEN
1360       validate_nonupdateable (
1361         p_column                 => 'contact_point_type',
1362         p_column_value           => p_contact_point_rec.contact_point_type,
1363         p_old_column_value       => l_contact_point_type,
1364         x_return_status          => x_return_status);
1365 
1366       /*IF g_debug THEN
1367         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1368           'contact_point_type is non-updateable. ' ||
1369           'x_return_status = ' || x_return_status, l_debug_prefix);
1370       END IF;
1371       */
1372       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1373            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'contact_point_type is non-updateable. ' ||
1374                                              'x_return_status = ' || x_return_status,
1375                                   p_msg_level=>fnd_log.level_statement);
1376       END IF;
1377 
1378     END IF;
1379 
1380     -- contact_point_type is lookup code in lookup type COMMUNICATION_TYPE
1381     -- Since contact_point_type is non-updateable, we only need to do checking
1382     -- in creation mode.
1383 
1384     IF p_create_update_flag = 'C' THEN
1385       validate_lookup (
1386         p_column                 => 'contact_point_type',
1387         p_lookup_type            => 'COMMUNICATION_TYPE',
1388         p_column_value           => p_contact_point_rec.contact_point_type,
1389         x_return_status          => x_return_status);
1390 
1391       /*IF g_debug THEN
1392         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1393           'contact_point_type is lookup code in lookup type COMMUNICATION_TYPE. ' ||
1394           'x_return_status = ' || x_return_status, l_debug_prefix);
1395       END IF;
1396       */
1397       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1398            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'contact_point_type is lookup code in lookup type COMMUNICATION_TYPE. ' ||
1399                                              'x_return_status = ' || x_return_status,
1400                                   p_msg_level=>fnd_log.level_statement);
1401       END IF;
1402 
1403     END IF;
1404 
1405     /*IF g_debug THEN
1406       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1407         '(+) after validate contact_point_type ... ' ||
1408         'x_return_status = ' || x_return_status, l_debug_prefix);
1409     END IF;
1410     */
1411     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1412            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate contact_point_type ... ' ||
1413                                                 'x_return_status = ' || x_return_status,
1414                                   p_msg_level=>fnd_log.level_statement);
1415     END IF;
1416   END IF;
1417 
1418     --------------------------------------
1419     -- validate owner_table_name
1420     --------------------------------------
1421 /****Logical APIs - validation not required****/
1422   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1423     -- owner_table_name is mandatory field
1424     -- Since owner_table_name is non-updateable, we only need to check
1425     -- mandatory during creation.
1426 
1427     IF p_create_update_flag = 'C' THEN
1428       validate_mandatory (
1429         p_create_update_flag     => p_create_update_flag,
1430         p_column                 => 'owner_table_name',
1431         p_column_value           => p_contact_point_rec.owner_table_name,
1432         x_return_status          => x_return_status);
1433 
1434       /*IF g_debug THEN
1435         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1436           'owner_table_name is mandatory. ' ||
1437           'x_return_status = ' || x_return_status, l_debug_prefix);
1438       END IF;
1439       */
1440       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1441            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'owner_table_name is mandatory. ' ||
1442                                              'x_return_status = ' || x_return_status,
1443                                   p_msg_level=>fnd_log.level_statement);
1444       END IF;
1445 
1446     END IF;
1447 
1448     -- owner_table_name is non-updateable field
1449     IF p_create_update_flag = 'U' AND
1450        p_contact_point_rec.owner_table_name IS NOT NULL
1451     THEN
1452       validate_nonupdateable (
1453         p_column                 => 'owner_table_name',
1454         p_column_value           => p_contact_point_rec.owner_table_name,
1455         p_old_column_value       => l_owner_table_name,
1456         x_return_status          => x_return_status);
1457 
1458       /*IF g_debug THEN
1459         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1460           'owner_table_name is non-updateable. ' ||
1461           'x_return_status = ' || x_return_status, l_debug_prefix);
1462       END IF;
1463       */
1464       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1465            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'owner_table_name is non-updateable. ' ||
1466                                              'x_return_status = ' || x_return_status,
1467                                   p_msg_level=>fnd_log.level_statement);
1468       END IF;
1469 
1470     END IF;
1471 
1472     -- owner_table_name is lookup code in lookup type OWNER_TABLE_NAME
1473     -- Since owner_table_name is non-updateable, we only need to do checking
1474     -- in creation mode.
1475 
1476     IF p_create_update_flag = 'C' THEN
1477       validate_lookup (
1478         p_column                 => 'owner_table_name',
1479         p_lookup_type            => 'OWNER_TABLE_NAME',
1480         p_column_value           => p_contact_point_rec.owner_table_name,
1481         x_return_status          => x_return_status);
1482 
1483       /*IF g_debug THEN
1484         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1485           'owner_table_name is lookup code in lookup type OWNER_TABLE_NAME. ' ||
1486           'x_return_status = ' || x_return_status, l_debug_prefix);
1487       END IF;
1488       */
1489       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1490            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'owner_table_name is lookup code in lookup type OWNER_TABLE_NAME. ' ||
1491                                              'x_return_status = ' || x_return_status,
1492                                   p_msg_level=>fnd_log.level_statement);
1493       END IF;
1494 
1495     END IF;
1496 
1497     /*IF g_debug THEN
1498       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1499         '(+) after validate owner_table_name ... ' ||
1500         'x_return_status = ' || x_return_status, l_debug_prefix);
1501     END IF;
1502     */
1503     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1504            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate owner_table_name ... ' ||
1505                                              'x_return_status = ' || x_return_status,
1506                                   p_msg_level=>fnd_log.level_statement);
1507     END IF;
1508   END IF;
1509 
1510     --------------------------------------
1511     -- validate owner_table_id
1512     --------------------------------------
1513 /****Logical APIs - validation not required****/
1514   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1515     -- owner_table_id is mandatory field
1516     -- Since owner_table_id is non-updateable, we only need to check mandatory
1517     -- during creation.
1518 
1519     IF p_create_update_flag = 'C' THEN
1520       validate_mandatory (
1521         p_create_update_flag     => p_create_update_flag,
1522         p_column                 => 'owner_table_id',
1523         p_column_value           => p_contact_point_rec.owner_table_id,
1524         x_return_status          => x_return_status);
1525 
1526       /*IF g_debug THEN
1527         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1528           'owner_table_id is mandatory. ' ||
1529           'x_return_status = ' || x_return_status, l_debug_prefix);
1530       END IF;
1531       */
1532       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1533            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'owner_table_id is mandatory. ' ||
1534                                              'x_return_status = ' || x_return_status,
1535                                   p_msg_level=>fnd_log.level_statement);
1536       END IF;
1537 
1538     END IF;
1539 
1540     -- owner_table_id is non-updateable field
1541     IF p_create_update_flag = 'U' AND
1542        p_contact_point_rec.owner_table_id IS NOT NULL
1543     THEN
1544       validate_nonupdateable (
1545         p_column                 => 'owner_table_id',
1546         p_column_value           => p_contact_point_rec.owner_table_id,
1547         p_old_column_value       => l_owner_table_id,
1548         x_return_status          => x_return_status);
1549 
1550       /*IF g_debug THEN
1551         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1552           'owner_table_id is non-updateable. ' ||
1553           'x_return_status = ' || x_return_status, l_debug_prefix);
1554       END IF;
1555       */
1556       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1557            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'owner_table_id is non-updateable. ' ||
1558                                              'x_return_status = ' || x_return_status,
1559                                   p_msg_level=>fnd_log.level_statement);
1560       END IF;
1561 
1562     END IF;
1563 
1564     -- owner_table_id is foreign key of hz_parties if
1565     -- owner_table_name = HZ_PARTIES and is foreign key
1566     -- of hz_party_sites if owner_table_name = HZ_PARTY_SITES.
1567 
1568     -- Do not need to check during update because owner_table_id is
1569     -- non-updateable.
1570     IF p_create_update_flag = 'C' THEN
1571       IF p_contact_point_rec.owner_table_name = 'HZ_PARTIES' THEN
1572         OPEN c_pexist(p_contact_point_rec.owner_table_id);
1573         FETCH c_pexist INTO l_fk_exist;
1574 
1575         IF c_pexist%NOTFOUND THEN
1576           l_fk_exist := 'N';
1577           l_fk_column := 'party_id';
1578         END IF;
1579 
1580         CLOSE c_pexist;
1581       ELSIF p_contact_point_rec.owner_table_name = 'HZ_PARTY_SITES' THEN
1582         OPEN c_psexist(p_contact_point_rec.owner_table_id);
1583         FETCH c_psexist INTO l_fk_exist;
1584 
1585         IF c_psexist%NOTFOUND THEN
1586           l_fk_exist := 'N';
1587           l_fk_column := 'party_site_id';
1588         END IF;
1589 
1590         CLOSE c_psexist;
1591       ELSE
1592         l_fk_exist := 'Y';
1593       END IF;
1594 
1595       IF l_fk_exist = 'N' THEN
1596         fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
1597         fnd_message.set_token('FK', 'owner_table_id');
1598         fnd_message.set_token('COLUMN', l_fk_column);
1599         fnd_message.set_token('TABLE',
1600                               LOWER(p_contact_point_rec.owner_table_name));
1601         fnd_msg_pub.add;
1602         x_return_status := fnd_api.g_ret_sts_error;
1603       END IF;
1604 
1605       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1606        hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1607        p_message=>'owner_table_id is foreign key of hz_parties if owner_table_name = HZ_PARTIES and is foreign key of hz_party_sites if owner_table_name = HZ_PARTY_SITES. ' ||
1608                              'x_return_status = ' || x_return_status,
1609                                   p_msg_level=>fnd_log.level_statement);
1610       END IF;
1611 
1612     END IF;
1613 
1614     /*IF g_debug THEN
1615       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1616         '(+) after validate owner_table_id ... ' ||
1617         'x_return_status = ' || x_return_status, l_debug_prefix);
1618     END IF;
1619     */
1620     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1621            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate owner_table_id ... ' ||
1622                                              'x_return_status = ' || x_return_status,
1623                                   p_msg_level=>fnd_log.level_statement);
1624     END IF;
1625   END IF;
1626 
1627     --------------------------------------
1628     -- validate orig_system_reference
1629     --------------------------------------
1630 /****Logical APIs - validation not required****/
1631   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1632     IF (p_contact_point_rec.orig_system is not null
1633          and p_contact_point_rec.orig_system <>fnd_api.g_miss_char)
1634        and (p_contact_point_rec.orig_system_reference is not null
1635          and p_contact_point_rec.orig_system_reference <>fnd_api.g_miss_char)
1636          and p_create_update_flag = 'U'
1637     then
1638         hz_orig_system_ref_pub.get_owner_table_id
1639                         (p_orig_system => p_contact_point_rec.orig_system,
1640                         p_orig_system_reference => p_contact_point_rec.orig_system_reference,
1641                         p_owner_table_name => 'HZ_CONTACT_POINTS',
1642                         x_owner_table_id => l_mosr_owner_table_id,
1643                         x_return_status => l_temp_return_status);
1644 
1645         IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
1646 		    l_mosr_owner_table_id= nvl(p_contact_point_rec.contact_point_id,l_mosr_owner_table_id))
1647         THEN
1648                 l_validate_osr := 'N';
1649         -- if we can get owner_table_id based on osr and os in mosr table,
1650         -- we will use unique osr and os for update - bypass osr validation
1651         ELSE l_validate_osr := 'Y';
1652         END IF;
1653 
1654         -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
1655 		-- x_return_status. Set x_return_status to error, ONLY if there is error.
1656 		-- In case of success, leave it to carry over previous value as before this call.
1657 		-- Fix for Bug 5498116 (29-AUG-2006)
1658         IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
1659           x_return_status := l_temp_return_status;
1660         END IF;
1661 
1662     end if;
1663     -- orig_system_reference is non-updateable field
1664     IF p_create_update_flag = 'U' AND
1665        p_contact_point_rec.orig_system_reference IS NOT NULL and l_validate_osr = 'Y'
1666     THEN
1667       validate_nonupdateable (
1668         p_column                 => 'orig_system_reference',
1669         p_column_value           => p_contact_point_rec.orig_system_reference,
1670         p_old_column_value       => l_orig_system_reference,
1671         x_return_status          => x_return_status);
1672 
1673       /*IF g_debug THEN
1674         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1675           'orig_system_reference is non-updateable. ' ||
1676           'x_return_status = ' || x_return_status, l_debug_prefix);
1677       END IF;
1678       */
1679 
1680       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1681            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is non-updateable. ' ||
1682                                              'x_return_status = ' || x_return_status,
1683                                   p_msg_level=>fnd_log.level_statement);
1684       END IF;
1685 
1686     END IF;
1687 
1688     /*IF g_debug THEN
1689       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1690         '(+) after validate orig_system_reference ... ' ||
1691         'x_return_status = ' || x_return_status, l_debug_prefix);
1692     END IF;
1693     */
1694     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1695            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate orig_system_reference ... ' ||
1696                                              'x_return_status = ' || x_return_status,
1697                                   p_msg_level=>fnd_log.level_statement);
1698     END IF;
1699   END IF;
1700 
1701     /* Bug 2197181: removed content_source_type validation as this
1702        column has been obsoleted for mix-n-match project.
1703 
1704     --------------------------------------
1705     -- validate content_source_type
1706     --------------------------------------
1707 
1708     -- do not need to check content_source_type is mandatory because
1709     -- we default content_source_type to hz_party_v2pub.g_miss_content_source_type
1710     -- in table handler.
1711 
1712     -- content_source_type is non-updateable
1713     IF p_create_update_flag = 'U' THEN
1714       validate_nonupdateable (
1715         p_column                 => 'content_source_type',
1716         p_column_value           => p_contact_point_rec.content_source_type,
1717         p_old_column_value       => l_content_source_type,
1718         x_return_status          => x_return_status);
1719 
1720 
1721       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1722            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'content_source_type is non-updateable. ' ||
1723                                              'x_return_status = ' || x_return_status,
1724                                   p_msg_level=>fnd_log.level_statement);
1725       END IF;
1726 
1727     END IF;
1728 
1729     -- content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE
1730     IF p_create_update_flag = 'C' AND
1731        p_contact_point_rec.content_source_type <>
1732          hz_party_v2pub.g_miss_content_source_type
1733     THEN
1734       validate_lookup (
1735         p_column                 => 'content_source_type',
1736         p_lookup_type            => 'CONTENT_SOURCE_TYPE',
1737         p_column_value           => p_contact_point_rec.content_source_type,
1738         x_return_status          => x_return_status);
1739 
1740       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1741            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE. ' ||
1742                                              'x_return_status = ' || x_return_status,
1743                                   p_msg_level=>fnd_log.level_statement);
1744       END IF;
1745 
1746     END IF;
1747 
1748 
1749     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1750            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate content_source_type ... ' ||
1751                                              'x_return_status = ' || x_return_status,
1752                                   p_msg_level=>fnd_log.level_statement);
1753     END IF;
1754 
1755 
1756     */
1757 
1758     -- Bug 2197181: Added validation for mix-n-match
1759 
1760     ----------------------------------------
1761     -- validate content_source_type and actual_content_source_type
1762     ----------------------------------------
1763 
1764     HZ_MIXNM_UTILITY.ValidateContentSource (
1765       p_api_version                       => 'V2',
1766       p_create_update_flag                => p_create_update_flag,
1767       p_check_update_privilege            => 'N',
1768       p_content_source_type               => p_contact_point_rec.content_source_type,
1769       p_old_content_source_type           => l_content_source_type,
1770       p_actual_content_source             => p_contact_point_rec.actual_content_source,
1771       p_old_actual_content_source         => db_actual_content_source,
1772       p_entity_name                       => 'HZ_CONTACT_POINTS',
1773       x_return_status                     => x_return_status );
1774 
1775     --------------------------------------
1776     -- validate status
1777     --------------------------------------
1778 
1779     -- status cannot be set to null during update
1780     IF p_create_update_flag = 'U' AND
1781        p_contact_point_rec.status IS NOT NULL
1782     THEN
1783       validate_cannot_update_to_null (
1784         p_column                 => 'status',
1785         p_column_value           => p_contact_point_rec.status,
1786         x_return_status          => x_return_status);
1787 
1788       /*IF g_debug THEN
1789         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1790           'Status cannot be updated to null. ' ||
1791           'x_return_status = ' || x_return_status, l_debug_prefix);
1792       END IF;
1793       */
1794       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1795            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'Status cannot be updated to null. ' ||
1796                                              'x_return_status = ' || x_return_status,
1797                                   p_msg_level=>fnd_log.level_statement);
1798       END IF;
1799 
1800     END IF;
1801 
1802 /****Logical APIs - validation not required****/
1803   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1804     -- status is lookup code in lookup type REGISTRY_STATUS
1805     IF p_contact_point_rec.status IS NOT NULL AND
1806        p_contact_point_rec.status <> fnd_api.g_miss_char AND
1807        (p_create_update_flag = 'C' OR
1808         (p_create_update_flag = 'U' AND
1809          p_contact_point_rec.status <> NVL(l_status, fnd_api.g_miss_char)))
1810     THEN
1811       validate_lookup (
1812         p_column                 => 'status',
1813         p_lookup_type            => 'REGISTRY_STATUS',
1814         p_column_value           => p_contact_point_rec.status,
1815         x_return_status          => x_return_status);
1816 
1817       /*IF g_debug THEN
1818         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1819           'status is lookup code in lookup type REGISTRY_STATUS. ' ||
1820           'x_return_status = ' || x_return_status, l_debug_prefix);
1821       END IF;
1822       */
1823       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1824            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
1825                                               'x_return_status = ' || x_return_status,
1826                                   p_msg_level=>fnd_log.level_statement);
1827       END IF;
1828 
1829     END IF;
1830   END IF;
1831 
1832     /*IF g_debug THEN
1833       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1834         '(+) after validate status ... ' ||
1835         'x_return_status = ' || x_return_status, l_debug_prefix);
1836     END IF;
1837     */
1838     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1839            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate status ... ' ||
1840                                              'x_return_status = ' || x_return_status,
1841                                   p_msg_level=>fnd_log.level_statement);
1842     END IF;
1843 
1844 
1845     --------------------------------------
1846     -- validate primary_flag
1847     --------------------------------------
1848 /****Logical APIs - validation not required****/
1849   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
1850     -- primary_flag is lookup code in lookup type YES/NO
1851     IF p_contact_point_rec.primary_flag IS NOT NULL AND
1852        p_contact_point_rec.primary_flag <> fnd_api.g_miss_char
1853     THEN
1854       validate_lookup (
1855         p_column                 => 'primary_flag',
1856         p_lookup_type            => 'YES/NO',
1857         p_column_value           => p_contact_point_rec.primary_flag,
1858         x_return_status          => x_return_status);
1859 
1860       /*IF g_debug THEN
1861         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1862           'primary_flag is lookup code in lookup type YES/NO. ' ||
1863           'x_return_status = ' || x_return_status, l_debug_prefix);
1864       END IF;
1865       */
1866       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1867            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_flag is lookup code in lookup type YES/NO. ' ||
1868                                              'x_return_status = ' || x_return_status,
1869                                   p_msg_level=>fnd_log.level_statement);
1870       END IF;
1871 
1872     END IF;
1873   END IF;
1874 
1875     -- check to ensure that an inactive contact is never marked
1876     -- as primary.
1877     IF p_create_update_flag = 'C' THEN
1878       IF p_contact_point_rec.primary_flag IS NULL OR
1879          p_contact_point_rec.primary_flag = fnd_api.g_miss_char
1880       THEN
1881         l_primary_flag := 'N';
1882       ELSE
1883         l_primary_flag := p_contact_point_rec.primary_flag;
1884       END IF;
1885 
1886       IF p_contact_point_rec.status IS NULL OR
1887          p_contact_point_rec.status = fnd_api.g_miss_char
1888       THEN
1889         l_status := 'A';
1890       ELSE
1891         l_status := p_contact_point_rec.status;
1892       END IF;
1893 
1894       IF l_primary_flag = 'Y' AND l_status <> 'A' THEN
1895         l_error := TRUE;
1896       END IF;
1897     ELSE
1898       IF p_contact_point_rec.primary_flag = 'Y' AND
1899          /* Bug Fix: 4203495 */
1900          l_primary_flag <> 'Y'                  AND
1901          ((p_contact_point_rec.status IS NOT NULL AND
1902            p_contact_point_rec.status <> 'A') OR
1903           (p_contact_point_rec.status IS NULL AND
1904            l_status <> 'A'))
1905       THEN
1906         l_error := TRUE;
1907       END IF;
1908     END IF;
1909 
1910     IF l_error THEN
1911       fnd_message.set_name('AR', 'HZ_API_INACTIVE_NOT_PRIMARY');
1912       fnd_msg_pub.add;
1913       x_return_status := fnd_api.g_ret_sts_error;
1914       -- reset l_error for later use.
1915           l_error := FALSE;
1916     END IF;
1917 
1918     /*IF g_debug THEN
1919       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1920         'an inactive contact is never marked as primary. ' ||
1921         'x_return_status = ' || x_return_status, l_debug_prefix);
1922     END IF;
1923     */
1924     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1925            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'an inactive contact is never marked as primary. ' ||
1926                                              'x_return_status = ' || x_return_status,
1927                                   p_msg_level=>fnd_log.level_statement);
1928     END IF;
1929 
1930     -- check to ensure that an inactive contact is never marked
1931     -- as preferred.
1932     IF p_create_update_flag = 'C' THEN
1933       IF p_contact_point_rec.primary_by_purpose IS NULL OR
1934          p_contact_point_rec.primary_by_purpose = fnd_api.g_miss_char
1935       THEN
1936         l_preferred_flag := 'N';
1937       ELSE
1938         l_preferred_flag := p_contact_point_rec.primary_by_purpose;
1939       END IF;
1940       IF l_preferred_flag = 'Y' AND l_status <> 'A' THEN
1941         l_error := TRUE;
1942       END IF;
1943     ELSE
1944       IF p_contact_point_rec.primary_by_purpose = 'Y' AND
1945          ((p_contact_point_rec.status IS NOT NULL AND
1946            p_contact_point_rec.status <> 'A') OR
1947           (p_contact_point_rec.status IS NULL AND
1948            l_status <> 'A'))
1949       THEN
1950         l_error := TRUE;
1951       END IF;
1952     END IF;
1953        IF l_error THEN
1954           fnd_message.set_name('AR', 'HZ_API_INACTIVE_NOT_PREFERRED');
1955           fnd_msg_pub.add;
1956           x_return_status := fnd_api.g_ret_sts_error;
1957 
1958           -- reset l_error for later use.
1959           l_error := FALSE;
1960        END IF;
1961     /*IF g_debug THEN
1962       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
1963         'an inactive contact is never marked as preferred. ' ||
1964         'x_return_status = ' || x_return_status, l_debug_prefix);
1965     END IF;
1966     */
1967     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1968            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'an inactive contact is never marked as preferred. ' ||
1969                                              'x_return_status = ' || x_return_status,
1970                                   p_msg_level=>fnd_log.level_statement);
1971     END IF;
1972 
1973 
1974     ---------------------------------------------------------
1975     -- validate primary_by_purpose + contact_point_purpose --
1976     -- Bug No : 1946858
1977     ---------------------------------------------------------
1978 
1979     IF (p_create_update_flag = 'C')
1980     THEN
1981        IF p_contact_point_rec.primary_by_purpose = 'Y'
1982        THEN
1983           IF (p_contact_point_rec.contact_point_purpose IS NULL OR
1984               p_contact_point_rec.contact_point_purpose = FND_API.G_MISS_CHAR)
1985           THEN
1986              -- Error
1987              FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
1988              FND_MESSAGE.SET_TOKEN('COLUMN1', 'primary_by_purpose');
1989              FND_MESSAGE.SET_TOKEN('VALUE1', 'Y');
1990              FND_MESSAGE.SET_TOKEN('COLUMN2','contact_point_purpose');
1991              FND_MSG_PUB.ADD;
1992              x_return_status := FND_API.G_RET_STS_ERROR;
1993 
1994           END IF;
1995        END IF;
1996     ELSIF (p_create_update_flag = 'U') THEN
1997         IF (  p_contact_point_rec.primary_by_purpose = 'Y' OR
1998             ( p_contact_point_rec.primary_by_purpose IS NULL AND
1999               l_primary_by_purpose = 'Y'))
2000         THEN
2001           IF ( p_contact_point_rec.contact_point_purpose = FND_API.G_MISS_CHAR OR
2002                ( p_contact_point_rec.contact_point_purpose IS NULL AND
2003                  l_contact_point_purpose IS NULL))
2004           THEN
2005             -- Error
2006              FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_MAND_DEP_FIELDS' );
2007              FND_MESSAGE.SET_TOKEN('COLUMN1', 'primary_by_purpose');
2008              FND_MESSAGE.SET_TOKEN('VALUE1', 'Y');
2009              FND_MESSAGE.SET_TOKEN('COLUMN2','contact_point_purpose');
2010              FND_MSG_PUB.ADD;
2011              x_return_status := FND_API.G_RET_STS_ERROR;
2012           END IF;
2013         END IF;
2014     END IF;
2015     /*IF g_debug THEN
2016       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2017         'Purpose cannot be NULL when the contact point is preferred ' ||'x_return_status = ' ||
2018          x_return_status, l_debug_prefix);
2019     END IF;
2020     */
2021     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2022            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2023            p_message=>'Purpose cannot be NULL when the contact point is preferred ' ||'x_return_status = ' ||
2024                                                 x_return_status,
2025                                   p_msg_level=>fnd_log.level_statement);
2026     END IF;
2027 
2028 
2029 
2030     --------------------------------------
2031     -- validate contact_point_purpose
2032     --------------------------------------
2033 
2034     -- contact_point_purpose is lookup code in lookup type CONTACT_POINT_PURPOSE
2035     -- if contact_point_type <> 'WEB'. Please note, contact_point_type is
2036     -- mandatory and non-updateable.
2037 
2038     IF ((p_contact_point_rec.contact_point_type <> 'WEB' AND
2039          p_create_update_flag = 'C') OR
2040         (l_contact_point_type <> 'WEB' AND
2041          p_create_update_flag = 'U')) AND
2042         p_contact_point_rec.contact_point_purpose IS NOT NULL AND
2043         p_contact_point_rec.contact_point_purpose <> fnd_api.g_miss_char AND
2044         (p_create_update_flag = 'C' OR
2045          (p_create_update_flag = 'U' AND
2046           p_contact_point_rec.contact_point_purpose <>
2047             NVL(l_contact_point_purpose, fnd_api.g_miss_char)))
2048     THEN
2049       validate_lookup (
2050         p_column                 => 'contact_point_purpose',
2051         p_lookup_type            => 'CONTACT_POINT_PURPOSE',
2052         p_column_value           => p_contact_point_rec.contact_point_purpose,
2053         x_return_status          => x_return_status);
2054 
2055       /*IF g_debug THEN
2056         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2057           'contact_point_purpose is lookup code in lookup type CONTACT_POINT_PURPOSE if contact_point_type <> WEB. ' ||
2058           'x_return_status = ' || x_return_status, l_debug_prefix);
2059       END IF;
2060       */
2061       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2062            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2063            p_message=>'contact_point_purpose is lookup code in lookup type CONTACT_POINT_PURPOSE if contact_point_type <> WEB. ' ||
2064                                                 'x_return_status = ' || x_return_status,
2065                                   p_msg_level=>fnd_log.level_statement);
2066       END IF;
2067 
2068     END IF;
2069 
2070     /*IF g_debug THEN
2071       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2072         '(+) after validate contact_point_purpose ... ' ||
2073         'x_return_status = ' || x_return_status, l_debug_prefix);
2074     END IF;
2075     */
2076     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2077            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate contact_point_purpose ... ' ||
2078                                              'x_return_status = ' || x_return_status,
2079 
2080                                   p_msg_level=>fnd_log.level_statement);
2081     END IF;
2082 
2083 
2084     --------------------------------------
2085     -- validate primary_by_purpose
2086     --------------------------------------
2087 
2088     -- primary_by_purpose is lookup code in lookup type YES/NO
2089     IF p_contact_point_rec.primary_by_purpose IS NOT NULL AND
2090        p_contact_point_rec.primary_by_purpose <> fnd_api.g_miss_char
2091     THEN
2092       validate_lookup (
2093         p_column                 => 'primary_by_purpose',
2094         p_lookup_type            => 'YES/NO',
2095         p_column_value           => p_contact_point_rec.primary_by_purpose,
2096         x_return_status          => x_return_status);
2097 
2098       /*IF g_debug THEN
2099         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2100           'primary_by_purpose is lookup code in lookup type YES/NO. ' ||
2101           'x_return_status = ' || x_return_status, l_debug_prefix);
2102       END IF;
2103       */
2104       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2105            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2106            p_message=>'primary_by_purpose is lookup code in lookup type YES/NO. ' ||
2107                                              'x_return_status = ' || x_return_status,
2108                                   p_msg_level=>fnd_log.level_statement);
2109       END IF;
2110 
2111     END IF;
2112 
2113     /*IF g_debug THEN
2114       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2115         '(+) after validate primary_by_purpose ... ' ||
2116         'x_return_status = ' || x_return_status, l_debug_prefix);
2117     END IF;
2118     */
2119     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2120            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate primary_by_purpose ... ' ||
2121                                              'x_return_status = ' || x_return_status,
2122                                   p_msg_level=>fnd_log.level_statement);
2123     END IF;
2124 
2125 
2126     --------------------------------------
2127     -- validate created_by_module
2128     --------------------------------------
2129 
2130     validate_created_by_module(
2131       p_create_update_flag     => p_create_update_flag,
2132       p_created_by_module      => p_contact_point_rec.created_by_module,
2133       p_old_created_by_module  => l_created_by_module,
2134       x_return_status          => x_return_status);
2135 
2136     --------------------------------------
2137     -- validate application_id
2138     --------------------------------------
2139 
2140     validate_application_id(
2141       p_create_update_flag     => p_create_update_flag,
2142       p_application_id         => p_contact_point_rec.application_id,
2143       p_old_application_id     => l_application_id,
2144       x_return_status          => x_return_status);
2145 
2146     --------------------------------------
2147     -- validation based on different contact point type
2148     --------------------------------------
2149 
2150     -- l_contact_point_type is equal to p_contact_point_rec.contact_point_type
2151     -- during creation and is database value during update. Please note,
2152     -- contact_point_type is mandatory and non-updateable.
2153 
2154     IF l_contact_point_type = 'EDI' THEN
2155 
2156       --------------------------------------
2157       -- validate edi_id_number
2158       --------------------------------------
2159 -- Bug 2384750. Commented the mandatory check on edi_id_number.
2160 /**
2161   -- edi_id_number is mandatory field.
2162       validate_mandatory (
2163         p_create_update_flag     => p_create_update_flag,
2164         p_column                 => 'edi_id_number',
2165         p_column_value           => p_edi_rec.edi_id_number,
2166         x_return_status          => x_return_status);
2167 
2168 
2169       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2170            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2171            p_message=>'EDI : edi_id_number is mandatory. ' ||
2172                                              'x_return_status = ' || x_return_status,
2173                                   p_msg_level=>fnd_log.level_statement);
2174       END IF;
2175 
2176 **/
2177       --------------------------------------
2178       -- validate edi party type only when the record is being created.
2179       --------------------------------------
2180 
2181       IF p_create_update_flag = 'C' THEN
2182         validate_party_type(
2183           p_table_name          => p_contact_point_rec.owner_table_name,
2184           p_party_id            => p_contact_point_rec.owner_table_id,
2185           p_contact_point_type  => l_contact_point_type,
2186           x_return_status       => x_return_status
2187         );
2188       END IF;
2189     ELSIF l_contact_point_type = 'EFT' THEN
2190       -- Bug 2116225: no validations currently required.  This code is just
2191       -- currently just a placeholder.
2192       -- Bug 6367289: validation added - EFT contact point can be assigned
2193       -- to organization party type only.
2194       --NULL;
2195       IF p_create_update_flag = 'C' THEN
2196               validate_party_type(
2197                 p_table_name          => p_contact_point_rec.owner_table_name,
2198                 p_party_id            => p_contact_point_rec.owner_table_id,
2199                 p_contact_point_type  => l_contact_point_type,
2200                 x_return_status       => x_return_status
2201               );
2202       END IF;
2203     ELSIF l_contact_point_type = 'EMAIL' THEN
2204 
2205       --------------------------------------
2206       -- validate email_format
2207       --------------------------------------
2208 
2209       -- email_format is mandatory but can be defaulted to MAILHTML during
2210       -- creation. It should be 'cannot_update_to_null' during update.
2211 
2212       IF p_create_update_flag = 'U' AND
2213          p_email_rec.email_format IS NOT NULL
2214       THEN
2215         validate_cannot_update_to_null (
2216           p_column                 => 'email_format',
2217           p_column_value           => p_email_rec.email_format,
2218           x_return_status          => x_return_status);
2219 
2220         /*IF g_debug THEN
2221           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2222             'EMAIL : email_format cannot be updated to null. ' ||
2223             'x_return_status = ' || x_return_status, l_debug_prefix);
2224         END IF;
2225         */
2226         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2227            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2228            p_message=>'EMAIL : email_format cannot be updated to null. ' ||
2229                                                 'x_return_status = ' || x_return_status,
2230                                   p_msg_level=>fnd_log.level_statement);
2231         END IF;
2232 
2233       END IF;
2234         --  Bug 4226199 : check update privilege for email also
2235       IF p_create_update_flag = 'U' AND
2236       db_actual_content_source <> 'USER_ENTERED' THEN
2237           l_return_status := FND_API.G_RET_STS_SUCCESS;
2238           validate_nonupdateable (
2239           p_column                 => 'email_address',
2240           p_column_value           => p_email_rec.email_address,
2241           p_old_column_value       => l_email_address,
2242           x_return_status          => l_return_status,
2243           p_raise_error            => 'N');
2244 
2245           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2246 		HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege(
2247 		p_actual_content_source    => db_actual_content_source,
2248 		p_new_actual_content_source=> p_contact_point_rec.actual_content_source,
2249 		p_entity_name              => 'HZ_CONTACT_POINTS',
2250 		x_return_status            => x_return_status);
2251 -- Bug 4693719 : set global variable to Y
2252          HZ_UTILITY_V2PUB.G_UPDATE_ACS := 'Y';
2253          END IF;
2254         END IF;
2255 
2256 
2257       -- email_format is lookup code in lookup type EMAIL_FORMAT
2258       IF p_email_rec.email_format IS NOT NULL AND
2259          p_email_rec.email_format <> fnd_api.g_miss_char AND
2260          (p_create_update_flag = 'C' OR
2261           (p_create_update_flag = 'U' AND
2262            p_email_rec.email_format <>
2263              NVL(l_email_format, fnd_api.g_miss_char)))
2264       THEN
2265         validate_lookup (
2266           p_column                 => 'email_format',
2267           p_lookup_type            => 'EMAIL_FORMAT',
2268           p_column_value           => p_email_rec.email_format,
2269           x_return_status          => x_return_status);
2270 
2271         /*IF g_debug THEN
2272           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2273             'EMAIL : email_format is lookup code in lookup type EMAIL_FORMAT. '
2274             || 'x_return_status = ' || x_return_status, l_debug_prefix);
2275         END IF;
2276         */
2277         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2278            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2279            p_message=>'EMAIL : email_format is lookup code in lookup type EMAIL_FORMAT. '
2280                                                 || 'x_return_status = ' || x_return_status,
2281                                   p_msg_level=>fnd_log.level_statement);
2282         END IF;
2283 
2284       END IF;
2285 
2286       /*IF g_debug THEN
2287         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2288           '(+) after validate email_format ... ' ||
2289           'x_return_status = ' || x_return_status, l_debug_prefix);
2290       END IF;
2291       */
2292       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2293            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2294            p_message=>'(+) after validate email_format ... ' ||
2295                                              'x_return_status = ' || x_return_status,
2296                                   p_msg_level=>fnd_log.level_statement);
2297       END IF;
2298 
2299 
2300       --------------------------------------
2301       -- validate email_address
2302       --------------------------------------
2303 
2304       -- email_address is mandatory field.
2305       validate_mandatory (
2306         p_create_update_flag     => p_create_update_flag,
2307         p_column                 => 'email_address',
2308         p_column_value           => p_email_rec.email_address,
2309         x_return_status          => x_return_status);
2310 
2311       /*IF g_debug THEN
2312         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2313           'EMAIL : email_address is mandatory. ' ||
2314           'x_return_status = ' || x_return_status, l_debug_prefix);
2315       END IF;
2316       */
2317       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2318            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2319            p_message=>'EMAIL : email_address is mandatory. ' ||
2320                                                 'x_return_status = ' || x_return_status,
2321                                   p_msg_level=>fnd_log.level_statement);
2322       END IF;
2323 
2324 
2325     ELSIF l_contact_point_type = 'PHONE' THEN
2326 
2327       --------------------------------------
2328       -- validate phone_number and raw_phone_number
2329       --------------------------------------
2330 
2331       -- phone_number and phone_area_code or raw_phone_umber must be
2332       -- passed in. However, you can not pass both two.
2333 
2334       IF p_create_update_flag = 'C' THEN
2335         IF ((p_phone_rec.phone_number IS NULL OR
2336              p_phone_rec.phone_number = fnd_api.g_miss_char) AND
2337             (p_phone_rec.raw_phone_number IS NULL OR
2338              p_phone_rec.raw_phone_number = fnd_api.g_miss_char)) OR
2339             ((p_phone_rec.phone_number IS NOT NULL AND
2340               p_phone_rec.phone_number <> fnd_api.g_miss_char) AND
2341              (p_phone_rec.raw_phone_number IS NOT NULL AND
2342               p_phone_rec.raw_phone_number <> fnd_api.g_miss_char))
2343         THEN
2344           l_error := TRUE;
2345         END IF;
2346       ELSE
2347         IF p_phone_rec.phone_number IS NOT NULL AND
2348            p_phone_rec.raw_phone_number IS NOT NULL AND
2349            ((p_phone_rec.phone_number = fnd_api.g_miss_char AND
2350              p_phone_rec.raw_phone_number = fnd_api.g_miss_char) OR
2351              (p_phone_rec.phone_number <> fnd_api.g_miss_char AND
2352               p_phone_rec.raw_phone_number <> fnd_api.g_miss_char))
2353         THEN
2354           l_error := TRUE;
2355         END IF;
2356       END IF;
2357 
2358       IF l_error THEN
2359         fnd_message.set_name('AR', 'HZ_INVALID_PHONE_PARAMETER');
2360         fnd_msg_pub.add;
2361         x_return_status := fnd_api.g_ret_sts_error;
2362 
2363         -- Reset l_error for later use.
2364         l_error := TRUE;
2365       END IF;
2366       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2367            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2368            p_message=>'PHONE : phone_number and phone_area_code or raw_phone_umber must be passed in. However, you can not pass both two. ' || 'x_return_status = ' || x_return_status,
2369                                   p_msg_level=>fnd_log.level_statement);
2370       END IF;
2371 
2372 
2373       --------------------------------------
2374       -- validate phone_line_type
2375       --------------------------------------
2376 
2377       -- phone_line_type is mandatory field.
2378       validate_mandatory (
2379         p_create_update_flag     => p_create_update_flag,
2380         p_column                 => 'phone_line_type',
2381         p_column_value           => p_phone_rec.phone_line_type,
2382         x_return_status          => x_return_status);
2383 
2384       /*IF g_debug THEN
2385         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2386           'PHONE : phone_line_type is mandatory. ' ||
2387           'x_return_status = ' || x_return_status, l_debug_prefix);
2388       END IF;
2389       */
2390       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2391            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'PHONE : phone_line_type is mandatory. ' ||
2392                                              'x_return_status = ' || x_return_status,
2393                                   p_msg_level=>fnd_log.level_statement);
2394       END IF;
2395 
2396 
2397       -- phone_line_type is lookup code in lookup type PHONE_LINE_TYPE
2398       IF p_phone_rec.phone_line_type IS NOT NULL AND
2399          p_phone_rec.phone_line_type <> fnd_api.g_miss_char AND
2400          (p_create_update_flag = 'C' OR
2401           (p_create_update_flag = 'U' AND
2402            p_phone_rec.phone_line_type <> NVL(l_phone_line_type,
2403                                               fnd_api.g_miss_char)))
2404       THEN
2405         validate_lookup (
2406           p_column                 => 'phone_line_type',
2407           p_lookup_type            => 'PHONE_LINE_TYPE',
2408           p_column_value           => p_phone_rec.phone_line_type,
2409           x_return_status          => x_return_status);
2410 
2411         /*IF g_debug THEN
2412           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2413             'PHONE : phone_line_type is lookup code in lookup type PHONE_LINE_TYPE. ' ||
2414             'x_return_status = ' || x_return_status, l_debug_prefix);
2415         END IF;
2416         */
2417         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2418            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2419            p_message=>'PHONE : phone_line_type is lookup code in lookup type PHONE_LINE_TYPE. ' ||
2420                                              'x_return_status = ' || x_return_status,
2421                                   p_msg_level=>fnd_log.level_statement);
2422         END IF;
2423 
2424       END IF;
2425 
2426       /*IF g_debug THEN
2427         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2428           '(+) after validate phone_line_type ... ' ||
2429           'x_return_status = ' || x_return_status, l_debug_prefix);
2430       END IF;
2431       */
2432       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2433            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate phone_line_type ... ' ||
2434                                         'x_return_status = ' || x_return_status,
2435                                   p_msg_level=>fnd_log.level_statement);
2436       END IF;
2437 
2438 
2439       --------------------------------------
2440       -- validate timezone_id
2441       --------------------------------------
2442 
2443       -- timezone_id is foreign key of hz_timezones
2444       IF p_phone_rec.timezone_id IS NOT NULL AND
2445          p_phone_rec.timezone_id <> fnd_api.g_miss_num
2446       THEN
2447         OPEN c_timezone(p_phone_rec.timezone_id);
2448         FETCH c_timezone INTO l_dummy;
2449 
2450         IF c_timezone%NOTFOUND THEN--updated against bug 7046491
2451           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
2452           fnd_message.set_token('FK', 'upgrade_tz_id');
2453           fnd_message.set_token('COLUMN', 'upgrade_tz_id');
2454           fnd_message.set_token('TABLE', 'fnd_timezones_vl');
2455           fnd_msg_pub.add;
2456           x_return_status := fnd_api.g_ret_sts_error;
2457         END IF;
2458 
2459         CLOSE c_timezone;
2460 
2461         /*IF g_debug THEN
2462           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2463             'PHONE : timezone_id is foreign key of hz_timezones. ' ||
2464             'x_return_status = ' || x_return_status, l_debug_prefix);
2465         END IF;
2466         */
2467         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2468            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2469            p_message=>'PHONE : timezone_id is foreign key of hz_timezones. ' ||
2470                                          'x_return_status = ' || x_return_status,
2471                                   p_msg_level=>fnd_log.level_statement);
2472         END IF;
2473 
2474       END IF;
2475 
2476       /*IF g_debug THEN
2477         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2478           '(+) after validate timezone_id ... ' ||
2479           'x_return_status = ' || x_return_status, l_debug_prefix);
2480       END IF;
2481       */
2482       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2483            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2484            p_message=>'(+) after validate timezone_id ... ' ||
2485                                                 'x_return_status = ' || x_return_status,
2486                                   p_msg_level=>fnd_log.level_statement);
2487       END IF;
2488 
2489 
2490       --------------------------------------
2491       -- validate phone_country_code
2492       --------------------------------------
2493 
2494       -- phone_country_code is foreign key of hz_phone_country_codes
2495       -- Bug 2007066: during update, only validate phone_country_code if it
2496       -- has been changed.
2497       IF p_phone_rec.phone_country_code IS NOT NULL AND
2498          p_phone_rec.phone_country_code <> fnd_api.g_miss_char AND
2499          (p_create_update_flag = 'C' OR
2500           (p_create_update_flag = 'U' AND
2501            p_phone_rec.phone_country_code <> NVL(l_phone_country_code,
2502                                                  fnd_api.g_miss_char)))
2503       THEN
2504         OPEN c_countrycode(p_phone_rec.phone_country_code);
2505         FETCH c_countrycode INTO l_dummy;
2506 
2507         IF c_countrycode%NOTFOUND THEN
2508         --Bug 4474646
2509           fnd_message.set_name('AR', 'HZ_INVALID_PHONE_COUNTRY_CODE');
2510           fnd_msg_pub.add;
2511           x_return_status := fnd_api.g_ret_sts_error;
2512         END IF;
2513 
2514         CLOSE c_countrycode;
2515 
2516         /*IF g_debug THEN
2517           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2518             'PHONE : phone_country_code is foreign key of hz_phone_country_codes. ' ||
2519             'x_return_status = ' || x_return_status, l_debug_prefix);
2520         END IF;
2521         */
2522         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2523            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2524            p_message=>'PHONE : phone_country_code is foreign key of hz_phone_country_codes. ' ||
2525                                                 'x_return_status = ' || x_return_status,
2526                                   p_msg_level=>fnd_log.level_statement);
2527         END IF;
2528 
2529       END IF;
2530 
2531       /*IF g_debug THEN
2532         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2533           '(+) after validate phone_country_code ... ' ||
2534           'x_return_status = ' || x_return_status, l_debug_prefix);
2535       END IF;
2536       */
2537       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2538            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2539            p_message=>'(+) after validate phone_country_code ... ' ||
2540                                                 'x_return_status = ' || x_return_status,
2541                                   p_msg_level=>fnd_log.level_statement);
2542        END IF;
2543 
2544 
2545       --------------------------------------
2546       -- validate phone_number (Bug fix 2807379)
2547       --------------------------------------
2548 
2549       IF p_create_update_flag = 'U'
2550       AND p_phone_rec.raw_phone_number is NULL
2551       THEN
2552         validate_cannot_update_to_null(
2553           p_column        => 'phone_number',
2554           p_column_value  => p_phone_rec.phone_number,
2555           x_return_status => l_return_status);
2556 
2557         /*IF g_debug THEN
2558           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2559             '(+) phone_number cannot be updated to NULL... ' ||
2560             'x_return_status = ' || x_return_status, l_debug_prefix);
2561         END IF;
2562         */
2563         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2564            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2565            p_message=>'(+) phone_number cannot be updated to NULL... ' ||
2566                                                 'x_return_status = ' || x_return_status,
2567                                   p_msg_level=>fnd_log.level_statement);
2568         END IF;
2569 
2570       END IF;
2571 
2572       /*IF g_debug THEN
2573         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2574           '(+) after validate phone_number ... ' ||
2575           'x_return_status = ' || x_return_status, l_debug_prefix);
2576       END IF;
2577       */
2578       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2579            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2580            p_message=>'(+) after validate phone_number ... ' ||
2581                                                 'x_return_status = ' || x_return_status,
2582                                   p_msg_level=>fnd_log.level_statement);
2583       END IF;
2584 
2585 
2586     --------------------------------------
2587     -- validate phone_number and raw_phone_number which are third-party sourced.
2588     --------------------------------------
2589 
2590     -- phone_number and raw_phone_number can not be updated by the user if
2591     -- actual_content_source = 'DNB'.
2592 
2593     IF p_create_update_flag = 'U' AND
2594        l_contact_point_type = 'PHONE' AND
2595 	--  Bug 4226199 : Call for all ACS other than UE
2596        db_actual_content_source <> 'USER_ENTERED' AND
2597        (p_phone_rec.phone_area_code||
2598         p_phone_rec.phone_country_code||
2599         p_phone_rec.phone_number||
2600         p_phone_rec.phone_extension||
2601         p_phone_rec.raw_phone_number IS NOT NULL) /* AND
2602        db_actual_content_source = 'DNB' AND*/
2603        -- SSM SST Integration and Extension
2604        --NVL(FND_PROFILE.value('HZ_UPDATE_THIRD_PARTY_DATA'), 'N') = 'N'
2605       -- HZ_UTILITY_V2PUB.is_purchased_content_source(db_actual_content_source) = 'Y'
2606     THEN
2607       l_return_status := FND_API.G_RET_STS_SUCCESS;
2608       validate_nonupdateable (
2609         p_column                 => 'phone_area_code',
2610         p_column_value           => p_phone_rec.phone_area_code,
2611         p_old_column_value       => l_phone_area_code,
2612         x_return_status          => l_return_status,
2613         p_raise_error            => 'N');
2614 
2615       IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2616         validate_nonupdateable (
2617           p_column                 => 'phone_country_code',
2618           p_column_value           => p_phone_rec.phone_country_code,
2619           p_old_column_value       => l_phone_country_code,
2620           x_return_status          => l_return_status,
2621           p_raise_error            => 'N');
2622       END IF;
2623 
2624       IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2625         validate_nonupdateable (
2626           p_column                 => 'phone_number',
2627           p_column_value           => p_phone_rec.phone_number,
2628           p_old_column_value       => l_phone_number,
2629           x_return_status          => l_return_status,
2630           p_raise_error            => 'N');
2631       END IF;
2632       IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2633         validate_nonupdateable (
2634           p_column                 => 'phone_extension',
2635           p_column_value           => p_phone_rec.phone_extension,
2636           p_old_column_value       => l_phone_extension,
2637           x_return_status          => l_return_status,
2638           p_raise_error            => 'N');
2639       END IF;
2640 
2641       IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2642         validate_nonupdateable (
2643           p_column                 => 'raw_phone_number',
2644           p_column_value           => p_phone_rec.raw_phone_number,
2645           p_old_column_value       => l_raw_phone_number,
2646           x_return_status          => l_return_status,
2647           p_raise_error            => 'N');
2648       END IF;
2649 
2650       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2651 
2652           HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege(
2653              p_actual_content_source    => db_actual_content_source,
2654              p_new_actual_content_source=> p_contact_point_rec.actual_content_source,
2655              p_entity_name              => 'HZ_CONTACT_POINTS',
2656              x_return_status            => x_return_status);
2657 -- Bug 4693719 : set global variable to Y
2658          HZ_UTILITY_V2PUB.G_UPDATE_ACS := 'Y';
2659 
2660       /*FND_MESSAGE.SET_NAME('AR', 'HZ_NOTALLOW_UPDATE_THIRD_PARTY');
2661         FND_MSG_PUB.ADD;
2662         x_return_status := FND_API.G_RET_STS_ERROR;
2663       */
2664       END IF;
2665 
2666       /*IF g_debug THEN
2667         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2668           'dnb phones are non-updateable. ' ||
2669           'x_return_status = ' || x_return_status, l_debug_prefix);
2670       END IF;
2671       */
2672       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2673            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2674            p_message=>'dnb phones are non-updateable. ' ||
2675                                                 'x_return_status = ' || x_return_status,
2676                                   p_msg_level=>fnd_log.level_statement);
2677        END IF;
2678 
2679     END IF;
2680 
2681     /*IF g_debug THEN
2682       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2683         '(+) after validate dnb phones ... ' ||
2684         'x_return_status = ' || x_return_status, l_debug_prefix);
2685     END IF;
2686     */
2687     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2688            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate dnb phones ... ' ||
2689                                                 'x_return_status = ' || x_return_status,
2690                                   p_msg_level=>fnd_log.level_statement);
2691     END IF;
2692 
2693 
2694     ELSIF l_contact_point_type = 'TLX' THEN
2695 
2696       --------------------------------------
2697       -- validate telex_number
2698       --------------------------------------
2699 
2700       -- telex_number is mandatory field.
2701       validate_mandatory (
2702         p_create_update_flag     => p_create_update_flag,
2703         p_column                 => 'telex_number',
2704         p_column_value           => p_telex_rec.telex_number,
2705         x_return_status          => x_return_status);
2706 
2707       /*IF g_debug THEN
2708         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2709           'TELEX : telex_number is mandatory. ' ||
2710           'x_return_status = ' || x_return_status, l_debug_prefix);
2711       END IF;
2712       */
2713       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2714            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'TELEX : telex_number is mandatory. ' ||
2715                                                 'x_return_status = ' || x_return_status,
2716                                   p_msg_level=>fnd_log.level_statement);
2717       END IF;
2718 
2719         --  Bug 4226199 : check update privilege for telex_number also
2720       IF p_create_update_flag = 'U' AND
2721       db_actual_content_source <> 'USER_ENTERED' THEN
2722           l_return_status := FND_API.G_RET_STS_SUCCESS;
2723           validate_nonupdateable (
2724           p_column                 => 'telex_number',
2725           p_column_value           => p_telex_rec.telex_number,
2726           p_old_column_value       => l_telex,
2727           x_return_status          => l_return_status,
2728           p_raise_error            => 'N');
2729 
2730           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2731 		HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege(
2732 		p_actual_content_source    => db_actual_content_source,
2733 		p_new_actual_content_source=> p_contact_point_rec.actual_content_source,
2734 		p_entity_name              => 'HZ_CONTACT_POINTS',
2735 		x_return_status            => x_return_status);
2736 -- Bug 4693719 : set global variable to Y
2737          HZ_UTILITY_V2PUB.G_UPDATE_ACS := 'Y';
2738          END IF;
2739       END IF;
2740 
2741     ELSIF l_contact_point_type = 'WEB' THEN
2742 
2743       --------------------------------------
2744       -- validate web_type
2745       --------------------------------------
2746 
2747       -- web_type is mandatory field.
2748       validate_mandatory (
2749         p_create_update_flag     => p_create_update_flag,
2750         p_column                 => 'web_type',
2751         p_column_value           => p_web_rec.web_type,
2752         x_return_status          => x_return_status);
2753 
2754       /*IF g_debug THEN
2755         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2756           'WEB : web_type is mandatory. ' ||
2757           'x_return_status = ' || x_return_status, l_debug_prefix);
2758       END IF;
2759       */
2760       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2761            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'WEB : web_type is mandatory. ' ||
2762                                                 'x_return_status = ' || x_return_status,
2763                                   p_msg_level=>fnd_log.level_statement);
2764        END IF;
2765 
2766 
2767       --------------------------------------
2768       -- validate url
2769       --------------------------------------
2770 
2771       -- url is mandatory field.
2772       validate_mandatory (
2773         p_create_update_flag     => p_create_update_flag,
2774         p_column                 => 'url',
2775         p_column_value           => p_web_rec.url,
2776         x_return_status          => x_return_status);
2777 
2778       /*IF g_debug THEN
2779         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2780           'WEB : url is mandatory. ' ||
2781           'x_return_status = ' || x_return_status, l_debug_prefix);
2782       END IF;
2783       */
2784       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2785            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'WEB : url is mandatory. ' ||
2786                                         'x_return_status = ' || x_return_status,
2787                                   p_msg_level=>fnd_log.level_statement);
2788        END IF;
2789 
2790         --  Bug 4226199 : check update privilege for url also
2791       IF p_create_update_flag = 'U' AND
2792       db_actual_content_source <> 'USER_ENTERED' THEN
2793           l_return_status := FND_API.G_RET_STS_SUCCESS;
2794           validate_nonupdateable (
2795           p_column                 => 'url',
2796           p_column_value           => p_web_rec.url,
2797           p_old_column_value       => l_url,
2798           x_return_status          => l_return_status,
2799           p_raise_error            => 'N');
2800 
2801           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2802 		HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege(
2803 		p_actual_content_source    => db_actual_content_source,
2804 		p_new_actual_content_source=> p_contact_point_rec.actual_content_source,
2805 		p_entity_name              => 'HZ_CONTACT_POINTS',
2806 		x_return_status            => x_return_status);
2807 -- Bug 4693719 : set global variable to Y
2808          HZ_UTILITY_V2PUB.G_UPDATE_ACS := 'Y';
2809          END IF;
2810       END IF;
2811 
2812       --------------------------------------
2813       -- validate contact_point_purpose
2814       --------------------------------------
2815 
2816       -- contact_point_purpose is lookup code in lookup type
2817       -- CONTACT_POINT_PURPOSE_WEB if contact_point_type = 'WEB'.
2818 
2819       IF p_contact_point_rec.contact_point_purpose IS NOT NULL AND
2820          p_contact_point_rec.contact_point_purpose <> fnd_api.g_miss_char AND
2821          (p_create_update_flag = 'C' OR
2822           (p_create_update_flag = 'U' AND
2823            p_contact_point_rec.contact_point_purpose <>
2824              NVL(l_contact_point_purpose, fnd_api.g_miss_char)))
2825       THEN
2826         validate_lookup (
2827           p_column               => 'contact_point_purpose',
2828           p_lookup_type          => 'CONTACT_POINT_PURPOSE_WEB',
2829           p_column_value         => p_contact_point_rec.contact_point_purpose,
2830           x_return_status        => x_return_status);
2831 
2832 
2833         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2834            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2835    p_message=>'WEB : contact_point_purpose is lookup code in lookup type CONTACT_POINT_PURPOSE_WEB if contact_point_type = WEB. ' || 'x_return_status = ' || x_return_status,
2836                                   p_msg_level=>fnd_log.level_statement);
2837         END IF;
2838 
2839       END IF;
2840 
2841       /*IF g_debug THEN
2842         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2843           '(+) after validate telex_number ... ' ||
2844           'x_return_status = ' || x_return_status, l_debug_prefix);
2845       END IF;
2846       */
2847       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2848            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate telex_number ... ' ||
2849                                                 'x_return_status = ' || x_return_status,
2850                                   p_msg_level=>fnd_log.level_statement);
2851       END IF;
2852 
2853     END IF;
2854 
2855     -- Debug info.
2856     /*IF g_debug THEN
2857       hz_utility_v2pub.debug ('validate_contact_point_main (-)');
2858     END IF;
2859     */
2860     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2861         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_contact_point_main (-)',
2862                                p_msg_level=>fnd_log.level_procedure);
2863     END IF;
2864 
2865   END validate_contact_point_main;
2866 
2867   ----------------------------
2868   -- body of public procedures
2869   ----------------------------
2870 
2871   /**
2872    * PROCEDURE validate_party
2873    *
2874    * DESCRIPTION
2875    *     Validates party record. Checks for
2876    *         uniqueness
2877    *         lookup types
2878    *         mandatory columns
2879    *         non-updateable fields
2880    *         foreign key validations
2881    *         other validations
2882    *
2883    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2884    *
2885    * ARGUMENTS
2886    *   IN:
2887    *     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
2888    *     p_person_rec         Person record.
2889    *     p_old_person_rec     Old person record.
2890    *   IN/OUT:
2891    *     x_return_status      Return status after the call. The status can
2892    *                          be FND_API.G_RET_STS_SUCCESS (success),
2893    *                          FND_API.G_RET_STS_ERROR (error),
2894    *                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2895    *
2896    * NOTES
2897    *
2898    * MODIFICATION HISTORY
2899    *
2900    *   07-23-2001    Indrajit Sen       o Created.
2901    *   09-26-2003    Rajib Ranjan Borah o Commented out the validate HR security code
2902    *                                      and added validation code in
2903    *                                      validate_hr_security procedure
2904    *                                      which is called from validate_person
2905    *                                      (Bug 3099624)
2906    */
2907 
2908   PROCEDURE validate_party(
2909       p_create_update_flag               IN     VARCHAR2,
2910       p_party_rec                        IN     HZ_PARTY_V2PUB.PARTY_REC_TYPE,
2911       p_old_party_rec                    IN     HZ_PARTY_V2PUB.PARTY_REC_TYPE,
2912       p_db_created_by_module             IN     VARCHAR2,
2913       x_return_status                    IN OUT NOCOPY VARCHAR2
2914   ) IS
2915 
2916       l_debug_prefix                   VARCHAR2(30) := '';
2917       l_temp_hr_party_exist            NUMBER := 0;
2918       l_validate_osr varchar2(1) := 'Y';
2919       l_mosr_owner_table_id number;
2920 
2921       l_temp_return_status   VARCHAR2(10); -- for storing return status from
2922                                            -- hz_orig_system_ref_pub.get_owner_table_id
2923       /*
2924 
2925       CURSOR c_temp_hr_party_exist IS
2926       select 1
2927       from   per_all_people_f
2928       where  party_id = p_party_rec.party_id;
2929       */
2930   BEGIN
2931 
2932       --enable_debug;
2933 
2934       -- Debug info.
2935       /*IF g_debug THEN
2936           hz_utility_v2pub.debug ('validate_party (+)');
2937       END IF;
2938       */
2939       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2940         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_party (+)',
2941                                p_msg_level=>fnd_log.level_procedure);
2942       END IF;
2943 
2944       -----------------------
2945       -- validate party_number
2946       -----------------------
2947 
2948       -- party_number is non-updateable field
2949       IF p_create_update_flag = 'U' THEN
2950           validate_nonupdateable (
2951               p_column                                => 'party_number',
2952               p_column_value                          => p_party_rec.party_number,
2953               p_old_column_value                      => p_old_party_rec.party_number,
2954               x_return_status                         => x_return_status);
2955 
2956           /*IF g_debug THEN
2957               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
2958                   'party_number is non-updateable. ' ||
2959                   'x_return_status = ' || x_return_status, l_debug_prefix);
2960           END IF;
2961           */
2962           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2963            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_number is non-updateable. ' ||
2964                                                 'x_return_status = ' || x_return_status,
2965                                   p_msg_level=>fnd_log.level_statement);
2966           END IF;
2967       END IF;
2968 
2969       ---------------------------------
2970       -- validate orig_system_reference
2971       ---------------------------------
2972 /****Logical APIs - validation not required****/
2973   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
2974      IF (p_party_rec.orig_system is not null
2975          and p_party_rec.orig_system <>fnd_api.g_miss_char)
2976        and (p_party_rec.orig_system_reference is not null
2977          and p_party_rec.orig_system_reference <>fnd_api.g_miss_char)
2978           and p_create_update_flag = 'U'
2979       then
2980            hz_orig_system_ref_pub.get_owner_table_id
2981                         (p_orig_system => p_party_rec.orig_system,
2982                         p_orig_system_reference => p_party_rec.orig_system_reference,
2983                         p_owner_table_name => 'HZ_PARTIES',
2984                         x_owner_table_id => l_mosr_owner_table_id,
2985                         x_return_status => l_temp_return_status);
2986 
2987            IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
2988                l_mosr_owner_table_id= nvl(p_party_rec.party_id,l_mosr_owner_table_id))
2989            THEN
2990                 l_validate_osr := 'N';
2991             -- if we can get owner_table_id based on osr and os in mosr table,
2992             -- we will use unique osr and os for update - bypass osr validation
2993            ELSE l_validate_osr := 'Y';
2994            END IF;
2995 
2996           -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
2997           -- x_return_status. Set x_return_status to error, ONLY if there is error.
2998           -- In case of success, leave it to carry over previous value as before this call.
2999           -- Fix for Bug 5498116 (29-AUG-2006)
3000           IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
3001             x_return_status := l_temp_return_status;
3002           END IF;
3003 
3004     end if;
3005       -- orig_system_reference is non-updateable field
3006       IF p_create_update_flag = 'U' and l_validate_osr = 'Y' THEN
3007           validate_nonupdateable (
3008               p_column                                => 'orig_system_reference',
3009               p_column_value                          => p_party_rec.orig_system_reference,
3010               p_old_column_value                      => p_old_party_rec.orig_system_reference,
3011               x_return_status                         => x_return_status);
3012 
3013           /*IF g_debug THEN
3014               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3015                   'orig_system_reference is non-updateable. ' ||
3016                   'x_return_status = ' || x_return_status, l_debug_prefix);
3017           END IF;
3018           */
3019           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3020              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is non-updateable. ' ||
3021                                                 'x_return_status = ' || x_return_status,
3022                                   p_msg_level=>fnd_log.level_statement);
3023           END IF;
3024       END IF;
3025    END IF;
3026 
3027       ------------------
3028       -- validate status
3029       ------------------
3030 
3031       -- status cannot be set to null during update
3032       IF p_create_update_flag = 'U' THEN
3033           validate_cannot_update_to_null (
3034               p_column                                => 'status',
3035               p_column_value                          => p_party_rec.status,
3036               x_return_status                         => x_return_status);
3037 
3038           /*IF g_debug THEN
3039               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3040                   'status is not updateable to null. ' ||
3041                   'x_return_status = ' || x_return_status, l_debug_prefix);
3042           END IF;
3043           */
3044           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3045              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status is not updateable to null. ' ||
3046                                                 'x_return_status = ' || x_return_status,
3047                                   p_msg_level=>fnd_log.level_statement);
3048           END IF;
3049       END IF;
3050 
3051 /****Logical APIs - validation not required****/
3052   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3053       -- status is lookup code in lookup type REGISTRY_STATUS
3054       IF p_party_rec.status IS NOT NULL
3055          AND
3056          p_party_rec.status <> fnd_api.g_miss_char
3057          AND
3058          (p_create_update_flag = 'C'
3059           OR
3060           (p_create_update_flag = 'U'
3061            AND
3062            p_party_rec.status <> p_old_party_rec.status
3063          )
3064         )
3065       THEN
3066           validate_lookup (
3067               p_column                                => 'status',
3068               p_lookup_type                           => 'REGISTRY_STATUS',
3069               p_column_value                          => p_party_rec.status,
3070               x_return_status                         => x_return_status);
3071 
3072           /*IF g_debug THEN
3073               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3074                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
3075                   'x_return_status = ' || x_return_status, l_debug_prefix);
3076           END IF;
3077           */
3078           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3079                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3080                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
3081                                                         'x_return_status = ' || x_return_status,
3082                                   p_msg_level=>fnd_log.level_statement);
3083           END IF;
3084       END IF;
3085    END IF;
3086 
3087       ------------------------
3088       -- validate HR security
3089       ------------------------
3090       --Commented out the code below in the fix for 3099624.Added HR securrity validation in validate_hr_security procedure  which is called from validate_person.
3091       --fix for Bug 2642597
3092      /*IF nvl(p_old_party_rec.orig_system_reference,'X') LIKE 'PER%' THEN
3093       | IF NVL(fnd_profile.value('HZ_CREATED_BY_MODULE'), '-222') <> 'HR API'
3094       |    AND p_create_update_flag = 'U'
3095       | THEN
3096       |    fnd_message.set_name('AR', 'HZ_CREATED_BY_MISMATCH');
3097       |    fnd_msg_pub.add;
3098       |    x_return_status := fnd_api.g_ret_sts_error;
3099       | END IF;
3100       |  END IF;
3101       */
3102 
3103      /*
3104       |OPEN c_temp_hr_party_exist;
3105       |FETCH c_temp_hr_party_exist INTO l_temp_hr_party_exist;
3106       |IF c_temp_hr_party_exist%NOTFOUND THEN
3107       |  l_temp_hr_party_exist := 0;
3108       |END IF;
3109       |CLOSE c_temp_hr_party_exist;
3110       |
3111       |IF  NVL(fnd_profile.value('HZ_CREATED_BY_MODULE'), '-222') <> 'HR API'
3112       |    AND l_temp_hr_party_exist = 1
3113       |    AND p_create_update_flag = 'U'
3114       |THEN
3115       |    fnd_message.set_name('AR', 'HZ_CREATED_BY_MISMATCH');
3116       |    fnd_msg_pub.add;
3117       |    x_return_status := fnd_api.g_ret_sts_error;
3118       |END IF;
3119       */
3120 
3121       -------------------------
3122       -- validate category_code
3123       -------------------------
3124 
3125       -- category_code is lookup code in lookup type CUSTOMER_CATEGORY
3126       IF p_party_rec.category_code IS NOT NULL
3127          AND
3128          p_party_rec.category_code <> fnd_api.g_miss_char
3129          AND
3130          (p_create_update_flag = 'C'
3131           OR
3132           (p_create_update_flag = 'U'
3133            AND
3134            p_party_rec.category_code <> p_old_party_rec.category_code
3135          )
3136         )
3137       THEN
3138           validate_lookup (
3139               p_column                                => 'category_code',
3140               p_lookup_type                           => 'CUSTOMER_CATEGORY',
3141               p_column_value                          => p_party_rec.category_code,
3142               x_return_status                         => x_return_status);
3143 
3144           /*IF g_debug THEN
3145               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3146                   'category_code is lookup code in lookup type CUSTOMER_CATEGORY. ' ||
3147                   'x_return_status = ' || x_return_status, l_debug_prefix);
3148           END IF;
3149           */
3150           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3151                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3152                 p_message=>'category_code is lookup code in lookup type CUSTOMER_CATEGORY. ' ||
3153                                                         'x_return_status = ' || x_return_status,
3154                                   p_msg_level=>fnd_log.level_statement);
3155           END IF;
3156       END IF;
3157 
3158       -- Debug info.
3159       /*IF g_debug THEN
3160           hz_utility_v2pub.debug ('validate_party (-)');
3161       END IF;
3162       */
3163       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3164         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_party (-)',
3165                                p_msg_level=>fnd_log.level_procedure);
3166       END IF;
3167 
3168       --disable_debug;
3169 
3170   END validate_party;
3171 
3172   /**
3173    * PROCEDURE validate_person
3174    *
3175    * DESCRIPTION
3176    *     Validates person record. Checks for
3177    *         uniqueness
3178    *         lookup types
3179    *         mandatory columns
3180    *         non-updateable fields
3181    *         foreign key validations
3182    *         hr security validation
3183    *         other validations
3184    *
3185    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3186    *
3187    * ARGUMENTS
3188    *   IN:
3189    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
3190    *     p_person_rec                   Person record.
3191    *     p_old_person_rec               Old person record.
3192    *   IN/OUT:
3193    *     x_return_status                Return status after the call. The status can
3194    *                                    be FND_API.G_RET_STS_SUCCESS (success),
3195    *                                    fnd_api.g_ret_sts_error (error),
3196    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3197    *
3198    * NOTES
3199    *
3200    * MODIFICATION HISTORY
3201    *
3202    *   07-23-2001    Indrajit Sen       o Created.
3203    *   06-FEB-2003   Porkodi C          o Bug 2684319: Added a validation for deceased_flag field.
3204    *   10-Mar-2003   Porkodi Chinnandar o Bug 2817974, Added a validation for date_of_death and
3205    *                                      date_of_birth field to have greater value for date_of_death.
3206    *   27-Mar-2003   Porkodi C          o Bug 2794173: Added g_miss_date check for date_of_death
3207    *   26-Sep-2003   Rajib Ranjan Borah o Bug 3099624: Called the validate_hr_security
3208    *                                      procedure to validate HR security.
3209    *   16-JAN-2004   Rajib Ranjan Borah o Bug 3333036.Rent_own_ind is now validated only if it
3210    *                                      has been updated and not for each record.
3211    *   13-JUL-2004   V.Ravichandran     o Bug 3704293 : Modified the code which validates
3212    *                                      date_of_birth and date_of_death combination in
3213    *                                      validate_person() procedure.
3214    *   25-AUG-2004   V.Ravichandran     o Bug 3747386 : Modified the code which validates
3215    *                                      that both first_name and last_name
3216    *                                      should not be null during update in validate_person()
3217    *                                      procedure.
3218    *   31-MAY-2006   Nishant Singhai    o Bug 5174379 : Person Name update allowed check added.
3219    */
3220 
3221   PROCEDURE validate_person(
3222       p_create_update_flag             IN     VARCHAR2,
3223       p_person_rec                     IN     HZ_PARTY_V2PUB.PERSON_REC_TYPE,
3224       p_old_person_rec                 IN     HZ_PARTY_V2PUB.PERSON_REC_TYPE,
3225       x_return_status                  IN OUT NOCOPY VARCHAR2
3226  ) IS
3227 
3228       l_debug_prefix                   VARCHAR2(30) := '';
3229       temp_date_of_birth               DATE;
3230       temp_date_of_death               DATE;
3231       l_change_cust_name_profile       VARCHAR2(10);
3232 
3233 
3234   BEGIN
3235 
3236       --enable_debug;
3237 
3238       -- Debug info.
3239       /*IF g_debug THEN
3240           hz_utility_v2pub.debug ('validate_person (+)');
3241       END IF;
3242       */
3243       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3244         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person (+)',
3245                                p_msg_level=>fnd_log.level_procedure);
3246       END IF;
3247 
3248       -------------------------------------------------------------------------
3249       -- Validate first_name, middle_name, last_name, pre_name_adjunct and
3250 	  -- person_name_suffix are allowed to be updated or not
3251 	  -- Update only if profile is set to Y or it is not set at all. If it is set
3252 	  -- to 'N' update is not allowed.
3253       -- Check added for Bug 5174379 on 31-May-2006 (Nishant)
3254 	  -------------------------------------------------------------------------
3255       IF p_create_update_flag = 'U' THEN
3256 
3257         l_change_cust_name_profile := fnd_profile.VALUE('AR_CHANGE_CUST_NAME');
3258         IF (NVL(l_change_cust_name_profile,'Y') = 'N') THEN -- update to party name is not allowed
3259 
3260           IF ((p_person_rec.person_first_name <> p_old_person_rec.person_first_name) OR
3261               (p_person_rec.person_middle_name <> p_old_person_rec.person_middle_name) OR
3262               (p_person_rec.person_last_name <> p_old_person_rec.person_last_name) OR
3263               (p_person_rec.person_pre_name_adjunct <> p_old_person_rec.person_pre_name_adjunct) OR
3264               (p_person_rec.person_name_suffix <> p_old_person_rec.person_name_suffix)
3265 		     ) THEN
3266               fnd_message.set_name('AR', 'HZ_CUST_NAME_UPDT_NOT_ALLOWED');
3267               fnd_msg_pub.add;
3268               x_return_status := fnd_api.g_ret_sts_error;
3269 		  END IF;
3270 
3271         END IF; -- profile = N
3272 
3273         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
3274            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3275 		                          p_message=>'Person Name Update Allowed Check...' ||
3276                                              'x_return_status : ' || x_return_status ||
3277                                              '. Profile AR_CHANGE_CUST_NAME value :'||l_change_cust_name_profile,
3278                                   p_msg_level=>fnd_log.level_statement);
3279         END IF;
3280 
3281       END IF; -- create update flag = U
3282 
3283       -----------------------------------
3284       -- validate first_name or last_name
3285       -----------------------------------
3286 
3287       -- during insert, either first_name or last_name has to be passed in
3288       IF p_create_update_flag = 'C' THEN
3289           IF (p_person_rec.person_first_name = fnd_api.g_miss_char or p_person_rec.person_first_name IS NULL)
3290              AND
3291              (p_person_rec.person_last_name = fnd_api.g_miss_char or p_person_rec.person_last_name IS NULL)
3292           THEN
3293               fnd_message.set_name('AR', 'HZ_FIRST_OR_LAST_NAME_REQUIRED');
3294               fnd_msg_pub.add;
3295               x_return_status := fnd_api.g_ret_sts_error;
3296           END IF;
3297       END IF;
3298 
3299       -- during update, both first_name or last_name cannot be set to null
3300       IF p_create_update_flag = 'U' THEN
3301       -- Bug 3747386
3302           IF (p_person_rec.person_first_name = fnd_api.g_miss_char
3303               or NVL(p_person_rec.person_first_name,p_old_person_rec.person_first_name)=fnd_api.g_miss_char)
3304              AND
3305              (p_person_rec.person_last_name = fnd_api.g_miss_char
3306               or NVL(p_person_rec.person_last_name,p_old_person_rec.person_last_name)=fnd_api.g_miss_char) THEN
3307               fnd_message.set_name('AR', 'HZ_FIRST_OR_LAST_NAME_REQUIRED');
3308               fnd_msg_pub.add;
3309               x_return_status := fnd_api.g_ret_sts_error;
3310           END IF;
3311       END IF;
3312 
3313       /*IF g_debug THEN
3314           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3315               'first_name or last_name is mandatory. ' ||
3316               'x_return_status = ' || x_return_status, l_debug_prefix);
3317       END IF;
3318       */
3319       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3320            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'first_name or last_name is mandatory. ' ||
3321                                                 'x_return_status = ' || x_return_status,
3322                                   p_msg_level=>fnd_log.level_statement);
3323        END IF;
3324 
3325       -----------------------------------
3326       -- validate person_pre_name_adjunct
3327       -----------------------------------
3328 
3329       -- person_pre_name_adjunct is lookup code in lookup type CONTACT_TITLE
3330       IF p_person_rec.person_pre_name_adjunct IS NOT NULL
3331          AND
3332          p_person_rec.person_pre_name_adjunct <> fnd_api.g_miss_char
3333          AND
3334          (p_create_update_flag = 'C'
3335           OR
3336           (p_create_update_flag = 'U'
3337            AND
3338            p_person_rec.person_pre_name_adjunct <> p_old_person_rec.person_pre_name_adjunct
3339          )
3340         )
3341       THEN
3342           validate_lookup (
3343               p_column                                => 'person_pre_name_adjunct',
3344               p_lookup_type                           => 'CONTACT_TITLE',
3345               p_column_value                          => p_person_rec.person_pre_name_adjunct,
3346               x_return_status                         => x_return_status);
3347 
3348           /*IF g_debug THEN
3349               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3350                   'person_pre_name_adjunct in lookup CONTACT_TITLE. ' ||
3351                   'x_return_status = ' || x_return_status, l_debug_prefix);
3352           END IF;
3353           */
3354           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3355                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3356                 p_message=>'person_pre_name_adjunct in lookup CONTACT_TITLE. ' ||
3357                                                         'x_return_status = ' || x_return_status,
3358                                   p_msg_level=>fnd_log.level_statement);
3359            END IF;
3360       END IF;
3361 
3362       ----------------------------------
3363       -- validate head_of_household_flag
3364       ----------------------------------
3365 /****Logical APIs - validation not required****/
3366   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3367       -- head_of_household_flag is lookup code in lookup type YES/NO
3368       validate_lookup (
3369           p_column                                => 'head_of_household_flag',
3370           p_lookup_type                           => 'YES/NO',
3371           p_column_value                          => p_person_rec.head_of_household_flag,
3372           x_return_status                         => x_return_status);
3373 
3374       /*IF g_debug THEN
3375           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3376               'head_of_household_flag in lookup YES/NO. ' ||
3377               'x_return_status = ' || x_return_status, l_debug_prefix);
3378       END IF;
3379       */
3380       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3381            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3382            p_message=>'head_of_household_flag in lookup YES/NO. ' ||
3383                                                 'x_return_status = ' || x_return_status,
3384                                   p_msg_level=>fnd_log.level_statement);
3385       END IF;
3386     END IF;
3387 
3388       ------------------------
3389       -- validate rent_own_ind
3390       ------------------------
3391 
3392       --2897298, Changed the lookup type to OWN_RENT_IND
3393       -- rent_own_ind is lookup code in lookup type OWN_RENT_IND
3394       -- Bug 3333036.
3395       -- The validation will be called only if the value changes.
3396 
3397       IF p_person_rec.rent_own_ind IS NOT NULL
3398          AND
3399          p_person_rec.rent_own_ind <> fnd_api.g_miss_char
3400          AND
3401           (
3402             p_create_update_flag = 'C'
3403           OR
3404             (
3405             p_create_update_flag = 'U'
3406             AND
3407             p_person_rec.rent_own_ind <> p_old_person_rec.rent_own_ind
3408             )
3409           )
3410       THEN
3411           validate_lookup (
3412               p_column                                => 'rent_own_ind',
3413               p_lookup_type                           => 'OWN_RENT_IND',
3414               p_column_value                          => p_person_rec.rent_own_ind,
3415               x_return_status                         => x_return_status);
3416           /*IF g_debug THEN
3417               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3418                    'rent_own_ind in lookup OWN_RENT_IND. ' ||
3419                    'x_return_status = ' || x_return_status, l_debug_prefix);
3420             END IF;
3421           */
3422           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3423               hz_utility_v2pub.debug(
3424                   p_prefix=>l_debug_prefix,
3425                   p_message=>'rent_own_ind in lookup OWN_RENT_IND. ' ||
3426                              'x_return_status = ' || x_return_status,
3427                   p_msg_level=>fnd_log.level_statement);
3428           END IF;
3429      END IF;
3430 
3431       -------------------------
3432       -- validate deceased_flag
3433       -------------------------
3434 /****Logical APIs - validation not required****/
3435   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
3436       -- deceased_flag is lookup code in lookup type YES/NO
3437       validate_lookup (
3438           p_column                                => 'deceased_flag',
3439           p_lookup_type                           => 'YES/NO',
3440           p_column_value                          => p_person_rec.deceased_flag,
3441           x_return_status                         => x_return_status);
3442 
3443       /*IF g_debug THEN
3444           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3445               'deceased_flag in lookup YES/NO. ' ||
3446               'x_return_status = ' || x_return_status, l_debug_prefix);
3447       END IF;
3448       */
3449       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3450            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'deceased_flag in lookup YES/NO. ' ||
3451                                                 'x_return_status = ' || x_return_status,
3452                                   p_msg_level=>fnd_log.level_statement);
3453       END IF;
3454     END IF;
3455 
3456      -- If date_of_death is not null then deceased_flag must be 'Y'
3457 
3458      --2794173, Added the g_miss_date check here
3459      IF (p_person_rec.date_of_death IS NOT NULL AND
3460          p_person_rec.date_of_death <> FND_API.G_MISS_DATE)
3461            THEN
3462 
3463               IF p_person_rec.deceased_flag <> 'Y'
3464                  THEN
3465 
3466                  fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
3467                  fnd_message.set_token('COLUMN1', 'DATE_OF_DEATH');
3468                  fnd_message.set_token('VALUE1', 'not null');
3469                  fnd_message.set_token('COLUMN2', 'DECEASED_FLAG');
3470                  fnd_message.set_token('VALUE2', 'Y');
3471                  fnd_msg_pub.add;
3472                  x_return_status := fnd_api.g_ret_sts_error;
3473               END IF;
3474 
3475               /*IF g_debug THEN
3476                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3477                     'check that deceased_flag is Y when date_of_death is not null. ' ||
3478                     ' x_return_status = ' || x_return_status, l_debug_prefix);
3479               END IF;
3480               */
3481               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3482                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3483                  p_message=>'check that deceased_flag is Y when date_of_death is not null. ' ||
3484                                                          ' x_return_status = ' || x_return_status,
3485                                   p_msg_level=>fnd_log.level_statement);
3486               END IF;
3487         END IF;
3488 
3489       --2817974, Added
3490       -------------------------------------------
3491       -- validate date_of_birth and date_of_death
3492       -------------------------------------------
3493 
3494         -- date_of_birth and date_of_death should be greater than sys_date
3495         IF p_person_rec.date_of_birth > SYSDATE then
3496            fnd_message.set_name('AR','HZ_API_NO_FUTURE_DATE_ALLOWED');
3497            fnd_message.set_token('COLUMN','DATE_OF_BIRTH');
3498            fnd_msg_pub.add;
3499            x_return_status := fnd_api.g_ret_sts_error;
3500         END IF;
3501 
3502         IF p_person_rec.date_of_death > SYSDATE then
3503            fnd_message.set_name('AR','HZ_API_NO_FUTURE_DATE_ALLOWED');
3504            fnd_message.set_token('COLUMN','DATE_OF_DEATH');
3505            fnd_msg_pub.add;
3506            x_return_status := fnd_api.g_ret_sts_error;
3507         END IF;
3508 
3509         /*IF g_debug THEN
3510            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3511                'after validating date_of_birth and date_of_death against SYSDATE ' ||
3512                'x_return_status = ' || x_return_status, l_debug_prefix);
3513         END IF;
3514         */
3515         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3516            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3517            p_message=>'after validating date_of_birth and date_of_death against SYSDATE ' ||
3518                                                 'x_return_status = ' || x_return_status,
3519                                   p_msg_level=>fnd_log.level_statement);
3520         END IF;
3521 
3522         -- If date_of_birth and date_of_death are passed,
3523         -- then date_of_birth must be greater than or equal to
3524         -- date_of_death.
3525 
3526         -- Bug 3704293
3527         IF p_create_update_flag = 'U'    THEN
3528               IF p_person_rec.date_of_birth IS NOT NULL  then
3529                  temp_date_of_birth  :=  p_person_rec.date_of_birth;
3530               ELSE
3531                  temp_date_of_birth  := p_old_person_rec.date_of_birth;
3532               END IF;
3533         ELSIF p_create_update_flag = 'C' THEN
3534               temp_date_of_birth := p_person_rec.date_of_birth;
3535         END IF;
3536 
3537         IF p_create_update_flag = 'U'    THEN
3538               IF p_person_rec.date_of_death IS NOT NULL then
3539                  temp_date_of_death := p_person_rec.date_of_death;
3540               ELSE
3541                  temp_date_of_death := p_old_person_rec.date_of_death;
3542               END IF;
3543         ELSIF p_create_update_flag = 'C' THEN
3544               temp_date_of_death := p_person_rec.date_of_death;
3545         END IF;
3546 
3547         IF (temp_date_of_birth IS NOT NULL AND
3548             temp_date_of_birth <> FND_API.G_MISS_DATE AND
3549             temp_date_of_death IS NOT NULL AND
3550             temp_date_of_death <> FND_API.G_MISS_DATE) THEN
3551             validate_start_end_date (
3552 
3553               p_create_update_flag                    => p_create_update_flag,
3554               p_start_date_column_name                => 'date_of_birth',
3555               p_start_date                            => temp_date_of_birth,
3556               p_old_start_date                        => p_old_person_rec.date_of_birth,
3557               p_end_date_column_name                  => 'date_of_death',
3558               p_end_date                              => temp_date_of_death,
3559               p_old_end_date                          => p_old_person_rec.date_of_death,
3560               x_return_status                         => x_return_status
3561             );
3562 
3563 
3564 
3565             /*IF g_debug THEN
3566                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3567                  'check whether date_of_death is greater then or equal to date_of_birth. ' ||
3568                  'x_return_status = ' || x_return_status, l_debug_prefix);
3569             END IF;
3570             */
3571             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3572                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3573                  p_message=>'check whether date_of_death is greater then or equal to date_of_birth. ' ||
3574                                                         'x_return_status = ' || x_return_status,
3575                                   p_msg_level=>fnd_log.level_statement);
3576             END IF;
3577         END IF;
3578 
3579         /*IF g_debug THEN
3580            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3581            '(+) after validating the date_of_death and date_of_birth... ' ||
3582            'x_return_status = ' || x_return_status, l_debug_prefix);
3583         END IF;
3584         */
3585         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3586            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3587            p_message=>'(+) after validating the date_of_death and date_of_birth... ' ||
3588                                                 'x_return_status = ' || x_return_status,
3589                                   p_msg_level=>fnd_log.level_statement);
3590         END IF;
3591 
3592 
3593 
3594       /**
3595        * Bug 2197181: content_source_type is obsolete.
3596 
3597       ----------------------------------------------
3598       -- validate content_source_type
3599       ----------------------------------------------
3600 
3601       -- do not need to check content_source_type is mandatory because
3602       -- we default content_source_type to hz_party_v2pub.g_miss_content_source_type
3603       -- in table handler.
3604 
3605       -- since we are selecting person_profile_id from hz_person_profiles
3606       -- for record having content_source_type of p_person_rec.content_source_type,
3607       -- in this case, we do not need to check for non-updatability of content_source_type.
3608 
3609       -- content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE
3610       validate_lookup (
3611           p_column                                => 'content_source_type',
3612           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
3613           p_column_value                          => p_person_rec.content_source_type,
3614           x_return_status                         => x_return_status);
3615 
3616 
3617       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3618            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3619            p_message=>'content_source_type in lookup CONTENT_SOURCE_TYPE. ' ||
3620                                                 'x_return_status = ' || x_return_status,
3621                                   p_msg_level=>fnd_log.level_statement);
3622       END IF;
3623       **/
3624 
3625       --------------------------
3626       -- validate marital_status
3627       --------------------------
3628 
3629       -- marital_status is lookup code in lookup type MARITAL_STATUS
3630       IF p_person_rec.marital_status IS NOT NULL
3631          AND
3632          p_person_rec.marital_status <> fnd_api.g_miss_char
3633          AND
3634          (p_create_update_flag = 'C'
3635           OR
3636           (p_create_update_flag = 'U'
3637            AND
3638            p_person_rec.marital_status <> p_old_person_rec.marital_status
3639          )
3640         )
3641       THEN
3642           validate_lookup (
3643               p_column                                => 'marital_status',
3644               p_lookup_type                           => 'MARITAL_STATUS',
3645               p_column_value                          => p_person_rec.marital_status,
3646               x_return_status                         => x_return_status);
3647 
3648           /*IF g_debug THEN
3649               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3650                   'marital_status in lookup MARITAL_STATUS. ' ||
3651                   'x_return_status = ' || x_return_status, l_debug_prefix);
3652           END IF;
3653           */
3654           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3655                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
3656                  p_message=>'marital_status in lookup MARITAL_STATUS. ' ||
3657                                                         'x_return_status = ' || x_return_status,
3658                                   p_msg_level=>fnd_log.level_statement);
3659           END IF;
3660 
3661       END IF;
3662 
3663       --------------------------------------
3664       -- validate created_by_module
3665       --------------------------------------
3666 
3667       validate_created_by_module(
3668         p_create_update_flag     => p_create_update_flag,
3669         p_created_by_module      => p_person_rec.created_by_module,
3670         p_old_created_by_module  => p_old_person_rec.created_by_module,
3671         x_return_status          => x_return_status);
3672 
3673       --------------------------------------
3674       -- validate application_id
3675       --------------------------------------
3676 
3677       validate_application_id(
3678         p_create_update_flag     => p_create_update_flag,
3679         p_application_id         => p_person_rec.application_id,
3680         p_old_application_id     => p_old_person_rec.application_id,
3681         x_return_status          => x_return_status);
3682 
3683       --------------------------
3684       -- validate gender
3685       --------------------------
3686 
3687       -- gender is lookup code in lookup type HZ_GENDER
3688       IF p_person_rec.gender IS NOT NULL AND
3689          p_person_rec.gender <> fnd_api.g_miss_char AND
3690          (p_create_update_flag = 'C' OR
3691           (p_create_update_flag = 'U' AND
3692            p_person_rec.gender <> p_old_person_rec.gender))
3693       THEN
3694           validate_lookup (
3695               p_column                                => 'gender',
3696               p_lookup_type                           => 'HZ_GENDER',
3697               p_column_value                          => p_person_rec.gender,
3698               x_return_status                         => x_return_status);
3699 
3700           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3701             hz_utility_v2pub.debug(
3702                  p_prefix       => l_debug_prefix,
3703                  p_message      => 'gender in lookup HZ_GENDER. ' ||
3704                                    'x_return_status = ' || x_return_status,
3705                  p_msg_level=>fnd_log.level_statement);
3706           END IF;
3707       END IF;
3708 
3709       --------------------------
3710       -- validate person_iden_type
3711       --------------------------
3712 
3713       -- person_iden_type is lookup code in lookup type HZ_PERSON_IDEN_TYPE
3714       IF p_person_rec.person_iden_type IS NOT NULL AND
3715          p_person_rec.person_iden_type <> fnd_api.g_miss_char AND
3716          (p_create_update_flag = 'C' OR
3717           (p_create_update_flag = 'U' AND
3718            p_person_rec.person_iden_type <> p_old_person_rec.person_iden_type))
3719       THEN
3720           validate_lookup (
3721               p_column                                => 'person_iden_type',
3722               p_lookup_type                           => 'HZ_PERSON_IDEN_TYPE',
3723               p_column_value                          => p_person_rec.person_iden_type,
3724               x_return_status                         => x_return_status);
3725 
3726           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3727             hz_utility_v2pub.debug(
3728                  p_prefix       => l_debug_prefix,
3729                  p_message      => 'person_iden_type in lookup HZ_PERSON_IDEN_TYPE. ' ||
3730                                    'x_return_status = ' || x_return_status,
3731                  p_msg_level=>fnd_log.level_statement);
3732           END IF;
3733       END IF;
3734 
3735      -----------------------------------------------------------
3736      --Call to valicate against HR security (Bug Number 3099624)
3737      -----------------------------------------------------------
3738       IF(p_create_update_flag='U')
3739       THEN
3740            validate_hr_security
3741                 (
3742                 p_person_rec            => p_person_rec,
3743                 p_old_person_rec        => p_old_person_rec,
3744                 x_return_status         => x_return_status
3745                 );
3746       END IF;
3747 
3748 
3749       -- Debug info.
3750       /*IF g_debug THEN
3751           hz_utility_v2pub.debug ('validate_person (-)');
3752       END IF;
3753       */
3754       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3755         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person (-)',
3756                                p_msg_level=>fnd_log.level_procedure);
3757       END IF;
3758 
3759       --disable_debug;
3760 
3761   END validate_person;
3762 
3763   /**
3764    * PROCEDURE validate_hr_security
3765    *
3766    * DESCRIPTION
3767    *   Protects the HR data in the HZ_PERSON_PROFILES and the HZ_PARTIES tables
3768    *   by preventing updation by other users.
3769    *   If the profile option 'HZ_PROTECT_HR_PERSON_INFO' is set to 'Y',then the
3770    *   following fields are updateable only by HR:
3771    *      person_first_name
3772    *      person_last_name
3773    *      person_middle_name
3774    *      person_name_suffix
3775    *      person_previous_last_name
3776    *      person_title
3777    *      known_as
3778    *      person_first_name_phonetic
3779    *      person_last_name_phonetic
3780    *      person_name_phonetic
3781    *   If the profile option 'HZ_PROTECT_HR_PERSON_INFO' is set to 'N', then the
3782    *   following sensitive fields are updateable only by HR in addition to those
3783    *   mentioned above for the case when the profile option is set to 'Y':
3784    *      gender
3785    *      date_of_birth
3786    *      place_of_birth
3787    *      marital_status
3788    *
3789    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3790    *
3791    * ARGUMENTS
3792    *   IN:
3793    *     p_create_update_flag            Create update flag. 'C' = create. 'U' = update.
3794    *     p_person_rec                    Person record.
3795    *     p_old_person_rec                Old person record.
3796    *   IN/OUT:
3797    *     x_return_status                 Return status after the call. The status can
3798    *                                     be FND_API.G_RET_STS_SUCCESS (success),
3799    *                                     fnd_api.g_ret_sts_error (error),
3800    *                                     FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3801    *
3802    * NOTES
3803    *   The previous  validation for the same  purpose was  performed in the procedure
3804    *   HZ_REGISTRY_VALIDATE_V2PUB.validate_party and locked all fields against update
3805    *   as against the expected functionality of locking only the HR fields.
3806    *   (Bug Number 3099624).The previous validation has been commented out.
3807    *
3808    * MODIFICATION HISTORY
3809    *
3810    *   09-26-2003    Rajib Ranjan Borah  o Created.
3811    *
3812    */
3813 
3814 PROCEDURE validate_hr_security(
3815       p_person_rec                     IN     HZ_PARTY_V2PUB.PERSON_REC_TYPE,
3816       p_old_person_rec                 IN     HZ_PARTY_V2PUB.PERSON_REC_TYPE,
3817       x_return_status                  IN OUT NOCOPY VARCHAR2
3818     ) IS
3819 
3820       cols_updated                    VARCHAR2(300) := '';
3821       l_debug_prefix                   VARCHAR2(30) := '';
3822 BEGIN
3823 
3824      --enable_debug;
3825 
3826      -- Debug info.
3827      /*IF g_debug
3828      THEN
3829           hz_utility_v2pub.debug ('validate_hr_security (+)');
3830      END IF;
3831      */
3832      IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3833         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_hr_security (+)',
3834                                p_msg_level=>fnd_log.level_procedure);
3835     END IF;
3836 
3837 
3838 
3839      IF(NVL(p_old_person_rec.party_rec.orig_system_reference,'X') LIKE 'PER%')
3840      THEN
3841           IF (NVL(FND_PROFILE.VALUE('HZ_CREATED_BY_MODULE'), '-222') <> 'HR API')
3842           THEN
3843                IF(FND_PROFILE.VALUE('HZ_PROTECT_HR_PERSON_INFO')='Y')
3844                THEN
3845                     IF(NVL(p_person_rec.person_first_name,p_old_person_rec.person_first_name)<>p_old_person_rec.person_first_name)
3846                     THEN
3847                          cols_updated :=cols_updated||',PERSON_FIRST_NAME';
3848                     END IF;
3849 
3850                     IF(NVL(p_person_rec.person_last_name,p_old_person_rec.person_last_name)<>p_old_person_rec.person_last_name)
3851                     THEN
3852                          cols_updated :=cols_updated||',PERSON_LAST_NAME';
3853                     END IF;
3854 
3855                     IF(NVL(p_person_rec.person_middle_name,p_old_person_rec.person_middle_name)<>p_old_person_rec.person_middle_name)
3856                     THEN
3857                          cols_updated :=cols_updated||',PERSON_MIDDLE_NAME';
3858                     END IF;
3859 
3860                     IF(NVL(p_person_rec.person_name_suffix,p_old_person_rec.person_name_suffix)<>p_old_person_rec.person_name_suffix)
3861                     THEN
3862                          cols_updated :=cols_updated||',PERSON_NAME_SUFFIX';
3863                     END IF;
3864 
3865                     IF(NVL(p_person_rec.person_previous_last_name,p_old_person_rec.person_previous_last_name)<>p_old_person_rec.person_previous_last_name)
3866                     THEN
3867                          cols_updated :=cols_updated||',PERSON_PREVIOUS_LAST_NAME';
3868                     END IF;
3869 
3870                     IF(NVL(p_person_rec.known_as,p_old_person_rec.known_as)<>p_old_person_rec.known_as)
3871                     THEN
3872                          cols_updated :=cols_updated||',KNOWN_AS';
3873                     END IF;
3874 
3875                     IF(NVL(p_person_rec.person_title,p_old_person_rec.person_title)<>p_old_person_rec.person_title)
3876                     THEN
3877                          cols_updated :=cols_updated||',PERSON_TITLE';
3878                     END IF;
3879 
3880                     IF(NVL(p_person_rec.person_first_name_phonetic,p_old_person_rec.person_first_name_phonetic)<>p_old_person_rec.person_first_name_phonetic)
3881                     THEN
3882                          cols_updated :=cols_updated||',PERSON_FIRST_NAME_PHONETIC';
3883                     END IF;
3884 
3885                     IF(NVL(p_person_rec.person_last_name_phonetic,p_old_person_rec.person_last_name_phonetic)<>p_old_person_rec.person_last_name_phonetic)
3886                     THEN
3887                          cols_updated :=cols_updated||',PERSON_LAST_NAME_PHONETIC';
3888                     END IF;
3889 
3890                     IF(NVL(p_person_rec.person_name_phonetic,p_old_person_rec.person_name_phonetic)<>p_old_person_rec.person_name_phonetic)
3891                     THEN
3892                          cols_updated :=cols_updated||',PERSON_NAME_PHONETIC';
3893                     END IF;
3894 
3895 
3896 
3897                     IF(cols_updated IS NOT NULL)
3898                     THEN
3899                          cols_updated:=SUBSTR(cols_updated,2);
3900                          FND_MESSAGE.SET_NAME('AR', 'HZ_CREATED_BY_MISMATCH');
3901                          FND_MESSAGE.SET_TOKEN('COLUMN',cols_updated);
3902                          FND_MSG_PUB.ADD;
3903                          x_return_status := FND_API.G_RET_STS_ERROR;
3904                     END IF;
3905 
3906                ELSIF(FND_PROFILE.VALUE('HZ_PROTECT_HR_PERSON_INFO')='N') --elsif corresonding to --IF(FND_PROFILE.VALUE('HZ_PROTECT_PERSON_INFO')='Y')--
3907                THEN
3908                     IF(NVL(p_person_rec.person_first_name,p_old_person_rec.person_first_name)<>p_old_person_rec.person_first_name)
3909                     THEN
3910                          cols_updated :=cols_updated||',PERSON_FIRST_NAME';
3911                     END IF;
3912 
3913                     IF(NVL(p_person_rec.person_last_name,p_old_person_rec.person_last_name)<>p_old_person_rec.person_last_name)
3914                     THEN
3915                          cols_updated :=cols_updated||',PERSON_LAST_NAME';
3916                     END IF;
3917 
3918                     IF(NVL(p_person_rec.person_middle_name,p_old_person_rec.person_middle_name)<>p_old_person_rec.person_middle_name)
3919                     THEN
3920                          cols_updated :=cols_updated||',PERSON_MIDDLE_NAME';
3921                     END IF;
3922 
3923                     IF(NVL(p_person_rec.person_name_suffix,p_old_person_rec.person_name_suffix)<>p_old_person_rec.person_name_suffix)
3924                     THEN
3925                          cols_updated :=cols_updated||',PERSON_NAME_SUFFIX';
3926                     END IF;
3927 
3928                     IF(NVL(p_person_rec.person_previous_last_name,p_old_person_rec.person_previous_last_name)<>p_old_person_rec.person_previous_last_name)
3929                     THEN
3930                          cols_updated :=cols_updated||',PERSON_PREVIOUS_LAST_NAME';
3931                     END IF;
3932 
3933                     IF(NVL(p_person_rec.known_as,p_old_person_rec.known_as)<>p_old_person_rec.known_as)
3934                     THEN
3935                          cols_updated :=cols_updated||',KNOWN_AS';
3936                     END IF;
3937 
3938                     IF(NVL(p_person_rec.person_title,p_old_person_rec.person_title)<>p_old_person_rec.person_title)
3939                     THEN
3940                          cols_updated :=cols_updated||',PERSON_TITLE';
3941                     END IF;
3942 
3943                     IF(NVL(p_person_rec.person_first_name_phonetic,p_old_person_rec.person_first_name_phonetic)<>p_old_person_rec.person_first_name_phonetic)
3944                     THEN
3945                          cols_updated :=cols_updated||',PERSON_FIRST_NAME_PHONETIC';
3946                     END IF;
3947 
3948                     IF(NVL(p_person_rec.person_last_name_phonetic,p_old_person_rec.person_last_name_phonetic)<>p_old_person_rec.person_last_name_phonetic)
3949                     THEN
3950                          cols_updated :=cols_updated||',PERSON_LAST_NAME_PHONETIC';
3951                     END IF;
3952 
3953                     IF(NVL(p_person_rec.person_name_phonetic,p_old_person_rec.person_name_phonetic)<>p_old_person_rec.person_name_phonetic)
3954                     THEN
3955                          cols_updated :=cols_updated||',PERSON_NAME_PHONETIC';
3956                     END IF;
3957 
3958                     IF(NVL(p_person_rec.gender,p_old_person_rec.gender)<>p_old_person_rec.gender)
3959                     THEN
3960                          cols_updated :=cols_updated||',GENDER';
3961                     END IF;
3962 
3963                     IF(NVL(p_person_rec.date_of_birth,p_old_person_rec.date_of_birth)<>p_old_person_rec.date_of_birth)
3964                     THEN
3965                          cols_updated :=cols_updated||',DATE_OF_BIRTH';
3966                     END IF;
3967 
3968                     IF(NVL(p_person_rec.place_of_birth,p_old_person_rec.place_of_birth)<>p_old_person_rec.place_of_birth)
3969                     THEN
3970                          cols_updated :=cols_updated||',PLACE_OF_BIRTH';
3971                     END IF;
3972 
3973                     IF(NVL(p_person_rec.marital_status,p_old_person_rec.marital_status)<>p_old_person_rec.marital_status)
3974                     THEN
3975                          cols_updated :=cols_updated||',MARITAL_STATUS';
3976                     END IF;
3977 
3978 
3979 
3980                     IF(cols_updated IS NOT NULL)
3981                     THEN
3982                          cols_updated:=SUBSTR(cols_updated,2);
3983                          FND_MESSAGE.SET_NAME('AR', 'HZ_CREATED_BY_MISMATCH');
3984                          FND_MESSAGE.SET_TOKEN('COLUMN',cols_updated);
3985                          FND_MSG_PUB.ADD;
3986                          x_return_status := FND_API.G_RET_STS_ERROR;
3987                     END IF;
3988 
3989                END IF;--end if corresponding to --IF(FND_PROFILE.VALUE('HZ_PROTECT_PERSON_INFO')='YES')--
3990 
3991           END IF;--end if corresponding to --IF(NVL(FND_PROFILE.VALUE('HZ_CREATED_BY_MODULE'), '-222') <> 'HR API')--
3992 
3993      END IF;--end if corresponding to --IF(NVL(p_old_party_rec.orig_system_reference,'X') LIKE 'PER%')--
3994 
3995 
3996      -- Debug info.
3997      /*IF g_debug
3998      THEN
3999           hz_utility_v2pub.debug ('validate_hr_security (-)');
4000      END IF;
4001      */
4002      IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4003         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_hr_security (-)',
4004                                p_msg_level=>fnd_log.level_procedure);
4005     END IF;
4006 
4007      --disable_debug;
4008 
4009 END validate_hr_security;
4010 
4011 
4012 
4013 /**
4014    * PROCEDURE validate_group
4015    *
4016    * DESCRIPTION
4017    *     Validates group record. Checks for
4018    *         uniqueness
4019    *         lookup types
4020    *         mandatory columns
4021    *         non-updateable fields
4022    *         foreign key validations
4023    *         other validations
4024    *
4025    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
4026    *
4027    * ARGUMENTS
4028    *   IN:
4029    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
4030    *     p_group_rec                    Group record.
4031    *     p_old_group_rec                Old group record.
4032    *   IN/OUT:
4033    *     x_return_status                Return status after the call. The status can
4034    *                                    be FND_API.G_RET_STS_SUCCESS (success),
4035    *                                    fnd_api.g_ret_sts_error (error),
4036    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
4037    *
4038    * NOTES
4039    *
4040    * MODIFICATION HISTORY
4041    *
4042    *   07-23-2001    Indrajit Sen       o Created.
4043    *
4044    */
4045 
4046   PROCEDURE validate_group(
4047       p_create_update_flag             IN     VARCHAR2,
4048       p_group_rec                      IN     HZ_PARTY_V2PUB.GROUP_REC_TYPE,
4049       p_old_group_rec                  IN     HZ_PARTY_V2PUB.GROUP_REC_TYPE,
4050       x_return_status                  IN OUT NOCOPY VARCHAR2
4051  ) IS
4052 
4053       l_debug_prefix                   VARCHAR2(30) := '';
4054 
4055   BEGIN
4056 
4057       --enable_debug;
4058 
4059       -- Debug info.
4060       /*IF g_debug THEN
4061         hz_utility_v2pub.debug ('validate_group (+)');
4062       END IF;
4063       */
4064       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4065         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_group (+)',
4066                                p_msg_level=>fnd_log.level_procedure);
4067       END IF;
4068 
4069       ----------------------
4070       -- validate group_name
4071       ----------------------
4072 
4073       -- group_name is mandatory field
4074       validate_mandatory (
4075           p_create_update_flag                    => p_create_update_flag,
4076           p_column                                => 'group_name',
4077           p_column_value                          => p_group_rec.group_name,
4078           x_return_status                         => x_return_status);
4079 
4080       /*IF g_debug THEN
4081           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4082               'group_name is mandatory field. ' ||
4083               'x_return_status = ' || x_return_status, l_debug_prefix);
4084       END IF;
4085       */
4086       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4087            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'group_name is mandatory field. ' ||
4088                                                 'x_return_status = ' || x_return_status,
4089                                   p_msg_level=>fnd_log.level_statement);
4090       END IF;
4091 
4092       ----------------------
4093       -- validate group_type
4094       ----------------------
4095 
4096       -- group_type is mandatory field
4097       validate_mandatory (
4098           p_create_update_flag                    => p_create_update_flag,
4099           p_column                                => 'group_type',
4100           p_column_value                          => p_group_rec.group_type,
4101           x_return_status                         => x_return_status);
4102 
4103       /*IF g_debug THEN
4104           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4105               'group_type is mandatory field. ' ||
4106               'x_return_status = ' || x_return_status, l_debug_prefix);
4107       END IF;
4108       */
4109       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4110            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'group_type is mandatory field. ' ||
4111                                                  'x_return_status = ' || x_return_status,
4112                                   p_msg_level=>fnd_log.level_statement);
4113       END IF;
4114 
4115       --------------------------------------
4116       -- validate created_by_module
4117       --------------------------------------
4118 
4119       validate_created_by_module(
4120         p_create_update_flag     => p_create_update_flag,
4121         p_created_by_module      => p_group_rec.created_by_module,
4122         p_old_created_by_module  => p_old_group_rec.created_by_module,
4123         x_return_status          => x_return_status);
4124 
4125       --------------------------------------
4126       -- validate application_id
4127       --------------------------------------
4128 
4129       validate_application_id(
4130         p_create_update_flag     => p_create_update_flag,
4131         p_application_id         => p_group_rec.application_id,
4132         p_old_application_id     => p_old_group_rec.application_id,
4133         x_return_status          => x_return_status);
4134 
4135   END validate_group;
4136 
4137    /**
4138    * PROCEDURE validate_organization
4139    *
4140    * DESCRIPTION
4141    *     Validates organization record. Checks for
4142    *         uniqueness
4143    *         lookup types
4144    *         mandatory columns
4145    *         non-updateable fields
4146    *         foreign key validations
4147    *         other validations
4148    *
4149    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
4150    *
4151    * ARGUMENTS
4152    *   IN:
4153    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
4154    *     p_organization_rec             Organization record.
4155    *     p_old_organization_rec         Old organization record.
4156    *   IN/OUT:
4157    *     x_return_status                Return status after the call. The status can
4158    *                                    be FND_API.G_RET_STS_SUCCESS (success),
4159    *                                    fnd_api.g_ret_sts_error (error),
4160    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
4161    *
4162    * NOTES
4163    *
4164    * MODIFICATION HISTORY
4165    *
4166    *   07-23-2001    Indrajit Sen       o Created.
4167    *   11-07-2001           Sisir       o Bug:1999814;Added validation for sic_code_type
4168    *                                      and fiscal_yearend_month.Updation is restricted
4169    *                                      if the value passed is same in database.
4170    *   02-20-2002    Kate Shan          o Comments out NOCOPY validation for obsolete columns
4171    *                                    o Add non-updatable validation for content_source_type
4172    *   03-11-2002    Jianying Huang     o Removed non-updatable validation for content_source_type
4173    *   02-04-2003    Sreedhar Mohan     o Added validations for validate total_employees_ind,
4174    *                                      total_emp_est_ind, total_emp_min_ind, emp_at_primary_adr_est_ind,
4175    *                                      emp_at_primary_adr_min_ind, ceo_title, ceo_name,
4176    *                                      principal_title and principal_name
4177    *   16-JAN-2004   Rajib Ranjan Borah o Bug 3333036.Rent_own_ind is now validated only if it
4178    *                                      has been updated and not for each record.
4179    *   31-AUG-2004   V.Ravichandran     o Bug 3853738. Commented the validation for columns
4180    *                                      total_emp_est_ind and emp_at_primary_adr_est_ind
4181    *                                      against lookup_type 'YES/NO' in validate_organization
4182    *                                      because these columns were validated against 2 lookups.
4183    *   13-JAN-2005   Rajib Ranjan Borah o SSM SST Integration and Extension
4184    *                                      Explicit non-updateability of third party provided ceo_name
4185    *                                      , ceo_title, etc will not be done as update rules can be used
4186    *                                      for the same.
4187    *   31-MAY-2006   Nishant Singhai    o Org Name update allowed check added for Bug 5174379.
4188    */
4189 
4190   PROCEDURE validate_organization(
4191       p_create_update_flag      IN      VARCHAR2,
4192       p_organization_rec        IN      HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE,
4193       p_old_organization_rec    IN      HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE,
4194       x_return_status           IN OUT NOCOPY      VARCHAR2
4195  ) IS
4196 
4197       l_dummy                                VARCHAR2(1);
4198       l_debug_prefix                         VARCHAR2(30) := '';
4199       l_return_status                        VARCHAR2(1);
4200 
4201 -- Bug 3040565 : Added a locla variable to store local_activity_code_type
4202 
4203    l_local_activity_code_type     varchar2(30);
4204    l_change_org_name_profile      VARCHAR2(10);
4205 
4206 
4207   BEGIN
4208 
4209       --enable_debug;
4210 
4211       -- Debug info.
4212       /*IF g_debug THEN
4213           hz_utility_v2pub.debug ('validate_organization (+)');
4214       END IF;
4215       */
4216       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4217         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_organization (+)',
4218                                p_msg_level=>fnd_log.level_procedure);
4219       END IF;
4220 
4221 
4222       -- validate nonsupported column in organization profile when creating
4223 
4224       IF FND_PROFILE.VALUE( 'HZ_API_ERR_ON_OBSOLETE_COLUMN' ) = 'Y' THEN
4225         validate_org_nonsupport_column(
4226             p_create_update_flag,
4227             p_organization_rec,
4228             x_return_status );
4229 
4230         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4231             RAISE FND_API.G_EXC_ERROR;
4232         END IF;
4233       END IF;
4234 
4235       -------------------------------------------------------------------------
4236       -- Validate organization_name is allowed to be updated or not
4237 	  -- Update only if profile (HZ: Change Party Name) is set to Y or it is
4238 	  -- not set at all. If it is set to 'N' update is not allowed.
4239       -- Check added for Bug 5174379 on 31-May-2006 (Nishant)
4240 	  -------------------------------------------------------------------------
4241       IF p_create_update_flag = 'U' THEN
4242 
4243         l_change_org_name_profile := fnd_profile.VALUE('AR_CHANGE_CUST_NAME');
4244         IF (NVL(l_change_org_name_profile,'Y') = 'N') THEN -- update to party name is not allowed
4245 
4246           IF (p_organization_rec.organization_name <> p_old_organization_rec.organization_name) THEN
4247               fnd_message.set_name('AR', 'HZ_ORG_NAME_UPDT_NOT_ALLOWED');
4248               fnd_msg_pub.add;
4249               x_return_status := fnd_api.g_ret_sts_error;
4250 		  END IF;
4251 
4252         END IF; -- profile = N
4253 
4254         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
4255            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4256 		                          p_message=>'Org Name Update Allowed Check...' ||
4257                                              'x_return_status : ' || x_return_status ||
4258                                              '. Profile AR_CHANGE_CUST_NAME value :'||l_change_org_name_profile,
4259                                   p_msg_level=>fnd_log.level_statement);
4260         END IF;
4261 
4262       END IF; -- create update flag = U
4263 
4264       -----------------------------
4265       -- validate organization_name
4266       -----------------------------
4267 
4268       -- organization_name is mandatory field
4269       validate_mandatory (
4270           p_create_update_flag                    => p_create_update_flag,
4271           p_column                                => 'organization_name',
4272           p_column_value                          => p_organization_rec.organization_name,
4273           x_return_status                         => x_return_status);
4274 
4275       /*IF g_debug THEN
4276           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4277               'organization_name is mandatory field. ' ||
4278               'x_return_status = ' || x_return_status, l_debug_prefix);
4279       END IF;
4280       */
4281       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4282            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'organization_name is mandatory field. ' ||
4283                                                 'x_return_status = ' || x_return_status,
4284                                   p_msg_level=>fnd_log.level_statement);
4285       END IF;
4286 
4287       -- organization_name cannot be set to null during update
4288       IF p_create_update_flag = 'U' THEN
4289           validate_cannot_update_to_null (
4290               p_column                                => 'organization_name',
4291               p_column_value                          => p_organization_rec.organization_name,
4292               x_return_status                         => x_return_status);
4293 
4294           /*IF g_debug THEN
4295               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4296                   'organization_name cannot be updated to null. ' ||
4297                   'x_return_status = ' || x_return_status, l_debug_prefix);
4298           END IF;
4299           */
4300           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4301                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'organization_name cannot be updated to null. ' ||
4302                                                         'x_return_status = ' || x_return_status,
4303                                   p_msg_level=>fnd_log.level_statement);
4304           END IF;
4305       END IF;
4306 
4307       ------------------------------
4308       -- validate gsa_indicator_flag
4309       ------------------------------
4310 /****Logical APIs - validation not required****/
4311   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4312       -- gsa_indicator_flag is lookup code in lookup type YES/NO
4313       validate_lookup (
4314           p_column                                => 'gsa_indicator_flag',
4315           p_lookup_type                           => 'YES/NO',
4316           p_column_value                          => p_organization_rec.gsa_indicator_flag,
4317           x_return_status                         => x_return_status);
4318 
4319       /*IF g_debug THEN
4320           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4321               'gsa_indicator_flag should be in lookup YES/NO. ' ||
4322               'x_return_status = ' || x_return_status, l_debug_prefix);
4323       END IF;
4324       */
4325       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4326            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'gsa_indicator_flag should be in lookup YES/NO. ' ||
4327                                                 'x_return_status = ' || x_return_status,
4328                                   p_msg_level=>fnd_log.level_statement);
4329       END IF;
4330     END IF;
4331 
4332       -------------------------
4333       -- validate sic_code_type
4334       -------------------------
4335 
4336       -- sic_code_type is lookup code in lookup type 'SIC_CODE_TYPE'
4337       IF p_organization_rec.sic_code_type IS NOT NULL
4338          AND
4339          p_organization_rec.sic_code_type <> fnd_api.g_miss_char
4340          AND
4341         (p_create_update_flag = 'C'
4342           OR
4343           (p_create_update_flag = 'U'
4344            AND
4345            p_organization_rec.sic_code_type <> p_old_organization_rec.sic_code_type
4346          )
4347         )
4348       THEN
4349          validate_lookup (
4350           p_column                                => 'sic_code_type',
4351           p_lookup_type                           => 'SIC_CODE_TYPE',
4352           p_column_value                          => p_organization_rec.sic_code_type,
4353           x_return_status                         => x_return_status);
4354 
4355           /*IF g_debug THEN
4356             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4357               'sic_code_type should be in lookup SIC_CODE_TYPE' ||
4358               'x_return_status = ' || x_return_status, l_debug_prefix);
4359           END IF;
4360           */
4361           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4362               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sic_code_type should be in lookup SIC_CODE_TYPE' ||
4363                                                 'x_return_status = ' || x_return_status,
4364                                   p_msg_level=>fnd_log.level_statement);
4365            END IF;
4366       END IF;
4367 
4368       --------------------------------
4369       -- validate fiscal_yearend_month
4370       --------------------------------
4371 
4372       -- fiscal_yearend_month is lookup code in lookup type 'MONTH'
4373       IF p_organization_rec.fiscal_yearend_month IS NOT NULL
4374          AND
4375          p_organization_rec.fiscal_yearend_month <> fnd_api.g_miss_char
4376          AND
4377         (p_create_update_flag = 'C'
4378           OR
4379           (p_create_update_flag = 'U'
4380            AND
4381            p_organization_rec.fiscal_yearend_month <> p_old_organization_rec.fiscal_yearend_month
4382          )
4383         )
4384       THEN
4385         validate_lookup (
4386           p_column                                => 'fiscal_yearend_month',
4387           p_lookup_type                           => 'MONTH',
4388           p_column_value                          => p_organization_rec.fiscal_yearend_month,
4389           x_return_status                         => x_return_status);
4390 
4391         /*IF g_debug THEN
4392           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4393               'fiscal_yearend_month should be in lookup MONTH' ||
4394               'x_return_status = ' || x_return_status, l_debug_prefix);
4395         END IF;
4396         */
4397         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4398            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fiscal_yearend_month should be in lookup MONTH' ||
4399                                                 'x_return_status = ' || x_return_status,
4400                                   p_msg_level=>fnd_log.level_statement);
4401         END IF;
4402       END IF;
4403 
4404       -------------------------
4405       -- validate internal_flag
4406       -------------------------
4407 /****Logical APIs - validation not required****/
4408   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4409       -- internal_flag is lookup code in lookup type YES/NO
4410       validate_lookup (
4411           p_column                                => 'internal_flag',
4412           p_lookup_type                           => 'YES/NO',
4413           p_column_value                          => p_organization_rec.internal_flag,
4414           x_return_status                         => x_return_status);
4415 
4416       /*IF g_debug THEN
4417           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4418               'internal_flag should be in lookup YES/NO. ' ||
4419               'x_return_status = ' || x_return_status, l_debug_prefix);
4420       END IF;
4421       */
4422       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4423            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'internal_flag should be in lookup YES/NO. ' ||
4424                                                 'x_return_status = ' || x_return_status,
4425                                   p_msg_level=>fnd_log.level_statement);
4426       END IF;
4427     END IF;
4428 
4429       ------------------------
4430       -- validate legal_status
4431       ------------------------
4432 
4433       -- legal_status is lookup code in lookup type LEGAL_STATUS
4434       IF p_organization_rec.legal_status IS NOT NULL
4435          AND
4436          p_organization_rec.legal_status <> fnd_api.g_miss_char
4437          AND
4438          (p_create_update_flag = 'C'
4439           OR
4440           (p_create_update_flag = 'U'
4441            AND
4442            p_organization_rec.legal_status <> p_old_organization_rec.legal_status
4443          )
4444         )
4445       THEN
4446           validate_lookup (
4447               p_column                                => 'legal_status',
4448               p_lookup_type                           => 'LEGAL_STATUS',
4449               p_column_value                          => p_organization_rec.legal_status,
4450               x_return_status                         => x_return_status);
4451 
4452           /*IF g_debug THEN
4453               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4454                   'legal_status is lookup code in lookup type LEGAL_STATUS. ' ||
4455                   'x_return_status = ' || x_return_status, l_debug_prefix);
4456           END IF;*/
4457 
4458           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4459               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'legal_status is lookup code in lookup type LEGAL_STATUS. ' ||
4460                                                 'x_return_status = ' || x_return_status,
4461                                   p_msg_level=>fnd_log.level_statement);
4462            END IF;
4463       END IF;
4464 
4465       -------------------------
4466       -- validate hq_branch_ind
4467       -------------------------
4468 
4469       -- hq_branch_ind is lookup code in lookup type HQ_BRANCH_IND
4470       IF p_organization_rec.hq_branch_ind IS NOT NULL
4471          AND
4472          p_organization_rec.hq_branch_ind <> fnd_api.g_miss_char
4473          AND
4474          (p_create_update_flag = 'C'
4475           OR
4476           (p_create_update_flag = 'U'
4477            AND
4478            p_organization_rec.hq_branch_ind <> p_old_organization_rec.hq_branch_ind
4479          )
4480         )
4481       THEN
4482           validate_lookup (
4483               p_column                                => 'hq_branch_ind',
4484               p_lookup_type                           => 'HQ_BRANCH_IND',
4485               p_column_value                          => p_organization_rec.hq_branch_ind,
4486               x_return_status                         => x_return_status);
4487 
4488           /*IF g_debug THEN
4489               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4490                   'hq_branch_ind is lookup code in lookup type HQ_BRANCH_IND. ' ||
4491                   'x_return_status = ' || x_return_status, l_debug_prefix);
4492           END IF;
4493           */
4494           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4495                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4496                 p_message=>'hq_branch_ind is lookup code in lookup type HQ_BRANCH_IND. ' ||
4497                                                         'x_return_status = ' || x_return_status,
4498                                   p_msg_level=>fnd_log.level_statement);
4499           END IF;
4500       END IF;
4501 
4502       -----------------------
4503       -- validate branch_flag
4504       -----------------------
4505 /****Logical APIs - validation not required****/
4506   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4507       -- branch_flag is lookup code in lookup type YES/NO
4508       validate_lookup (
4509           p_column                                => 'branch_flag',
4510           p_lookup_type                           => 'YES/NO',
4511           p_column_value                          => p_organization_rec.branch_flag,
4512           x_return_status                         => x_return_status);
4513 
4514       /*IF g_debug THEN
4515           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4516               'branch_flag should be in lookup YES/NO. ' ||
4517               'x_return_status = ' || x_return_status, l_debug_prefix);
4518       END IF;
4519       */
4520       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4521            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'branch_flag should be in lookup YES/NO. ' ||
4522                                                 'x_return_status = ' || x_return_status,
4523                                   p_msg_level=>fnd_log.level_statement);
4524       END IF;
4525     END IF;
4526 
4527       -------------------
4528       -- validate oob_ind
4529       -------------------
4530 /****Logical APIs - validation not required****/
4531   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4532       -- oob_ind is lookup code in lookup type YES/NO
4533       validate_lookup (
4534           p_column                                => 'oob_ind',
4535           p_lookup_type                           => 'YES/NO',
4536           p_column_value                          => p_organization_rec.oob_ind,
4537           x_return_status                         => x_return_status);
4538 
4539       /*IF g_debug THEN
4540           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4541               'oob_ind should be in lookup YES/NO. ' ||
4542               'x_return_status = ' || x_return_status, l_debug_prefix);
4543       END IF;
4544       */
4545       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4546            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'oob_ind should be in lookup YES/NO. ' ||
4547                                                 'x_return_status = ' || x_return_status,
4548                                   p_msg_level=>fnd_log.level_statement);
4549     END IF;
4550    END IF;
4551 
4552       ----------------------
4553       -- validate import_ind
4554       ----------------------
4555 /****Logical APIs - validation not required****/
4556   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4557       -- import_ind is lookup code in lookup type YES/NO
4558       validate_lookup (
4559           p_column                                => 'import_ind',
4560           p_lookup_type                           => 'YES/NO',
4561           p_column_value                          => p_organization_rec.import_ind,
4562           x_return_status                         => x_return_status);
4563 
4564       /*IF g_debug THEN
4565           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4566               'import_ind should be in lookup YES/NO. ' ||
4567               'x_return_status = ' || x_return_status, l_debug_prefix);
4568       END IF;
4569       */
4570       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4571            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'import_ind should be in lookup YES/NO. ' ||
4572                                                 'x_return_status = ' || x_return_status,
4573                                   p_msg_level=>fnd_log.level_statement);
4574       END IF;
4575     END IF;
4576 
4577       ----------------------
4578       -- validate export_ind
4579       ----------------------
4580 /****Logical APIs - validation not required****/
4581   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4582       -- export_ind is lookup code in lookup type YES/NO
4583       validate_lookup (
4584           p_column                                => 'export_ind',
4585           p_lookup_type                           => 'YES/NO',
4586           p_column_value                          => p_organization_rec.export_ind,
4587           x_return_status                         => x_return_status);
4588 
4589       /*IF g_debug THEN
4590           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4591               'export_ind should be in lookup YES/NO. ' ||
4592               'x_return_status = ' || x_return_status, l_debug_prefix);
4593       END IF;
4594       */
4595       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4596            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'export_ind should be in lookup YES/NO. ' ||
4597                                                 'x_return_status = ' || x_return_status,
4598                                   p_msg_level=>fnd_log.level_statement);
4599       END IF;
4600     END IF;
4601 
4602       -----------------------------
4603       -- validate labor_surplus_ind
4604       -----------------------------
4605 /****Logical APIs - validation not required****/
4606   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4607       -- labor_surplus_ind is lookup code in lookup type YES/NO
4608       validate_lookup (
4609           p_column                                => 'labor_surplus_ind',
4610           p_lookup_type                           => 'YES/NO',
4611           p_column_value                          => p_organization_rec.labor_surplus_ind,
4612           x_return_status                         => x_return_status);
4613 
4614       /*IF g_debug THEN
4615           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4616               'labor_surplus_ind should be in lookup YES/NO. ' ||
4617               'x_return_status = ' || x_return_status, l_debug_prefix);
4618       END IF;
4619       */
4620       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4621            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'labor_surplus_ind should be in lookup YES/NO. ' ||
4622                                                  'x_return_status = ' || x_return_status,
4623                                   p_msg_level=>fnd_log.level_statement);
4624       END IF;
4625     END IF;
4626 
4627       /*   obsolete column. colum migrate to hz_credit_ratings.
4628            Validate in HZ_PARTY_INFO_VAL.validate_credit_ratings
4629 
4630       -------------------------
4631       -- validate debarment_ind
4632       -------------------------
4633 
4634       -- debarment_ind is lookup code in lookup type YES/NO
4635       validate_lookup (
4636           p_column                                => 'debarment_ind',
4637           p_lookup_type                           => 'YES/NO',
4638           p_column_value                          => p_organization_rec.debarment_ind,
4639           x_return_status                         => x_return_status);
4640 
4641       IF g_debug THEN
4642           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4643               'debarment_ind should be in lookup YES/NO. ' ||
4644               'x_return_status = ' || x_return_status, l_debug_prefix);
4645       END IF;
4646       */
4647 
4648       ------------------------------
4649       -- validate minority_owned_ind
4650       ------------------------------
4651 /****Logical APIs - validation not required****/
4652   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4653       -- minority_owned_ind is lookup code in lookup type YES/NO
4654       validate_lookup (
4655           p_column                                => 'minority_owned_ind',
4656           p_lookup_type                           => 'YES/NO',
4657           p_column_value                          => p_organization_rec.minority_owned_ind,
4658           x_return_status                         => x_return_status);
4659 
4660       /*IF g_debug THEN
4661           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4662               'minority_owned_ind should be in lookup YES/NO. ' ||
4663               'x_return_status = ' || x_return_status, l_debug_prefix);
4664       END IF;
4665       */
4666       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4667            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'minority_owned_ind should be in lookup YES/NO. ' ||
4668                                                 'x_return_status = ' || x_return_status,
4669                                   p_msg_level=>fnd_log.level_statement);
4670       END IF;
4671     END IF;
4672 
4673       ---------------------------
4674       -- validate woman_owned_ind
4675       ---------------------------
4676 /****Logical APIs - validation not required****/
4677   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4678       -- woman_owned_ind is lookup code in lookup type YES/NO
4679       validate_lookup (
4680           p_column                                => 'woman_owned_ind',
4681           p_lookup_type                           => 'YES/NO',
4682           p_column_value                          => p_organization_rec.woman_owned_ind,
4683           x_return_status                         => x_return_status);
4684 
4685       /*IF g_debug THEN
4686           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4687               'minority_owned_ind should be in lookup YES/NO. ' ||
4688               'x_return_status = ' || x_return_status, l_debug_prefix);
4689       END IF;
4690       */
4691       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4692            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'minority_owned_ind should be in lookup YES/NO. ' ||
4693                                                 'x_return_status = ' || x_return_status,
4694                                   p_msg_level=>fnd_log.level_statement);
4695       END IF;
4696     END IF;
4697 
4698       -------------------------
4699       -- validate disadv_8a_ind
4700       -------------------------
4701 /****Logical APIs - validation not required****/
4702   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4703       -- disadv_8a_ind is lookup code in lookup type YES/NO
4704       validate_lookup (
4705           p_column                                => 'disadv_8a_ind',
4706           p_lookup_type                           => 'YES/NO',
4707           p_column_value                          => p_organization_rec.disadv_8a_ind,
4708           x_return_status                         => x_return_status);
4709 
4710       /*IF g_debug THEN
4711           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4712               'disadv_8a_ind should be in lookup YES/NO. ' ||
4713               'x_return_status = ' || x_return_status, l_debug_prefix);
4714       END IF;
4715       */
4716       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4717            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'disadv_8a_ind should be in lookup YES/NO. ' ||
4718                                                 'x_return_status = ' || x_return_status,
4719                                   p_msg_level=>fnd_log.level_statement);
4720       END IF;
4721     END IF;
4722 
4723       -------------------------
4724       -- validate small_bus_ind
4725       -------------------------
4726 /****Logical APIs - validation not required****/
4727   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4728       -- small_bus_ind is lookup code in lookup type YES/NO
4729       validate_lookup (
4730           p_column                                => 'small_bus_ind',
4731           p_lookup_type                           => 'YES/NO',
4732           p_column_value                          => p_organization_rec.small_bus_ind,
4733           x_return_status                         => x_return_status);
4734 
4735       /*IF g_debug THEN
4736           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4737               'small_bus_ind should be in lookup YES/NO. ' ||
4738               'x_return_status = ' || x_return_status, l_debug_prefix);
4739       END IF;
4740       */
4741       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4742            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'small_bus_ind should be in lookup YES/NO. ' ||
4743                                         'x_return_status = ' || x_return_status,
4744                                   p_msg_level=>fnd_log.level_statement);
4745       END IF;
4746     END IF;
4747 
4748     /*  obsolete column. Column migrate to hz_credit_ratings.
4749         Validate in HZ_PARTY_INFO_VAL.validate_credit_ratings
4750 
4751       ------------------------------------
4752       -- validate failure_score_commentary
4753       ------------------------------------
4754 
4755       -- failure_score_commentary is lookup code in lookup type FAILURE_SCORE_COMMENTARY
4756       IF p_organization_rec.failure_score_commentary IS NOT NULL
4757          AND
4758          p_organization_rec.failure_score_commentary <> fnd_api.g_miss_char
4759          AND
4760          (p_create_update_flag = 'C'
4761           OR
4762           (p_create_update_flag = 'U'
4763            AND
4764            p_organization_rec.failure_score_commentary <> p_old_organization_rec.failure_score_commentary
4765          )
4766         )
4767       THEN
4768           validate_lookup (
4769               p_column                                => 'failure_score_commentary',
4770               p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
4771               p_column_value                          => p_organization_rec.failure_score_commentary,
4772               x_return_status                         => x_return_status);
4773 
4774 
4775           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4776                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4777                 p_message=>'failure_score_commentary is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
4778                                                         'x_return_status = ' || x_return_status,
4779                                   p_msg_level=>fnd_log.level_statement);
4780          END IF;
4781       END IF;
4782 
4783       --  obsolete column. Column migrate to hz_credit_ratings.
4784       --  Validate in HZ_PARTY_INFO_VAL.validate_credit_ratings
4785 
4786       -----------------------------------
4787       -- validate credit_score_commentary
4788       -----------------------------------
4789 
4790       -- credit_score_commentary is lookup code in lookup type CREDIT_SCORE_COMMENTARY
4791       IF p_organization_rec.credit_score_commentary IS NOT NULL
4792          AND
4793          p_organization_rec.credit_score_commentary <> fnd_api.g_miss_char
4794          AND
4795          (p_create_update_flag = 'C'
4796           OR
4797           (p_create_update_flag = 'U'
4798            AND
4799            p_organization_rec.credit_score_commentary <> p_old_organization_rec.credit_score_commentary
4800          )
4801         )
4802       THEN
4803           validate_lookup (
4804               p_column                                => 'credit_score_commentary',
4805               p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
4806               p_column_value                          => p_organization_rec.credit_score_commentary,
4807               x_return_status                         => x_return_status);
4808 
4809           IF g_debug THEN
4810               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4811                   'credit_score_commentary is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
4812                   'x_return_status = ' || x_return_status, l_debug_prefix);
4813           END IF;
4814 
4815       END IF;
4816       */
4817 
4818       -------------------------------
4819       -- validate local_bus_iden_type
4820       -------------------------------
4821 
4822       -- local_bus_iden_type is lookup code in lookup type LOCAL_BUS_IDEN_TYPE
4823       IF p_organization_rec.local_bus_iden_type IS NOT NULL
4824          AND
4825          p_organization_rec.local_bus_iden_type <> fnd_api.g_miss_char
4826          AND
4827          (p_create_update_flag = 'C'
4828           OR
4829           (p_create_update_flag = 'U'
4830            AND
4831            p_organization_rec.local_bus_iden_type <> p_old_organization_rec.local_bus_iden_type
4832          )
4833         )
4834       THEN
4835           validate_lookup (
4836               p_column                                => 'local_bus_iden_type',
4837               p_lookup_type                           => 'LOCAL_BUS_IDEN_TYPE',
4838               p_column_value                          => p_organization_rec.local_bus_iden_type,
4839               x_return_status                         => x_return_status);
4840 
4841           /*IF g_debug THEN
4842               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4843                   'local_bus_iden_type is lookup code in lookup type LOCAL_BUS_IDEN_TYPE. ' ||
4844                   'x_return_status = ' || x_return_status, l_debug_prefix);
4845           END IF;
4846           */
4847           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4848                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'local_bus_iden_type is lookup code in lookup type LOCAL_BUS_IDEN_TYPE. ' ||
4849                                                         'x_return_status = ' || x_return_status,
4850                                   p_msg_level=>fnd_log.level_statement);
4851            END IF;
4852 
4853       END IF;
4854 
4855       -----------------------------
4856       -- validate registration_type
4857       -----------------------------
4858 
4859       -- registration_type is lookup code in lookup type REGISTRATION_TYPE
4860       IF p_organization_rec.registration_type IS NOT NULL
4861          AND
4862          p_organization_rec.registration_type <> fnd_api.g_miss_char
4863          AND
4864          (p_create_update_flag = 'C'
4865           OR
4866           (p_create_update_flag = 'U'
4867            AND
4868            p_organization_rec.registration_type <> p_old_organization_rec.registration_type
4869          )
4870         )
4871       THEN
4872           validate_lookup (
4873               p_column                                => 'registration_type',
4874               p_lookup_type                           => 'REGISTRATION_TYPE',
4875               p_column_value                          => p_organization_rec.registration_type,
4876               x_return_status                         => x_return_status);
4877 
4878           /*IF g_debug THEN
4879               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4880                   'registration_type is lookup code in lookup type REGISTRATION_TYPE. ' ||
4881                   'x_return_status = ' || x_return_status, l_debug_prefix);
4882           END IF;
4883           */
4884           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4885                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4886                 p_message=>'registration_type is lookup code in lookup type REGISTRATION_TYPE. ' ||
4887                                                         'x_return_status = ' || x_return_status,
4888                                   p_msg_level=>fnd_log.level_statement);
4889           END IF;
4890       END IF;
4891 
4892       -- Bug 3853738
4893       /*
4894       -----------------------------
4895       -- validate total_emp_est_ind
4896       -----------------------------
4897 
4898       -- total_emp_est_ind is lookup code in lookup type YES/NO
4899       validate_lookup (
4900           p_column                                => 'total_emp_est_ind',
4901           p_lookup_type                           => 'YES/NO',
4902           p_column_value                          => p_organization_rec.total_emp_est_ind,
4903           x_return_status                         => x_return_status);
4904 
4905       /*IF g_debug THEN
4906           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4907               'total_emp_est_ind should be in lookup YES/NO. ' ||
4908               'x_return_status = ' || x_return_status, l_debug_prefix);
4909       END IF;
4910       */
4911       /*
4912       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4913            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'total_emp_est_ind should be in lookup YES/NO. ' ||
4914                                                 'x_return_status = ' || x_return_status,
4915                                   p_msg_level=>fnd_log.level_statement);
4916       END IF;
4917       */
4918       --------------------------
4919       -- validate parent_sub_ind
4920       --------------------------
4921 /****Logical APIs - validation not required****/
4922   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
4923       -- parent_sub_ind is lookup code in lookup type YES/NO
4924       validate_lookup (
4925           p_column                                => 'parent_sub_ind',
4926           p_lookup_type                           => 'YES/NO',
4927           p_column_value                          => p_organization_rec.parent_sub_ind,
4928           x_return_status                         => x_return_status);
4929 
4930       /*IF g_debug THEN
4931           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4932               'parent_sub_ind should be in lookup YES/NO. ' ||
4933               'x_return_status = ' || x_return_status, l_debug_prefix);
4934       END IF;
4935       */
4936       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4937            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'parent_sub_ind should be in lookup YES/NO. ' ||
4938                                                 'x_return_status = ' || x_return_status,
4939                                   p_msg_level=>fnd_log.level_statement);
4940       END IF;
4941     END IF;
4942 
4943       ------------------------------------
4944       -- validate local_activity_code_type
4945       ------------------------------------
4946 
4947       -- local_activity_code_type is lookup code in lookup type LOCAL_ACTIVITY_CODE_TYPE
4948       IF p_organization_rec.local_activity_code_type IS NOT NULL
4949          AND
4950          p_organization_rec.local_activity_code_type <> fnd_api.g_miss_char
4951          AND
4952          (p_create_update_flag = 'C'
4953           OR
4954           (p_create_update_flag = 'U'
4955            AND
4956            p_organization_rec.local_activity_code_type <> p_old_organization_rec.local_activity_code_type
4957          )
4958         )
4959       THEN
4960           validate_lookup (
4961               p_column                                => 'local_activity_code_type',
4962               p_lookup_type                           => 'LOCAL_ACTIVITY_CODE_TYPE',
4963               p_column_value                          => p_organization_rec.local_activity_code_type,
4964               x_return_status                         => x_return_status);
4965 
4966           /*IF g_debug THEN
4967               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4968                   'local_activity_code_type is lookup code in lookup type LOCAL_ACTIVITY_CODE_TYPE. ' ||
4969                   'x_return_status = ' || x_return_status, l_debug_prefix);
4970           END IF;
4971           */
4972           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4973              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
4974              p_message=>'local_activity_code_type is lookup code in lookup type LOCAL_ACTIVITY_CODE_TYPE. ' ||
4975                                                 'x_return_status = ' || x_return_status,
4976                                   p_msg_level=>fnd_log.level_statement);
4977           END IF;
4978       END IF;
4979 
4980 -- Bug 3040565 : Added validation for local_activity_code
4981 
4982       ------------------------------------
4983       -- validate local_activity_code
4984       ------------------------------------
4985 
4986       -- local_activity_code is lookup code in one of the lookup type  NACE, NAF, NAISC_1997
4987 
4988       IF p_organization_rec.local_activity_code IS NOT NULL
4989          AND
4990          p_organization_rec.local_activity_code <> fnd_api.g_miss_char
4991          AND
4992          (p_create_update_flag = 'C'
4993           OR
4994           (p_create_update_flag = 'U'
4995            AND
4996            p_organization_rec.local_activity_code <> p_old_organization_rec.local_activity_code
4997          )
4998         )
4999       THEN
5000 
5001         l_local_activity_code_type := nvl(p_organization_rec.local_activity_code_type, p_old_organization_rec.local_activity_code_type);
5002 
5003         if(l_local_activity_code_type = '4' OR l_local_activity_code_type = '5') then
5004                 l_local_activity_code_type := 'NACE';
5005         end if;
5006 
5007           validate_fnd_lookup(
5008               p_lookup_type                           => l_local_activity_code_type,
5009               p_column                                => 'local_activity_code',
5010               p_column_value                          => p_organization_rec.local_activity_code,
5011               p_content_source_type                               => 'DNB',
5012               x_return_status                         => x_return_status);
5013 
5014 
5015           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5016                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5017                 p_message=>'local_activity_code is lookup code in lookup type ' || p_organization_rec.local_activity_code_type || '.' ||
5018                                                  'x_return_status = ' || x_return_status,
5019                                   p_msg_level=>fnd_log.level_statement);
5020           END IF;
5021       END IF;
5022 
5023 
5024 
5025       ------------------------------------
5026       -- validate public_private_ownership_flag
5027       ------------------------------------
5028 /****Logical APIs - validation not required****/
5029   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5030       -- public_private_ownership_flag is lookup code in lookup type YES/NO
5031       validate_lookup (
5032           p_column                                => 'public_private_ownership_flag',
5033           p_lookup_type                           => 'YES/NO',
5034           p_column_value                          => p_organization_rec.public_private_ownership_flag,
5035           x_return_status                         => x_return_status);
5036 
5037       /*IF g_debug THEN
5038           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5039               'public_private_ownership_flag should be in lookup YES/NO. ' ||
5040               'x_return_status = ' || x_return_status, l_debug_prefix);
5041       END IF;
5042       */
5043       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5044            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5045            p_message=>'public_private_ownership_flag should be in lookup YES/NO. ' ||
5046                                                  'x_return_status = ' || x_return_status,
5047                                   p_msg_level=>fnd_log.level_statement);
5048       END IF;
5049     END IF;
5050 
5051       -- Bug 3853738
5052       /*
5053       ------------------------------------
5054       -- validate emp_at_primary_adr_est_ind
5055       ------------------------------------
5056 
5057       -- emp_at_primary_adr_est_ind is lookup code in lookup type YES/NO
5058       validate_lookup (
5059           p_column                                => 'emp_at_primary_adr_est_ind',
5060           p_lookup_type                           => 'YES/NO',
5061           p_column_value                          => p_organization_rec.emp_at_primary_adr_est_ind,
5062           x_return_status                         => x_return_status);
5063 
5064       /*IF g_debug THEN
5065           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5066               'emp_at_primary_adr_est_ind should be in lookup YES/NO. ' ||
5067               'x_return_status = ' || x_return_status, l_debug_prefix);
5068       END IF;
5069       */
5070       /*
5071       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5072            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5073            p_message=>'emp_at_primary_adr_est_ind should be in lookup YES/NO. ' ||
5074                                                 'x_return_status = ' || x_return_status,
5075                                   p_msg_level=>fnd_log.level_statement);
5076       END IF;
5077       */
5078       /**
5079        * Bug 2197181: content_source_type is obsolete.
5080 
5081       -------------------------------
5082       -- validate content_source_type
5083       -------------------------------
5084 
5085       -- do not need to check content_source_type is mandatory because
5086       -- we default content_source_type to hz_party_v2pub.g_miss_content_source_type
5087       -- in table handler.
5088 
5089       -- since we are selecting person_profile_id from hz_organization_profiles
5090       -- for record having content_source_type of p_organization_rec.content_source_type,
5091       -- in this case, we do not need to check for non-updatability of content_source_type.
5092 
5093       -- content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE
5094       validate_lookup (
5095           p_column                                => 'content_source_type',
5096           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
5097           p_column_value                          => p_organization_rec.content_source_type,
5098           x_return_status                         => x_return_status);
5099 
5100       IF g_debug THEN
5101           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5102               'content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE. ' ||
5103               'x_return_status = ' || x_return_status, l_debug_prefix);
5104       END IF;
5105       **/
5106 
5107       /*  obsolete column. Column migrate to hz_credit_ratings.
5108           Validate in HZ_PARTY_INFO_VAL.validate_credit_ratings
5109 
5110       ------------------------------------
5111       -- validate credit_score_commentary2
5112       ------------------------------------
5113 
5114       -- credit_score_commentary2 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5115       validate_lookup (
5116           p_column                                => 'credit_score_commentary2',
5117           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5118           p_column_value                          => p_organization_rec.credit_score_commentary2,
5119           x_return_status                         => x_return_status);
5120 
5121       IF g_debug THEN
5122           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5123               'credit_score_commentary2 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5124               'x_return_status = ' || x_return_status, l_debug_prefix);
5125       END IF;
5126 
5127       ------------------------------------
5128       -- validate credit_score_commentary3
5129       ------------------------------------
5130 
5131       -- credit_score_commentary3 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5132       validate_lookup (
5133           p_column                                => 'credit_score_commentary3',
5134           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5135           p_column_value                          => p_organization_rec.credit_score_commentary3,
5136           x_return_status                         => x_return_status);
5137 
5138       IF g_debug THEN
5139           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5140               'credit_score_commentary3 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5141               'x_return_status = ' || x_return_status, l_debug_prefix);
5142       END IF;
5143 
5144       ------------------------------------
5145       -- validate credit_score_commentary4
5146       ------------------------------------
5147 
5148       -- credit_score_commentary4 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5149       validate_lookup (
5150           p_column                                => 'credit_score_commentary4',
5151           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5152           p_column_value                          => p_organization_rec.credit_score_commentary4,
5153           x_return_status                         => x_return_status);
5154 
5155       IF g_debug THEN
5156           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5157               'credit_score_commentary4 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5158               'x_return_status = ' || x_return_status, l_debug_prefix);
5159       END IF;
5160 
5161       ------------------------------------
5162       -- validate credit_score_commentary5
5163       ------------------------------------
5164 
5165       -- credit_score_commentary5 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5166       validate_lookup (
5167           p_column                                => 'credit_score_commentary5',
5168           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5169           p_column_value                          => p_organization_rec.credit_score_commentary5,
5170           x_return_status                         => x_return_status);
5171 
5172       IF g_debug THEN
5173           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5174               'credit_score_commentary5 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5175               'x_return_status = ' || x_return_status, l_debug_prefix);
5176       END IF;
5177 
5178       ------------------------------------
5179       -- validate credit_score_commentary6
5180       ------------------------------------
5181 
5182       -- credit_score_commentary6 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5183       validate_lookup (
5184           p_column                                => 'credit_score_commentary6',
5185           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5186           p_column_value                          => p_organization_rec.credit_score_commentary6,
5187           x_return_status                         => x_return_status);
5188 
5189       IF g_debug THEN
5190           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5191               'credit_score_commentary6 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5192               'x_return_status = ' || x_return_status, l_debug_prefix);
5193       END IF;
5194 
5195       ------------------------------------
5196       -- validate credit_score_commentary7
5197       ------------------------------------
5198 
5199       -- credit_score_commentary7 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5200       validate_lookup (
5201           p_column                                => 'credit_score_commentary7',
5202           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5203           p_column_value                          => p_organization_rec.credit_score_commentary7,
5204           x_return_status                         => x_return_status);
5205 
5206       IF g_debug THEN
5207           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5208               'credit_score_commentary7 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5209               'x_return_status = ' || x_return_status, l_debug_prefix);
5210       END IF;
5211 
5212       ------------------------------------
5213       -- validate credit_score_commentary8
5214       ------------------------------------
5215 
5216       -- credit_score_commentary8 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5217       validate_lookup (
5218           p_column                                => 'credit_score_commentary8',
5219           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5220           p_column_value                          => p_organization_rec.credit_score_commentary8,
5221           x_return_status                         => x_return_status);
5222 
5223       IF g_debug THEN
5224           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5225               'credit_score_commentary8 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5226               'x_return_status = ' || x_return_status, l_debug_prefix);
5227       END IF;
5228 
5229       ------------------------------------
5230       -- validate credit_score_commentary9
5231       ------------------------------------
5232 
5233       -- credit_score_commentary9 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5234       validate_lookup (
5235           p_column                                => 'credit_score_commentary9',
5236           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5237           p_column_value                          => p_organization_rec.credit_score_commentary9,
5238           x_return_status                         => x_return_status);
5239 
5240       IF g_debug THEN
5241           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5242               'credit_score_commentary9 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5243               'x_return_status = ' || x_return_status, l_debug_prefix);
5244       END IF;
5245 
5246       -------------------------------------
5247       -- validate credit_score_commentary10
5248       -------------------------------------
5249 
5250       -- credit_score_commentary10 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
5251       validate_lookup (
5252           p_column                                => 'credit_score_commentary10',
5253           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
5254           p_column_value                          => p_organization_rec.credit_score_commentary10,
5255           x_return_status                         => x_return_status);
5256 
5257       IF g_debug THEN
5258           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5259               'credit_score_commentary10 is lookup code in lookup type CREDIT_SCORE_COMMENTARY. ' ||
5260               'x_return_status = ' || x_return_status, l_debug_prefix);
5261       END IF;
5262 
5263 
5264       -------------------------------------
5265       -- validate failure_score_commentary2
5266       -------------------------------------
5267 
5268       -- failure_score_commentary2 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5269       validate_lookup (
5270           p_column                                => 'failure_score_commentary2',
5271           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5272           p_column_value                          => p_organization_rec.failure_score_commentary2,
5273           x_return_status                         => x_return_status);
5274 
5275       IF g_debug THEN
5276           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5277               'failure_score_commentary2 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5278               'x_return_status = ' || x_return_status, l_debug_prefix);
5279       END IF;
5280 
5281       -------------------------------------
5282       -- validate failure_score_commentary3
5283       -------------------------------------
5284 
5285       -- failure_score_commentary3 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5286       validate_lookup (
5287           p_column                                => 'failure_score_commentary3',
5288           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5289           p_column_value                          => p_organization_rec.failure_score_commentary3,
5290           x_return_status                         => x_return_status);
5291 
5292       IF g_debug THEN
5293           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5294               'failure_score_commentary3 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5295               'x_return_status = ' || x_return_status, l_debug_prefix);
5296       END IF;
5297 
5298       -------------------------------------
5299       -- validate failure_score_commentary4
5300       -------------------------------------
5301 
5302       -- failure_score_commentary4 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5303       validate_lookup (
5304           p_column                                => 'failure_score_commentary4',
5305           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5306           p_column_value                          => p_organization_rec.failure_score_commentary4,
5307           x_return_status                         => x_return_status);
5308 
5309       IF g_debug THEN
5310           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5311               'failure_score_commentary4 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5312               'x_return_status = ' || x_return_status, l_debug_prefix);
5313       END IF;
5314 
5315       -------------------------------------
5316       -- validate failure_score_commentary5
5317       -------------------------------------
5318 
5319       -- failure_score_commentary5 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5320       validate_lookup (
5321           p_column                                => 'failure_score_commentary5',
5322           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5323           p_column_value                          => p_organization_rec.failure_score_commentary5,
5324           x_return_status                         => x_return_status);
5325 
5326       IF g_debug THEN
5327           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5328               'failure_score_commentary5 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5329               'x_return_status = ' || x_return_status, l_debug_prefix);
5330       END IF;
5331 
5332       -------------------------------------
5333       -- validate failure_score_commentary6
5334       -------------------------------------
5335 
5336       -- failure_score_commentary6 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5337       validate_lookup (
5338           p_column                                => 'failure_score_commentary6',
5339           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5340           p_column_value                          => p_organization_rec.failure_score_commentary6,
5341           x_return_status                         => x_return_status);
5342 
5343       IF g_debug THEN
5344           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5345               'failure_score_commentary6 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5346               'x_return_status = ' || x_return_status, l_debug_prefix);
5347       END IF;
5348 
5349       -------------------------------------
5350       -- validate failure_score_commentary7
5351       -------------------------------------
5352 
5353       -- failure_score_commentary7 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5354       validate_lookup (
5355           p_column                                => 'failure_score_commentary7',
5356           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5357           p_column_value                          => p_organization_rec.failure_score_commentary7,
5358           x_return_status                         => x_return_status);
5359 
5360       IF g_debug THEN
5361           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5362               'failure_score_commentary7 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5363               'x_return_status = ' || x_return_status, l_debug_prefix);
5364       END IF;
5365 
5366       -------------------------------------
5367       -- validate failure_score_commentary8
5368       -------------------------------------
5369 
5370       -- failure_score_commentary8 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5371       validate_lookup (
5372           p_column                                => 'failure_score_commentary8',
5373           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5374           p_column_value                          => p_organization_rec.failure_score_commentary8,
5375           x_return_status                         => x_return_status);
5376 
5377       IF g_debug THEN
5378           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5379               'failure_score_commentary8 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5380               'x_return_status = ' || x_return_status, l_debug_prefix);
5381       END IF;
5382 
5383       -------------------------------------
5384       -- validate failure_score_commentary9
5385       -------------------------------------
5386 
5387       -- failure_score_commentary9 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5388       validate_lookup (
5389           p_column                                => 'failure_score_commentary9',
5390           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5391           p_column_value                          => p_organization_rec.failure_score_commentary9,
5392           x_return_status                         => x_return_status);
5393 
5394       IF g_debug THEN
5395           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5396               'failure_score_commentary9 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5397               'x_return_status = ' || x_return_status, l_debug_prefix);
5398       END IF;
5399 
5400       --------------------------------------
5401       -- validate failure_score_commentary10
5402       --------------------------------------
5403 
5404       -- failure_score_commentary10 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
5405       validate_lookup (
5406           p_column                                => 'failure_score_commentary10',
5407           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
5408           p_column_value                          => p_organization_rec.failure_score_commentary10,
5409           x_return_status                         => x_return_status);
5410 
5411       IF g_debug THEN
5412           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5413               'failure_score_commentary10 is lookup code in lookup type FAILURE_SCORE_COMMENTARY. ' ||
5414               'x_return_status = ' || x_return_status, l_debug_prefix);
5415       END IF;
5416 
5417       -- Obsolete column. Column migrate to hz_credit_rating.
5418       -- Validate in HZ_PARTY_INFO_VAL.validate_credit_ratings
5419 
5420       ----------------------------------------
5421       -- validate maximum_credit_currency_code
5422       ----------------------------------------
5423 
5424       -- maximum_credit_currency_code is foreign key of fnd_currencies.currency_code
5425       IF p_organization_rec.maximum_credit_currency_code IS NOT NULL
5426          AND
5427          p_organization_rec.maximum_credit_currency_code <> fnd_api.g_miss_char
5428       THEN
5429           BEGIN
5430               SELECT 'Y'
5431               INTO   l_dummy
5432               FROM   FND_CURRENCIES
5433               WHERE  CURRENCY_CODE = p_organization_rec.maximum_credit_currency_code
5434               AND    CURRENCY_FLAG = 'Y'
5435               AND    ENABLED_FLAG in ('Y', 'N');
5436           EXCEPTION
5437               WHEN NO_DATA_FOUND THEN
5438                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
5439                   fnd_message.set_token('FK', 'maximum_credit_currency_code');
5440                   fnd_message.set_token('COLUMN', 'currency_code');
5441                   fnd_message.set_token('TABLE', 'fnd_currencies');
5442                   fnd_msg_pub.add;
5443                   x_return_status := fnd_api.g_ret_sts_error;
5444           END;
5445 
5446           IF g_debug THEN
5447               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5448                   'maximum_credit_currency_code is foreign key of fnd_currencies.currency_code. ' ||
5449                   'x_return_status = ' || x_return_status, l_debug_prefix);
5450           END IF;
5451 
5452       END IF;
5453       */
5454 
5455       -------------------------------
5456       -- validate total_employees_ind
5457       -------------------------------
5458 
5459       -- total_employees_ind is lookup code in lookup type TOTAL_EMPLOYEES_INDICATOR
5460       validate_lookup (
5461           p_column                                => 'total_employees_ind',
5462           p_lookup_type                           => 'TOTAL_EMPLOYEES_INDICATOR',
5463           p_column_value                          => p_organization_rec.total_employees_ind,
5464           x_return_status                         => x_return_status);
5465 
5466       /*IF g_debug THEN
5467           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5468               'total_employees_ind is lookup code in lookup type TOTAL_EMPLOYEES_INDICATOR. ' ||
5469               'x_return_status = ' || x_return_status, l_debug_prefix);
5470       END IF;
5471       */
5472       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5473            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'total_employees_ind is lookup code in lookup type TOTAL_EMPLOYEES_INDICATOR. ' ||
5474                  'x_return_status = ' || x_return_status,
5475                                   p_msg_level=>fnd_log.level_statement);
5476       END IF;
5477 
5478       -----------------------------
5479       -- validate total_emp_est_ind
5480       -----------------------------
5481 
5482       -- total_emp_est_ind is lookup code in lookup type TOTAL_EMP_EST_IND
5483       validate_lookup (
5484           p_column                                => 'total_emp_est_ind',
5485           p_lookup_type                           => 'TOTAL_EMP_EST_IND',
5486           p_column_value                          => p_organization_rec.total_emp_est_ind,
5487           x_return_status                         => x_return_status);
5488 
5489       /*IF g_debug THEN
5490           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5491               'total_emp_est_ind is lookup code in lookup type TOTAL_EMP_EST_IND. ' ||
5492               'x_return_status = ' || x_return_status, l_debug_prefix);
5493       END IF;
5494       */
5495       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5496            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5497            p_message=>'total_emp_est_ind is lookup code in lookup type TOTAL_EMP_EST_IND. ' ||
5498                                              'x_return_status = ' || x_return_status,
5499                                   p_msg_level=>fnd_log.level_statement);
5500       END IF;
5501 
5502       -----------------------------
5503       -- validate total_emp_min_ind
5504       -----------------------------
5505 
5506       -- total_emp_min_ind is lookup code in lookup type TOTAL_EMP_MIN_IND
5507       validate_lookup (
5508           p_column                                => 'total_emp_min_ind',
5509           p_lookup_type                           => 'TOTAL_EMP_MIN_IND',
5510           p_column_value                          => p_organization_rec.total_emp_min_ind,
5511           x_return_status                         => x_return_status);
5512 
5513       /*IF g_debug THEN
5514           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5515               'total_emp_min_ind is lookup code in lookup type TOTAL_EMP_MIN_IND. ' ||
5516               'x_return_status = ' || x_return_status, l_debug_prefix);
5517       END IF;
5518       */
5519       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5520            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5521            p_message=>'total_emp_min_ind is lookup code in lookup type TOTAL_EMP_MIN_IND. ' ||
5522                                                 'x_return_status = ' || x_return_status,
5523                                   p_msg_level=>fnd_log.level_statement);
5524       END IF;
5525 
5526       --------------------------------------
5527       -- validate emp_at_primary_adr_est_ind
5528       --------------------------------------
5529 
5530       -- emp_at_primary_adr_est_ind is lookup code in lookup type EMP_AT_PRIMARY_ADR_EST_IND
5531       validate_lookup (
5532           p_column                                => 'emp_at_primary_adr_est_ind',
5533           p_lookup_type                           => 'EMP_AT_PRIMARY_ADR_EST_IND',
5534           p_column_value                          => p_organization_rec.emp_at_primary_adr_est_ind,
5535           x_return_status                         => x_return_status);
5536 
5537       /*IF g_debug THEN
5538           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5539               'emp_at_primary_adr_est_ind is lookup code in lookup type EMP_AT_PRIMARY_ADR_EST_IND. ' ||
5540               'x_return_status = ' || x_return_status, l_debug_prefix);
5541       END IF;
5542       */
5543       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5544            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'emp_at_primary_adr_est_ind is lookup code in lookup type EMP_AT_PRIMARY_ADR_EST_IND. ' ||
5545                                                 'x_return_status = ' || x_return_status,
5546                                   p_msg_level=>fnd_log.level_statement);
5547       END IF;
5548 
5549       --------------------------------------
5550       -- validate emp_at_primary_adr_min_ind
5551       --------------------------------------
5552 
5553       -- emp_at_primary_adr_min_ind is lookup code in lookup type EMP_AT_PRIMARY_ADR_MIN_IND
5554       validate_lookup (
5555           p_column                                => 'emp_at_primary_adr_min_ind',
5556           p_lookup_type                           => 'EMP_AT_PRIMARY_ADR_MIN_IND',
5557           p_column_value                          => p_organization_rec.emp_at_primary_adr_min_ind,
5558           x_return_status                         => x_return_status);
5559 
5560       /*IF g_debug THEN
5561           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5562               'emp_at_primary_adr_min_ind is lookup code in lookup type EMP_AT_PRIMARY_ADR_MIN_IND. ' ||
5563               'x_return_status = ' || x_return_status, l_debug_prefix);
5564       END IF;
5565       */
5566       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5567            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5568            p_message=>'emp_at_primary_adr_min_ind is lookup code in lookup type EMP_AT_PRIMARY_ADR_MIN_IND. ' ||
5569                                                  'x_return_status = ' || x_return_status,
5570                                   p_msg_level=>fnd_log.level_statement);
5571        END IF;
5572 
5573 
5574       --2897298, Added
5575       ------------------------
5576       -- validate rent_own_ind
5577       ------------------------
5578 
5579       -- Bug 3333036.
5580       -- The validation will be called only if the value changes.
5581 
5582       IF p_organization_rec.rent_own_ind IS NOT NULL
5583          AND
5584          p_organization_rec.rent_own_ind <> fnd_api.g_miss_char
5585          AND
5586           (
5587             p_create_update_flag = 'C'
5588           OR
5589             (
5590             p_create_update_flag = 'U'
5591             AND
5592             p_organization_rec.rent_own_ind <> p_old_organization_rec.rent_own_ind
5593             )
5594           )
5595       THEN
5596           validate_lookup (
5597               p_column                                => 'rent_own_ind',
5598               p_lookup_type                           => 'OWN_RENT_IND',
5599               p_column_value                          => p_organization_rec.rent_own_ind,
5600               x_return_status                         => x_return_status);
5601           /*IF g_debug THEN
5602               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5603                    'rent_own_ind in lookup OWN_RENT_IND. ' ||
5604                    'x_return_status = ' || x_return_status, l_debug_prefix);
5605             END IF;
5606           */
5607           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5608               hz_utility_v2pub.debug(
5609                   p_prefix=>l_debug_prefix,
5610                   p_message=>'rent_own_ind in lookup OWN_RENT_IND. ' ||
5611                              'x_return_status = ' || x_return_status,
5612                   p_msg_level=>fnd_log.level_statement);
5613           END IF;
5614      END IF;
5615 
5616 
5617       ------------------------------------------------------------------------
5618       --Validation for ceo_title, ceo_name, principal_title and principal_name
5619       ------------------------------------------------------------------------
5620 
5621       -- ceo_title, ceo_name, principal_title and principal_name can not be updated by the user if
5622       -- actual_content_source = 'DNB'.
5623 
5624       -- SSM SST Integration and Extension
5625       -- Instead of checking for DNB, check if actual_content_source is a purchased source system.
5626  /*
5627       IF p_create_update_flag = 'U' AND (
5628          p_organization_rec.ceo_name IS NOT NULL OR
5629          p_organization_rec.ceo_title IS NOT NULL OR
5630          p_organization_rec.principal_title IS NOT NULL OR
5631          p_organization_rec.principal_name IS NOT NULL ) AND
5632          /*p_organization_rec.actual_content_source = 'DNB' AND
5633          NVL(FND_PROFILE.value('HZ_UPDATE_THIRD_PARTY_DATA'), 'N') = 'N'*/
5634 /*       HZ_UTILITY_V2PUB.is_purchased_content_source(p_organization_rec.actual_content_source) = 'Y' AND
5635          p_organization_rec.actual_content_source <> HZ_PARTY_V2PUB.G_MISS_CONTENT_SOURCE_TYPE
5636       THEN
5637         l_return_status := FND_API.G_RET_STS_SUCCESS;
5638 
5639         validate_nonupdateable (
5640           p_column                 => 'ceo_title',
5641           p_column_value           => p_organization_rec.ceo_title,
5642           p_old_column_value       => p_old_organization_rec.ceo_title,
5643           x_return_status          => l_return_status,
5644           p_raise_error            => 'N');
5645 
5646         validate_nonupdateable (
5647           p_column                 => 'ceo_name',
5648           p_column_value           => p_organization_rec.ceo_name,
5649           p_old_column_value       => p_old_organization_rec.ceo_name,
5650           x_return_status          => l_return_status,
5651           p_raise_error            => 'N');
5652 
5653         validate_nonupdateable (
5654           p_column                 => 'principal_title',
5655           p_column_value           => p_organization_rec.principal_title,
5656           p_old_column_value       => p_old_organization_rec.principal_title,
5657           x_return_status          => l_return_status,
5658           p_raise_error            => 'N');
5659 
5660          validate_nonupdateable (
5661           p_column                 => 'principal_name',
5662           p_column_value           => p_organization_rec.principal_name,
5663           p_old_column_value       => p_old_organization_rec.principal_name,
5664           x_return_status          => l_return_status,
5665           p_raise_error            => 'N');
5666 
5667          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5668              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'ceo_title will be considered DNB-only attributes.
5669                                    If you want to identify the CEO, you should not update these column,
5670                                    but rather add an appropriate Org Contact.',
5671                                    p_msg_level=>fnd_log.level_statement);
5672            END IF;
5673 
5674       END IF;
5675 
5676 */
5677       -----------------------------------
5678       -- validate displayed_duns_party_id
5679       -----------------------------------
5680 
5681       -- displayed_duns_party_id is foreign key of hz_parties.party_id
5682       IF p_organization_rec.displayed_duns_party_id IS NOT NULL
5683          AND
5684          p_organization_rec.displayed_duns_party_id <> fnd_api.g_miss_num
5685       THEN
5686           BEGIN
5687               SELECT 'Y'
5688               INTO   l_dummy
5689               FROM   HZ_PARTIES
5690               WHERE  PARTY_ID = p_organization_rec.displayed_duns_party_id;
5691           EXCEPTION
5692               WHEN NO_DATA_FOUND THEN
5693                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
5694                   fnd_message.set_token('FK', 'displayed_duns_party_id');
5695                   fnd_message.set_token('COLUMN', 'party_id');
5696                   fnd_message.set_token('TABLE', 'hz_parties');
5697                   fnd_msg_pub.add;
5698                   x_return_status := fnd_api.g_ret_sts_error;
5699           END;
5700 
5701           /*IF g_debug THEN
5702               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5703                   'displayed_duns_party_id is foreign key of hz_parties.party_id. ' ||
5704                   'x_return_status = ' || x_return_status, l_debug_prefix);
5705           END IF;
5706           */
5707           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5708                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5709                  p_message=>'displayed_duns_party_id is foreign key of hz_parties.party_id. ' ||
5710                                                     'x_return_status = ' || x_return_status,
5711                                   p_msg_level=>fnd_log.level_statement);
5712           END IF;
5713       END IF;
5714 
5715       --------------------------------------
5716       -- validate created_by_module
5717       --------------------------------------
5718 
5719       validate_created_by_module(
5720         p_create_update_flag     => p_create_update_flag,
5721         p_created_by_module      => p_organization_rec.created_by_module,
5722         p_old_created_by_module  => p_old_organization_rec.created_by_module,
5723         x_return_status          => x_return_status);
5724 
5725       --------------------------------------
5726       -- validate application_id
5727       --------------------------------------
5728 
5729       validate_application_id(
5730         p_create_update_flag     => p_create_update_flag,
5731         p_application_id         => p_organization_rec.application_id,
5732         p_old_application_id     => p_old_organization_rec.application_id,
5733         x_return_status          => x_return_status);
5734 
5735       ---------------------------------------
5736       -- validation for home_country
5737       ---------------------------------------
5738 
5739       -- home_country has foreign key fnd_territories.territory_code
5740       validate_country_code(
5741           p_column              => 'home_country',
5742           p_column_value        => p_organization_rec.home_country,
5743           x_return_status       => x_return_status);
5744 
5745       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
5746         hz_utility_v2pub.debug(
5747           p_prefix       => l_debug_prefix,
5748           p_message      => 'home_country should be in fnd_territories.territory_code. ' ||
5749                             'x_return_status = ' || x_return_status,
5750           p_msg_level    => fnd_log.level_statement);
5751       END IF;
5752 
5753       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5754         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_organization (-)',
5755                                p_msg_level=>fnd_log.level_procedure);
5756       END IF;
5757 
5758       --disable_debug;
5759 
5760   END validate_organization;
5761 
5762  /**
5763    * PROCEDURE validate_global_loc_num
5764    *
5765    * DESCRIPTION
5766    *     Validates GLOBAL_LOCATION_NUMBER in HZ_PARTY_SITES for check-digit.
5767    *
5768    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
5769    *
5770    * ARGUMENTS
5771    *
5772    *   IN:
5773    *     global_location_number         GLOBAL_LOCATION_NUMBER column in HZ_PARTY_SITES.
5774    *
5775    *   IN/OUT:
5776    *     x_return_status                Return status after the call. The status can
5777    *                                    be FND_API.G_RET_STS_SUCCESS (success),
5778    *                                    fnd_api.g_ret_sts_error (error),
5779    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
5780    *
5781    * NOTES
5782    *    Please see http://www.uc-council.org/checkdig.htm for details of the check-digit
5783    *    validation.
5784    *
5785    * MODIFICATION HISTORY
5786    *
5787    *   19-APR-2004    Rajib Ranjan Borah     o Created. Bug 3175816.
5788    *
5789    */
5790 
5791   PROCEDURE validate_global_loc_num (
5792       global_location_number         IN              HZ_PARTY_SITES.GLOBAL_LOCATION_NUMBER%TYPE,
5793       x_return_status                IN OUT NOCOPY   VARCHAR2
5794       ) IS
5795       even_sum                       NUMBER := 0;
5796       odd_sum                        NUMBER := 0;
5797       global_loc_num                 NUMBER;
5798       check_digit                    NUMBER;
5799       i                              NUMBER;
5800       l_debug_prefix                 VARCHAR2(30):= '';
5801   BEGIN
5802 
5803       IF fnd_log.level_procedure >= fnd_log.g_current_runtime_level
5804       THEN
5805           hz_utility_v2pub.debug(
5806              p_prefix      => l_debug_prefix,
5807              p_message     => 'validate_global_loc_num(+)',
5808              p_msg_level   => fnd_log.level_procedure
5809              );
5810       END IF;
5811 
5812       IF TRIM(TRANSLATE(global_location_number,'0123456789','          ')) IS NULL
5813       THEN
5814 
5815           global_loc_num := TO_NUMBER ( global_location_number );
5816 
5817           IF LENGTH(global_location_number) = 13
5818           THEN
5819               -- The 13th digit stores the check digit. Store it in a local variable and compare
5820               -- it with the check-digit computed for the initial 12 digits.
5821               check_digit    := global_loc_num MOD 10;
5822 
5823               global_loc_num := TRUNC (global_loc_num / 10);
5824 
5825               FOR i IN 1..6
5826               LOOP
5827                   even_sum       := even_sum + (global_loc_num MOD 10);
5828                   global_loc_num := TRUNC (global_loc_num / 10) ;
5829 
5830                   odd_sum        := odd_sum + (global_loc_num MOD 10);
5831                   global_loc_num := TRUNC (global_loc_num / 10);
5832               END LOOP;
5833 
5834               even_sum       := (even_sum * 3) + odd_sum;
5835               -- Now even_sum contains (3 times (even_sum)) + odd_sum
5836 
5837               IF ( check_digit + even_sum ) MOD 10 <> 0
5838               THEN -- Global location number did not satisfy the check digit validation.
5839                   FND_MESSAGE.SET_NAME('AR','HZ_API_GLOBAL_LOC_NUM_ERRORS');
5840                   FND_MSG_PUB.ADD;
5841                   x_return_status := FND_API.G_RET_STS_ERROR;
5842               END IF;
5843 
5844           ELSE  -- Global_location_number is not 13 digits long.
5845               FND_MESSAGE.SET_NAME('AR','HZ_API_GLOBAL_LOC_NUM_ERRORS');
5846               FND_MSG_PUB.ADD;
5847               x_return_status := FND_API.G_RET_STS_ERROR;
5848           END IF;
5849 
5850       ELSE -- corresponding to IF TRIM(TRANSLATE(global_location_number,'0123456789','          '))
5851 
5852           -- Since there are non numeric characters, therefore the expression evaluated in the if
5853           -- clause is not null.
5854           FND_MESSAGE.SET_NAME('AR','HZ_API_GLOBAL_LOC_NUM_ERRORS');
5855           FND_MSG_PUB.ADD;
5856           x_return_status := FND_API.G_RET_STS_ERROR;
5857       END IF;
5858 
5859       IF fnd_log.level_procedure >= fnd_log.g_current_runtime_level
5860       THEN
5861           hz_utility_v2pub.debug(
5862               p_prefix      => l_debug_prefix,
5863               p_message     => 'validate_global_loc_num(-)',
5864               p_msg_level   => fnd_log.level_procedure
5865               );
5866        END IF;
5867 
5868   END validate_global_loc_num;
5869 
5870   /**
5871    * PROCEDURE validate_party_site
5872    *
5873    * DESCRIPTION
5874    *     Validates party site record. Checks for
5875    *         uniqueness
5876    *         lookup types
5877    *         mandatory columns
5878    *         non-updateable fields
5879    *         foreign key validations
5880    *         other validations
5881    *
5882    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
5883    *
5884    * ARGUMENTS
5885    *   IN:
5886    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
5887    *     p_party_site_rec               Party site record.
5888    *     p_rowid                        Rowid of the record (used only in update mode).
5889    *   IN/OUT:
5890    *     x_return_status                Return status after the call. The status can
5891    *                                    be FND_API.G_RET_STS_SUCCESS (success),
5892    *                                    fnd_api.g_ret_sts_error (error),
5893    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
5894    *
5895    * NOTES
5896    *
5897    * MODIFICATION HISTORY
5898    *
5899    *   07-23-2001    Indrajit Sen       o Created.
5900    *   04-19-2004    Rajib Ranjan Borah o Bug 3175816. If the value of GLOBAL_LOCATION_NUMBER
5901    *                                      has changed, then called validate_global_loc_num.
5902    *   03-May-3004 Venkata Sowjanya S     Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
5903    *                                        for message HZ_API_INACTIVE_CANNOT_PRIM
5904 
5905 
5906    */
5907 
5908   PROCEDURE validate_party_site(
5909       p_create_update_flag              IN     VARCHAR2,
5910       p_party_site_rec                  IN     HZ_PARTY_SITE_V2PUB.PARTY_SITE_REC_TYPE,
5911       p_rowid                           IN     ROWID,
5912       x_return_status                   IN OUT NOCOPY VARCHAR2,
5913       x_loc_actual_content_source       OUT NOCOPY    VARCHAR2
5914  ) IS
5915 
5916       l_count                                NUMBER;
5917       l_party_id                             NUMBER;
5918       l_location_id                          NUMBER;
5919       l_party_site_number                    VARCHAR2(30);
5920       l_orig_system_reference                VARCHAR2(240);
5921       l_start_date_active                    DATE;
5922       l_end_date_active                      DATE;
5923       l_party_site_id                        NUMBER;
5924       l_identifying_address_flag             VARCHAR2(1);
5925       l_dummy                                VARCHAR2(1);
5926       l_created_by_module                    VARCHAR2(150);
5927       l_application_id                       NUMBER;
5928       l_status                               VARCHAR2(1);
5929       db_actual_content_source               VARCHAR2(30);
5930       l_debug_prefix                         VARCHAR2(30) := '';
5931       l_validate_osr varchar2(1) := 'Y';
5932       l_mosr_owner_table_id number;
5933 
5934       -- Bug 3175816
5935       l_global_location_number               HZ_PARTY_SITES.GLOBAL_LOCATION_NUMBER%TYPE;
5936 
5937       l_temp_return_status   VARCHAR2(10); -- for storing return status from
5938                                            -- hz_orig_system_ref_pub.get_owner_table_id
5939   BEGIN
5940 
5941       --enable_debug;
5942 
5943       -- Debug info.
5944       /*IF g_debug THEN
5945           hz_utility_v2pub.debug ('validate_party_site (+)');
5946       END IF;
5947       */
5948       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5949         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_party_site (+)',
5950                                p_msg_level=>fnd_log.level_procedure);
5951       END IF;
5952 
5953       -- select fields for later use during update.
5954       IF p_create_update_flag = 'U' THEN
5955           SELECT PARTY_ID,
5956                  LOCATION_ID,
5957                  PARTY_SITE_NUMBER,
5958                  ORIG_SYSTEM_REFERENCE,
5959                  IDENTIFYING_ADDRESS_FLAG,
5960                  START_DATE_ACTIVE,
5961                  END_DATE_ACTIVE,
5962                  STATUS,
5963                  CREATED_BY_MODULE,
5964                  APPLICATION_ID,
5965                  ACTUAL_CONTENT_SOURCE,
5966                  GLOBAL_LOCATION_NUMBER
5967           INTO   l_party_id,
5968                  l_location_id,
5969                  l_party_site_number,
5970                  l_orig_system_reference,
5971                  l_identifying_address_flag,
5972                  l_start_date_active,
5973                  l_end_date_active,
5974                  l_status,
5975                  l_created_by_module,
5976                  l_application_id,
5977                  db_actual_content_source,
5978                  l_global_location_number
5979           FROM   HZ_PARTY_SITES
5980           WHERE  ROWID = p_rowid;
5981       END IF;
5982 
5983       --------------------
5984       -- validate party_id
5985       --------------------
5986 /****Logical APIs - validation not required****/
5987   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
5988       -- party_id is mandatory field
5989       validate_mandatory (
5990           p_create_update_flag                    => p_create_update_flag,
5991           p_column                                => 'party_id',
5992           p_column_value                          => p_party_site_rec.party_id,
5993           x_return_status                         => x_return_status);
5994 
5995       /*IF g_debug THEN
5996           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
5997               'party_id is mandatory field. ' ||
5998               'x_return_status = ' || x_return_status, l_debug_prefix);
5999       END IF;
6000       */
6001       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6002            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
6003                                         'x_return_status = ' || x_return_status,
6004                                   p_msg_level=>fnd_log.level_statement);
6005       END IF;
6006 
6007 
6008       -- party_id is non-updateable field
6009       IF p_create_update_flag = 'U' THEN
6010           validate_nonupdateable (
6011               p_column                                => 'party_id',
6012               p_column_value                          => p_party_site_rec.party_id,
6013               p_old_column_value                      => l_party_id,
6014               x_return_status                         => x_return_status);
6015 
6016           /*IF g_debug THEN
6017               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6018                   'party_id is non-updateable field. ' ||
6019                   'x_return_status = ' || x_return_status, l_debug_prefix);
6020           END IF;
6021           */
6022           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6023                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
6024                                                         'x_return_status = ' || x_return_status,
6025                                   p_msg_level=>fnd_log.level_statement);
6026           END IF;
6027 
6028       END IF;
6029 
6030       -- party_id is foreign key of hz_parties
6031       -- Do not need to check during update because party_id is
6032       -- non-updateable.
6033       IF p_create_update_flag = 'C'
6034          AND
6035          p_party_site_rec.party_id IS NOT NULL
6036          AND
6037          p_party_site_rec.party_id <> fnd_api.g_miss_num
6038          AND
6039          p_party_site_rec.party_id <> -1
6040       THEN
6041           BEGIN
6042               SELECT 'Y'
6043               INTO   l_dummy
6044               FROM   HZ_PARTIES
6045               WHERE  PARTY_ID = p_party_site_rec.party_id;
6046           EXCEPTION
6047               WHEN NO_DATA_FOUND THEN
6048                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
6049                   fnd_message.set_token('FK', 'party_id');
6050                   fnd_message.set_token('COLUMN', 'party_id');
6051                   fnd_message.set_token('TABLE', 'hz_parties');
6052                   fnd_msg_pub.add;
6053                   x_return_status := fnd_api.g_ret_sts_error;
6054           END;
6055 
6056           /*IF g_debug THEN
6057               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6058                   'party_id is foreign key of hz_parties. ' ||
6059                   'x_return_status = ' || x_return_status, l_debug_prefix);
6060           END IF;
6061           */
6062           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6063                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is foreign key of hz_parties. ' ||
6064                                                         'x_return_status = ' || x_return_status,
6065                                   p_msg_level=>fnd_log.level_statement);
6066           END IF;
6067 
6068       END IF;
6069     END IF;
6070 
6071       -----------------------
6072       -- validate location_id
6073       -----------------------
6074 /****Logical APIs - validation not required****/
6075   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6076       -- location_id is mandatory field
6077       validate_mandatory (
6078           p_create_update_flag                    => p_create_update_flag,
6079           p_column                                => 'location_id',
6080           p_column_value                          => p_party_site_rec.location_id,
6081           x_return_status                         => x_return_status);
6082 
6083       /*IF g_debug THEN
6084           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6085               'location_id is mandatory field. ' ||
6086               'x_return_status = ' || x_return_status, l_debug_prefix);
6087       END IF;
6088       */
6089       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6090            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'location_id is mandatory field. ' ||
6091                                                  'x_return_status = ' || x_return_status,
6092                                   p_msg_level=>fnd_log.level_statement);
6093       END IF;
6094 
6095 
6096       -- location_id is non-updateable field
6097       IF p_create_update_flag = 'U' THEN
6098           validate_nonupdateable (
6099               p_column                                => 'location_id',
6100               p_column_value                          => p_party_site_rec.location_id,
6101               p_old_column_value                      => l_location_id,
6102               x_return_status                         => x_return_status);
6103 
6104           /*IF g_debug THEN
6105               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6106                   'location_id is non-updateable field. ' ||
6107                   'x_return_status = ' || x_return_status, l_debug_prefix);
6108           END IF;
6109           */
6110           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6111                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'location_id is non-updateable field. ' ||
6112                                                 'x_return_status = ' || x_return_status,
6113                                   p_msg_level=>fnd_log.level_statement);
6114           END IF;
6115 
6116       END IF;
6117 
6118       -- location_id is foreign key of hz_locations.location_id.
6119       -- do not need to check during update because location_id is
6120       -- non-updateable.
6121       IF p_create_update_flag = 'C'
6122          AND
6123          p_party_site_rec.location_id IS NOT NULL
6124          AND
6125          p_party_site_rec.location_id <> fnd_api.g_miss_num
6126       THEN
6127           BEGIN
6128 
6129               -- Bug 2197181: for mix-n-match, column actual_content_source
6130               -- was added to hz_party_sites. It is denormalized from hz_locations.
6131               -- Therefore, it is selected from hz_locations to be passed back
6132               -- to create_party_site API.
6133 
6134               SELECT actual_content_source
6135               INTO  x_loc_actual_content_source
6136               FROM   HZ_LOCATIONS
6137               WHERE  LOCATION_ID = p_party_site_rec.location_id;
6138           EXCEPTION
6139               WHEN NO_DATA_FOUND THEN
6140                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
6141                   fnd_message.set_token('FK', 'location_id');
6142                   fnd_message.set_token('COLUMN', 'location_id');
6143                   fnd_message.set_token('TABLE', 'hz_locations');
6144                   fnd_msg_pub.add;
6145                   x_return_status := fnd_api.g_ret_sts_error;
6146           END;
6147 
6148           /*IF g_debug THEN
6149               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6150                   'location_id is foreign key of hz_locations. ' ||
6151                   'x_return_status = ' || x_return_status, l_debug_prefix);
6152           END IF;
6153           */
6154           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6155                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'location_id is foreign key of hz_locations. ' ||
6156                                                 'x_return_status = ' || x_return_status,
6157                                   p_msg_level=>fnd_log.level_statement);
6158           END IF;
6159 
6160       END IF;
6161     END IF;
6162 
6163       -----------------------------
6164       -- validate party_site_number
6165       -----------------------------
6166 
6167       -- party_site_number is non-updateable field
6168       IF p_create_update_flag = 'U' THEN
6169           validate_nonupdateable (
6170               p_column                                => 'party_site_number',
6171               p_column_value                          => p_party_site_rec.party_site_number,
6172               p_old_column_value                      => l_party_site_number,
6173               x_return_status                         => x_return_status);
6174 
6175           /*IF g_debug THEN
6176               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6177                   'party_site_number is non-updateable field. ' ||
6178                   'x_return_status = ' || x_return_status, l_debug_prefix);
6179           END IF;
6180           */
6181           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6182                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_site_number is non-updateable field. ' ||
6183                                                 'x_return_status = ' || x_return_status,
6184                                   p_msg_level=>fnd_log.level_statement);
6185           END IF;
6186 
6187       END IF;
6188 
6189       ---------------------------------
6190       -- validate orig_system_reference
6191       ---------------------------------
6192 /****Logical APIs - validation not required****/
6193   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6194       IF (p_party_site_rec.orig_system is not null
6195          and p_party_site_rec.orig_system <>fnd_api.g_miss_char)
6196        and (p_party_site_rec.orig_system_reference is not null
6197          and p_party_site_rec.orig_system_reference <>fnd_api.g_miss_char)
6198         and p_create_update_flag = 'U'
6199       then
6200            hz_orig_system_ref_pub.get_owner_table_id
6201                         (p_orig_system => p_party_site_rec.orig_system,
6202                         p_orig_system_reference => p_party_site_rec.orig_system_reference,
6203                         p_owner_table_name => 'HZ_PARTY_SITES',
6204                         x_owner_table_id => l_mosr_owner_table_id,
6205                         x_return_status => l_temp_return_status);
6206 
6207            IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
6208                l_mosr_owner_table_id= nvl(p_party_site_rec.party_site_id,l_mosr_owner_table_id))
6209            THEN
6210                 l_validate_osr := 'N';
6211              -- if we can get owner_table_id based on osr and os in mosr table,
6212              -- we will use unique osr and os for update - bypass osr validation
6213            ELSE l_validate_osr := 'Y';
6214            END IF;
6215 
6216            -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
6217            -- x_return_status. Set x_return_status to error, ONLY if there is error.
6218            -- In case of success, leave it to carry over previous value as before this call.
6219            -- Fix for Bug 5498116 (29-AUG-2006)
6220            IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
6221              x_return_status := l_temp_return_status;
6222            END IF;
6223 
6224     end if;
6225       -- orig_system_reference is non-updateable field
6226       IF p_create_update_flag = 'U' and l_validate_osr = 'Y' THEN
6227           validate_nonupdateable (
6228               p_column                                => 'orig_system_reference',
6229               p_column_value                          => p_party_site_rec.orig_system_reference,
6230               p_old_column_value                      => l_orig_system_reference,
6231               x_return_status                         => x_return_status);
6232 
6233           /*IF g_debug THEN
6234               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6235                   'orig_system_reference is non-updateable field. ' ||
6236                   'x_return_status = ' || x_return_status, l_debug_prefix);
6237           END IF;
6238           */
6239           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6240                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'orig_system_reference is non-updateable field. ' ||
6241                                                         'x_return_status = ' || x_return_status,
6242                                   p_msg_level=>fnd_log.level_statement);
6243           END IF;
6244 
6245       END IF;
6246   END IF;
6247 
6248       ----------------------------------------------
6249       -- validate status
6250       ----------------------------------------------
6251 
6252       -- status cannot be set to null during update
6253       IF p_create_update_flag = 'U' THEN
6254           validate_cannot_update_to_null (
6255               p_column                                => 'status',
6256               p_column_value                          => p_party_site_rec.status,
6257               x_return_status                         => x_return_status);
6258 
6259           /*IF g_debug THEN
6260               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6261                   'status cannot be set to null during update. ' ||
6262                   'x_return_status = ' || x_return_status, l_debug_prefix);
6263           END IF;
6264           */
6265           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6266                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be set to null during update. ' ||
6267                                 'x_return_status = ' || x_return_status,
6268                                   p_msg_level=>fnd_log.level_statement);
6269           END IF;
6270 
6271 
6272           -- If for a party, DNB provides address components which are different
6273           -- from the ones it sent originally, the old party site is inactivated
6274           -- and end-dated and a new one created. We should put a check which
6275           -- prevents a user from activating a DNB party site that has been
6276           -- end-dated (because from DNB's perspective, it is no more a valid
6277           -- site for the party).
6278 
6279           IF db_actual_content_source = 'DNB' AND
6280              l_end_date_active IS NOT NULL AND
6281              l_status = 'I' AND
6282              p_party_site_rec.status = 'A'
6283           THEN
6284             /* new message */
6285             FND_MESSAGE.SET_NAME( 'AR', 'HZ_API_CANT_ACTIVATE_SITE' );
6286             FND_MSG_PUB.ADD;
6287             x_return_status := FND_API.G_RET_STS_ERROR;
6288           END IF;
6289       END IF;
6290 
6291 /****Logical APIs - validation not required****/
6292   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6293       -- status is lookup code in lookup type REGISTRY_STATUS
6294       IF p_party_site_rec.status IS NOT NULL
6295          AND
6296          p_party_site_rec.status <> fnd_api.g_miss_char
6297          AND
6298          (p_create_update_flag = 'C'
6299           OR
6300           (p_create_update_flag = 'U'
6301            AND
6302            p_party_site_rec.status <> NVL(l_status, fnd_api.g_miss_char)
6303          )
6304         )
6305       THEN
6306           validate_lookup (
6307               p_column                                => 'status',
6308               p_lookup_type                           => 'REGISTRY_STATUS',
6309               p_column_value                          => p_party_site_rec.status,
6310               x_return_status                         => x_return_status);
6311 
6312           /*IF g_debug THEN
6313               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6314                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
6315                   'x_return_status = ' || x_return_status, l_debug_prefix);
6316           END IF;
6317           */
6318           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6319                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6320                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
6321                                                 'x_return_status = ' || x_return_status,
6322                                   p_msg_level=>fnd_log.level_statement);
6323           END IF;
6324 
6325       END IF;
6326   END IF;
6327 
6328       ------------------------------------
6329       -- validate identifying_address_flag
6330       ------------------------------------
6331 /****Logical APIs - validation not required****/
6332   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6333       -- identifying_address_flag is lookup code in lookup type YES/NO
6334       validate_lookup (
6335           p_column              => 'identifying_address_flag',
6336           p_lookup_type         => 'YES/NO',
6337           p_column_value        => p_party_site_rec.identifying_address_flag,
6338           x_return_status       => x_return_status
6339       );
6340 
6341       /*IF g_debug THEN
6342           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6343               'identifying_address_flag should be in lookup YES/NO. ' ||
6344               'x_return_status = ' || x_return_status, l_debug_prefix);
6345       END IF;
6346       */
6347       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6348            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'identifying_address_flag should be in lookup YES/NO. ' ||
6349                                                 'x_return_status = ' || x_return_status,
6350                                   p_msg_level=>fnd_log.level_statement);
6351       END IF;
6352   END IF;
6353 
6354       -- Bug 1882511
6355       -- If the identify address flag is set to Yes, the status column should
6356       -- not be Inactive
6357 
6358       IF p_party_site_rec.identifying_address_flag is NOT NULL
6359          AND p_party_site_rec.identifying_address_flag <> fnd_api.g_miss_char
6360          AND (p_create_update_flag = 'C'
6361               OR (p_create_update_flag = 'U'
6362                   AND p_party_site_rec.identifying_address_flag <>
6363                     NVL(l_identifying_address_flag, fnd_api.g_miss_char)))
6364       THEN
6365         SELECT DECODE(p_party_site_rec.identifying_address_flag,
6366                       'Y', DECODE(p_party_site_rec.status,
6367                                   'I', 'N',
6368                                   '', DECODE(l_status, 'I', 'N')),
6369                       'Y')
6370         INTO   l_dummy
6371         FROM   dual;
6372 
6373         IF l_dummy <> 'Y' THEN
6374           fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
6375           fnd_message.set_token('ENTITY', 'Site');
6376          -- fnd_message.set_token('COLUMN1', 'identifying_address');
6377          -- fnd_message.set_token('COLUMN2', 'status');
6378           fnd_msg_pub.add;
6379           x_return_status := FND_API.G_RET_STS_ERROR;
6380         END IF;
6381 
6382         /*IF g_debug THEN
6383           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6384             'If the identify address flag is set to Yes, the status column should not be Inactive.' ||
6385             'x_return_status = ' || x_return_status,
6386             l_debug_prefix
6387           );
6388         END IF;
6389         */
6390         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6391            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6392            p_message=>'If the identify address flag is set to Yes, the status column should not be Inactive.' ||
6393                                              'x_return_status = ' || x_return_status,
6394                                   p_msg_level=>fnd_log.level_statement);
6395         END IF;
6396 
6397       END IF;
6398 
6399       /* comment out the validation as the language column is obsoleted in r12
6400       --------------------------
6401       -- validation for language
6402       --------------------------
6403 
6404       -- language has foreign key fnd_languages.language_code
6405       IF p_party_site_rec.language IS NOT NULL
6406          AND
6407          p_party_site_rec.language <> fnd_api.g_miss_char
6408       THEN
6409           BEGIN
6410               SELECT 'Y'
6411               INTO   l_dummy
6412               FROM   FND_LANGUAGES
6413               WHERE  LANGUAGE_CODE = p_party_site_rec.language
6414               AND    INSTALLED_FLAG IN ('B', 'I');
6415           EXCEPTION
6416               WHEN NO_DATA_FOUND THEN
6417                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
6418                   fnd_message.set_token('FK', 'language');
6419                   fnd_message.set_token('COLUMN', 'language_code');
6420                   fnd_message.set_token('TABLE', 'fnd_languages(installed)');
6421                   fnd_msg_pub.add;
6422                   x_return_status := fnd_api.g_ret_sts_error;
6423           END;
6424 
6425           -- IF g_debug THEN
6426           --    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6427           --        'language has foreign key fnd_languages.language_code. ' ||
6428           --        'x_return_status = ' || x_return_status, l_debug_prefix);
6429           -- END IF;
6430 
6431           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6432                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6433                  p_message=>'language has foreign key fnd_languages.language_code. ' ||
6434                                                    'x_return_status = ' || x_return_status,
6435                                   p_msg_level=>fnd_log.level_statement);
6436           END IF;
6437 
6438       END IF;
6439       */
6440 
6441       -------------------------------------------------
6442       -- validate global_location_number.( Bug 3175816)
6443       -------------------------------------------------
6444       IF p_party_site_rec.global_location_number IS NOT NULL AND
6445          p_party_site_rec.global_location_number <> FND_API.G_MISS_CHAR AND
6446          (
6447           p_create_update_flag = 'C' OR
6448           (
6449            p_create_update_flag = 'U' AND
6450            p_party_site_rec.global_location_number <> NVL(l_global_location_number, fnd_api.g_miss_char)
6451           )
6452          )
6453       THEN
6454          validate_global_loc_num(
6455               global_location_number      =>   p_party_site_rec.global_location_number,
6456               x_return_status             =>   x_return_status);
6457       END IF;
6458 
6459       --------------------------------------
6460       -- validate created_by_module
6461       --------------------------------------
6462 
6463       validate_created_by_module(
6464         p_create_update_flag     => p_create_update_flag,
6465         p_created_by_module      => p_party_site_rec.created_by_module,
6466         p_old_created_by_module  => l_created_by_module,
6467         x_return_status          => x_return_status);
6468 
6469       --------------------------------------
6470       -- validate application_id
6471       --------------------------------------
6472 
6473       validate_application_id(
6474         p_create_update_flag     => p_create_update_flag,
6475         p_application_id         => p_party_site_rec.application_id,
6476         p_old_application_id     => l_application_id,
6477         x_return_status          => x_return_status);
6478 
6479       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6480         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_party_site (-)',
6481                                p_msg_level=>fnd_log.level_procedure);
6482       END IF;
6483 
6484   END validate_party_site;
6485 
6486   /**
6487    * PROCEDURE validate_party_site_use
6488    *
6489    * DESCRIPTION
6490    *     Validates party site use record. Checks for
6491    *         uniqueness
6492    *         lookup types
6493    *         mandatory columns
6494    *         non-updateable fields
6495    *         foreign key validations
6496    *         other validations
6497    *
6498    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6499    *
6500    * ARGUMENTS
6501    *   IN:
6502    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
6503    *     p_party_site_use_rec           Party site use record.
6504    *     p_rowid                        Rowid of the record (used only in update mode).
6505    *   IN/OUT:
6506    *     x_return_status                Return status after the call. The status can
6507    *                                    be FND_API.G_RET_STS_SUCCESS (success),
6508    *                                    fnd_api.g_ret_sts_error (error),
6509    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6510    *
6511    * NOTES
6512    *
6513    * MODIFICATION HISTORY
6514    *
6515    *   07-23-2001    Indrajit Sen       o Created.
6516    *   11-05-2003    Rajib Ranjan Borah o Bug 2065191.Primary_per_type cannot be set to 'Y'
6517    *                                      if status is not 'A'.
6518    *                                      Added variable l_primary_per_type.
6519    *   03-May-3004 Venkata Sowjanya S     Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
6520    *                                        for message HZ_API_INACTIVE_CANNOT_PRIM
6521 
6522 
6523    */
6524 
6525   PROCEDURE validate_party_site_use(
6526       p_create_update_flag      IN      VARCHAR2,
6527       p_party_site_use_rec      IN      HZ_PARTY_SITE_V2PUB.PARTY_SITE_USE_REC_TYPE,
6528       p_rowid                   IN      ROWID,
6529       x_return_status       IN OUT NOCOPY      VARCHAR2
6530  ) IS
6531 
6532       l_count                           NUMBER;
6533       l_party_site_id                   NUMBER;
6534       l_site_use_type                   HZ_PARTY_SITE_USES.SITE_USE_TYPE%TYPE;
6535       l_begin_date                      DATE;
6536       l_dummy                           VARCHAR2(1);
6537       l_created_by_module               VARCHAR2(150);
6538       l_application_id                  NUMBER;
6539       l_status                          VARCHAR2(1);
6540       l_debug_prefix                    VARCHAR2(30) := '';
6541       -- Bug 2065191.
6542       l_primary_per_type                HZ_PARTY_SITE_USES.PRIMARY_PER_TYPE%TYPE;
6543 
6544   BEGIN
6545 
6546       --enable_debug;
6547 
6548       -- Debug info.
6549       /*IF g_debug THEN
6550           hz_utility_v2pub.debug ('validate_party_site_use (+)');
6551       END IF;
6552       */
6553       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6554         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_party_site_use (+)',
6555                                p_msg_level=>fnd_log.level_procedure);
6556     END IF;
6557 
6558       -- select fields for later use during update.
6559       IF p_create_update_flag = 'U' THEN
6560           SELECT PARTY_SITE_ID,
6561                  SITE_USE_TYPE,
6562                  BEGIN_DATE,
6563                  STATUS,
6564                  CREATED_BY_MODULE,
6565                  APPLICATION_ID,
6566                  --Bug 2065191
6567                  PRIMARY_PER_TYPE
6568 
6569           INTO   l_party_site_id,
6570                  l_site_use_type,
6571                  l_begin_date,
6572                  l_status,
6573                  l_created_by_module,
6574                  l_application_id,
6575                  --BUG 2065191
6576                  l_primary_per_type
6577 
6578           FROM   HZ_PARTY_SITE_USES
6579           WHERE  ROWID = p_rowid;
6580       END IF;
6581 
6582       -------------------------
6583       -- validate party_site_id
6584       -------------------------
6585 /****Logical APIs - validation not required****/
6586   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6587       -- party_site_id is mandatory field
6588       validate_mandatory (
6589           p_create_update_flag                    => p_create_update_flag,
6590           p_column                                => 'party_site_id',
6591           p_column_value                          => p_party_site_use_rec.party_site_id,
6592           x_return_status                         => x_return_status);
6593 
6594       -- party_site_id is non-updateable field
6595       IF p_create_update_flag = 'U' THEN
6596           validate_nonupdateable (
6597               p_column                                => 'party_site_id',
6598               p_column_value                          => p_party_site_use_rec.party_site_id,
6599               p_old_column_value                      => l_party_site_id,
6600               x_return_status                         => x_return_status);
6601 
6602           /*IF g_debug THEN
6603               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6604                   'party_site_id is non-updateable field. ' ||
6605                   'x_return_status = ' || x_return_status, l_debug_prefix);
6606           END IF;
6607           */
6608           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6609            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_site_id is non-updateable field. ' ||
6610                                                  'x_return_status = ' || x_return_status,
6611                                   p_msg_level=>fnd_log.level_statement);
6612           END IF;
6613 
6614       END IF;
6615 
6616       -- party_site_id is foreign key of hz_party_sites.party_site_id
6617       -- Do not need to check during update because party_site_id is
6618       -- non-updateable.
6619       IF p_create_update_flag = 'C'
6620          AND
6621          p_party_site_use_rec.party_site_id IS NOT NULL
6622          AND
6623          p_party_site_use_rec.party_site_id <> fnd_api.g_miss_num
6624       THEN
6625           BEGIN
6626               SELECT 'Y'
6627               INTO   l_dummy
6628               FROM   HZ_PARTY_SITES
6629               WHERE  PARTY_SITE_ID = p_party_site_use_rec.party_site_id;
6630           EXCEPTION
6631               WHEN NO_DATA_FOUND THEN
6632                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
6633                   fnd_message.set_token('FK', 'party_site_id');
6634                   fnd_message.set_token('COLUMN', 'party_site_id');
6635                   fnd_message.set_token('TABLE', 'hz_party_sites');
6636                   fnd_msg_pub.add;
6637                   x_return_status := fnd_api.g_ret_sts_error;
6638           END;
6639 
6640           /*IF g_debug THEN
6641               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6642                   'party_site_id is foreign key of hz_party_sites.party_site_id. ' ||
6643                   'x_return_status = ' || x_return_status, l_debug_prefix);
6644           END IF;
6645           */
6646           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6647             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6648             p_message=>'party_site_id is foreign key of hz_party_sites.party_site_id. ' ||
6649                                                 'x_return_status = ' || x_return_status,
6650                                   p_msg_level=>fnd_log.level_statement);
6651           END IF;
6652 
6653       END IF;
6654   END IF;
6655 
6656       -------------------------
6657       -- validate site_use_type
6658       -------------------------
6659 
6660       -- site_use_type is mandatory field
6661       validate_mandatory (
6662           p_create_update_flag                    => p_create_update_flag,
6663           p_column                                => 'site_use_type',
6664           p_column_value                          => p_party_site_use_rec.site_use_type,
6665           x_return_status                         => x_return_status);
6666 
6667       /*IF g_debug THEN
6668           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6669               'site_use_type is mandatory field. ' ||
6670               'x_return_status = ' || x_return_status, l_debug_prefix);
6671       END IF;
6672       */
6673       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6674            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'site_use_type is mandatory field. ' ||
6675                                  'x_return_status = ' || x_return_status,
6676                                   p_msg_level=>fnd_log.level_statement);
6677     END IF;
6678 
6679 
6680       -- site_use_type is non-updateable field
6681       IF p_create_update_flag = 'U' THEN
6682           validate_nonupdateable (
6683               p_column                                => 'site_use_type',
6684               p_column_value                          => p_party_site_use_rec.site_use_type,
6685               p_old_column_value                      => l_site_use_type,
6686               x_return_status                         => x_return_status);
6687 
6688           /*IF g_debug THEN
6689               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6690                   'site_use_type is non-updateable field. ' ||
6691                   'x_return_status = ' || x_return_status, l_debug_prefix);
6692           END IF;
6693           */
6694           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6695                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'site_use_type is non-updateable field. ' ||
6696                                         'x_return_status = ' || x_return_status,
6697                                   p_msg_level=>fnd_log.level_statement);
6698           END IF;
6699 
6700       END IF;
6701 
6702       -- site_use_type is lookup code in lookup type PARTY_SITE_USE_CODE
6703       validate_lookup (
6704           p_column                                => 'site_use_type',
6705           p_lookup_type                           => 'PARTY_SITE_USE_CODE',
6706           p_column_value                          => p_party_site_use_rec.site_use_type,
6707           x_return_status                         => x_return_status);
6708 
6709       /*IF g_debug THEN
6710           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6711               'site_use_type is lookup code in lookup type PARTY_SITE_USE_CODE. ' ||
6712               'x_return_status = ' || x_return_status, l_debug_prefix);
6713       END IF;
6714       */
6715       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6716            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6717            p_message=>'site_use_type is lookup code in lookup type PARTY_SITE_USE_CODE. ' ||
6718                                                 'x_return_status = ' || x_return_status,
6719                                   p_msg_level=>fnd_log.level_statement);
6720       END IF;
6721 
6722 
6723       ----------------------------
6724       -- validate primary_per_type
6725       ----------------------------
6726 /****Logical APIs - validation not required****/
6727   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6728       -- primary_per_type is lookup code in lookup type YES/NO
6729       validate_lookup (
6730           p_column                                => 'primary_per_type',
6731           p_lookup_type                           => 'YES/NO',
6732           p_column_value                          => p_party_site_use_rec.primary_per_type,
6733           x_return_status                         => x_return_status);
6734 
6735       /*IF g_debug THEN
6736           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6737               'primary_per_type should be in lookup YES/NO. ' ||
6738               'x_return_status = ' || x_return_status, l_debug_prefix);
6739       END IF;
6740       */
6741       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6742            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_per_type should be in lookup YES/NO. ' ||
6743                         'x_return_status = ' || x_return_status,
6744                                   p_msg_level=>fnd_log.level_statement);
6745       END IF;
6746   END IF;
6747 
6748       ----------------------------------------------------------
6749       -- validate combination of party_site_id and site_use_type
6750       ----------------------------------------------------------
6751 
6752       -- combination of party_site_id and site_use_type is unique
6753      if p_party_site_use_rec.status <> 'I' or (p_create_update_flag = 'C' and (p_party_site_use_rec.status is null or p_party_site_use_rec.status = fnd_api.g_miss_char ))
6754              -- bug 8506794, BO API allows to pass in multiple site uses at same time such as 'A', 'I', null for status
6755     then
6756       BEGIN
6757           SELECT 'Y'
6758           INTO   l_dummy
6759           FROM   HZ_PARTY_SITE_USES
6760           -- Bug 3988537.
6761           WHERE  PARTY_SITE_ID = nvl(p_party_site_use_rec.party_site_id,l_party_site_id)
6762           AND    SITE_USE_TYPE = nvl(p_party_site_use_rec.site_use_type,l_site_use_type)
6763           AND    STATUS = 'A'
6764           AND    PARTY_SITE_USE_ID <> NVL(p_party_site_use_rec.party_site_use_id, fnd_api.g_miss_num);
6765 
6766           fnd_message.set_name('AR', 'HZ_API_UNIQUE_SITE_USE_TYPE');
6767           fnd_msg_pub.add;
6768           x_return_status := fnd_api.g_ret_sts_error;
6769 
6770       EXCEPTION
6771           WHEN NO_DATA_FOUND THEN
6772               NULL;
6773       END;
6774     end if;
6775       /*IF g_debug THEN
6776           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6777               'combination of party_site_id and site_use_type is unique. ' ||
6778               'x_return_status = ' || x_return_status, l_debug_prefix);
6779       END IF;
6780       */
6781       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6782            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6783            p_message=>'combination of party_site_id and site_use_type is unique. ' ||
6784                 'x_return_status = ' || x_return_status,
6785                                   p_msg_level=>fnd_log.level_statement);
6786       END IF;
6787 
6788 
6789       ------------------
6790       -- validate status
6791       ------------------
6792 
6793       -- status cannot be set to null during update
6794       IF p_create_update_flag = 'U' THEN
6795           validate_cannot_update_to_null (
6796               p_column                                => 'status',
6797               p_column_value                          => p_party_site_use_rec.status,
6798               x_return_status                         => x_return_status);
6799       END IF;
6800 
6801 /****Logical APIs - validation not required****/
6802   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6803       -- status is lookup code in lookup type REGISTRY_STATUS
6804       IF p_party_site_use_rec.status IS NOT NULL
6805          AND
6806          p_party_site_use_rec.status <> fnd_api.g_miss_char
6807          AND
6808          (p_create_update_flag = 'C'
6809           OR
6810           (p_create_update_flag = 'U'
6811            AND
6812            p_party_site_use_rec.status <> NVL(l_status, fnd_api.g_miss_char)
6813          )
6814         )
6815       THEN
6816           validate_lookup (
6817               p_column                                => 'status',
6818               p_lookup_type                           => 'REGISTRY_STATUS',
6819               p_column_value                          => p_party_site_use_rec.status,
6820               x_return_status                         => x_return_status);
6821 
6822           /*IF g_debug THEN
6823               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6824                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
6825                   'x_return_status = ' || x_return_status, l_debug_prefix);
6826           END IF;
6827           */
6828           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6829            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6830            p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
6831                   'x_return_status = ' || x_return_status,
6832                                   p_msg_level=>fnd_log.level_statement);
6833           END IF;
6834 
6835 
6836       END IF;
6837   END IF;
6838 
6839       --------------------------------------
6840       -- validate created_by_module
6841       --------------------------------------
6842 
6843       validate_created_by_module(
6844         p_create_update_flag     => p_create_update_flag,
6845         p_created_by_module      => p_party_site_use_rec.created_by_module,
6846         p_old_created_by_module  => l_created_by_module,
6847         x_return_status          => x_return_status);
6848 
6849       --------------------------------------
6850       -- validate application_id
6851       --------------------------------------
6852 
6853       validate_application_id(
6854         p_create_update_flag     => p_create_update_flag,
6855         p_application_id         => p_party_site_use_rec.application_id,
6856         p_old_application_id     => l_application_id,
6857         x_return_status          => x_return_status);
6858 
6859       -- Bug 2065191.status and primary_per_type cannot be 'I' and 'Y' at the same time.
6860       ----------------------------------------
6861       -- validate primary_per_type and status.
6862       ----------------------------------------
6863 
6864       IF NVL(p_party_site_use_rec.primary_per_type,l_primary_per_type) ='Y'
6865       AND NVL(p_party_site_use_rec.status,l_status) = 'I'
6866       THEN
6867           FND_MESSAGE.SET_NAME('AR','HZ_API_INACTIVE_CANNOT_PRIM');
6868           FND_MESSAGE.SET_TOKEN('ENTITY','Party Site Use');
6869       --    FND_MESSAGE.SET_TOKEN('COLUMN1','PRIMARY_PER_TYPE');
6870       --    FND_MESSAGE.SET_TOKEN('COLUMN2','STATUS');
6871           FND_MSG_PUB.ADD;
6872           x_return_status := FND_API.G_RET_STS_ERROR;
6873       END IF;
6874 
6875 
6876       -- Debug info.
6877       /*IF g_debug THEN
6878           hz_utility_v2pub.debug ('validate_party_site_use (-)');
6879       END IF;
6880       */
6881       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6882         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_party_site_use (-)',
6883                                p_msg_level=>fnd_log.level_procedure);
6884       END IF;
6885 
6886 
6887       --disable_debug;
6888 
6889   END validate_party_site_use;
6890 
6891   /**
6892    * PROCEDURE validate_org_contact
6893    *
6894    * DESCRIPTION
6895    *     Validates org contact record. Checks for
6896    *         uniqueness
6897    *         lookup types
6898    *         mandatory columns
6899    *         non-updateable fields
6900    *         foreign key validations
6901    *         other validations
6902    *
6903    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6904    *
6905    * ARGUMENTS
6906    *   IN:
6907    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
6908    *     p_org_contact_rec              Org contact record.
6909    *     p_rowid                        Rowid of the record (used only in update mode).
6910    *   IN/OUT:
6911    *     x_return_status                Return status after the call. The status can
6912    *                                    be FND_API.G_RET_STS_SUCCESS (success),
6913    *                                    fnd_api.g_ret_sts_error (error),
6914    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6915    *
6916    * NOTES
6917    *
6918    * MODIFICATION HISTORY
6919    *
6920    *   07-23-2001    Indrajit Sen       o Created.
6921    *
6922    */
6923 
6924   PROCEDURE validate_org_contact(
6925       p_create_update_flag      IN      VARCHAR2,
6926       p_org_contact_rec         IN      HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_REC_TYPE,
6927       p_rowid                   IN      ROWID,
6928       x_return_status           IN OUT NOCOPY  VARCHAR2
6929  ) IS
6930 
6931       l_party_relationship_id           NUMBER;
6932       l_dummy                           VARCHAR2(1);
6933       l_created_by_module               VARCHAR2(150);
6934       l_application_id                  NUMBER;
6935       -- l_title                           VARCHAR2(30);
6936       l_job_title_code                  VARCHAR2(30);
6937       l_department_code                 VARCHAR2(30);
6938       l_debug_prefix                    VARCHAR2(30) := '';
6939 
6940   BEGIN
6941 
6942       --enable_debug;
6943 
6944       -- Debug info.
6945       /*IF g_debug THEN
6946           hz_utility_v2pub.debug ('validate_org_contact (+)');
6947       END IF;
6948       */
6949       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6950         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact (+)',
6951                                p_msg_level=>fnd_log.level_procedure);
6952       END IF;
6953 
6954 
6955       -- select fields for later use during update.
6956       IF p_create_update_flag = 'U' THEN
6957           SELECT PARTY_RELATIONSHIP_ID,
6958                  -- TITLE,
6959                  JOB_TITLE_CODE,
6960                  DEPARTMENT_CODE,
6961                  CREATED_BY_MODULE,
6962                  APPLICATION_ID
6963           INTO   l_party_relationship_id,
6964                  -- l_title,
6965                  l_job_title_code,
6966                  l_department_code,
6967                  l_created_by_module,
6968                  l_application_id
6969           FROM   HZ_ORG_CONTACTS
6970           WHERE  ROWID = p_rowid;
6971       END IF;
6972 
6973       ---------------------------------
6974       -- validate party_relationship_id
6975       ---------------------------------
6976 
6977       -- party_relationship_id is non-updateable field
6978       IF p_create_update_flag = 'U' THEN
6979           validate_nonupdateable (
6980               p_column                                => 'party_relationship_id',
6981               p_column_value                          => p_org_contact_rec.party_rel_rec.relationship_id,
6982               p_old_column_value                      => l_party_relationship_id,
6983               x_return_status                         => x_return_status);
6984 
6985           /*IF g_debug THEN
6986               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6987                   'party_relationship_id is non-updateable field. ' ||
6988                   'x_return_status = ' || x_return_status, l_debug_prefix);
6989           END IF;
6990           */
6991           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6992            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_relationship_id is non-updateable field. ' ||
6993                   'x_return_status = ' || x_return_status,
6994                                   p_msg_level=>fnd_log.level_statement);
6995           END IF;
6996 
6997 
6998       END IF;
6999 
7000       /* comment out the validation as the title column is obsoleted in r12
7001       -----------------
7002       -- validate title
7003       -----------------
7004 
7005       -- title is lookup code in lookup type CONTACT_TITLE
7006       IF p_org_contact_rec.title IS NOT NULL
7007          AND
7008          p_org_contact_rec.title <> fnd_api.g_miss_char
7009          AND
7010          (p_create_update_flag = 'C'
7011           OR
7012           (p_create_update_flag = 'U'
7013            AND
7014            p_org_contact_rec.title <> NVL(l_title, fnd_api.g_miss_char)
7015          )
7016         )
7017       THEN
7018           validate_lookup (
7019               p_column                                => 'title',
7020               p_lookup_type                           => 'CONTACT_TITLE',
7021               p_column_value                          => p_org_contact_rec.title,
7022               x_return_status                         => x_return_status);
7023 
7024           -- IF g_debug THEN
7025           --    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7026           --        'title is lookup code in lookup type CONTACT_TITLE. ' ||
7027           --        'x_return_status = ' || x_return_status, l_debug_prefix);
7028           --- END IF;
7029 
7030           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7031            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'title is lookup code in lookup type CONTACT_TITLE. ' ||
7032                   'x_return_status = ' || x_return_status,
7033                                   p_msg_level=>fnd_log.level_statement);
7034           END IF;
7035 
7036 
7037       END IF;
7038       */
7039 
7040       --------------------------
7041       -- validate job_title_code
7042       --------------------------
7043 
7044       -- job_title_code is lookup code in lookup type RESPONSIBILITY
7045       IF p_org_contact_rec.job_title_code IS NOT NULL
7046          AND
7047          p_org_contact_rec.job_title_code <> fnd_api.g_miss_char
7048          AND
7049          (p_create_update_flag = 'C'
7050           OR
7051           (p_create_update_flag = 'U'
7052            AND
7053            p_org_contact_rec.job_title_code <> NVL(l_job_title_code, fnd_api.g_miss_char)
7054          )
7055         )
7056       THEN
7057           validate_lookup (
7058               p_column                                => 'job_title_code',
7059               p_lookup_type                           => 'RESPONSIBILITY',
7060               p_column_value                          => p_org_contact_rec.job_title_code,
7061               x_return_status                         => x_return_status);
7062 
7063           /*IF g_debug THEN
7064               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7065                   'job_title_code is lookup code in lookup type RESPONSIBILITY. ' ||
7066                   'x_return_status = ' || x_return_status, l_debug_prefix);
7067           END IF;
7068           */
7069           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7070                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7071                 p_message=>'job_title_code is lookup code in lookup type RESPONSIBILITY. ' ||
7072                   'x_return_status = ' || x_return_status,
7073                                   p_msg_level=>fnd_log.level_statement);
7074           END IF;
7075 
7076 
7077       END IF;
7078 
7079       -------------------------------
7080       -- validate decision_maker_flag
7081       -------------------------------
7082 /****Logical APIs - validation not required****/
7083   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7084       -- decision_maker_flag is lookup code in lookup type YES/NO
7085       validate_lookup (
7086           p_column                                => 'decision_maker_flag',
7087           p_lookup_type                           => 'YES/NO',
7088           p_column_value                          => p_org_contact_rec.decision_maker_flag,
7089           x_return_status                         => x_return_status);
7090 
7091       /*IF g_debug THEN
7092           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7093               'decision_maker_flag should be in lookup YES/NO. ' ||
7094               'x_return_status = ' || x_return_status, l_debug_prefix);
7095       END IF;
7096       */
7097       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7098            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'decision_maker_flag should be in lookup YES/NO. ' ||
7099               'x_return_status = ' || x_return_status,
7100                                   p_msg_level=>fnd_log.level_statement);
7101        END IF;
7102   END IF;
7103 
7104       ------------------------------
7105       -- validate reference_use_flag
7106       ------------------------------
7107 /****Logical APIs - validation not required****/
7108   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7109       -- reference_use_flag is lookup code in lookup type YES/NO
7110       validate_lookup (
7111           p_column                                => 'reference_use_flag',
7112           p_lookup_type                           => 'YES/NO',
7113           p_column_value                          => p_org_contact_rec.reference_use_flag,
7114           x_return_status                         => x_return_status);
7115 
7116       /*IF g_debug THEN
7117           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7118               'reference_use_flag should be in lookup YES/NO. ' ||
7119               'x_return_status = ' || x_return_status, l_debug_prefix);
7120       END IF;
7121       */
7122       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7123            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'reference_use_flag should be in lookup YES/NO. ' ||
7124               'x_return_status = ' || x_return_status,
7125                                   p_msg_level=>fnd_log.level_statement);
7126     END IF;
7127   END IF;
7128 
7129       ---------------------------
7130       -- validate department_code
7131       ---------------------------
7132 
7133       -- department_code is lookup code in lookup type DEPARTMENT_TYPE
7134       IF p_org_contact_rec.department_code IS NOT NULL
7135          AND
7136          p_org_contact_rec.department_code <> fnd_api.g_miss_char
7137          AND
7138          (p_create_update_flag = 'C'
7139           OR
7140           (p_create_update_flag = 'U'
7141            AND
7142            p_org_contact_rec.department_code <> NVL(l_department_code, fnd_api.g_miss_char)
7143          )
7144         )
7145       THEN
7146           validate_lookup (
7147               p_column                                => 'department_code',
7148               p_lookup_type                           => 'DEPARTMENT_TYPE',
7149               p_column_value                          => p_org_contact_rec.department_code,
7150               x_return_status                         => x_return_status);
7151 
7152           /*IF g_debug THEN
7153               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7154                   'department_code is lookup code in lookup type DEPARTMENT_TYPE. ' ||
7155                   'x_return_status = ' || x_return_status, l_debug_prefix);
7156           END IF;
7157           */
7158           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7159                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7160                 p_message=>'department_code is lookup code in lookup type DEPARTMENT_TYPE. ' ||
7161                   'x_return_status = ' || x_return_status,
7162                                   p_msg_level=>fnd_log.level_statement);
7163           END IF;
7164 
7165 
7166       END IF;
7167 
7168       -------------------------
7169       -- validate party_site_id
7170       -------------------------
7171 
7172       -- if party_site_id is passed, then it must be validated as
7173       -- foreign key to hz_party_sites.party_site_id
7174       IF p_org_contact_rec.party_site_id IS NOT NULL
7175          AND
7176          p_org_contact_rec.party_site_id <> fnd_api.g_miss_num
7177       THEN
7178           BEGIN
7179               SELECT 'Y'
7180               INTO   l_dummy
7181               FROM   HZ_PARTY_SITES
7182               WHERE  PARTY_SITE_ID = p_org_contact_rec.party_site_id;
7183           EXCEPTION
7184               WHEN NO_DATA_FOUND THEN
7185                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
7186                   fnd_message.set_token('FK', 'party_site_id');
7187                   fnd_message.set_token('COLUMN', 'party_site_id');
7188                   fnd_message.set_token('TABLE', 'hz_party_sites');
7189                   fnd_msg_pub.add;
7190                   x_return_status := fnd_api.g_ret_sts_error;
7191           END;
7192 
7193           /*IF g_debug THEN
7194               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7195                   'party_site_id is foreign key to hz_party_sites.party_site_id. ' ||
7196                   'x_return_status = ' || x_return_status, l_debug_prefix);
7197           END IF;
7198           */
7199           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7200                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7201                 p_message=>'party_site_id is foreign key to hz_party_sites.party_site_id. ' ||
7202                   'x_return_status = ' || x_return_status,
7203                                   p_msg_level=>fnd_log.level_statement);
7204          END IF;
7205 
7206 
7207       END IF;
7208 
7209       -- if party_site_id is passed then its party_id should be
7210       -- same as the object_id of the relationship record for the org_contact
7211       IF p_org_contact_rec.party_site_id IS NOT NULL
7212          AND
7213          p_org_contact_rec.party_site_id <> fnd_api.g_miss_num
7214       THEN
7215           BEGIN
7216               SELECT 'Y'
7217               INTO   l_dummy
7218               FROM   HZ_PARTY_SITES
7219               WHERE  PARTY_SITE_ID = p_org_contact_rec.party_site_id
7220               AND    PARTY_ID = p_org_contact_rec.party_rel_rec.object_id;
7221           EXCEPTION
7222               WHEN NO_DATA_FOUND THEN
7223                   fnd_message.set_name('AR', 'HZ_API_PARTY_OBJECT_MISMATCH');
7224                   fnd_msg_pub.add;
7225                   x_return_status := fnd_api.g_ret_sts_error;
7226           END;
7227 
7228           /*IF g_debug THEN
7229               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7230                   'party_id of party site should be same as the object_id of the relationship record. ' ||
7231                   'x_return_status = ' || x_return_status, l_debug_prefix);
7232           END IF;
7233           */
7234           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7235             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7236             p_message=>'party_id of party site should be same as the object_id of the relationship record. ' ||
7237                   'x_return_status = ' || x_return_status,
7238                                   p_msg_level=>fnd_log.level_statement);
7239           END IF;
7240 
7241 
7242       END IF;
7243 
7244       --------------------------------------
7245       -- validate created_by_module
7246       --------------------------------------
7247 
7248       validate_created_by_module(
7249         p_create_update_flag     => p_create_update_flag,
7250         p_created_by_module      => p_org_contact_rec.created_by_module,
7251         p_old_created_by_module  => l_created_by_module,
7252         x_return_status          => x_return_status);
7253 
7254       --------------------------------------
7255       -- validate application_id
7256       --------------------------------------
7257 
7258       validate_application_id(
7259         p_create_update_flag     => p_create_update_flag,
7260         p_application_id         => p_org_contact_rec.application_id,
7261         p_old_application_id     => l_application_id,
7262         x_return_status          => x_return_status);
7263 
7264       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7265         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact (-)',
7266                                p_msg_level=>fnd_log.level_procedure);
7267     END IF;
7268 
7269   END validate_org_contact;
7270 
7271   /**
7272    * PROCEDURE validate_org_contact_role
7273    *
7274    * DESCRIPTION
7275    *     Validates org contact role record. Checks for
7276    *         uniqueness
7277    *         lookup types
7278    *         mandatory columns
7279    *         non-updateable fields
7280    *         foreign key validations
7281    *         other validations
7282    *
7283    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7284    *
7285    * ARGUMENTS
7286    *   IN:
7287    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
7288    *     p_org_contact_role_rec         Org contact role record.
7289    *     p_rowid                        Rowid of the record (used only in update mode).
7290    *   IN/OUT:
7291    *     x_return_status                Return status after the call. The status can
7292    *                                    be FND_API.G_RET_STS_SUCCESS (success),
7293    *                                    fnd_api.g_ret_sts_error (error),
7294    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7295    *
7296    * NOTES
7297    *
7298    * MODIFICATION HISTORY
7299    *
7300    *   07-23-2001    Indrajit Sen       o Created.
7301    *
7302    */
7303 
7304   PROCEDURE validate_org_contact_role(
7305       p_create_update_flag      IN      VARCHAR2,
7306       p_org_contact_role_rec    IN      HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_ROLE_REC_TYPE,
7307       p_rowid                   IN      ROWID,
7308       x_return_status       IN OUT NOCOPY      VARCHAR2
7309  ) IS
7310 
7311       l_org_contact_id                  NUMBER;
7312       l_orig_system_reference           VARCHAR2(240);
7313       l_role_id                         NUMBER;
7314       l_dummy                           VARCHAR2(1);
7315       l_created_by_module               VARCHAR2(150);
7316       l_application_id                  NUMBER;
7317       l_count                           NUMBER;
7318       l_status                          VARCHAR2(1);
7319       l_debug_prefix                    VARCHAR2(30) := '';
7320       l_validate_osr varchar2(1) := 'Y';
7321       l_mosr_owner_table_id number;
7322       l_temp_return_status   VARCHAR2(10); -- for storing return status from
7323                                            -- hz_orig_system_ref_pub.get_owner_table_id
7324   BEGIN
7325 
7326       --enable_debug;
7327 
7328       -- Debug info.
7329       /*IF g_debug THEN
7330           hz_utility_v2pub.debug ('validate_org_contact_role (+)');
7331       END IF;
7332       */
7333       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7334         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact_role (+)',
7335                                p_msg_level=>fnd_log.level_procedure);
7336       END IF;
7337 
7338       IF p_create_update_flag = 'U' THEN
7339           SELECT ORG_CONTACT_ID,
7340                  ORIG_SYSTEM_REFERENCE,
7341                  STATUS,
7342                  CREATED_BY_MODULE,
7343                  APPLICATION_ID
7344           INTO   l_org_contact_id,
7345                  l_orig_system_reference,
7346                  l_status,
7347                  l_created_by_module,
7348                  l_application_id
7349           FROM   HZ_ORG_CONTACT_ROLES
7350           WHERE  ROWID = p_rowid;
7351       END IF;
7352 
7353       --------------------------
7354       -- validate org_contact_id
7355       --------------------------
7356 /****Logical APIs - validation not required****/
7357   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7358       -- org_contact_id is mandatory field
7359       validate_mandatory (
7360           p_create_update_flag                    => p_create_update_flag,
7361           p_column                                => 'org_contact_id',
7362           p_column_value                          => p_org_contact_role_rec.org_contact_id,
7363           x_return_status                         => x_return_status);
7364 
7365       /*IF g_debug THEN
7366           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7367               'org_contact_id is mandatory field. ' ||
7368               'x_return_status = ' || x_return_status, l_debug_prefix);
7369       END IF;
7370       */
7371       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7372            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'org_contact_id is mandatory field. ' ||
7373               'x_return_status = ' || x_return_status,
7374                                   p_msg_level=>fnd_log.level_statement);
7375       END IF;
7376 
7377       -- org_contact_id is non-updateable field
7378       IF p_create_update_flag = 'U' THEN
7379           validate_nonupdateable (
7380               p_column                                => 'org_contact_id',
7381               p_column_value                          => p_org_contact_role_rec.org_contact_id,
7382               p_old_column_value                      => l_org_contact_id,
7383               x_return_status                         => x_return_status);
7384 
7385           /*IF g_debug THEN
7386               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7387                   'org_contact_id is non-updateable field. ' ||
7388                   'x_return_status = ' || x_return_status, l_debug_prefix);
7389           END IF;
7390           */
7391           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7392             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'org_contact_id is non-updateable field. ' ||
7393                   'x_return_status = ' || x_return_status,
7394                                   p_msg_level=>fnd_log.level_statement);
7395          END IF;
7396 
7397       END IF;
7398 
7399       -- org_contact_id is foreign key of hz_org_contacts.org_contact_id.
7400       -- do not need to check during update because org_contact_id is
7401       -- non-updateable.
7402       IF p_create_update_flag = 'C'
7403          AND
7404          p_org_contact_role_rec.org_contact_id IS NOT NULL
7405          AND p_org_contact_role_rec.org_contact_id <> fnd_api.g_miss_num
7406       THEN
7407           BEGIN
7408               SELECT 'Y'
7409               INTO   l_dummy
7410               FROM   HZ_ORG_CONTACTS
7411               WHERE  ORG_CONTACT_ID = p_org_contact_role_rec.org_contact_id;
7412           EXCEPTION
7413               WHEN NO_DATA_FOUND THEN
7414                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
7415                   fnd_message.set_token('FK', 'org_contact_id');
7416                   fnd_message.set_token('COLUMN', 'org_contact_id');
7417                   fnd_message.set_token('TABLE', 'hz_org_contacts');
7418                   fnd_msg_pub.add;
7419                   x_return_status := fnd_api.g_ret_sts_error;
7420           END;
7421 
7422           /*IF g_debug THEN
7423               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7424                   'org_contact_id is foreign key of hz_org_contacts.org_contact_id. ' ||
7425                   'x_return_status = ' || x_return_status, l_debug_prefix);
7426           END IF;
7427           */
7428           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7429                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7430                 p_message=>'org_contact_id is foreign key of hz_org_contacts.org_contact_id. ' ||
7431                   'x_return_status = ' || x_return_status,
7432                                   p_msg_level=>fnd_log.level_statement);
7433           END IF;
7434 
7435       END IF;
7436   END IF;
7437 
7438       ---------------------------------
7439       -- validate orig_system_reference
7440       ---------------------------------
7441 /****Logical APIs - validation not required****/
7442   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7443       IF (p_org_contact_role_rec.orig_system is not null
7444          and p_org_contact_role_rec.orig_system <>fnd_api.g_miss_char)
7445        and (p_org_contact_role_rec.orig_system_reference is not null
7446          and p_org_contact_role_rec.orig_system_reference <>fnd_api.g_miss_char)
7447          and p_create_update_flag = 'U'
7448 
7449         then
7450            hz_orig_system_ref_pub.get_owner_table_id
7451                         (p_orig_system => p_org_contact_role_rec.orig_system,
7452                         p_orig_system_reference => p_org_contact_role_rec.orig_system_reference,
7453                         p_owner_table_name => 'HZ_ORG_CONTACT_ROLES',
7454                         x_owner_table_id => l_mosr_owner_table_id,
7455                         x_return_status => l_temp_return_status);
7456 
7457            IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
7458 		       l_mosr_owner_table_id= nvl(p_org_contact_role_rec.org_contact_role_id,l_mosr_owner_table_id))
7459            THEN
7460                 l_validate_osr := 'N';
7461             -- if we can get owner_table_id based on osr and os in mosr table,
7462             -- we will use unique osr and os for update - bypass osr validation
7463            ELSE l_validate_osr := 'Y';
7464            END IF;
7465 
7466            -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
7467            -- x_return_status. Set x_return_status to error, ONLY if there is error.
7468            -- In case of success, leave it to carry over previous value as before this call.
7469            -- Fix for Bug 5498116 (29-AUG-2006)
7470            IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
7471              x_return_status := l_temp_return_status;
7472            END IF;
7473 
7474     end if;
7475       -- orig_system_reference is non-updateable field
7476       IF p_create_update_flag = 'U'  and l_validate_osr = 'Y' THEN
7477           validate_nonupdateable (
7478               p_column                                => 'orig_system_reference',
7479               p_column_value                          => p_org_contact_role_rec.orig_system_reference,
7480               p_old_column_value                      => l_orig_system_reference,
7481               x_return_status                         => x_return_status);
7482 
7483           /*IF g_debug THEN
7484               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7485                   'orig_system_reference is non-updateable field. ' ||
7486                   'x_return_status = ' || x_return_status, l_debug_prefix);
7487           END IF;
7488           */
7489           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7490                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7491                 p_message=>'orig_system_reference is non-updateable field. ' ||
7492                   'x_return_status = ' || x_return_status,
7493                                   p_msg_level=>fnd_log.level_statement);
7494           END IF;
7495 
7496       END IF;
7497   END IF;
7498 
7499       ---------------------
7500       -- validate role_type
7501       ---------------------
7502 
7503       -- role_type is mandatory field
7504       validate_mandatory (
7505           p_create_update_flag                    => p_create_update_flag,
7506           p_column                                => 'role_type',
7507           p_column_value                          => p_org_contact_role_rec.role_type,
7508           x_return_status                         => x_return_status);
7509 
7510       /*IF g_debug THEN
7511           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7512               'role_type is mandatory field. ' ||
7513               'x_return_status = ' || x_return_status, l_debug_prefix);
7514       END IF;
7515       */
7516       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7517            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'role_type is mandatory field. ' ||
7518               'x_return_status = ' || x_return_status,
7519                                   p_msg_level=>fnd_log.level_statement);
7520       END IF;
7521 
7522       -- role_type cannot be set to null during update
7523       IF p_create_update_flag = 'U' THEN
7524           validate_cannot_update_to_null (
7525               p_column                                => 'role_type',
7526               p_column_value                          => p_org_contact_role_rec.role_type,
7527               x_return_status                         => x_return_status);
7528 
7529           /*IF g_debug THEN
7530               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7531                   'role_type cannot be set to null during update. ' ||
7532                   'x_return_status = ' || x_return_status, l_debug_prefix);
7533           END IF;
7534           */
7535           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7536              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7537              p_message=>'role_type cannot be set to null during update. ' ||
7538                   'x_return_status = ' || x_return_status,
7539                                   p_msg_level=>fnd_log.level_statement);
7540           END IF;
7541 
7542       END IF;
7543 
7544       -- role_type is lookup code in lookup type CONTACT_ROLE_TYPE
7545       validate_lookup (
7546           p_column                                => 'role_type',
7547           p_lookup_type                           => 'CONTACT_ROLE_TYPE',
7548           p_column_value                          => p_org_contact_role_rec.role_type,
7549           x_return_status                         => x_return_status);
7550 
7551       /*IF g_debug THEN
7552           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7553               'role_type is lookup code in lookup type CONTACT_ROLE_TYPE. ' ||
7554               'x_return_status = ' || x_return_status, l_debug_prefix);
7555       END IF;
7556       */
7557       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7558            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7559            p_message=>'role_type is lookup code in lookup type CONTACT_ROLE_TYPE. ' ||
7560               'x_return_status = ' || x_return_status,
7561                                   p_msg_level=>fnd_log.level_statement);
7562       END IF;
7563 
7564       ------------------------
7565       -- validate primary_flag
7566       ------------------------
7567 /****Logical APIs - validation not required****/
7568   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7569       -- primary_flag is lookup code in lookup type YES/NO
7570       validate_lookup (
7571           p_column                                => 'primary_flag',
7572           p_lookup_type                           => 'YES/NO',
7573           p_column_value                          => p_org_contact_role_rec.primary_flag,
7574           x_return_status                         => x_return_status);
7575 
7576       /*IF g_debug THEN
7577           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7578               'primary_flag should be in lookup YES/NO. ' ||
7579               'x_return_status = ' || x_return_status, l_debug_prefix);
7580       END IF;
7581       */
7582       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7583            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_flag should be in lookup YES/NO. ' ||
7584               'x_return_status = ' || x_return_status,
7585                                   p_msg_level=>fnd_log.level_statement);
7586       END IF;
7587   END IF;
7588 
7589       -- primary_flag can be set only for one record of org_contact_id.
7590       IF p_org_contact_role_rec.primary_flag = 'Y' THEN
7591           BEGIN
7592               SELECT ORG_CONTACT_ROLE_ID
7593               INTO   l_role_id
7594               FROM   HZ_ORG_CONTACT_ROLES
7595               WHERE  ORG_CONTACT_ID = p_org_contact_role_rec.org_contact_id
7596               AND    PRIMARY_FLAG = 'Y'
7597               AND    ROWNUM  = 1;
7598               /* Bug Fix: 3936336 */
7599               IF        l_role_id <> p_org_contact_role_rec.org_contact_role_id OR
7600                         p_create_update_flag = 'C' THEN
7601                         fnd_message.set_name('AR', 'HZ_API_UNIQUE_PRIMARY_ROLE');
7602                         fnd_msg_pub.add;
7603                         x_return_status := fnd_api.g_ret_sts_error;
7604               END IF;
7605           EXCEPTION
7606               WHEN NO_DATA_FOUND THEN
7607                   NULL;
7608           END;
7609 
7610           /*IF g_debug THEN
7611               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7612                   'primary_flag can be set only for one record of org_contact_id. ' ||
7613                   'x_return_status = ' || x_return_status, l_debug_prefix);
7614           END IF;
7615           */
7616           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7617             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7618             p_message=>'primary_flag can be set only for one record of org_contact_id. ' ||
7619                   'x_return_status = ' || x_return_status,
7620                                   p_msg_level=>fnd_log.level_statement);
7621           END IF;
7622 
7623       END IF;
7624 
7625       -------------------------------------------------------
7626       -- validate combination of org_contact_id and role_type
7627       -------------------------------------------------------
7628 
7629       -- combination of org_contact_id and role_type must be unique.
7630       -- validates only when role_id in the database is different from
7631       -- the role_id to be updated.
7632 
7633       BEGIN
7634           SELECT ORG_CONTACT_ROLE_ID
7635           INTO   l_role_id
7636           FROM   HZ_ORG_CONTACT_ROLES
7637           WHERE  ORG_CONTACT_ID = NVL(p_org_contact_role_rec.org_contact_id, fnd_api.g_miss_num)
7638           AND    ROLE_TYPE      = p_org_contact_role_rec.role_type
7639           AND    STATUS         = 'A' -- Added: Bug#6411541
7640           AND    ROWNUM         = 1;
7641 
7642           IF l_role_id <> nvl(p_org_contact_role_rec.org_contact_role_id, fnd_api.g_miss_num) THEN
7643               fnd_message.set_name('AR', 'HZ_API_UNIQUE_ROLE_TYPE');
7644               fnd_msg_pub.add;
7645               x_return_status := fnd_api.g_ret_sts_error;
7646           END IF;
7647       EXCEPTION
7648           WHEN NO_DATA_FOUND THEN
7649               NULL;
7650       END;
7651 
7652       /*IF g_debug THEN
7653           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7654               'combination of org_contact_id and role_type must be unique. ' ||
7655               'x_return_status = ' || x_return_status, l_debug_prefix);
7656       END IF;
7657       */
7658       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7659            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7660            p_message=>'combination of org_contact_id and role_type must be unique. ' ||
7661               'x_return_status = ' || x_return_status,
7662                                   p_msg_level=>fnd_log.level_statement);
7663       END IF;
7664 
7665       -----------------------------------------
7666       -- validate primary_contact_per_role_type
7667       -----------------------------------------
7668 
7669       -- primary_contact_per_role_type is lookup code in lookup type YES/NO
7670       validate_lookup (
7671           p_column                                => 'primary_contact_per_role_type',
7672           p_lookup_type                           => 'YES/NO',
7673           p_column_value                          => p_org_contact_role_rec.primary_contact_per_role_type,
7674           x_return_status                         => x_return_status);
7675 
7676       /*IF g_debug THEN
7677           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7678               'primary_contact_per_role_type should be in lookup YES/NO. ' ||
7679               'x_return_status = ' || x_return_status, l_debug_prefix);
7680       END IF;
7681       */
7682       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7683            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7684            p_message=>'primary_contact_per_role_type should be in lookup YES/NO. ' ||
7685               'x_return_status = ' || x_return_status,
7686                                   p_msg_level=>fnd_log.level_statement);
7687     END IF;
7688 
7689       -- only one org contact can be set as primary within
7690       -- same organization party.
7691       IF p_org_contact_role_rec.primary_contact_per_role_type = 'Y' THEN
7692           BEGIN
7693               SELECT 'Y'
7694               INTO   l_dummy
7695               FROM   HZ_RELATIONSHIPS PR,
7696                      HZ_ORG_CONTACTS OC,
7697                      HZ_ORG_CONTACT_ROLES OCR,
7698                      HZ_RELATIONSHIPS PR2,
7699                      HZ_ORG_CONTACTS OC2
7700               WHERE  OCR.PRIMARY_CONTACT_PER_ROLE_TYPE = 'Y'
7701               AND    OCR.ROLE_TYPE = p_org_contact_role_rec.role_type
7702               AND    OCR.ORG_CONTACT_ID = OC.ORG_CONTACT_ID
7703               AND    OC.PARTY_RELATIONSHIP_ID = PR.RELATIONSHIP_ID
7704               AND    PR.OBJECT_ID = PR2.OBJECT_ID
7705               AND    PR2.RELATIONSHIP_ID = OC2.PARTY_RELATIONSHIP_ID
7706               AND    OC2.ORG_CONTACT_ID = P_ORG_CONTACT_ROLE_REC.ORG_CONTACT_ID
7707               AND    PR.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
7708               AND    PR.OBJECT_TABLE_NAME = 'HZ_PARTIES'
7709               AND    PR.DIRECTIONAL_FLAG = 'F'
7710               AND    PR2.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
7711               AND    PR2.OBJECT_TABLE_NAME = 'HZ_PARTIES'
7712               AND    PR2.DIRECTIONAL_FLAG = 'F'
7713 	      and    ocr.org_contact_role_id <>p_org_contact_role_rec.org_contact_role_id; --db primary role id is not same as the pass in role id
7714 
7715               fnd_message.set_name('AR', 'HZ_API_UNIQUE_PRIMARY_ORG_CONT');
7716               fnd_msg_pub.add;
7717               x_return_status := fnd_api.g_ret_sts_error;
7718           EXCEPTION
7719               WHEN NO_DATA_FOUND THEN
7720                   NULL;
7721           END;
7722 
7723           /*IF g_debug THEN
7724               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7725                   'only one org contact can be set as primary within same organization party. ' ||
7726                   'x_return_status = ' || x_return_status, l_debug_prefix);
7727           END IF;
7728           */
7729           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7730                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7731                 p_message=>'only one org contact can be set as primary within same organization party. ' ||
7732                   'x_return_status = ' || x_return_status,
7733                                   p_msg_level=>fnd_log.level_statement);
7734           END IF;
7735 
7736       END IF;
7737 
7738       ------------------
7739       -- validate status
7740       ------------------
7741 /****Logical APIs - validation not required****/
7742   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7743       -- status is lookup code in lookup type REGISTRY_STATUS
7744       IF p_org_contact_role_rec.status IS NOT NULL
7745          AND
7746          p_org_contact_role_rec.status <> fnd_api.g_miss_char
7747          AND
7748          (p_create_update_flag = 'C'
7749           OR
7750           (p_create_update_flag = 'U'
7751            AND
7752            p_org_contact_role_rec.status <> NVL(l_status, fnd_api.g_miss_char)
7753          )
7754         )
7755       THEN
7756           validate_lookup (
7757               p_column                                => 'status',
7758               p_lookup_type                           => 'REGISTRY_STATUS',
7759               p_column_value                          => p_org_contact_role_rec.status,
7760               x_return_status                         => x_return_status);
7761 
7762           /*IF g_debug THEN
7763               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7764                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
7765                   'x_return_status = ' || x_return_status, l_debug_prefix);
7766           END IF;
7767           */
7768           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7769                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7770                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
7771                   'x_return_status = ' || x_return_status,
7772                                   p_msg_level=>fnd_log.level_statement);
7773          END IF;
7774 
7775       END IF;
7776   END IF;
7777 
7778       -- status cannot be set to null during update
7779       IF p_create_update_flag = 'U' THEN
7780           validate_cannot_update_to_null (
7781               p_column                                => 'status',
7782               p_column_value                          => p_org_contact_role_rec.status,
7783               x_return_status                         => x_return_status);
7784       END IF;
7785 
7786       --------------------------------------
7787       -- validate created_by_module
7788       --------------------------------------
7789 
7790       validate_created_by_module(
7791         p_create_update_flag     => p_create_update_flag,
7792         p_created_by_module      => p_org_contact_role_rec.created_by_module,
7793         p_old_created_by_module  => l_created_by_module,
7794         x_return_status          => x_return_status);
7795 
7796       --------------------------------------
7797       -- validate application_id
7798       --------------------------------------
7799 
7800       validate_application_id(
7801         p_create_update_flag     => p_create_update_flag,
7802         p_application_id         => p_org_contact_role_rec.application_id,
7803         p_old_application_id     => l_application_id,
7804         x_return_status          => x_return_status);
7805 
7806       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7807         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact_role (-)',
7808                                p_msg_level=>fnd_log.level_procedure);
7809       END IF;
7810 
7811   END validate_org_contact_role;
7812 
7813   /**
7814    * PROCEDURE validate_person_language
7815    *
7816    * DESCRIPTION
7817    *     Validates person language record. Checks for
7818    *         uniqueness
7819    *         lookup types
7820    *         mandatory columns
7821    *         non-updateable fields
7822    *         foreign key validations
7823    *         other validations
7824    *
7825    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7826    *
7827    * ARGUMENTS
7828    *   IN:
7829    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
7830    *     p_person_language_rec          Person language record.
7831    *     p_rowid                        Rowid of the record (used only in update mode).
7832    *   IN/OUT:
7833    *     x_return_status                Return status after the call. The status can
7834    *                                    be FND_API.G_RET_STS_SUCCESS (success),
7835    *                                    fnd_api.g_ret_sts_error (error),
7836    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7837    *
7838    * NOTES
7839    *
7840    * MODIFICATION HISTORY
7841    *
7842    *   07-23-2001    Indrajit Sen       o Created.
7843    *   01-10-2003    Porkodi Chinnandar o Added few lines to have validation for spoken_
7844    *                                      comprehension_level. The value entered for spoken_
7845    *                                      comprehension_level is validated against lookup type
7846    *                                      HZ_LANGUAGE_PROFICIENCY.
7847    *   18-03-2003    Porkodi Chinnandar o 2820135, Party should have only one native_languge and
7848    *                                      one primary language. This check has been moved to
7849    *                                      ARH2PISB due to the update involved in this.
7850    *   01-MAR-2004   Rajib Ranjan Borah o Bug 3363458.Modified previous validation to ensure
7851    *                                      that the primary language cannot be inactive.
7852    *                                      Added local variable l_primary_language_indicator
7853    *                                      for the same.
7854    *   03-May-3004 Venkata Sowjanya S     Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
7855    *                                        for message HZ_API_INACTIVE_CANNOT_PRIM
7856    */
7857 
7858   PROCEDURE validate_person_language(
7859       p_create_update_flag                    IN      VARCHAR2,
7860       p_person_language_rec                   IN      HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE,
7861       p_rowid                                 IN      ROWID ,
7862       x_return_status                         IN OUT NOCOPY  VARCHAR2
7863  ) IS
7864 
7865       l_count                                          NUMBER;
7866       l_dummy                                          VARCHAR2(1);
7867       l_party_id                                       NUMBER := p_person_language_rec.party_id;
7868       l_created_by_module                              VARCHAR2(150);
7869       l_application_id                                 NUMBER;
7870       l_language_name                                  VARCHAR2(4);
7871       l_status                                         VARCHAR2(1);
7872       l_debug_prefix                                   VARCHAR2(30) := '';
7873       l_primary_language_indicator                     VARCHAR2(1);
7874 
7875   BEGIN
7876 
7877       --enable_debug;
7878 
7879       -- Debug info.
7880       /*IF g_debug THEN
7881           hz_utility_v2pub.debug ('validate_person_language (+)');
7882       END IF;
7883       */
7884       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7885         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_language (+)',
7886                                p_msg_level=>fnd_log.level_procedure);
7887       END IF;
7888 
7889       -- do the query to get old values for update
7890       IF p_create_update_flag = 'U'
7891       THEN
7892           SELECT PARTY_ID,
7893                  LANGUAGE_NAME,
7894                  STATUS,
7895                  CREATED_BY_MODULE,
7896                  APPLICATION_ID,
7897                  PRIMARY_LANGUAGE_INDICATOR
7898           INTO   l_party_id,
7899                  l_language_name,
7900                  l_status,
7901                  l_created_by_module,
7902                  l_application_id,
7903                  l_primary_language_indicator
7904           FROM   HZ_PERSON_LANGUAGE
7905           WHERE  ROWID = p_rowid;
7906       END IF;
7907 
7908       --------------------------
7909       -- validation for party_id
7910       --------------------------
7911 /****Logical APIs - validation not required****/
7912   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7913       -- party_id is mandatory field
7914       IF p_create_update_flag = 'C' THEN
7915           validate_mandatory (
7916               p_create_update_flag                    => p_create_update_flag,
7917               p_column                                => 'party_id',
7918               p_column_value                          => p_person_language_rec.party_id,
7919               x_return_status                         => x_return_status);
7920 
7921           /*IF g_debug THEN
7922               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7923                   'party_id is mandatory field. ' ||
7924                   'x_return_status = ' || x_return_status, l_debug_prefix);
7925           END IF;
7926           */
7927           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7928                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
7929                   'x_return_status = ' || x_return_status,
7930                                   p_msg_level=>fnd_log.level_statement);
7931           END IF;
7932 
7933       END IF;
7934 
7935       -- party_id is non-updateable field
7936       IF p_create_update_flag = 'U' THEN
7937           validate_nonupdateable (
7938               p_column                                => 'party_id',
7939               p_column_value                          => p_person_language_rec.party_id,
7940               p_old_column_value                      => l_party_id,
7941               x_return_status                         => x_return_status);
7942 
7943           /*IF g_debug THEN
7944               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7945                   'party_id is non-updateable field. ' ||
7946                   'x_return_status = ' || x_return_status, l_debug_prefix);
7947           END IF;
7948           */
7949           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7950                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
7951                   'x_return_status = ' || x_return_status,
7952                                   p_msg_level=>fnd_log.level_statement);
7953           END IF;
7954 
7955       END IF;
7956 
7957       -- party_id has foreign key HZ_PARTIES.PARTY_ID
7958       IF p_create_update_flag = 'C'
7959          AND
7960          p_person_language_rec.party_id IS NOT NULL
7961          AND
7962          p_person_language_rec.party_id <> fnd_api.g_miss_num
7963       THEN
7964           BEGIN
7965               SELECT 'Y'
7966               INTO   l_dummy
7967               FROM   hz_parties
7968               WHERE  party_id = p_person_language_rec.party_id;
7969 
7970           EXCEPTION
7971               WHEN NO_DATA_FOUND THEN
7972                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
7973                   fnd_message.set_token('FK', 'party_id');
7974                   fnd_message.set_token('COLUMN', 'party_id');
7975                   fnd_message.set_token('TABLE', 'hz_parties');
7976                   fnd_msg_pub.add;
7977                   x_return_status := fnd_api.g_ret_sts_error;
7978           END;
7979 
7980           /*IF g_debug THEN
7981               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7982                   'party_id has foreign key hz_parties.party_id. ' ||
7983                   'x_return_status = ' || x_return_status, l_debug_prefix);
7984           END IF;
7985           */
7986           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7987              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
7988                   'x_return_status = ' || x_return_status,
7989                                   p_msg_level=>fnd_log.level_statement);
7990           END IF;
7991 
7992       END IF;
7993   END IF;
7994 
7995       -------------------------------
7996       -- validation for language_name
7997       -------------------------------
7998 
7999       -- language_name is mandatory field
8000       IF p_create_update_flag = 'C' THEN
8001           validate_mandatory (
8002               p_create_update_flag                    => p_create_update_flag,
8003               p_column                                => 'language_name',
8004               p_column_value                          => p_person_language_rec.language_name,
8005               x_return_status                         => x_return_status);
8006 
8007           /*IF g_debug THEN
8008               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8009                   'language_name is mandatory field. ' ||
8010                   'x_return_status = ' || x_return_status, l_debug_prefix);
8011           END IF;
8012           */
8013           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8014                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'language_name is mandatory field. ' ||
8015                   'x_return_status = ' || x_return_status,
8016                                   p_msg_level=>fnd_log.level_statement);
8017           END IF;
8018 
8019       END IF;
8020 
8021       -- language_name is non-updateable field
8022       IF p_create_update_flag = 'U' THEN
8023           validate_nonupdateable (
8024               p_column                                => 'language_name',
8025               p_column_value                          => p_person_language_rec.language_name,
8026               p_old_column_value                      => l_language_name,
8027               x_return_status                         => x_return_status);
8028 
8029           /*IF g_debug THEN
8030               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8031                   'language_name is non-updateable field. ' ||
8032                   'x_return_status = ' || x_return_status, l_debug_prefix);
8033           END IF;
8034           */
8035           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8036             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'language_name is non-updateable field. ' ||
8037                   'x_return_status = ' || x_return_status,
8038                                   p_msg_level=>fnd_log.level_statement);
8039           END IF;
8040 
8041       END IF;
8042 
8043       -- language_name has foreign key fnd_languages.language_code
8044       IF p_person_language_rec.language_name IS NOT NULL
8045          AND
8046          p_person_language_rec.language_name <> fnd_api.g_miss_char
8047       THEN
8048           BEGIN
8049               SELECT 'Y'
8050               INTO   l_dummy
8051               FROM   FND_LANGUAGES
8052               WHERE  LANGUAGE_CODE = p_person_language_rec.language_name;
8053           EXCEPTION
8054               WHEN NO_DATA_FOUND THEN
8055                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
8056                   fnd_message.set_token('FK', 'language_name');
8057                   fnd_message.set_token('COLUMN', 'language_code');
8058                   fnd_message.set_token('TABLE', 'fnd_languages');
8059                   fnd_msg_pub.add;
8060                   x_return_status := fnd_api.g_ret_sts_error;
8061           END;
8062 
8063           /*IF g_debug THEN
8064               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8065                   'language_name has foreign key fnd_languages.language_code. ' ||
8066                   'x_return_status = ' || x_return_status, l_debug_prefix);
8067           END IF;
8068           */
8069           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8070             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8071             p_message=>'language_name has foreign key fnd_languages.language_code. ' ||
8072                   'x_return_status = ' || x_return_status,
8073                                   p_msg_level=>fnd_log.level_statement);
8074           END IF;
8075 
8076       END IF;
8077 
8078       -- there can be only one record for a given party and language
8079       BEGIN
8080           SELECT 1
8081           INTO   l_dummy
8082           FROM   HZ_PERSON_LANGUAGE
8083           WHERE  PARTY_ID = l_party_id
8084           AND    LANGUAGE_NAME = p_person_language_rec.language_name
8085           AND    LANGUAGE_USE_REFERENCE_ID <> NVL(p_person_language_rec.language_use_reference_id, fnd_api.g_miss_num);
8086 
8087           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
8088           fnd_message.set_token('COLUMN', 'language_name');
8089           fnd_msg_pub.add;
8090           x_return_status := fnd_api.g_ret_sts_error;
8091 
8092       EXCEPTION
8093           WHEN NO_DATA_FOUND THEN
8094               NULL;
8095       END;
8096 
8097       ---------------------------------
8098       -- validation for native_language
8099       ---------------------------------
8100 /****Logical APIs - validation not required****/
8101   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8102       -- native_language is lookup code in lookup type YES/NO
8103       validate_lookup (
8104           p_column                                => 'native_language',
8105           p_lookup_type                           => 'YES/NO',
8106           p_column_value                          => p_person_language_rec.native_language,
8107           x_return_status                         => x_return_status);
8108 
8109       /*IF g_debug THEN
8110           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8111               'native_language should be in lookup YES/NO. ' ||
8112               'x_return_status = ' || x_return_status, l_debug_prefix);
8113       END IF;
8114       */
8115       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8116            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'native_language should be in lookup YES/NO. ' ||
8117               'x_return_status = ' || x_return_status,
8118                                   p_msg_level=>fnd_log.level_statement);
8119       END IF;
8120   END IF;
8121 
8122       --------------------------------------------
8123       -- validation for spoken_comprehension_level
8124       --------------------------------------------
8125 
8126       -- spoken_comprehension_level is lookup code in lookup type HZ_LANGUAGE_PROFICIENCY
8127       validate_lookup (
8128           p_column                                => 'spoken_comprehension_level',
8129           p_lookup_type                           => 'HZ_LANGUAGE_PROFICIENCY',
8130           p_column_value                          => p_person_language_rec.spoken_comprehension_level,
8131           x_return_status                         => x_return_status);
8132 
8133 
8134       /*IF g_debug THEN
8135           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8136               'spoken_comprehension_level should be in lookup HZ_LANGUAGE_PROFICIENCY. ' ||
8137               'x_return_status = ' || x_return_status, l_debug_prefix);
8138       END IF;
8139       */
8140       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8141            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8142            p_message=>'spoken_comprehension_level should be in lookup HZ_LANGUAGE_PROFICIENCY. ' ||
8143               'x_return_status = ' || x_return_status,
8144                                   p_msg_level=>fnd_log.level_statement);
8145       END IF;
8146 
8147 
8148       --------------------------------------------
8149       -- validation for primary_language_indicator
8150       --------------------------------------------
8151 /****Logical APIs - validation not required****/
8152   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8153       -- primary_language_indicator is lookup code in lookup type YES/NO
8154       validate_lookup (
8155           p_column                                => 'primary_language_indicator',
8156           p_lookup_type                           => 'YES/NO',
8157           p_column_value                          => p_person_language_rec.primary_language_indicator,
8158           x_return_status                         => x_return_status);
8159 
8160       /*IF g_debug THEN
8161           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8162               'primary_language_indicator should be in lookup YES/NO. ' ||
8163               'x_return_status = ' || x_return_status, l_debug_prefix);
8164       END IF;
8165       */
8166       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8167            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8168            p_message=>'primary_language_indicator should be in lookup YES/NO. ' ||
8169               'x_return_status = ' || x_return_status,
8170                                   p_msg_level=>fnd_log.level_statement);
8171       END IF;
8172   END IF;
8173 
8174       ------------------------
8175       -- validation for status
8176       ------------------------
8177 /****Logical APIs - validation not required****/
8178   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8179       -- status is lookup code in lookup type REGISTRY_STATUS
8180       IF p_person_language_rec.status IS NOT NULL
8181          AND
8182          p_person_language_rec.status <> fnd_api.g_miss_char
8183          AND
8184          (p_create_update_flag = 'C'
8185           OR
8186           (p_create_update_flag = 'U'
8187            AND
8188            p_person_language_rec.status <> NVL(l_status, fnd_api.g_miss_char)
8189          )
8190         )
8191       THEN
8192           validate_lookup (
8193               p_column                                => 'status',
8194               p_lookup_type                           => 'REGISTRY_STATUS',
8195               p_column_value                          => p_person_language_rec.status,
8196               x_return_status                         => x_return_status);
8197 
8198           /*IF g_debug THEN
8199               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8200                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8201                   'x_return_status = ' || x_return_status, l_debug_prefix);
8202           END IF;
8203           */
8204           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8205             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8206             p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8207                   'x_return_status = ' || x_return_status,
8208                                   p_msg_level=>fnd_log.level_statement);
8209           END IF;
8210 
8211       END IF;
8212   END IF;
8213 
8214       -- status cannot be set to null during update
8215       IF p_create_update_flag = 'U' THEN
8216           validate_cannot_update_to_null (
8217               p_column                                => 'status',
8218               p_column_value                          => p_person_language_rec.status,
8219               x_return_status                         => x_return_status);
8220       END IF;
8221 
8222 
8223       -- 2820135, the following check has been made as part of this bug
8224       -- If the primary_language_indicator is set to Yes, the status column should
8225       -- not be Inactive
8226 
8227       -- Bug 3363458.The previous validation did not take care of the condition when
8228       -- the status for a primary language was updated from 'A' to 'I'.
8229 
8230 /*
8231       IF p_person_language_rec.primary_language_indicator is NOT NULL
8232          AND p_person_language_rec.primary_language_indicator <> fnd_api.g_miss_char
8233          AND (p_create_update_flag = 'C'
8234               OR (p_create_update_flag = 'U'
8235                   AND p_person_language_rec.primary_language_indicator <>
8236                     NVL(l_primary_language_indicator, fnd_api.g_miss_char)))
8237       THEN
8238         SELECT DECODE(p_person_language_rec.primary_language_indicator,
8239                       'Y', DECODE(p_person_language_rec.status,
8240                                   'I', 'N',
8241                                   '', DECODE(l_status, 'I', 'N')),
8242                       'Y')
8243         INTO   l_dummy
8244         FROM   dual;
8245 
8246         IF l_dummy <> 'Y' THEN
8247         fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8248         fnd_message.set_token('ENTITY', 'language');
8249        -- fnd_message.set_token('COLUMN1', 'primary_language_indicator');
8250        -- fnd_message.set_token('COLUMN2', 'status');
8251         fnd_msg_pub.add;
8252         x_return_status := FND_API.G_RET_STS_ERROR;
8253         END IF;
8254 
8255         */
8256 
8257         -- Bug 3363458.
8258         IF p_create_update_flag = 'C'
8259         THEN
8260             IF (p_person_language_rec.primary_language_indicator = 'Y'
8261                AND p_person_language_rec.status = 'I')
8262             THEN
8263                 fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8264                 fnd_message.set_token('ENTITY', 'Language');
8265         --        fnd_message.set_token('COLUMN1', 'primary_language_indicator');
8266         --        fnd_message.set_token('COLUMN2', 'status');
8267                 fnd_msg_pub.add;
8268                 x_return_status := FND_API.G_RET_STS_ERROR;
8269 
8270                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8271                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8272                     p_message=>'If the primary_language_indicator is set to Yes, the status column should not be Inactive.' ||
8273                     'x_return_status = ' || x_return_status,
8274                     p_msg_level=>fnd_log.level_statement);
8275                 END IF;
8276 
8277             END IF;
8278         ELSE  -- p_create_update_flag = 'U'
8279             IF (NVL(p_person_language_rec.primary_language_indicator,l_primary_language_indicator)='Y'
8280                AND NVL(p_person_language_rec.status,l_status)='I')
8281             THEN
8282                 fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8283                 fnd_message.set_token('ENTITY', 'Language');
8284                 --fnd_message.set_token('COLUMN1', 'primary_language_indicator');
8285                -- fnd_message.set_token('COLUMN2', 'status');
8286                 fnd_msg_pub.add;
8287                 x_return_status := FND_API.G_RET_STS_ERROR;
8288 
8289                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8290                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8291                     p_message=>'If the primary_language_indicator is set to Yes, the status column should not be Inactive.' ||
8292                     'x_return_status = ' || x_return_status,
8293                     p_msg_level=>fnd_log.level_statement);
8294                 END IF;
8295 
8296             END IF;
8297         END IF;  -- corresponding to IF p_create_update_flag = 'C'
8298 
8299        /*IF g_debug THEN
8300           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8301             'If the primary_language_indicator is set to Yes, the status column should not be Inactive.' ||
8302             'x_return_status = ' || x_return_status,
8303             l_debug_prefix
8304           );
8305         END IF;
8306         */
8307 
8308       --------------------------------------
8309       -- validate created_by_module
8310       --------------------------------------
8311 
8312       validate_created_by_module(
8313         p_create_update_flag     => p_create_update_flag,
8314         p_created_by_module      => p_person_language_rec.created_by_module,
8315         p_old_created_by_module  => l_created_by_module,
8316         x_return_status          => x_return_status);
8317 
8318       --------------------------------------
8319       -- validate application_id
8320       --------------------------------------
8321 
8322       validate_application_id(
8323         p_create_update_flag     => p_create_update_flag,
8324         p_application_id         => p_person_language_rec.application_id,
8325         p_old_application_id     => l_application_id,
8326         x_return_status          => x_return_status);
8327 
8328       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8329         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_language (-)',
8330                                p_msg_level=>fnd_log.level_procedure);
8331       END IF;
8332 
8333   END validate_person_language;
8334 
8335 
8336   /**
8337    * PROCEDURE validate_citizenship
8338    *
8339    * DESCRIPTION
8340    *     Validates citizenship record. Checks for
8341    *         uniqueness
8342    *         lookup types
8343    *         mandatory columns
8344    *         non-updateable fields
8345    *         foreign key validations
8346    *         other validations
8347    *
8348    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
8349    *
8350    * ARGUMENTS
8351    *   IN:
8352    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
8353    *     p_citizenship_rec              Citizenship record.
8354    *     p_rowid                        Rowid of the record (used only in update mode).
8355    *   IN/OUT:
8356    *     x_return_status                Return status after the call. The status can
8357    *                                    be FND_API.G_RET_STS_SUCCESS (success),
8358    *                                    fnd_api.g_ret_sts_error (error),
8359    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
8360    *
8361    * NOTES
8362    *
8363    * MODIFICATION HISTORY
8364    *
8365    *   31-Jan-2001    Porkodi C         o Created.
8366    *   10-Mar-2003    Porkodi C         o Bug 2820483, Added mandatory check for country_code
8367    *                                      Bug 2820462, Added the party_type check for the party_id
8368    *
8369    */
8370 
8371     PROCEDURE validate_citizenship(
8372         p_create_update_flag                    IN      VARCHAR2,
8373         p_citizenship_rec                       IN      HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE,
8374         p_rowid                                 IN      ROWID ,
8375         x_return_status                         IN OUT NOCOPY  VARCHAR2
8376    ) IS
8377 
8378         l_count                                          NUMBER;
8379         l_dummy                                          VARCHAR2(1);
8380         l_party_id                                       NUMBER := p_citizenship_rec.party_id;
8381         l_created_by_module                              VARCHAR2(150);
8382         l_application_id                                 NUMBER;
8383         l_citizenship_id                                 NUMBER;
8384         l_status                                         VARCHAR2(1);
8385         l_debug_prefix                                   VARCHAR2(30) := '';
8386 
8387 
8388         CURSOR citizen_cur (p_citizenship_id IN NUMBER) IS
8389               SELECT 'Y'
8390               FROM   hz_citizenship hc
8391         WHERE  hc.citizenship_id = p_citizenship_id;
8392 
8393 
8394     BEGIN
8395 
8396         --enable_debug;
8397 
8398         -- Debug info.
8399         /*IF g_debug THEN
8400             hz_utility_v2pub.debug ('validate_citizenship (+)');
8401         END IF;
8402         */
8403         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8404                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_citizenship (+)',
8405                                p_msg_level=>fnd_log.level_procedure);
8406         END IF;
8407 
8408         -- do the query to get old values for update
8409         IF p_create_update_flag = 'U'
8410         THEN
8411             SELECT CITIZENSHIP_ID,
8412                    PARTY_ID,
8413                    STATUS,
8414                    CREATED_BY_MODULE,
8415                    APPLICATION_ID
8416             INTO   l_citizenship_id,
8417                    l_party_id,
8418                    l_status,
8419                    l_created_by_module,
8420                    l_application_id
8421             FROM   HZ_CITIZENSHIP
8422             WHERE  ROWID = p_rowid;
8423         END IF;
8424 
8425 
8426         --------------------------------------
8427         -- validate citizenship_id
8428         --------------------------------------
8429 /****Logical APIs - validation not required****/
8430   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8431         -- If primary key value is passed, check for uniqueness.
8432         -- If primary key value is not passed, it will be generated
8433         -- from sequence by table handler.
8434 
8435         IF p_create_update_flag = 'C' THEN
8436         IF p_citizenship_rec.citizenship_id IS NOT NULL AND
8437            p_citizenship_rec.citizenship_id <> fnd_api.g_miss_num
8438         THEN
8439         OPEN citizen_cur (p_citizenship_rec.citizenship_id);
8440         FETCH citizen_cur INTO l_dummy;
8441 
8442         -- key is not unique, push an error onto the stack.
8443         IF NVL(citizen_cur%FOUND, FALSE) THEN
8444           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
8445           fnd_message.set_token('COLUMN', 'citizenship_id');
8446           fnd_msg_pub.add;
8447           x_return_status := fnd_api.g_ret_sts_error;
8448         END IF;
8449         CLOSE citizen_cur;
8450 
8451         /*IF g_debug THEN
8452           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8453             'check that citizenship_id is unique during creation. ' ||
8454             ' x_return_status = ' || x_return_status, l_debug_prefix);
8455         END IF;
8456         */
8457         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8458            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8459            p_message=>'check that citizenship_id is unique during creation. ' ||
8460             ' x_return_status = ' || x_return_status,
8461                                   p_msg_level=>fnd_log.level_statement);
8462         END IF;
8463 
8464         END IF;
8465         END IF;
8466 
8467         /*IF g_debug THEN
8468         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8469         '(+) after validate citizenship_id ... ' ||
8470         'x_return_status = ' || x_return_status, l_debug_prefix);
8471         END IF;
8472         */
8473         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8474            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate citizenship_id ... ' ||
8475                                                 'x_return_status = ' || x_return_status,
8476                                   p_msg_level=>fnd_log.level_statement);
8477         END IF;
8478 
8479 
8480         -- citizenship_id is non-updateable field
8481            IF p_create_update_flag = 'U' THEN
8482               validate_nonupdateable (
8483                   p_column                                => 'citizenship_id',
8484                   p_column_value                          => p_citizenship_rec.citizenship_id,
8485                   p_old_column_value                      => l_citizenship_id,
8486                   x_return_status                         => x_return_status);
8487 
8488               /*IF g_debug THEN
8489                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8490                     'citizenship_id is non-updateable field. ' ||
8491                     'x_return_status = ' || x_return_status, l_debug_prefix);
8492               END IF;
8493               */
8494               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8495                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'citizenship_id is non-updateable field. ' ||
8496                     'x_return_status = ' || x_return_status,
8497                                   p_msg_level=>fnd_log.level_statement);
8498               END IF;
8499 
8500 
8501            END IF;
8502   END IF;
8503 
8504         --------------------------
8505         -- validation for party_id
8506         --------------------------
8507 /****Logical APIs - validation not required****/
8508   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8509         -- party_id is mandatory field
8510         IF p_create_update_flag = 'C' THEN
8511             validate_mandatory (
8512                 p_create_update_flag                    => p_create_update_flag,
8513                 p_column                                => 'party_id',
8514                 p_column_value                          => p_citizenship_rec.party_id,
8515                 x_return_status                         => x_return_status);
8516 
8517             /*IF g_debug THEN
8518                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8519                     'party_id is mandatory field. ' ||
8520                     'x_return_status = ' || x_return_status, l_debug_prefix);
8521             END IF;
8522             */
8523             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8524                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
8525                     'x_return_status = ' || x_return_status,
8526                                   p_msg_level=>fnd_log.level_statement);
8527             END IF;
8528 
8529 
8530         END IF;
8531 
8532         -- party_id is non-updateable field
8533         IF p_create_update_flag = 'U' THEN
8534             validate_nonupdateable (
8535                 p_column                                => 'party_id',
8536                 p_column_value                          => p_citizenship_rec.party_id,
8537                 p_old_column_value                      => l_party_id,
8538                 x_return_status                         => x_return_status);
8539 
8540             /*IF g_debug THEN
8541                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8542                     'party_id is non-updateable field. ' ||
8543                     'x_return_status = ' || x_return_status, l_debug_prefix);
8544             END IF;
8545             */
8546             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8547                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
8548                     'x_return_status = ' || x_return_status,
8549                                   p_msg_level=>fnd_log.level_statement);
8550             END IF;
8551 
8552 
8553         END IF;
8554 
8555         -- 2820462, Party_type check has been added to the where clause
8556         -- party_id has foreign key HZ_PARTIES.PARTY_ID
8557         IF p_create_update_flag = 'C'
8558            AND
8559            p_citizenship_rec.party_id IS NOT NULL
8560            AND
8561            p_citizenship_rec.party_id <> fnd_api.g_miss_num
8562         THEN
8563             BEGIN
8564                 SELECT 'Y'
8565                 INTO   l_dummy
8566                 FROM   hz_parties p
8567                 WHERE  p.party_type='PERSON' and
8568                 p.party_id = p_citizenship_rec.party_id;
8569 
8570             EXCEPTION
8571                 WHEN NO_DATA_FOUND THEN
8572                     fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_PERSON');
8573           --          fnd_message.set_token('FK', 'party_id');
8574                     fnd_message.set_token('TABLE_NAME', 'HZ_CITIZENSHIP');
8575                     fnd_message.set_token('PARTY_ID_COL', 'party_id');
8576                     fnd_msg_pub.add;
8577                     x_return_status := fnd_api.g_ret_sts_error;
8578             END;
8579 
8580             /*IF g_debug THEN
8581                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8582                     'party_id has foreign key hz_parties.party_id. ' ||
8583                     'x_return_status = ' || x_return_status, l_debug_prefix);
8584             END IF;
8585             */
8586             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8587                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
8588                     'x_return_status = ' || x_return_status,
8589                                   p_msg_level=>fnd_log.level_statement);
8590             END IF;
8591 
8592 
8593         END IF;
8594   END IF;
8595 
8596         ---------------------------------------
8597         -- validation for birth_or_selected
8598         ---------------------------------------
8599 
8600         -- birth_or_selected is lookup code in lookup type HZ_CITIZENSHIP_ACQUISITION
8601 
8602         validate_lookup (
8603             p_column                                => 'birth_or_selected',
8604             p_lookup_type                           => 'HZ_CITIZENSHIP_ACQUISITION',
8605             p_column_value                          => p_citizenship_rec.birth_or_selected,
8606             x_return_status                         => x_return_status);
8607 
8608 
8609         /*IF g_debug THEN
8610             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8611                 'birth_or_selected should be in lookup HZ_CITIZENSHIP_ACQUISITION. ' ||
8612                 'x_return_status = ' || x_return_status, l_debug_prefix);
8613         END IF;
8614         */
8615         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8616            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8617            p_message=>'birth_or_selected should be in lookup HZ_CITIZENSHIP_ACQUISITION. ' ||
8618                 'x_return_status = ' || x_return_status,
8619                                   p_msg_level=>fnd_log.level_statement);
8620         END IF;
8621 
8622 
8623         ---------------------------------------
8624         -- validation for country_code
8625         ---------------------------------------
8626 
8627         -- 2820483, Added the mandatory check
8628         -- country_code is mandatory field
8629         IF p_create_update_flag = 'C' THEN
8630             validate_mandatory (
8631                 p_create_update_flag                    => p_create_update_flag,
8632                 p_column                                => 'country_code',
8633                 p_column_value                          => p_citizenship_rec.country_code,
8634                 x_return_status                         => x_return_status);
8635 
8636             /*IF g_debug THEN
8637                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8638                     'country_code is mandatory field. ' ||
8639                     'x_return_status = ' || x_return_status, l_debug_prefix);
8640             END IF;
8641             */
8642             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8643                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8644                  p_message=>'country_code is mandatory field. ' ||
8645                     'x_return_status = ' || x_return_status,
8646                                   p_msg_level=>fnd_log.level_statement);
8647             END IF;
8648 
8649 
8650         END IF;
8651 
8652         -- country has foreign key fnd_territories.territory_code
8653         validate_country_code(
8654             p_column              => 'country_code',
8655             p_column_value        => p_citizenship_rec.country_code,
8656             x_return_status       => x_return_status);
8657 
8658         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
8659             hz_utility_v2pub.debug(
8660               p_prefix            => l_debug_prefix,
8661               p_message           => 'country_code should be in fnd_territories.territory_code. ' ||
8662                                      'x_return_status = ' || x_return_status,
8663               p_msg_level         => fnd_log.level_statement);
8664         END IF;
8665 
8666         -- 2820483, Added the following check also
8667         -- country_code cannot be set to null during update
8668         IF p_create_update_flag = 'U' THEN
8669             validate_cannot_update_to_null (
8670                 p_column                                => 'country_code',
8671                 p_column_value                          => p_citizenship_rec.country_code,
8672                 x_return_status                         => x_return_status);
8673         END IF;
8674 
8675 
8676         ------------------------
8677         -- validation for status
8678         ------------------------
8679 /****Logical APIs - validation not required****/
8680   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8681         -- status is lookup code in lookup type REGISTRY_STATUS
8682         IF p_citizenship_rec.status IS NOT NULL
8683            AND
8684            p_citizenship_rec.status <> fnd_api.g_miss_char
8685            AND
8686            (p_create_update_flag = 'C'
8687             OR
8688             (p_create_update_flag = 'U'
8689              AND
8690              p_citizenship_rec.status <> NVL(l_status, fnd_api.g_miss_char)
8691            )
8692           )
8693         THEN
8694             validate_lookup (
8695                 p_column                                => 'status',
8696                 p_lookup_type                           => 'REGISTRY_STATUS',
8697                 p_column_value                          => p_citizenship_rec.status,
8698                 x_return_status                         => x_return_status);
8699 
8700             /*IF g_debug THEN
8701                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8702                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8703                     'x_return_status = ' || x_return_status, l_debug_prefix);
8704             END IF;
8705             */
8706             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8707                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8708                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8709                     'x_return_status = ' || x_return_status,
8710                                   p_msg_level=>fnd_log.level_statement);
8711             END IF;
8712 
8713 
8714         END IF;
8715   END IF;
8716 
8717         -- status cannot be set to null during update
8718         IF p_create_update_flag = 'U' THEN
8719             validate_cannot_update_to_null (
8720                 p_column                                => 'status',
8721                 p_column_value                          => p_citizenship_rec.status,
8722                 x_return_status                         => x_return_status);
8723         END IF;
8724 
8725         --------------------------------------
8726         -- validate created_by_module
8727         --------------------------------------
8728 
8729         validate_created_by_module(
8730           p_create_update_flag     => p_create_update_flag,
8731           p_created_by_module      => p_citizenship_rec.created_by_module,
8732           p_old_created_by_module  => l_created_by_module,
8733           x_return_status          => x_return_status);
8734 
8735         --------------------------------------
8736         -- validate application_id
8737         --------------------------------------
8738 
8739         validate_application_id(
8740           p_create_update_flag     => p_create_update_flag,
8741           p_application_id         => p_citizenship_rec.application_id,
8742           p_old_application_id     => l_application_id,
8743           x_return_status          => x_return_status);
8744 
8745         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8746                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_citizenship (-)',
8747                                p_msg_level=>fnd_log.level_procedure);
8748         END IF;
8749 
8750   END validate_citizenship;
8751 
8752 
8753   /**
8754    * PROCEDURE validate_education
8755    *
8756    * DESCRIPTION
8757    *     Validates education record. Checks for
8758    *         uniqueness
8759    *         lookup types
8760    *         mandatory columns
8761    *         non-updateable fields
8762    *         foreign key validations
8763    *         other validations
8764    *
8765    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
8766    *
8767    * ARGUMENTS
8768    *   IN:
8769    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
8770    *     p_education_rec                Education record.
8771    *     p_rowid                        Rowid of the record (used only in update mode).
8772    *   IN/OUT:
8773    *     x_return_status                Return status after the call. The status can
8774    *                                    be FND_API.G_RET_STS_SUCCESS (success),
8775    *                                    fnd_api.g_ret_sts_error (error),
8776    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
8777    *
8778    * NOTES
8779    *
8780    * MODIFICATION HISTORY
8781    *
8782    *   31-Jan-2001    Porkodi C         o Created.
8783    *   11-Mar-2003    Porkodi C         o 2820602: Changed the error message, when wrong
8784    *                                      party_type has been passed to the user.
8785    *   07-Apr-2003    Porkodi C         o 2888486: On update mutual exclusivity between
8786    *                                      school_party_id and school_attended_name was not
8787    *                                      been maintained.
8788    *   09-Apr-2003    Porkodi C         o 2888399: validation for start_date_attended and last_date_attended
8789    *                                      has been modified
8790    *   17-Feb-2004    Rajib Ranjan B    o Bug 3425871.Type_of_school will be validated only
8791    *                                      if the column value changes.
8792    */
8793 
8794     PROCEDURE validate_education(
8795         p_create_update_flag                    IN      VARCHAR2,
8796         p_education_rec                         IN      HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE,
8797         p_rowid                                 IN      ROWID ,
8798         x_return_status                         IN OUT NOCOPY  VARCHAR2
8799    ) IS
8800 
8801         l_count                                          NUMBER;
8802         l_education_id                                   NUMBER;
8803         l_dummy                                          VARCHAR2(1);
8804         l_party_id                                       NUMBER := p_education_rec.party_id;
8805         l_created_by_module                              VARCHAR2(30);
8806         l_application_id                                 NUMBER;
8807         l_status                                         VARCHAR2(1);
8808         l_debug_prefix                                   VARCHAR2(30) := '';
8809         l_start_date_attended                            DATE;
8810         l_last_date_attended                             DATE;
8811         l_school_party_id                                NUMBER;
8812         l_school_attended_name                           VARCHAR2(60);
8813         -- Code modified for Bug 3473418 starts here
8814         l_type_of_school                                 VARCHAR2(30);
8815         -- Code modified for Bug 3473418 ends here
8816         temp_school_party_id                             NUMBER;
8817         temp_school_attended_name                        VARCHAR2(60);
8818         temp_start_date_attended                         DATE;
8819         temp_last_date_attended                          DATE;
8820 
8821         CURSOR education_cur (p_education_id IN NUMBER) IS
8822               SELECT 'Y'
8823               FROM   hz_education hc
8824         WHERE  hc.education_id = p_education_id;
8825 
8826     BEGIN
8827 
8828         --enable_debug;
8829 
8830         -- Debug info.
8831         /*IF g_debug THEN
8832             hz_utility_v2pub.debug ('validate_education (+)');
8833         END IF;
8834         */
8835         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8836                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_education (+)',
8837                                p_msg_level=>fnd_log.level_procedure);
8838         END IF;
8839 
8840 
8841         -- do the query to get old values for update
8842         IF p_create_update_flag = 'U'
8843         THEN
8844             SELECT EDUCATION_ID,
8845                    PARTY_ID,
8846                    START_DATE_ATTENDED,
8847                    LAST_DATE_ATTENDED,
8848                    STATUS,
8849                    CREATED_BY_MODULE,
8850                    APPLICATION_ID,
8851                    SCHOOL_PARTY_ID,
8852                    SCHOOL_ATTENDED_NAME,
8853                    TYPE_OF_SCHOOL
8854             INTO   l_education_id,
8855                    l_party_id,
8856                    l_start_date_attended,
8857                    l_last_date_attended,
8858                    l_status,
8859                    l_created_by_module,
8860                    l_application_id,
8861                    l_school_party_id,
8862                    l_school_attended_name,
8863                    l_type_of_school
8864             FROM   HZ_EDUCATION
8865             WHERE  ROWID = p_rowid;
8866         END IF;
8867 
8868 
8869         --------------------------------------
8870         -- validate education_id
8871         --------------------------------------
8872 /****Logical APIs - validation not required****/
8873   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8874         -- If primary key value is passed, check for uniqueness.
8875         -- If primary key value is not passed, it will be generated
8876         -- from sequence by table handler.
8877 
8878 
8879         IF p_create_update_flag = 'C' THEN
8880            IF p_education_rec.education_id IS NOT NULL AND
8881               p_education_rec.education_id <> fnd_api.g_miss_num
8882            THEN
8883               OPEN education_cur (p_education_rec.education_id);
8884               FETCH education_cur INTO l_dummy;
8885 
8886               -- key is not unique, push an error onto the stack.
8887               IF NVL(education_cur%FOUND, FALSE) THEN
8888                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
8889                  fnd_message.set_token('COLUMN', 'education_id');
8890                  fnd_msg_pub.add;
8891                  x_return_status := fnd_api.g_ret_sts_error;
8892               END IF;
8893               CLOSE education_cur;
8894 
8895               /*IF g_debug THEN
8896                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8897                     'check that education_id is unique during creation. ' ||
8898                     ' x_return_status = ' || x_return_status, l_debug_prefix);
8899               END IF;
8900               */
8901               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8902                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8903                  p_message=>'check that education_id is unique during creation. ' ||
8904                     ' x_return_status = ' || x_return_status,
8905                                   p_msg_level=>fnd_log.level_statement);
8906               END IF;
8907 
8908            END IF;
8909         END IF;
8910 
8911 
8912         -- education_id is non-updateable field
8913         IF p_create_update_flag = 'U' THEN
8914               validate_nonupdateable (
8915                   p_column                                => 'education_id',
8916                   p_column_value                          => p_education_rec.education_id,
8917                   p_old_column_value                      => l_education_id,
8918                   x_return_status                         => x_return_status);
8919 
8920               /*IF g_debug THEN
8921                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8922                     'education_id is non-updateable field. ' ||
8923                     'x_return_status = ' || x_return_status, l_debug_prefix);
8924               END IF;
8925               */
8926               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8927                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'education_id is non-updateable field. ' ||
8928                     'x_return_status = ' || x_return_status,
8929                                   p_msg_level=>fnd_log.level_statement);
8930               END IF;
8931 
8932         END IF;
8933 
8934         /*IF g_debug THEN
8935                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8936                 '(+) after validate education_id ... ' ||
8937                 'x_return_status = ' || x_return_status, l_debug_prefix);
8938         END IF;
8939         */
8940         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8941            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate education_id ... ' ||
8942                 'x_return_status = ' || x_return_status,
8943                                   p_msg_level=>fnd_log.level_statement);
8944         END IF;
8945   END IF;
8946 
8947         --------------------------
8948         -- validation for party_id
8949         --------------------------
8950 /****Logical APIs - validation not required****/
8951   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8952         -- party_id is mandatory field
8953         IF p_create_update_flag = 'C' THEN
8954             validate_mandatory (
8955                 p_create_update_flag                    => p_create_update_flag,
8956                 p_column                                => 'party_id',
8957                 p_column_value                          => p_education_rec.party_id,
8958                 x_return_status                         => x_return_status);
8959 
8960             /*IF g_debug THEN
8961                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8962                     'party_id is mandatory field. ' ||
8963                     'x_return_status = ' || x_return_status, l_debug_prefix);
8964             END IF;
8965             */
8966             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8967                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
8968                     'x_return_status = ' || x_return_status,
8969                                   p_msg_level=>fnd_log.level_statement);
8970             END IF;
8971 
8972 
8973         END IF;
8974 
8975         -- party_id is non-updateable field
8976         IF p_create_update_flag = 'U' THEN
8977             validate_nonupdateable (
8978                 p_column                                => 'party_id',
8979                 p_column_value                          => p_education_rec.party_id,
8980                 p_old_column_value                      => l_party_id,
8981                 x_return_status                         => x_return_status);
8982 
8983             /*IF g_debug THEN
8984                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8985                     'party_id is non-updateable field. ' ||
8986                     'x_return_status = ' || x_return_status, l_debug_prefix);
8987             END IF;
8988             */
8989             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8990                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
8991                     'x_return_status = ' || x_return_status,
8992                                   p_msg_level=>fnd_log.level_statement);
8993              END IF;
8994 
8995 
8996         END IF;
8997 
8998         -- 2820602, Changed message due to this bug.
8999         -- party_id has foreign key HZ_PARTIES.PARTY_ID
9000         IF p_create_update_flag = 'C'
9001            AND
9002            p_education_rec.party_id IS NOT NULL
9003            AND
9004            p_education_rec.party_id <> fnd_api.g_miss_num
9005         THEN
9006             BEGIN
9007                 SELECT 'Y'
9008                 INTO   l_dummy
9009                 FROM   hz_parties p
9010                 WHERE  p.party_id = p_education_rec.party_id and
9011                        party_type = 'PERSON';
9012 
9013             EXCEPTION
9014                 WHEN NO_DATA_FOUND THEN
9015                  fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_PERSON');
9016                     fnd_message.set_token('TABLE_NAME', 'HZ_EDUCATION');
9017                     fnd_message.set_token('PARTY_ID_COL', 'party_id');
9018                     fnd_msg_pub.add;
9019                     x_return_status := fnd_api.g_ret_sts_error;
9020             END;
9021 
9022             /*IF g_debug THEN
9023                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9024                     'party_id has foreign key hz_parties.party_id. ' ||
9025                     'x_return_status = ' || x_return_status, l_debug_prefix);
9026             END IF;
9027             */
9028             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9029                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
9030                     'x_return_status = ' || x_return_status,
9031                                   p_msg_level=>fnd_log.level_statement);
9032             END IF;
9033 
9034 
9035         END IF;
9036   END IF;
9037 
9038         ------------------------------------
9039         -- validation for last_date_attended
9040         ------------------------------------
9041 
9042         -- If start_date_attended and last_dated_attended are passed,
9043         -- then last_date_attended must be greater than or equal to
9044         -- start_date_attended.
9045 
9046 
9047 
9048         --2888399, For update check added more checks
9049 
9050         IF p_create_update_flag = 'U'    THEN
9051               IF p_education_rec.start_date_attended IS NOT NULL  then
9052                  temp_start_date_attended := p_education_rec.start_date_attended;
9053               ELSE
9054                  temp_start_date_attended := l_start_date_attended;
9055               END IF;
9056         ELSIF p_create_update_flag = 'C' THEN
9057               temp_start_date_attended := p_education_rec.start_date_attended;
9058         END IF;
9059 
9060         IF p_create_update_flag = 'U'    THEN
9061               IF p_education_rec.last_date_attended IS NOT NULL then
9062                  temp_last_date_attended := p_education_rec.last_date_attended;
9063               ELSE
9064                  temp_last_date_attended := l_last_date_attended;
9065               END IF;
9066         ELSIF p_create_update_flag = 'C' THEN
9067               temp_last_date_attended := p_education_rec.last_date_attended;
9068         END IF;
9069 
9070         IF (temp_start_date_attended IS NOT NULL AND
9071             temp_start_date_attended <> FND_API.G_MISS_DATE AND
9072             temp_last_date_attended IS NOT NULL AND
9073             temp_last_date_attended <> FND_API.G_MISS_DATE) THEN
9074 
9075             validate_start_end_date (
9076 
9077               p_create_update_flag                    => p_create_update_flag,
9078               p_start_date_column_name                => 'start_date_attended',
9079               p_start_date                            => p_education_rec.start_date_attended,
9080               p_old_start_date                        => l_start_date_attended,
9081               p_end_date_column_name                  => 'last_date_attended',
9082               p_end_date                              => p_education_rec.last_date_attended,
9083               p_old_end_date                          => l_last_date_attended,
9084               x_return_status                         => x_return_status
9085             );
9086 
9087             /*IF g_debug THEN
9088                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9089                  'check whether last_date_attended is greater then or equal to start_date_attended. ' ||
9090                  'x_return_status = ' || x_return_status, l_debug_prefix);
9091             END IF;
9092             */
9093             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9094                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9095                 p_message=>'check whether last_date_attended is greater then or equal to start_date_attended. ' ||
9096                  'x_return_status = ' || x_return_status,
9097                                   p_msg_level=>fnd_log.level_statement);
9098             END IF;
9099 
9100         END IF;
9101 
9102         /*IF g_debug THEN
9103            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9104            '(+) after validating the last_date_attended and start_date_attended... ' ||
9105            'x_return_status = ' || x_return_status, l_debug_prefix);
9106         END IF;
9107         */
9108         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9109            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9110            p_message=>'(+) after validating the last_date_attended and start_date_attended... ' ||
9111            'x_return_status = ' || x_return_status,
9112                                   p_msg_level=>fnd_log.level_statement);
9113         END IF;
9114 
9115 
9116 
9117         --------------------------------------
9118         -- validation for school_attended_name
9119         --------------------------------------
9120 
9121         -- If school_party_id is passed, school_attended_name
9122         -- should not be passed.
9123 
9124         --2888486, Added these checks for update
9125         IF p_create_update_flag = 'U'    THEN
9126               IF p_education_rec.school_party_id IS NOT NULL then
9127                  temp_school_party_id := p_education_rec.school_party_id;
9128               ELSE
9129                  temp_school_party_id := l_school_party_id;
9130               END IF;
9131         ELSIF p_create_update_flag = 'C' THEN
9132               temp_school_party_id := p_education_rec.school_party_id;
9133         END IF;
9134 
9135         IF p_create_update_flag = 'U'    THEN
9136               IF p_education_rec.school_attended_name IS NOT NULL  then
9137                  temp_school_attended_name := p_education_rec.school_attended_name;
9138               ELSE
9139                  temp_school_attended_name := l_school_attended_name;
9140               END IF;
9141         ELSIF p_create_update_flag = 'C' THEN
9142               temp_school_attended_name := p_education_rec.school_attended_name;
9143         END IF;
9144 
9145         IF temp_school_party_id is NOT NULL and
9146            temp_school_party_id <> fnd_api.g_miss_num and
9147            temp_school_attended_name is NOT NULL and
9148            temp_school_attended_name <> fnd_api.g_miss_char then
9149 
9150                  fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
9151                  fnd_message.set_token('COLUMN1', 'school_party_id');
9152                  fnd_message.set_token('COLUMN2', 'school_attended_name');
9153                  fnd_msg_pub.add;
9154                  x_return_status := fnd_api.g_ret_sts_error;
9155         END IF;
9156 
9157         /*IF g_debug THEN
9158                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9159                     'check that school_attended_name is empty when school_party_id isn t. '||
9160                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9161         END IF;
9162         */
9163         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9164            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9165            p_message=>'check that school_attended_name is empty when school_party_id isn t. '||
9166                     ' x_return_status = ' || x_return_status,
9167                                   p_msg_level=>fnd_log.level_statement);
9168         END IF;
9169 
9170 
9171         ---------------------------------
9172         -- validation for school_party_id
9173         ---------------------------------
9174 
9175 
9176         -- school_party_id must exist in HZ_PARTIES
9177         IF p_education_rec.school_party_id IS NOT NULL
9178            AND
9179            p_education_rec.school_party_id <> fnd_api.g_miss_num
9180         THEN
9181            BEGIN
9182                SELECT 'Y'
9183                INTO   l_dummy
9184                FROM   HZ_PARTIES
9185                WHERE  PARTY_ID = p_education_rec.school_party_id AND
9186                       PARTY_TYPE= 'ORGANIZATION';
9187 
9188            EXCEPTION
9189                WHEN NO_DATA_FOUND THEN
9190                     fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_ORG');
9191                     fnd_message.set_token('TABLE_NAME', 'HZ_EDUCATION');
9192                     fnd_message.set_token('PARTY_ID_COL', 'school_party_id');
9193                     fnd_msg_pub.add;
9194                     x_return_status := fnd_api.g_ret_sts_error;
9195            END;
9196 
9197            /*IF g_debug THEN
9198                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9199                   'school_party_id should be in hz_parties.party_id. ' ||
9200                   'x_return_status = ' || x_return_status, l_debug_prefix);
9201            END IF;
9202            */
9203            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9204                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9205                   p_message=>'school_party_id should be in hz_parties.party_id. ' ||
9206                   'x_return_status = ' || x_return_status,
9207                                   p_msg_level=>fnd_log.level_statement);
9208            END IF;
9209 
9210         END IF;
9211 
9212 
9213         ---------------------------------------
9214         -- validation for type_of_school
9215         ---------------------------------------
9216 
9217         -- type_of_school is a lookup code for lookup type HZ_TYPE_OF_SCHOOL
9218 
9219         -- Bug 3425871
9220         -- The validation will be called only if the value changes.
9221 
9222         IF p_education_rec.type_of_school IS NOT NULL
9223             AND
9224            p_education_rec.type_of_school <> fnd_api.g_miss_char
9225             AND
9226            (
9227             p_create_update_flag = 'C'
9228             OR
9229               (
9230                p_create_update_flag = 'U'
9231                AND
9232                p_education_rec.type_of_school <> l_type_of_school
9233               )
9234            )
9235         THEN
9236 
9237             validate_lookup (
9238                 p_column                                => 'type_of_school',
9239                 p_lookup_type                           => 'HZ_TYPE_OF_SCHOOL',
9240                 p_column_value                          => p_education_rec.type_of_school,
9241                 x_return_status                         => x_return_status);
9242 
9243 
9244             /*IF g_debug THEN
9245                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9246                     'type_of_school should be in lookup HZ_TYPE_OF_SCHOOL. ' ||
9247                     'x_return_status = ' || x_return_status, l_debug_prefix);
9248             END IF;
9249             */
9250             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9251                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9252                 p_message=>'type_of_school should be in lookup HZ_TYPE_OF_SCHOOL. ' ||
9253                            'x_return_status = ' || x_return_status,
9254                                    p_msg_level=>fnd_log.level_statement);
9255             END IF;
9256         END IF;
9257 
9258 
9259         ------------------------
9260         -- validation for status
9261         ------------------------
9262 /****Logical APIs - validation not required****/
9263   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9264         -- status is lookup code in lookup type REGISTRY_STATUS
9265         IF p_education_rec.status IS NOT NULL
9266            AND
9267            p_education_rec.status <> fnd_api.g_miss_char
9268            AND
9269            (p_create_update_flag = 'C'
9270             OR
9271             (p_create_update_flag = 'U'
9272              AND
9273              p_education_rec.status <> NVL(l_status, fnd_api.g_miss_char)
9274            )
9275           )
9276         THEN
9277             validate_lookup (
9278                 p_column                                => 'status',
9279                 p_lookup_type                           => 'REGISTRY_STATUS',
9280                 p_column_value                          => p_education_rec.status,
9281                 x_return_status                         => x_return_status);
9282 
9283             /*IF g_debug THEN
9284                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9285                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
9286                     'x_return_status = ' || x_return_status, l_debug_prefix);
9287             END IF;
9288             */
9289             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9290                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9291                   p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
9292                                         'x_return_status = ' || x_return_status,
9293                                   p_msg_level=>fnd_log.level_statement);
9294             END IF;
9295 
9296 
9297         END IF;
9298   END IF;
9299 
9300         -- status cannot be set to null during update
9301         IF p_create_update_flag = 'U' THEN
9302             validate_cannot_update_to_null (
9303                 p_column                                => 'status',
9304                 p_column_value                          => p_education_rec.status,
9305                 x_return_status                         => x_return_status);
9306         END IF;
9307 
9308 
9309         --------------------------------------
9310         -- validate created_by_module
9311         --------------------------------------
9312 
9313         validate_created_by_module(
9314           p_create_update_flag     => p_create_update_flag,
9315           p_created_by_module      => p_education_rec.created_by_module,
9316           p_old_created_by_module  => l_created_by_module,
9317           x_return_status          => x_return_status);
9318 
9319         --------------------------------------
9320         -- validate application_id
9321         --------------------------------------
9322 
9323         validate_application_id(
9324           p_create_update_flag     => p_create_update_flag,
9325           p_application_id         => p_education_rec.application_id,
9326           p_old_application_id     => l_application_id,
9327           x_return_status          => x_return_status);
9328 
9329        IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9330                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_education (-)',
9331                                p_msg_level=>fnd_log.level_procedure);
9332        END IF;
9333 
9334   END validate_education;
9335 
9336 
9337 /**
9338    * PROCEDURE validate_employment_history
9339    *
9340    * DESCRIPTION
9341    *     Validates employment_history record. Checks for
9342    *         uniqueness
9343    *         lookup types
9344    *         mandatory columns
9345    *         non-updateable fields
9346    *         foreign key validations
9347    *         other validations
9348    *
9349    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
9350    *
9351    * ARGUMENTS
9352    *   IN:
9353    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
9354    *     p_employment_history_rec       Employment_history record.
9355    *     p_rowid                        Rowid of the record (used only in update mode).
9356    *   IN/OUT:
9357    *     x_return_status                Return status after the call. The status can
9358    *                                    be FND_API.G_RET_STS_SUCCESS (success),
9359    *                                    fnd_api.g_ret_sts_error (error),
9360    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
9361    *
9362    * NOTES
9363    *
9364    * MODIFICATION HISTORY
9365    *
9366    *   31-Jan-2001    Porkodi C         o Created.
9367    *   11-Mar-2003    Porkodi C         o 2829037, Changed the code to update values for tenure_code and
9368    *                                      fraction_of_tenure, while the value for faculty_position_flag is
9369    *                                      is null.
9370    *   09-Apr-2003    Porkodi C         o 2890662, validation for begin_date and end_date combination has
9371    *                                      been modified.
9372    *   25-Oct-2005   Jayashree K        o 3848056  Validation for weekly hours to hold the value 0
9373    */
9374 
9375     PROCEDURE validate_employment_history(
9376         p_create_update_flag                    IN      VARCHAR2,
9377         p_employment_history_rec                IN      HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE,
9378         p_rowid                                 IN      ROWID ,
9379         x_return_status                         IN OUT NOCOPY  VARCHAR2
9380    ) IS
9381 
9382         l_count                                          NUMBER;
9383         l_employment_history_id                          NUMBER;
9384         l_dummy                                          VARCHAR2(1);
9385         l_party_id                                       NUMBER := p_employment_history_rec.party_id;
9386         l_created_by_module                              VARCHAR2(150);
9387         l_application_id                                 NUMBER;
9388         l_status                                         VARCHAR2(1);
9389         l_debug_prefix                                   VARCHAR2(30) := '';
9390         l_begin_date                                     DATE;
9391         l_end_date                                       DATE;
9392         l_faculty_position_flag                          VARCHAR2(1);
9393         l_employed_by_party_id                           NUMBER;
9394         l_employed_by_name_company                       VARCHAR2(60);
9395         l_employed_as_title_code                         VARCHAR2(30);
9396         l_employed_as_title                              VARCHAR2(60);
9397         temp_faculty_position_flag                       VARCHAR2(1);
9398         temp_begin_date                                  DATE;
9399         temp_end_date                                    DATE;
9400         temp_employed_by_party_id                        NUMBER;
9401         temp_employed_by_name_company                    VARCHAR2(60);
9402         temp_employed_as_title_code                      VARCHAR2(30);
9403         temp_employed_as_title                           VARCHAR2(60);
9404 
9405         CURSOR employment_history_cur (p_employment_history_id IN NUMBER) IS
9406               SELECT 'Y'
9407               FROM   hz_employment_history hc
9408         WHERE  hc.employment_history_id = p_employment_history_id;
9409 
9410     BEGIN
9411 
9412         --enable_debug;
9413 
9414         -- Debug info.
9415         /*IF g_debug THEN
9416             hz_utility_v2pub.debug ('validate_employment_history (+)');
9417         END IF;
9418         */
9419         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9420                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_employment_history (+)',
9421                                p_msg_level=>fnd_log.level_procedure);
9422         END IF;
9423 
9424         -- do the query to get old values for update
9425         IF p_create_update_flag = 'U'
9426         THEN
9427             SELECT EMPLOYMENT_HISTORY_ID,
9428                    PARTY_ID,
9429                    BEGIN_DATE,
9430                    END_DATE,
9431                    FACULTY_POSITION_FLAG,
9432                    EMPLOYED_BY_PARTY_ID,
9433                    EMPLOYED_BY_NAME_COMPANY,
9434                    EMPLOYED_AS_TITLE_CODE,
9435                    EMPLOYED_AS_TITLE,
9436                    STATUS,
9437                    CREATED_BY_MODULE,
9438                    APPLICATION_ID
9439             INTO   l_employment_history_id,
9440                    l_party_id,
9441                    l_begin_date,
9442                    l_end_date,
9443                    l_faculty_position_flag,
9444                    l_employed_by_party_id,
9445                    l_employed_by_name_company,
9446                    l_employed_as_title_code,
9447                    l_employed_as_title,
9448                    l_status,
9449                    l_created_by_module,
9450                    l_application_id
9451             FROM   HZ_EMPLOYMENT_HISTORY
9452             WHERE  ROWID = p_rowid;
9453         END IF;
9454 
9455 
9456         --------------------------------------
9457         -- validate employment_history_id
9458         --------------------------------------
9459 /****Logical APIs - validation not required****/
9460   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9461         -- If primary key value is passed, check for uniqueness.
9462         -- If primary key value is not passed, it will be generated
9463         -- from sequence by table handler.
9464 
9465 
9466         IF p_create_update_flag = 'C' THEN
9467            IF p_employment_history_rec.employment_history_id IS NOT NULL AND
9468               p_employment_history_rec.employment_history_id <> fnd_api.g_miss_num
9469            THEN
9470               OPEN employment_history_cur (p_employment_history_rec.employment_history_id);
9471               FETCH employment_history_cur INTO l_dummy;
9472 
9473               -- key is not unique, push an error onto the stack.
9474               IF NVL(employment_history_cur%FOUND, FALSE) THEN
9475                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
9476                  fnd_message.set_token('COLUMN', 'employment_history_id');
9477                  fnd_msg_pub.add;
9478                  x_return_status := fnd_api.g_ret_sts_error;
9479               END IF;
9480               CLOSE employment_history_cur;
9481 
9482               /*IF g_debug THEN
9483                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9484                     'check that employment_history_id is unique during creation. ' ||
9485                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9486               END IF;
9487               */
9488               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9489                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9490                 p_message=>'check that employment_history_id is unique during creation. ' ||
9491                         ' x_return_status = ' || x_return_status,
9492                                   p_msg_level=>fnd_log.level_statement);
9493               END IF;
9494 
9495            END IF;
9496         END IF;
9497 
9498 
9499         -- employment_history_id is non-updateable field
9500         IF p_create_update_flag = 'U' THEN
9501               validate_nonupdateable (
9502                   p_column                                => 'employment_history_id',
9503                   p_column_value                          => p_employment_history_rec.employment_history_id,
9504                   p_old_column_value                      => l_employment_history_id,
9505                   x_return_status                         => x_return_status);
9506 
9507               /*IF g_debug THEN
9508                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9509                     'employment_history_id is non-updateable field. ' ||
9510                     'x_return_status = ' || x_return_status, l_debug_prefix);
9511               END IF;
9512               */
9513               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9514                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9515                   p_message=>'employment_history_id is non-updateable field. ' ||
9516                         'x_return_status = ' || x_return_status,
9517                                   p_msg_level=>fnd_log.level_statement);
9518                END IF;
9519 
9520         END IF;
9521 
9522         /*IF g_debug THEN
9523                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9524                 '(+) after validation of employment_history_id ... ' ||
9525                 'x_return_status = ' || x_return_status, l_debug_prefix);
9526         END IF;
9527         */
9528         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9529            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9530            p_message=>'(+) after validation of employment_history_id ... ' ||
9531                 'x_return_status = ' || x_return_status,
9532                                   p_msg_level=>fnd_log.level_statement);
9533         END IF;
9534   END IF;
9535 
9536         --------------------------
9537         -- validation for party_id
9538         --------------------------
9539 /****Logical APIs - validation not required****/
9540   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9541         -- party_id is mandatory field
9542         IF p_create_update_flag = 'C' THEN
9543             validate_mandatory (
9544                 p_create_update_flag                    => p_create_update_flag,
9545                 p_column                                => 'party_id',
9546                 p_column_value                          => p_employment_history_rec.party_id,
9547                 x_return_status                         => x_return_status);
9548 
9549             /*IF g_debug THEN
9550                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9551                     'party_id is mandatory field. ' ||
9552                     'x_return_status = ' || x_return_status, l_debug_prefix);
9553             END IF;
9554             */
9555             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9556                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
9557                     'x_return_status = ' || x_return_status,
9558                                   p_msg_level=>fnd_log.level_statement);
9559              END IF;
9560 
9561 
9562         END IF;
9563 
9564         -- party_id is non-updateable field
9565         IF p_create_update_flag = 'U' THEN
9566             validate_nonupdateable (
9567                 p_column                                => 'party_id',
9568                 p_column_value                          => p_employment_history_rec.party_id,
9569                 p_old_column_value                      => l_party_id,
9570                 x_return_status                         => x_return_status);
9571 
9572             /*IF g_debug THEN
9573                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9574                     'party_id is non-updateable field. ' ||
9575                     'x_return_status = ' || x_return_status, l_debug_prefix);
9576             END IF;
9577             */
9578             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9579                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
9580                     'x_return_status = ' || x_return_status,
9581                                   p_msg_level=>fnd_log.level_statement);
9582             END IF;
9583 
9584 
9585         END IF;
9586 
9587         -- party_id has foreign key HZ_PARTIES.PARTY_ID
9588         IF p_create_update_flag = 'C'
9589            AND
9590            p_employment_history_rec.party_id IS NOT NULL
9591            AND
9592            p_employment_history_rec.party_id <> fnd_api.g_miss_num
9593         THEN
9594             BEGIN
9595                 SELECT 'Y'
9596                 INTO   l_dummy
9597                 FROM   hz_parties p
9598                 WHERE  p.party_id = p_employment_history_rec.party_id and
9599                        party_type = 'PERSON';
9600 
9601             EXCEPTION
9602                 WHEN NO_DATA_FOUND THEN
9603                     fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_PERSON');
9604                     fnd_message.set_token('TABLE_NAME', 'HZ_EMPLOYMENT_HISTORY');
9605                     fnd_message.set_token('PARTY_ID_COL', 'party_id');
9606                     fnd_msg_pub.add;
9607                     x_return_status := fnd_api.g_ret_sts_error;
9608             END;
9609 
9610             /*IF g_debug THEN
9611                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9612                     'party_id has foreign key hz_parties.party_id. ' ||
9613                     'x_return_status = ' || x_return_status, l_debug_prefix);
9614             END IF;
9615             */
9616             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9617                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
9618                     'x_return_status = ' || x_return_status,
9619                                   p_msg_level=>fnd_log.level_statement);
9620             END IF;
9621 
9622 
9623         END IF;
9624   END IF;
9625 
9626         ------------------------------------
9627         -- validation for end_date
9628         ------------------------------------
9629 
9630         -- If begin_date and end_date are passed, then end_date must be
9631         -- greater than or equal to begin_date.
9632 
9633 
9634 
9635         --2890662, Added more if conditions
9636 
9637         IF p_create_update_flag = 'U'    THEN
9638               IF p_employment_history_rec.begin_date IS NOT NULL  then
9639                  temp_begin_date := p_employment_history_rec.begin_date;
9640               ELSE
9641                  temp_begin_date := l_begin_date;
9642               END IF;
9643         ELSIF p_create_update_flag = 'C' THEN
9644               temp_begin_date := p_employment_history_rec.begin_date;
9645         END IF;
9646 
9647         IF p_create_update_flag = 'U'    THEN
9648               IF p_employment_history_rec.end_date IS NOT NULL then
9649                  temp_end_date := p_employment_history_rec.end_date;
9650               ELSE
9651                  temp_end_date := l_end_date;
9652               END IF;
9653         ELSIF p_create_update_flag = 'C' THEN
9654               temp_end_date := p_employment_history_rec.end_date;
9655         END IF;
9656 
9657         IF (temp_begin_date IS NOT NULL AND
9658             temp_begin_date <> FND_API.G_MISS_DATE AND
9659             temp_end_date IS NOT NULL AND
9660             temp_end_date <> FND_API.G_MISS_DATE) THEN
9661 
9662             validate_start_end_date (
9663 
9664               p_create_update_flag                    => p_create_update_flag,
9665               p_start_date_column_name                => 'begin_date',
9666               p_start_date                            => p_employment_history_rec.begin_date,
9667               p_old_start_date                        => l_begin_date,
9668               p_end_date_column_name                  => 'end_date',
9669               p_end_date                              => p_employment_history_rec.end_date,
9670               p_old_end_date                          => l_end_date,
9671               x_return_status                         => x_return_status
9672             );
9673 
9674             /*IF g_debug THEN
9675                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9676                  'check whether end_date is greater than or equal to begin_date. ' ||
9677                  'x_return_status = ' || x_return_status, l_debug_prefix);
9678             END IF;
9679             */
9680             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9681                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9682                 p_message=>'check whether end_date is greater than or equal to begin_date. ' ||
9683                  'x_return_status = ' || x_return_status,
9684                                   p_msg_level=>fnd_log.level_statement);
9685             END IF;
9686 
9687         END IF;
9688 
9689         /*IF g_debug THEN
9690            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9691            '(+) after validating the begin_date and end_date... ' ||
9692            'x_return_status = ' || x_return_status, l_debug_prefix);
9693         END IF;
9694         */
9695         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9696            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9697            p_message=>'(+) after validating the begin_date and end_date... ' ||
9698            'x_return_status = ' || x_return_status,
9699                                   p_msg_level=>fnd_log.level_statement);
9700         END IF;
9701 
9702 
9703 
9704         ---------------------------------------
9705         -- validation for employment_type_code
9706         ---------------------------------------
9707 
9708         -- employment_type_code is validated against lookup type HZ_EMPLOYMENT_TYPE
9709         validate_lookup (
9710             p_column                                => 'employment_type_code',
9711             p_lookup_type                           => 'HZ_EMPLOYMENT_TYPE',
9712             p_column_value                          => p_employment_history_rec.employment_type_code,
9713             x_return_status                         => x_return_status);
9714 
9715 
9716         /*IF g_debug THEN
9717             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9718                 'employment_type_code should be in lookup HZ_EMPLOYMENT_TYPE. ' ||
9719                 'x_return_status = ' || x_return_status, l_debug_prefix);
9720         END IF;
9721         */
9722         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9723            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9724            p_message=>'employment_type_code should be in lookup HZ_EMPLOYMENT_TYPE. ' ||
9725                 'x_return_status = ' || x_return_status,
9726                                   p_msg_level=>fnd_log.level_statement);
9727         END IF;
9728 
9729 
9730 
9731         ----------------------------------------
9732         -- validation for employed_as_title_code
9733         ----------------------------------------
9734 
9735         -- employed_as_title_code is validated against lookup type RESPONSIBILITY
9736         validate_lookup (
9737             p_column                                => 'employed_as_title_code',
9738             p_lookup_type                           => 'RESPONSIBILITY',
9739             p_column_value                          => p_employment_history_rec.employed_as_title_code,
9740             x_return_status                         => x_return_status);
9741 
9742 
9743         /*IF g_debug THEN
9744             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9745                 'employed_as_title_code should be in lookup RESPONSIBILITY. ' ||
9746                 'x_return_status = ' || x_return_status, l_debug_prefix);
9747         END IF;
9748         */
9749         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9750            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9751            p_message=>'employed_as_title_code should be in lookup RESPONSIBILITY. ' ||
9752                 'x_return_status = ' || x_return_status,
9753                                   p_msg_level=>fnd_log.level_statement);
9754         END IF;
9755 
9756 
9757 
9758         ------------------------------------
9759         -- validation for employed_as_title
9760         ------------------------------------
9761 
9762         -- If employed_as_title_code is passed, employed_as_title
9763         -- should be null.
9764 
9765         IF p_create_update_flag = 'U'    THEN
9766               IF p_employment_history_rec.employed_as_title_code IS NOT NULL  then
9767                  temp_employed_as_title_code := p_employment_history_rec.employed_as_title_code;
9768               ELSE
9769                  temp_employed_as_title_code := l_employed_as_title_code;
9770               END IF;
9771         ELSIF p_create_update_flag = 'C' THEN
9772               temp_employed_as_title_code := p_employment_history_rec.employed_as_title_code;
9773         END IF;
9774 
9775 
9776         IF p_create_update_flag = 'U'    THEN
9777               IF p_employment_history_rec.employed_as_title IS NOT NULL  then
9778                  temp_employed_as_title := p_employment_history_rec.employed_as_title;
9779               ELSE
9780                  temp_employed_as_title := l_employed_as_title;
9781               END IF;
9782         ELSIF p_create_update_flag = 'C' THEN
9783               temp_employed_as_title := p_employment_history_rec.employed_as_title;
9784         END IF;
9785 
9786 
9787         IF (temp_employed_as_title_code IS NOT NULL and
9788             temp_employed_as_title_code <> FND_API.G_MISS_CHAR AND
9789             temp_employed_as_title IS NOT NULL AND
9790             temp_employed_as_title <> FND_API.G_MISS_CHAR) THEN
9791 
9792                  fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
9793                  fnd_message.set_token('COLUMN1', 'employed_as_title');
9794                  fnd_message.set_token('COLUMN2', 'employed_as_title_code');
9795                  fnd_msg_pub.add;
9796                  x_return_status := fnd_api.g_ret_sts_error;
9797 
9798               /*IF g_debug THEN
9799                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9800                     'check that employed_as_title is empty when employed_as_title_code isn t. '||
9801                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9802               END IF;
9803               */
9804               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9805                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9806                 p_message=>'check that employed_as_title is empty when employed_as_title_code isn t. '||
9807                     ' x_return_status = ' || x_return_status,
9808                                   p_msg_level=>fnd_log.level_statement);
9809               END IF;
9810 
9811         END IF;
9812 
9813 
9814         /*IF g_debug THEN
9815         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9816         '(+) after validating employed_as_title ... ' ||
9817         'x_return_status = ' || x_return_status, l_debug_prefix);
9818         END IF;
9819         */
9820         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9821            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9822            p_message=>'(+) after validating employed_as_title ... ' ||
9823                         'x_return_status = ' || x_return_status,
9824                                   p_msg_level=>fnd_log.level_statement);
9825         END IF;
9826 
9827 
9828 
9829         --------------------------------------
9830         -- validation for employed_by_party_id
9831         --------------------------------------
9832 
9833 
9834         -- employed_by_party_id must exist in HZ_PARTIES
9835         IF p_employment_history_rec.employed_by_party_id IS NOT NULL
9836            AND
9837            p_employment_history_rec.employed_by_party_id <> fnd_api.g_miss_num
9838         THEN
9839            BEGIN
9840                SELECT 'Y'
9841                INTO   l_dummy
9842                FROM   HZ_PARTIES
9843                WHERE  PARTY_ID = p_employment_history_rec.employed_by_party_id;
9844 
9845            EXCEPTION
9846                WHEN NO_DATA_FOUND THEN
9847                     fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
9848                     fnd_message.set_token('FK', 'employed_by_party_id');
9849                     fnd_message.set_token('COLUMN', 'party_id');
9850                     fnd_message.set_token('TABLE', 'hz_parties');
9851                     fnd_msg_pub.add;
9852                     x_return_status := fnd_api.g_ret_sts_error;
9853            END;
9854 
9855            /*IF g_debug THEN
9856                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9857                   'employed_by_party_id should be in hz_parties.party_id. ' ||
9858                   'x_return_status = ' || x_return_status, l_debug_prefix);
9859            END IF;
9860            */
9861            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9862                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9863                  p_message=>'employed_by_party_id should be in hz_parties.party_id. ' ||
9864                   'x_return_status = ' || x_return_status,
9865                                   p_msg_level=>fnd_log.level_statement);
9866           END IF;
9867 
9868         END IF;
9869 
9870 
9871         ------------------------------------------
9872         -- validation for employed_by_name_company
9873         ------------------------------------------
9874 
9875         -- If employed_by_party_id is passed, employed_by_name_company
9876         -- should be null.
9877 
9878         IF p_create_update_flag = 'U'    THEN
9879               IF p_employment_history_rec.employed_by_party_id IS NOT NULL  then
9880                  temp_employed_by_party_id := p_employment_history_rec.employed_by_party_id;
9881               ELSE
9882                  temp_employed_by_party_id := l_employed_by_party_id;
9883               END IF;
9884         ELSIF p_create_update_flag = 'C' THEN
9885               temp_employed_by_party_id := p_employment_history_rec.employed_by_party_id;
9886         END IF;
9887 
9888 
9889         IF p_create_update_flag = 'U'    THEN
9890               IF p_employment_history_rec.employed_by_name_company IS NOT NULL  then
9891                  temp_employed_by_name_company := p_employment_history_rec.employed_by_name_company;
9892               ELSE
9893                  temp_employed_by_name_company := l_employed_by_name_company;
9894               END IF;
9895         ELSIF p_create_update_flag = 'C' THEN
9896               temp_employed_by_name_company := p_employment_history_rec.employed_by_name_company;
9897         END IF;
9898 
9899 
9900         IF (temp_employed_by_party_id IS NOT NULL and
9901             temp_employed_by_party_id <> FND_API.G_MISS_NUM AND
9902             temp_employed_by_name_company IS NOT NULL AND
9903             temp_employed_by_name_company <> FND_API.G_MISS_CHAR) THEN
9904 
9905                  fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
9906                  fnd_message.set_token('COLUMN1', 'employed_by_name_company');
9907                  fnd_message.set_token('COLUMN2', 'employed_by_party_id');
9908                  fnd_msg_pub.add;
9909                  x_return_status := fnd_api.g_ret_sts_error;
9910 
9911               /*IF g_debug THEN
9912                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9913                     'check that employed_by_name_company is empty when employed_by_party_id isn t. ' ||
9914                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9915               END IF;
9916               */
9917               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9918                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9919                 p_message=>'check that employed_by_name_company is empty when employed_by_party_id isn t. ' ||
9920                     ' x_return_status = ' || x_return_status,
9921                                   p_msg_level=>fnd_log.level_statement);
9922               END IF;
9923 
9924         END IF;
9925 
9926 
9927         /*IF g_debug THEN
9928         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9929         '(+) after validating employed_by_name_company ... ' ||
9930         'x_return_status = ' || x_return_status, l_debug_prefix);
9931         END IF;
9932         */
9933         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9934            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9935            p_message=>'(+) after validating employed_by_name_company ... ' ||
9936                                         'x_return_status = ' || x_return_status,
9937                                   p_msg_level=>fnd_log.level_statement);
9938         END IF;
9939 
9940 
9941 
9942         --------------------------------------
9943         -- validation for weekly_work_hours
9944         --------------------------------------
9945         -- 3848056 Changed the condition for the Weekly Hours to hold the value 0
9946 
9947         -- If weekly_work_hours is passed, must be greater than or equal to  zero
9948         -- and less than or equal to 168.
9949 
9950         IF p_employment_history_rec.weekly_work_hours IS NOT NULL AND
9951               p_employment_history_rec.weekly_work_hours <> fnd_api.g_miss_num
9952            THEN
9953 
9954               IF p_employment_history_rec.weekly_work_hours < 0  OR
9955                  p_employment_history_rec.weekly_work_hours > 168  THEN
9956 
9957                  fnd_message.set_name('AR', 'HZ_API_VALUE_BETWEEN');
9958                  fnd_message.set_token('COLUMN', 'weekly_work_hours');
9959                  --  Bug 4226199 : This should be changed for bug 3848056
9960                  fnd_message.set_token('VALUE1', '0');
9961                  fnd_message.set_token('VALUE2', '168');
9962                  fnd_msg_pub.add;
9963                  x_return_status := fnd_api.g_ret_sts_error;
9964               END IF;
9965 
9966               /*IF g_debug THEN
9967                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9968                     'check that weekly_work_hours is 1 to 168 value range. ' ||
9969                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9970               END IF;
9971               */
9972               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9973                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9974                  p_message=>'check that weekly_work_hours is 1 to 168 value range. ' ||
9975                          ' x_return_status = ' || x_return_status,
9976                                   p_msg_level=>fnd_log.level_statement);
9977                END IF;
9978 
9979         END IF;
9980 
9981 
9982         /*IF g_debug THEN
9983         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9984         '(+) after validating weekly_work_hours ... ' ||
9985         'x_return_status = ' || x_return_status, l_debug_prefix);
9986         END IF;
9987         */
9988         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9989            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9990            p_message=>'(+) after validating weekly_work_hours ... ' ||
9991                                                 'x_return_status = ' || x_return_status,
9992                                   p_msg_level=>fnd_log.level_statement);
9993         END IF;
9994 
9995 
9996 
9997         ---------------------------------------
9998         -- validation for faculty_position_flag
9999         ---------------------------------------
10000 
10001         -- faculty_position_flag is mandatory field
10002 
10003         validate_mandatory (
10004             p_create_update_flag                    => p_create_update_flag,
10005             p_column                                => 'faculty_position_flag',
10006             p_column_value                          => p_employment_history_rec.faculty_position_flag,
10007             x_return_status                         => x_return_status);
10008 
10009         /*IF g_debug THEN
10010            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10011               'faculty_position_flag is mandatory field. ' ||
10012               'x_return_status = ' || x_return_status, l_debug_prefix);
10013         END IF;
10014         */
10015         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10016            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'faculty_position_flag is mandatory field. ' ||
10017                                                 'x_return_status = ' || x_return_status,
10018                                   p_msg_level=>fnd_log.level_statement);
10019         END IF;
10020 
10021 
10022 
10023         -- faculty_position_flag is validated against lookup type YES/NO
10024         validate_lookup (
10025             p_column                                => 'faculty_position_flag',
10026             p_lookup_type                           => 'YES/NO',
10027             p_column_value                          => p_employment_history_rec.faculty_position_flag,
10028             x_return_status                         => x_return_status);
10029 
10030 
10031         /*IF g_debug THEN
10032             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10033                 'faculty_position_flag should be in lookup YES/NO. ' ||
10034                 'x_return_status = ' || x_return_status, l_debug_prefix);
10035         END IF;
10036         */
10037         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10038            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'faculty_position_flag should be in lookup YES/NO. ' ||
10039                         'x_return_status = ' || x_return_status,
10040                                   p_msg_level=>fnd_log.level_statement);
10041          END IF;
10042 
10043 
10044 
10045         --------------------------------
10046         -- validation for tenure_code
10047         --------------------------------
10048 
10049         -- If tenure_code is passed, faculty_position_flag
10050         -- should be Y.
10051 
10052         --2829037 added few more checks due to this bug.
10053         IF p_create_update_flag = 'U'    THEN
10054               IF p_employment_history_rec.faculty_position_flag IS NOT NULL  then
10055                  temp_faculty_position_flag := p_employment_history_rec.faculty_position_flag;
10056               ELSE
10057                  temp_faculty_position_flag := l_faculty_position_flag;
10058               END IF;
10059         ELSIF p_create_update_flag = 'C' THEN
10060               temp_faculty_position_flag := p_employment_history_rec.faculty_position_flag;
10061         END IF;
10062 
10063         IF p_employment_history_rec.tenure_code IS NOT NULL AND
10064            p_employment_history_rec.tenure_code <> fnd_api.g_miss_char then
10065 
10066            IF temp_faculty_position_flag = 'Y' THEN
10067 
10068                  validate_lookup (
10069                      p_column                                => 'tenure_code',
10070                      p_lookup_type                           => 'HZ_TENURE_CODE',
10071                      p_column_value                          => p_employment_history_rec.tenure_code,
10072                      x_return_status                         => x_return_status);
10073 
10074 
10075               /*IF g_debug THEN
10076                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10077                     'tenure_code should be in lookup HZ_TENURE_CODE. ' ||
10078                     ' x_return_status = ' || x_return_status, l_debug_prefix);
10079               END IF;
10080               */
10081               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10082                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10083                  p_message=>'tenure_code should be in lookup HZ_TENURE_CODE. ' ||
10084                          ' x_return_status = ' || x_return_status,
10085                                   p_msg_level=>fnd_log.level_statement);
10086               END IF;
10087 
10088            ELSE
10089                  fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
10090                  fnd_message.set_token('COLUMN1', 'faculty_position_flag');
10091                  fnd_message.set_token('COLUMN2', 'tenure_code');
10092                  fnd_message.set_token('VALUE1', 'N');
10093                  fnd_message.set_token('VALUE2', 'null');
10094                  fnd_msg_pub.add;
10095                  x_return_status := fnd_api.g_ret_sts_error;
10096 
10097             END IF;
10098 
10099         /*IF g_debug THEN
10100         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10101         '(+) after validating tenure_code ... ' ||
10102         'x_return_status = ' || x_return_status, l_debug_prefix);
10103         END IF;
10104         */
10105         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10106            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validating tenure_code ... ' ||
10107                         'x_return_status = ' || x_return_status,
10108                                   p_msg_level=>fnd_log.level_statement);
10109          END IF;
10110 
10111         END IF;
10112 
10113         ------------------------------------
10114         -- validation for fraction_of_tenure
10115         ------------------------------------
10116 
10117         -- If fraction_of_tenure is passed, faculty_position_flag
10118         -- should be Y.
10119 
10120         IF p_employment_history_rec.fraction_of_tenure IS NOT NULL AND
10121                  p_employment_history_rec.fraction_of_tenure <> fnd_api.g_miss_num  then
10122                    IF temp_faculty_position_flag = 'Y' then
10123                  IF p_employment_history_rec.fraction_of_tenure < 0  OR
10124                     p_employment_history_rec.fraction_of_tenure > 100  THEN
10125 
10126                     fnd_message.set_name('AR', 'HZ_API_VALUE_BETWEEN');
10127                     fnd_message.set_token('COLUMN', 'fraction_of_tenure');
10128                     fnd_message.set_token('VALUE1', '0');
10129                     fnd_message.set_token('VALUE2', '100');
10130                     fnd_msg_pub.add;
10131                     x_return_status := fnd_api.g_ret_sts_error;
10132                  END IF;
10133 
10134                  /*IF g_debug THEN
10135                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10136                        'check that fraction_of_tenure is 0 to 100 value range. ' ||
10137                       ' x_return_status = ' || x_return_status, l_debug_prefix);
10138                  END IF;
10139                  */
10140                  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10141                          hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10142                          p_message=>'check that fraction_of_tenure is 0 to 100 value range. ' ||
10143                                 ' x_return_status = ' || x_return_status,
10144                                   p_msg_level=>fnd_log.level_statement);
10145                  END IF;
10146 
10147          ELSE
10148                  fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
10149                  fnd_message.set_token('COLUMN1', 'faculty_position_flag');
10150                  fnd_message.set_token('COLUMN2', 'fraction_of_tenure');
10151                  fnd_message.set_token('VALUE1', 'N');
10152                  fnd_message.set_token('VALUE2', 'null');
10153 
10154                  fnd_message.set_token('COLUMN', 'fraction_of_tenure');
10155                  fnd_msg_pub.add;
10156                  x_return_status := fnd_api.g_ret_sts_error;
10157               END IF;
10158 
10159         END IF;
10160 
10161         /*IF g_debug THEN
10162         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10163         '(+) after validating fraction_of_tenure ... ' ||
10164         'x_return_status = ' || x_return_status, l_debug_prefix);
10165         END IF;
10166         */
10167         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10168            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validating fraction_of_tenure ... ' ||
10169                                         'x_return_status = ' || x_return_status,
10170                                   p_msg_level=>fnd_log.level_statement);
10171          END IF;
10172 
10173 
10174 
10175         ------------------------
10176         -- validation for status
10177         ------------------------
10178 /****Logical APIs - validation not required****/
10179   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10180         -- status is lookup code in lookup type REGISTRY_STATUS
10181         IF p_employment_history_rec.status IS NOT NULL
10182            AND
10183            p_employment_history_rec.status <> fnd_api.g_miss_char
10184            AND
10185            (p_create_update_flag = 'C'
10186             OR
10187             (p_create_update_flag = 'U'
10188              AND
10189              p_employment_history_rec.status <> NVL(l_status, fnd_api.g_miss_char)
10190            )
10191           )
10192         THEN
10193             validate_lookup (
10194                 p_column                                => 'status',
10195                 p_lookup_type                           => 'REGISTRY_STATUS',
10196                 p_column_value                          => p_employment_history_rec.status,
10197                 x_return_status                         => x_return_status);
10198 
10199             /*IF g_debug THEN
10200                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10201                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10202                     'x_return_status = ' || x_return_status, l_debug_prefix);
10203             END IF;
10204             */
10205             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10206                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10207                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10208                     'x_return_status = ' || x_return_status,
10209                                   p_msg_level=>fnd_log.level_statement);
10210              END IF;
10211 
10212 
10213         END IF;
10214   END IF;
10215 
10216         -- status cannot be set to null during update
10217         IF p_create_update_flag = 'U' THEN
10218             validate_cannot_update_to_null (
10219                 p_column                                => 'status',
10220                 p_column_value                          => p_employment_history_rec.status,
10221                 x_return_status                         => x_return_status);
10222         END IF;
10223 
10224 
10225         --------------------------------------
10226         -- validate created_by_module
10227         --------------------------------------
10228 
10229         validate_created_by_module(
10230           p_create_update_flag     => p_create_update_flag,
10231           p_created_by_module      => p_employment_history_rec.created_by_module,
10232           p_old_created_by_module  => l_created_by_module,
10233           x_return_status          => x_return_status);
10234 
10235         --------------------------------------
10236         -- validate application_id
10237         --------------------------------------
10238 
10239         validate_application_id(
10240           p_create_update_flag     => p_create_update_flag,
10241           p_application_id         => p_employment_history_rec.application_id,
10242           p_old_application_id     => l_application_id,
10243           x_return_status          => x_return_status);
10244 
10245         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10246                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_employment_history (-)',
10247                                p_msg_level=>fnd_log.level_procedure);
10248         END IF;
10249 
10250   END validate_employment_history;
10251 
10252 
10253 /**
10254    * PROCEDURE validate_work_class
10255    *
10256    * DESCRIPTION
10257    *     Validates work_class record. Checks for
10258    *         uniqueness
10259    *         mandatory columns
10260    *         non-updateable fields
10261    *         foreign key validations
10262    *
10263    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10264    *
10265    * ARGUMENTS
10266    *   IN:
10267    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
10268    *     p_work_class_rec               Work_class record.
10269    *     p_rowid                        Rowid of the record (used only in update mode).
10270    *   IN/OUT:
10271    *     x_return_status                Return status after the call. The status can
10272    *                                    be FND_API.G_RET_STS_SUCCESS (success),
10273    *                                    fnd_api.g_ret_sts_error (error),
10274    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10275    *
10276    * NOTES
10277    *
10278    * MODIFICATION HISTORY
10279    *
10280    *   02-Feb-2003    Porkodi C         o Created.
10281    *   10-Mar-2003    Porkodi C           Bug 2829041, Corrected the validation for employment_history_id
10282    *                                      to be a foreign key from hz_employment_history.
10283    *
10284    */
10285 
10286     PROCEDURE validate_work_class(
10287         p_create_update_flag                    IN      VARCHAR2,
10288         p_work_class_rec                        IN      HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE,
10289         p_rowid                                 IN      ROWID ,
10290         x_return_status                         IN OUT NOCOPY  VARCHAR2
10291    ) IS
10292 
10293         l_count                                          NUMBER;
10294         l_work_class_id                                  NUMBER;
10295         l_dummy                                          VARCHAR2(1);
10296         l_employment_history_id                          NUMBER := p_work_class_rec.employment_history_id;
10297         l_created_by_module                              VARCHAR2(150);
10298         l_application_id                                 NUMBER;
10299         l_status                                         VARCHAR2(1);
10300         l_debug_prefix                                   VARCHAR2(30) := '';
10301 
10302         CURSOR work_class_cur (p_work_class_id IN NUMBER) IS
10303               SELECT 'Y'
10304               FROM   hz_work_class hc
10305         WHERE  hc.work_class_id = p_work_class_id;
10306 
10307     BEGIN
10308 
10309         --enable_debug;
10310 
10311         -- Debug info.
10312         /*IF g_debug THEN
10313             hz_utility_v2pub.debug ('validate_work_class (+)');
10314         END IF;
10315         */
10316         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10317                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_work_class (+)',
10318                                p_msg_level=>fnd_log.level_procedure);
10319         END IF;
10320 
10321         -- do the query to get old values for update
10322         IF p_create_update_flag = 'U'
10323         THEN
10324             SELECT WORK_CLASS_ID,
10325                    EMPLOYMENT_HISTORY_ID,
10326                    STATUS,
10327                    CREATED_BY_MODULE,
10328                    APPLICATION_ID
10329             INTO   L_work_class_id,
10330                    l_employment_history_id,
10331                    l_status,
10332                    l_created_by_module,
10333                    l_application_id
10334             FROM   HZ_work_class
10335             WHERE  ROWID = p_rowid;
10336         END IF;
10337 
10338 
10339         --------------------------------------
10340         -- validate work_class_id
10341         --------------------------------------
10342 /****Logical APIs - validation not required****/
10343   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10344         -- If primary key value is passed, check for uniqueness.
10345         -- If primary key value is not passed, it will be generated
10346         -- from sequence by table handler.
10347 
10348 
10349         IF p_create_update_flag = 'C' THEN
10350            IF p_work_class_rec.work_class_id IS NOT NULL AND
10351               p_work_class_rec.work_class_id <> fnd_api.g_miss_num
10352            THEN
10353               OPEN work_class_cur (p_work_class_rec.work_class_id);
10354               FETCH work_class_cur INTO l_dummy;
10355 
10356               -- key is not unique, push an error onto the stack.
10357               IF NVL(work_class_cur%FOUND, FALSE) THEN
10358                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
10359                  fnd_message.set_token('COLUMN', 'work_class_id');
10360                  fnd_msg_pub.add;
10361                  x_return_status := fnd_api.g_ret_sts_error;
10362               END IF;
10363               CLOSE work_class_cur;
10364 
10365               /*IF g_debug THEN
10366                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10367                     'check that work_class_id is unique during creation. ' ||
10368                     ' x_return_status = ' || x_return_status, l_debug_prefix);
10369               END IF;
10370               */
10371               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10372                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10373                  p_message=>'check that work_class_id is unique during creation. ' ||
10374                                                    ' x_return_status = ' || x_return_status,
10375                                   p_msg_level=>fnd_log.level_statement);
10376               END IF;
10377 
10378            END IF;
10379         END IF;
10380 
10381 
10382         -- work_class_id is non-updateable field
10383         IF p_create_update_flag = 'U' THEN
10384               validate_nonupdateable (
10385                   p_column                                => 'work_class_id',
10386                   p_column_value                          => p_work_class_rec.work_class_id,
10387                   p_old_column_value                      => l_work_class_id,
10388                   x_return_status                         => x_return_status);
10389 
10390               /*IF g_debug THEN
10391                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10392                     'work_class_id is non-updateable field. ' ||
10393                     'x_return_status = ' || x_return_status, l_debug_prefix);
10394               END IF;
10395               */
10396               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10397                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'work_class_id is non-updateable field. ' ||
10398                          'x_return_status = ' || x_return_status,
10399                                   p_msg_level=>fnd_log.level_statement);
10400               END IF;
10401 
10402         END IF;
10403 
10404         /*IF g_debug THEN
10405                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10406                 '(+) after validation of work_class_id ... ' ||
10407                 'x_return_status = ' || x_return_status, l_debug_prefix);
10408         END IF;
10409         */
10410         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10411            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validation of work_class_id ... ' ||
10412                                                 'x_return_status = ' || x_return_status,
10413                                   p_msg_level=>fnd_log.level_statement);
10414         END IF;
10415   END IF;
10416 
10417         ---------------------------------------
10418         -- validation for employment_history_id
10419         ---------------------------------------
10420 /****Logical APIs - validation not required****/
10421   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10422         -- employment_history_id is mandatory field
10423         IF p_create_update_flag = 'C' THEN
10424             validate_mandatory (
10425                 p_create_update_flag                    => p_create_update_flag,
10426                 p_column                                => 'employment_history_id',
10427                 p_column_value                          => p_work_class_rec.employment_history_id,
10428                 x_return_status                         => x_return_status);
10429 
10430             /*IF g_debug THEN
10431                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10432                     'employment_history_id is mandatory field. ' ||
10433                     'x_return_status = ' || x_return_status, l_debug_prefix);
10434             END IF;
10435             */
10436             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10437                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'employment_history_id is mandatory field. ' ||
10438                          'x_return_status = ' || x_return_status,
10439                                   p_msg_level=>fnd_log.level_statement);
10440             END IF;
10441 
10442 
10443         END IF;
10444 
10445         -- employment_history_id is non-updateable field
10446         IF p_create_update_flag = 'U' THEN
10447             validate_nonupdateable (
10448                 p_column                                => 'employment_history_id',
10449                 p_column_value                          => p_work_class_rec.employment_history_id,
10450                 p_old_column_value                      => l_employment_history_id,
10451                 x_return_status                         => x_return_status);
10452 
10453             /*IF g_debug THEN
10454                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10455                     'employment_history_id is non-updateable field. ' ||
10456                     'x_return_status = ' || x_return_status, l_debug_prefix);
10457             END IF;
10458             */
10459             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10460                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'employment_history_id is non-updateable field. ' ||
10461                         'x_return_status = ' || x_return_status,
10462                                   p_msg_level=>fnd_log.level_statement);
10463             END IF;
10464 
10465 
10466         END IF;
10467 
10468         -- employment_history_id has foreign key HZ_EMPLOYMENT_HISTORY.EMPLOYMENT_HISTORY_ID
10469         IF p_create_update_flag = 'C'
10470            AND
10471            p_work_class_rec.employment_history_id IS NOT NULL
10472            AND
10473            p_work_class_rec.employment_history_id <> fnd_api.g_miss_num
10474         THEN
10475             BEGIN
10476                 SELECT 'Y'
10477                 INTO   l_dummy
10478                 FROM   hz_employment_history p
10479                 WHERE  p.employment_history_id = p_work_class_rec.employment_history_id;
10480 
10481             EXCEPTION
10482                 WHEN NO_DATA_FOUND THEN
10483                     fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
10484                     fnd_message.set_token('FK', 'employment_history_id');
10485                     fnd_message.set_token('COLUMN', 'employment_history_id');
10486                     fnd_message.set_token('TABLE', 'hz_employment_history');
10487                     fnd_msg_pub.add;
10488                     x_return_status := fnd_api.g_ret_sts_error;
10489             END;
10490 
10491             /*IF g_debug THEN
10492                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10493                     'employment_history_id has foreign key hz_employment_history.employment_history_id. ' ||
10494                     'x_return_status = ' || x_return_status, l_debug_prefix);
10495             END IF;
10496             */
10497             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10498                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10499                 p_message=>'employment_history_id has foreign key hz_employment_history.employment_history_id. ' ||
10500                     'x_return_status = ' || x_return_status,
10501                                   p_msg_level=>fnd_log.level_statement);
10502             END IF;
10503 
10504 
10505         END IF;
10506   END IF;
10507 
10508         ---------------------------------
10509         -- validation for work_class_name
10510         ---------------------------------
10511 
10512         -- work_class_name is mandatory field
10513 
10514         validate_mandatory (
10515             p_create_update_flag                    => p_create_update_flag,
10516             p_column                                => 'work_class_name',
10517             p_column_value                          => p_work_class_rec.work_class_name,
10518             x_return_status                         => x_return_status);
10519 
10520         /*IF g_debug THEN
10521            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10522               'work_class_name is mandatory field. ' ||
10523               'x_return_status = ' || x_return_status, l_debug_prefix);
10524         END IF;
10525         */
10526         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10527            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'work_class_name is mandatory field. ' ||
10528               'x_return_status = ' || x_return_status,
10529                                   p_msg_level=>fnd_log.level_statement);
10530         END IF;
10531 
10532 
10533         ------------------------
10534         -- validation for status
10535         ------------------------
10536 /****Logical APIs - validation not required****/
10537   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10538         -- status is lookup code in lookup type REGISTRY_STATUS
10539         IF p_work_class_rec.status IS NOT NULL
10540            AND
10541            p_work_class_rec.status <> fnd_api.g_miss_char
10542            AND
10543            (p_create_update_flag = 'C'
10544             OR
10545             (p_create_update_flag = 'U'
10546              AND
10547              p_work_class_rec.status <> NVL(l_status, fnd_api.g_miss_char)
10548            )
10549           )
10550         THEN
10551             validate_lookup (
10552                 p_column                                => 'status',
10553                 p_lookup_type                           => 'REGISTRY_STATUS',
10554                 p_column_value                          => p_work_class_rec.status,
10555                 x_return_status                         => x_return_status);
10556 
10557             /*IF g_debug THEN
10558                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10559                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10560                     'x_return_status = ' || x_return_status, l_debug_prefix);
10561             END IF;
10562             */
10563             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10564                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10565                  p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10566                          'x_return_status = ' || x_return_status,
10567                                   p_msg_level=>fnd_log.level_statement);
10568             END IF;
10569 
10570 
10571         END IF;
10572   END IF;
10573 
10574         -- status cannot be set to null during update
10575         IF p_create_update_flag = 'U' THEN
10576             validate_cannot_update_to_null (
10577                 p_column                                => 'status',
10578                 p_column_value                          => p_work_class_rec.status,
10579                 x_return_status                         => x_return_status);
10580         END IF;
10581 
10582 
10583         --------------------------------------
10584         -- validate created_by_module
10585         --------------------------------------
10586 
10587         validate_created_by_module(
10588           p_create_update_flag     => p_create_update_flag,
10589           p_created_by_module      => p_work_class_rec.created_by_module,
10590           p_old_created_by_module  => l_created_by_module,
10591           x_return_status          => x_return_status);
10592 
10593         --------------------------------------
10594         -- validate application_id
10595         --------------------------------------
10596 
10597         validate_application_id(
10598           p_create_update_flag     => p_create_update_flag,
10599           p_application_id         => p_work_class_rec.application_id,
10600           p_old_application_id     => l_application_id,
10601           x_return_status          => x_return_status);
10602 
10603         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10604                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_work_class (-)',
10605                                p_msg_level=>fnd_log.level_procedure);
10606         END IF;
10607 
10608   END validate_work_class;
10609 
10610 /**
10611    * PROCEDURE validate_person_interest
10612    *
10613    * DESCRIPTION
10614    *     Validates person_interest record. Checks for
10615    *         uniqueness
10616    *         lookup types
10617    *         mandatory columns
10618    *         non-updateable fields
10619    *         foreign key validations
10620    *         other validations
10621    *
10622    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10623    *
10624    * ARGUMENTS
10625    *   IN:
10626    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
10627    *     p_person_interest_rec       person_interest record.
10628    *     p_rowid                        Rowid of the record (used only in update mode).
10629    *   IN/OUT:
10630    *     x_return_status                Return status after the call. The status can
10631    *                                    be FND_API.G_RET_STS_SUCCESS (success),
10632    *                                    fnd_api.g_ret_sts_error (error),
10633    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10634    *
10635    * NOTES
10636    *
10637    * MODIFICATION HISTORY
10638    *
10639    *   31-Jan-2001    Porkodi C           o Created.
10640    *   13-Jan-2004    Rajib Ranjan Borah  o Bug 3282946.Person interest can be created for
10641    *                                        all type of parties and not necessarily for
10642    *                                        'PERSON' type parties only.
10643    */
10644 
10645     PROCEDURE validate_person_interest(
10646         p_create_update_flag                    IN      VARCHAR2,
10647         p_person_interest_rec                   IN      HZ_PERSON_INFO_V2PUB.person_interest_REC_TYPE,
10648         p_rowid                                 IN      ROWID ,
10649         x_return_status                         IN OUT NOCOPY  VARCHAR2
10650    ) IS
10651 
10652         l_count                                          NUMBER;
10653         l_person_interest_id                          NUMBER;
10654         l_dummy                                          VARCHAR2(1);
10655         l_party_id                                       NUMBER := p_person_interest_rec.party_id;
10656         l_created_by_module                              VARCHAR2(150);
10657         l_application_id                                 NUMBER;
10658         l_status                                         VARCHAR2(1);
10659         l_debug_prefix                                   VARCHAR2(30) := '';
10660         l_begin_date                                     DATE;
10661         l_end_date                                       DATE;
10662 
10663         CURSOR person_interest_cur (p_person_interest_id IN NUMBER) IS
10664               SELECT 'Y'
10665               FROM   hz_person_interest hc
10666         WHERE  hc.person_interest_id = p_person_interest_id;
10667 
10668     BEGIN
10669 
10670         --enable_debug;
10671 
10672         -- Debug info.
10673         /*IF g_debug THEN
10674             hz_utility_v2pub.debug ('validate_person_interest (+)');
10675         END IF;
10676         */
10677         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10678                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_interest (+)',
10679                                p_msg_level=>fnd_log.level_procedure);
10680         END IF;
10681 
10682 
10683         -- do the query to get old values for update
10684         IF p_create_update_flag = 'U'
10685         THEN
10686             SELECT person_interest_ID,
10687                    PARTY_ID,
10688                    STATUS,
10689                    CREATED_BY_MODULE,
10690                    APPLICATION_ID
10691             INTO   l_person_interest_id,
10692                    l_party_id,
10693                    l_status,
10694                    l_created_by_module,
10695                    l_application_id
10696             FROM   HZ_person_interest
10697             WHERE  ROWID = p_rowid;
10698         END IF;
10699 
10700 
10701         --------------------------------------
10702         -- validate person_interest_id
10703         --------------------------------------
10704 /****Logical APIs - validation not required****/
10705   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10706         -- If primary key value is passed, check for uniqueness.
10707         -- If primary key value is not passed, it will be generated
10708         -- from sequence by table handler.
10709 
10710 
10711         IF p_create_update_flag = 'C' THEN
10712            IF p_person_interest_rec.person_interest_id IS NOT NULL AND
10713               p_person_interest_rec.person_interest_id <> fnd_api.g_miss_num
10714            THEN
10715               OPEN person_interest_cur (p_person_interest_rec.person_interest_id);
10716               FETCH person_interest_cur INTO l_dummy;
10717 
10718               -- key is not unique, push an error onto the stack.
10719               IF NVL(person_interest_cur%FOUND, FALSE) THEN
10720                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
10721                  fnd_message.set_token('COLUMN', 'person_interest_id');
10722                  fnd_msg_pub.add;
10723                  x_return_status := fnd_api.g_ret_sts_error;
10724               END IF;
10725               CLOSE person_interest_cur;
10726 
10727               /*IF g_debug THEN
10728                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10729                     'check that person_interest_id is unique during creation. ' ||
10730                     ' x_return_status = ' || x_return_status, l_debug_prefix);
10731               END IF;
10732               */
10733               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10734                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10735                 p_message=>'check that person_interest_id is unique during creation. ' ||
10736                     ' x_return_status = ' || x_return_status,
10737                                   p_msg_level=>fnd_log.level_statement);
10738               END IF;
10739 
10740            END IF;
10741         END IF;
10742 
10743 
10744         -- person_interest_id is non-updateable field
10745         IF p_create_update_flag = 'U' THEN
10746               validate_nonupdateable (
10747                   p_column                                => 'person_interest_id',
10748                   p_column_value                          => p_person_interest_rec.person_interest_id,
10749                   p_old_column_value                      => l_person_interest_id,
10750                   x_return_status                         => x_return_status);
10751 
10752               /*IF g_debug THEN
10753                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10754                     'person_interest_id is non-updateable field. ' ||
10755                     'x_return_status = ' || x_return_status, l_debug_prefix);
10756               END IF;
10757               */
10758               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10759                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'person_interest_id is non-updateable field. ' ||
10760                         'x_return_status = ' || x_return_status,
10761                                   p_msg_level=>fnd_log.level_statement);
10762               END IF;
10763 
10764         END IF;
10765 
10766         /*IF g_debug THEN
10767                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10768                 '(+) after validation of person_interest_id ... ' ||
10769                 'x_return_status = ' || x_return_status, l_debug_prefix);
10770         END IF;
10771         */
10772         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10773            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validation of person_interest_id ... ' ||
10774                                 'x_return_status = ' || x_return_status,
10775                                   p_msg_level=>fnd_log.level_statement);
10776         END IF;
10777   END IF;
10778 
10779         --------------------------
10780         -- validation for party_id
10781         --------------------------
10782 /****Logical APIs - validation not required****/
10783   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10784         -- party_id is mandatory field
10785         IF p_create_update_flag = 'C' THEN
10786             validate_mandatory (
10787                 p_create_update_flag                    => p_create_update_flag,
10788                 p_column                                => 'party_id',
10789                 p_column_value                          => p_person_interest_rec.party_id,
10790                 x_return_status                         => x_return_status);
10791 
10792             /*IF g_debug THEN
10793                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10794                     'party_id is mandatory field. ' ||
10795                     'x_return_status = ' || x_return_status, l_debug_prefix);
10796             END IF;
10797             */
10798             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10799                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
10800                         'x_return_status = ' || x_return_status,
10801                                   p_msg_level=>fnd_log.level_statement);
10802             END IF;
10803 
10804 
10805         END IF;
10806 
10807         -- party_id is non-updateable field
10808         IF p_create_update_flag = 'U' THEN
10809             validate_nonupdateable (
10810                 p_column                                => 'party_id',
10811                 p_column_value                          => p_person_interest_rec.party_id,
10812                 p_old_column_value                      => l_party_id,
10813                 x_return_status                         => x_return_status);
10814 
10815             /*IF g_debug THEN
10816                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10817                     'party_id is non-updateable field. ' ||
10818                     'x_return_status = ' || x_return_status, l_debug_prefix);
10819             END IF;
10820             */
10821             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10822                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
10823                                         'x_return_status = ' || x_return_status,
10824                                   p_msg_level=>fnd_log.level_statement);
10825             END IF;
10826 
10827 
10828         END IF;
10829 
10830         -- party_id has foreign key HZ_PARTIES.PARTY_ID
10831         IF p_create_update_flag = 'C'
10832            AND
10833            p_person_interest_rec.party_id IS NOT NULL
10834            AND
10835            p_person_interest_rec.party_id <> fnd_api.g_miss_num
10836         THEN
10837             BEGIN
10838                 SELECT 'Y'
10839                 INTO   l_dummy
10840                 FROM   hz_parties p
10841                 WHERE  p.party_id = p_person_interest_rec.party_id; /*and
10842                        party_type = 'PERSON';*/
10843                        /*
10844                        Bug 3282946. Some teams still insert into hz_person_interest
10845                        for non 'PERSON' type parties.
10846                        */
10847 
10848             EXCEPTION
10849                 WHEN NO_DATA_FOUND THEN
10850                     fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
10851                     fnd_message.set_token('FK', 'party_id');
10852                     fnd_message.set_token('COLUMN', 'party_id');
10853                     fnd_message.set_token('TABLE', 'hz_parties');
10854                     fnd_msg_pub.add;
10855                     x_return_status := fnd_api.g_ret_sts_error;
10856             END;
10857 
10858             /*IF g_debug THEN
10859                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10860                     'party_id has foreign key hz_parties.party_id. ' ||
10861                     'x_return_status = ' || x_return_status, l_debug_prefix);
10862             END IF;
10863             */
10864             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10865                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
10866                         'x_return_status = ' || x_return_status,
10867                                   p_msg_level=>fnd_log.level_statement);
10868             END IF;
10869 
10870 
10871         END IF;
10872   END IF;
10873 
10874         ---------------------------------
10875         -- validation for sport_indicator
10876         ---------------------------------
10877 /****Logical APIs - validation not required****/
10878   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10879         -- sport_indicator is mandatory field
10880 
10881 
10882         -- sport_indicator is validated against lookup type YES/NO
10883         validate_lookup (
10884             p_column                                => 'sport_indicator',
10885             p_lookup_type                           => 'YES/NO',
10886             p_column_value                          => p_person_interest_rec.sport_indicator,
10887             x_return_status                         => x_return_status);
10888 
10889 
10890         /*IF g_debug THEN
10891             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10892                 'sport_indicator should be in lookup YES/NO. ' ||
10893                 'x_return_status = ' || x_return_status, l_debug_prefix);
10894         END IF;
10895         */
10896         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10897            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sport_indicator should be in lookup YES/NO. ' ||
10898                 'x_return_status = ' || x_return_status,
10899                                   p_msg_level=>fnd_log.level_statement);
10900         END IF;
10901   END IF;
10902 
10903         ---------------------------------
10904         -- validation for interest_name
10905         ---------------------------------
10906 
10907         -- interest_name is mandatory field
10908 
10909         validate_mandatory (
10910             p_create_update_flag                    => p_create_update_flag,
10911             p_column                                => 'interest_name',
10912             p_column_value                          => p_person_interest_rec.interest_name,
10913             x_return_status                         => x_return_status);
10914 
10915         /*IF g_debug THEN
10916            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10917               'interest_name is mandatory field. ' ||
10918               'x_return_status = ' || x_return_status, l_debug_prefix);
10919         END IF;
10920         */
10921         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10922            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'interest_name is mandatory field. ' ||
10923                                         'x_return_status = ' || x_return_status,
10924                                   p_msg_level=>fnd_log.level_statement);
10925         END IF;
10926 
10927 
10928         ------------------------
10929         -- validation for status
10930         ------------------------
10931 /****Logical APIs - validation not required****/
10932   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10933         -- status is lookup code in lookup type REGISTRY_STATUS
10934         IF p_person_interest_rec.status IS NOT NULL
10935            AND
10936            p_person_interest_rec.status <> fnd_api.g_miss_char
10937            AND
10938            (p_create_update_flag = 'C'
10939             OR
10940             (p_create_update_flag = 'U'
10941              AND
10942              p_person_interest_rec.status <> NVL(l_status, fnd_api.g_miss_char)
10943            )
10944           )
10945         THEN
10946             validate_lookup (
10947                 p_column                                => 'status',
10948                 p_lookup_type                           => 'REGISTRY_STATUS',
10949                 p_column_value                          => p_person_interest_rec.status,
10950                 x_return_status                         => x_return_status);
10951 
10952             /*IF g_debug THEN
10953                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10954                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10955                     'x_return_status = ' || x_return_status, l_debug_prefix);
10956             END IF;
10957             */
10958             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10959                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10960                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10961                                                 'x_return_status = ' || x_return_status,
10962                                   p_msg_level=>fnd_log.level_statement);
10963             END IF;
10964 
10965 
10966         END IF;
10967   END IF;
10968 
10969         -- status cannot be set to null during update
10970         IF p_create_update_flag = 'U' THEN
10971             validate_cannot_update_to_null (
10972                 p_column                                => 'status',
10973                 p_column_value                          => p_person_interest_rec.status,
10974                 x_return_status                         => x_return_status);
10975         END IF;
10976 
10977 
10978         --------------------------------------
10979         -- validate created_by_module
10980         --------------------------------------
10981 
10982         validate_created_by_module(
10983           p_create_update_flag     => p_create_update_flag,
10984           p_created_by_module      => p_person_interest_rec.created_by_module,
10985           p_old_created_by_module  => l_created_by_module,
10986           x_return_status          => x_return_status);
10987 
10988         --------------------------------------
10989         -- validate application_id
10990         --------------------------------------
10991 
10992         validate_application_id(
10993           p_create_update_flag     => p_create_update_flag,
10994           p_application_id         => p_person_interest_rec.application_id,
10995           p_old_application_id     => l_application_id,
10996           x_return_status          => x_return_status);
10997 
10998         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10999                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_interest (-)',
11000                                p_msg_level=>fnd_log.level_procedure);
11001         END IF;
11002 
11003   END validate_person_interest;
11004 
11005 
11006   /**
11007    * PROCEDURE validate_location
11008    *
11009    * DESCRIPTION
11010    *     Validates location record. Checks for
11011    *         uniqueness
11012    *         lookup types
11013    *         mandatory columns
11014    *         non-updateable fields
11015    *         foreign key validations
11016    *         other validations
11017    *
11018    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11019    *
11020    * ARGUMENTS
11021    *   IN:
11022    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
11023    *     p_location_rec                 Location record.
11024    *     p_rowid                        Rowid of the record (used only in update mode).
11025    *   IN/OUT:
11026    *     x_return_status                Return status after the call. The status can
11027    *                                    be FND_API.G_RET_STS_SUCCESS (success),
11028    *                                    fnd_api.g_ret_sts_error (error),
11029    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
11030    *
11031    * NOTES
11032    *
11033    * MODIFICATION HISTORY
11034    *
11035    *   07-23-2001    Indrajit Sen       o Created.
11036    *   06-FEB-2004   Jianying Huang     o Bug 3330754: modified validate_location to
11037    *                                      change validation for third party records
11038    *                                      from row level non-updateable checking to
11039    *                                      attribute level checking.
11040    *   01-03-2005    Rajib Ranjan Borah o SSM SST Integration and Extension.
11041    *                                      Newly created user update rules will be used
11042    *                                      to check update privilege.
11043    *
11044    */
11045 
11046   PROCEDURE validate_location(
11047       p_create_update_flag                    IN      VARCHAR2,
11048       p_location_rec                          IN      hz_location_v2pub.location_rec_type,
11049       p_rowid                                 IN      ROWID ,
11050       x_return_status                         IN OUT NOCOPY  VARCHAR2
11051  ) IS
11052 
11053       l_dummy                                 VARCHAR2(1);
11054       l_address_effective_date                DATE;
11055       l_content_source_type                   HZ_LOCATIONS.CONTENT_SOURCE_TYPE%TYPE;
11056       l_created_by_module                     VARCHAR2(150);
11057       l_application_id                        NUMBER;
11058       l_debug_prefix                          VARCHAR2(30) := '';
11059 
11060       -- Bug 2197181: added for mix-n-match
11061       db_actual_content_source                HZ_LOCATIONS.ACTUAL_CONTENT_SOURCE%TYPE;
11062 
11063       -- Bug 3330754: added to support attribute level non-updateable checking for third
11064       -- party records.
11065       db_orig_system_reference                HZ_LOCATIONS.ORIG_SYSTEM_REFERENCE%TYPE;
11066       db_country                              HZ_LOCATIONS.COUNTRY%TYPE;
11067       db_address1                             HZ_LOCATIONS.ADDRESS1%TYPE;
11068       db_address2                             HZ_LOCATIONS.ADDRESS2%TYPE;
11069       db_address3                             HZ_LOCATIONS.ADDRESS3%TYPE;
11070       db_address4                             HZ_LOCATIONS.ADDRESS4%TYPE;
11071       db_city                                 HZ_LOCATIONS.CITY%TYPE;
11072       db_postal_code                          HZ_LOCATIONS.POSTAL_CODE%TYPE;
11073       db_state                                HZ_LOCATIONS.STATE%TYPE;
11074       db_province                             HZ_LOCATIONS.PROVINCE%TYPE;
11075       db_county                               HZ_LOCATIONS.COUNTY%TYPE;
11076       db_postal_plus4_code                    HZ_LOCATIONS.POSTAL_PLUS4_CODE%TYPE;
11077       db_clli_code                            HZ_LOCATIONS.CLLI_CODE%TYPE;
11078       db_delivery_point_code                  HZ_LOCATIONS.DELIVERY_POINT_CODE%TYPE;
11079       db_location_directions                  HZ_LOCATIONS.LOCATION_DIRECTIONS%TYPE;
11080       l_return_status                         VARCHAR2(1);
11081 
11082       l_vertex_taxware_installed              BOOLEAN;
11083 
11084   BEGIN
11085 
11086       --enable_debug;
11087 
11088       -- Debug info.
11089       /*IF g_debug THEN
11090           hz_utility_v2pub.debug ('validate_location (+)');
11091       END IF;
11092       */
11093       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11094         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_location (+)',
11095                                p_msg_level=>fnd_log.level_procedure);
11096       END IF;
11097 
11098 
11099       -- select columns needed to be checked from table during update
11100 
11101       -- Bug 2197181: selecting actual_content_source for mix-n-match
11102       -- Bug 3330754: added to support attribute level non-updateable checking for third
11103       -- party records.
11104 
11105       IF (p_create_update_flag = 'U') THEN
11106           SELECT ADDRESS_EFFECTIVE_DATE,
11107                  CONTENT_SOURCE_TYPE,
11108                  created_by_module,
11109                  APPLICATION_ID,
11110                  actual_content_source,
11111                  -- Bug 3330754: added to support attribute level
11112                  -- non-updateable checking for third party records.
11113                  orig_system_reference,
11114                  country,
11115                  address1,
11116                  address2,
11117                  address3,
11118                  address4,
11119                  city,
11120                  postal_code,
11121                  state,
11122                  province,
11123                  county,
11124                  postal_plus4_code,
11125                  clli_code,
11126                  delivery_point_code,
11127                  location_directions
11128           INTO   l_address_effective_date,
11129                  l_content_source_type,
11130                  l_created_by_module,
11131                  l_application_id,
11132                  db_actual_content_source,
11133                  -- Bug 3330754: added to support attribute level
11134                  -- non-updateable checking for third party records.
11135                  db_orig_system_reference,
11136                  db_country,
11137                  db_address1,
11138                  db_address2,
11139                  db_address3,
11140                  db_address4,
11141                  db_city,
11142                  db_postal_code,
11143                  db_state,
11144                  db_province,
11145                  db_county,
11146                  db_postal_plus4_code,
11147                  db_clli_code,
11148                  db_delivery_point_code,
11149                  db_location_directions
11150           FROM   HZ_LOCATIONS
11151           WHERE  ROWID = p_rowid;
11152       END IF;
11153 
11154       --------------------
11155       -- validate address1
11156       --------------------
11157 
11158       -- address1 is mandatory
11159       validate_mandatory (
11160           p_create_update_flag                    => p_create_update_flag,
11161           p_column                                => 'address1',
11162           p_column_value                          => p_location_rec.address1,
11163           x_return_status                         => x_return_status);
11164 
11165       --------------------
11166       -- validate country
11167       --------------------
11168 
11169       -- country is mandatory
11170       validate_mandatory (
11171           p_create_update_flag                    => p_create_update_flag,
11172           p_column                                => 'country',
11173           p_column_value                          => p_location_rec.country,
11174           x_return_status                         => x_return_status);
11175 
11176       -- country has foreign key fnd_territories.territory_code
11177       validate_country_code(
11178           p_column                                => 'country',
11179           p_column_value                          => p_location_rec.country,
11180           x_return_status                         => x_return_status);
11181 
11182       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11183           hz_utility_v2pub.debug(
11184              p_prefix               => l_debug_prefix,
11185              p_message              => 'country has foreign key fnd_territories.territory_code. ' ||
11186                                        'x_return_status = ' || x_return_status,
11187              p_msg_level            => fnd_log.level_statement);
11188       END IF;
11189 
11190       /* Bug 2197181: removed content_source_type validation as this
11191          column has been obsoleted for mix-n-match project.
11192 
11193       -------------------------------
11194       -- validate content_source_type
11195       -------------------------------
11196 
11197       -- we do not need to check 'content_source_type is mandatory' because
11198       -- we default content_source_type to hz_party_v2pub.g_miss_content_source_type
11199       -- in table handler.
11200 
11201       -- content_source_type is non-updateable
11202       IF p_create_update_flag = 'U' THEN
11203           validate_nonupdateable (
11204               p_column                                => 'content_source_type',
11205               p_column_value                          => p_location_rec.content_source_type,
11206               p_old_column_value                      => l_content_source_type,
11207               x_return_status                         => x_return_status);
11208 
11209 
11210           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11211            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'content_source_type is non-updateable. ' ||
11212                                         'x_return_status = ' || x_return_status,
11213                                   p_msg_level=>fnd_log.level_statement);
11214          END IF;
11215       END IF;
11216 
11217       -- content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE
11218       validate_lookup (
11219           p_column                                => 'content_source_type',
11220           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
11221           p_column_value                          => p_location_rec.content_source_type,
11222           x_return_status                         => x_return_status);
11223 
11224       IF g_debug THEN
11225           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11226               'content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE. ' ||
11227               'x_return_status = ' || x_return_status, l_debug_prefix);
11228       END IF;
11229       */
11230 
11231       -- Bug 2197181: Added validation for mix-n-match
11232 
11233       ----------------------------------------
11234       -- validate content_source_type and actual_content_source_type
11235       ----------------------------------------
11236 
11237       HZ_MIXNM_UTILITY.ValidateContentSource (
11238         p_api_version                       => 'V2',
11239         p_create_update_flag                => p_create_update_flag,
11240         -- Bug 3330754: replaced row level non-updateable checking to
11241         -- attribute level checking.
11242         p_check_update_privilege            => 'N',
11243         p_content_source_type               => p_location_rec.content_source_type,
11244         p_old_content_source_type           => l_content_source_type,
11245         p_actual_content_source             => p_location_rec.actual_content_source,
11246         p_old_actual_content_source         => db_actual_content_source,
11247         p_entity_name                       => 'HZ_LOCATIONS',
11248         x_return_status                     => x_return_status );
11249 
11250       -- Bug 3330754: added to support attribute level non-updateable checking for third
11251       -- party records.
11252 
11253       --------------------------------------
11254       -- validate address components which are third-party sourced.
11255       --------------------------------------
11256 
11257       -- address components can not be updated by the end-user if
11258       -- actual_content_source <> 'USER_ENTERED'
11259 
11260       IF p_create_update_flag = 'U' AND
11261          db_actual_content_source <> 'USER_ENTERED' -- AND
11262          -- SSM SST Integration and Extension
11263          -- Check Updateability using mix-n-match procedure rather than checking the
11264          -- profile value.
11265          /*NVL(FND_PROFILE.value('HZ_UPDATE_THIRD_PARTY_DATA'), 'N') = 'N'*/
11266          --HZ_UTILITY_V2PUB.is_purchased_content_source(db_actual_content_source) = 'Y'
11267       THEN
11268         l_return_status := FND_API.G_RET_STS_SUCCESS;
11269 
11270         validate_nonupdateable (
11271           p_column                 => 'orig_system_reference',
11272           p_column_value           => p_location_rec.orig_system_reference,
11273           p_old_column_value       => db_orig_system_reference,
11274           x_return_status          => l_return_status,
11275           p_raise_error            => 'N');
11276 
11277         validate_nonupdateable (
11278           p_column                 => 'country',
11279           p_column_value           => p_location_rec.country,
11280           p_old_column_value       => db_country,
11281           x_return_status          => l_return_status,
11282           p_raise_error            => 'N');
11283 
11284         validate_nonupdateable (
11285           p_column                 => 'address1',
11286           p_column_value           => p_location_rec.address1,
11287           p_old_column_value       => db_address1,
11288           x_return_status          => l_return_status,
11289           p_raise_error            => 'N');
11290 
11291         validate_nonupdateable (
11292           p_column                 => 'address2',
11293           p_column_value           => p_location_rec.address2,
11294           p_old_column_value       => db_address2,
11295           x_return_status          => l_return_status,
11296           p_raise_error            => 'N');
11297 
11298         validate_nonupdateable (
11299           p_column                 => 'address3',
11300           p_column_value           => p_location_rec.address3,
11301           p_old_column_value       => db_address3,
11302           x_return_status          => l_return_status,
11303           p_raise_error            => 'N');
11304 
11305         validate_nonupdateable (
11306           p_column                 => 'address4',
11307           p_column_value           => p_location_rec.address4,
11308           p_old_column_value       => db_address4,
11309           x_return_status          => l_return_status,
11310           p_raise_error            => 'N');
11311 
11312         validate_nonupdateable (
11313           p_column                 => 'city',
11314           p_column_value           => p_location_rec.city,
11315           p_old_column_value       => db_city,
11316           x_return_status          => l_return_status,
11317           p_raise_error            => 'N');
11318 
11319         validate_nonupdateable (
11320           p_column                 => 'postal_code',
11321           p_column_value           => p_location_rec.postal_code,
11322           p_old_column_value       => db_postal_code,
11323           x_return_status          => l_return_status,
11324           p_raise_error            => 'N');
11325 
11326         validate_nonupdateable (
11327           p_column                 => 'state',
11328           p_column_value           => p_location_rec.state,
11329           p_old_column_value       => db_state,
11330           x_return_status          => l_return_status,
11331           p_raise_error            => 'N');
11332 
11333         validate_nonupdateable (
11334           p_column                 => 'province',
11335           p_column_value           => p_location_rec.province,
11336           p_old_column_value       => db_province,
11337           x_return_status          => l_return_status,
11338           p_raise_error            => 'N');
11339 
11340         validate_nonupdateable (
11341           p_column                 => 'county',
11342           p_column_value           => p_location_rec.county,
11343           p_old_column_value       => db_county,
11344           x_return_status          => l_return_status,
11345           p_raise_error            => 'N');
11346 
11347         validate_nonupdateable (
11348           p_column                 => 'postal_plus4_code',
11349           p_column_value           => p_location_rec.postal_plus4_code,
11350           p_old_column_value       => db_postal_plus4_code,
11351           x_return_status          => l_return_status,
11352           p_raise_error            => 'N');
11353 
11354         validate_nonupdateable (
11355           p_column                 => 'clli_code',
11356           p_column_value           => p_location_rec.clli_code,
11357           p_old_column_value       => db_clli_code,
11358           x_return_status          => l_return_status,
11359           p_raise_error            => 'N');
11360 
11361         validate_nonupdateable (
11362           p_column                 => 'delivery_point_code',
11363           p_column_value           => p_location_rec.delivery_point_code,
11364           p_old_column_value       => db_delivery_point_code,
11365           x_return_status          => l_return_status,
11366           p_raise_error            => 'N');
11367 
11368         validate_nonupdateable (
11369           p_column                 => 'location_directions',
11370           p_column_value           => p_location_rec.location_directions,
11371           p_old_column_value       => db_location_directions,
11372           x_return_status          => l_return_status,
11373           p_raise_error            => 'N');
11374 
11375         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11376 
11377             HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege(
11378                 p_actual_content_source       => db_actual_content_source,
11379                 p_new_actual_content_source   => p_location_rec.actual_content_source,
11380                 p_entity_name                 => 'HZ_LOCATIONS',
11381                 x_return_status               => x_return_status);
11382 -- Bug 4693719 : set global variable to Y
11383          HZ_UTILITY_V2PUB.G_UPDATE_ACS := 'Y';
11384         /*
11385           FND_MESSAGE.SET_NAME('AR', 'HZ_NOTALLOW_UPDATE_THIRD_PARTY');
11386           FND_MSG_PUB.ADD;
11387           x_return_status := FND_API.G_RET_STS_ERROR;
11388         */
11389         END IF;
11390 
11391         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11392           hz_utility_v2pub.debug(
11393             p_prefix=>l_debug_prefix,
11394             p_message=>'third party address components are non-updateable. ' ||
11395                        'x_return_status = ' || x_return_status,
11396             p_msg_level=>fnd_log.level_statement);
11397         END IF;
11398       END IF;
11399 
11400       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11401         hz_utility_v2pub.debug(
11402           p_prefix=>l_debug_prefix,
11403           p_message=>'(+) after validate third party address components ... ' ||
11404                      'x_return_status = ' || x_return_status,
11405           p_msg_level=>fnd_log.level_statement);
11406       END IF;
11407 
11408       --------------------------
11409       -- validation for language
11410       --------------------------
11411       -- language has foreign key fnd_languages.language_code
11412       IF p_location_rec.language IS NOT NULL
11413          AND
11414          p_location_rec.language <> fnd_api.g_miss_char
11415       THEN
11416           BEGIN
11417               SELECT 'Y'
11418               INTO   l_dummy
11419               FROM   FND_LANGUAGES
11420               WHERE  LANGUAGE_CODE = p_location_rec.language
11421               AND    INSTALLED_FLAG IN ('B', 'I');
11422           EXCEPTION
11423               WHEN NO_DATA_FOUND THEN
11424                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
11425                   fnd_message.set_token('FK', 'language');
11426                   fnd_message.set_token('COLUMN', 'language_code');
11427                   fnd_message.set_token('TABLE', 'fnd_languages(installed)');
11428                   fnd_msg_pub.add;
11429                   x_return_status := fnd_api.g_ret_sts_error;
11430           END;
11431 
11432           /*IF g_debug THEN
11433               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11434                   'language has foreign key fnd_languages.language_code (installed). ' ||
11435                   'x_return_status = ' || x_return_status, l_debug_prefix);
11436           END IF;
11437           */
11438           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11439             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11440             p_message=>'language has foreign key fnd_languages.language_code (installed). ' ||
11441                         'x_return_status = ' || x_return_status,
11442                                   p_msg_level=>fnd_log.level_statement);
11443          END IF;
11444       END IF;
11445 
11446       -----------------------------
11447       -- validation for timezone_id
11448       -----------------------------
11449       -- timezone_id has foreign key hz_timezones.timezone_id
11450       IF p_location_rec.timezone_id IS NOT NULL
11451          AND
11452          p_location_rec.timezone_id <> fnd_api.g_miss_num
11453       THEN
11454           BEGIN
11455              /*  Bug 11874705 : Changed the validation from HZ_TIMEZONES to   FND_TIMEZONES_VL
11456               SELECT 'Y'
11457               INTO   l_dummy
11458               FROM   HZ_TIMEZONES
11459               WHERE  TIMEZONE_ID = p_location_rec.timezone_id;
11460              */
11461 
11462               SELECT 'Y'
11463               INTO   l_dummy
11464               FROM   FND_TIMEZONES_VL
11465               WHERE  UPGRADE_TZ_ID = p_location_rec.timezone_id;
11466           EXCEPTION
11467               WHEN NO_DATA_FOUND THEN
11468                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
11469                   fnd_message.set_token('FK', 'timezone_id');
11470                   fnd_message.set_token('COLUMN', 'upgrade_tz_id');
11471                   fnd_message.set_token('TABLE', 'fnd_timezones_vl');
11472                   fnd_msg_pub.add;
11473                   x_return_status := fnd_api.g_ret_sts_error;
11474           END;
11475 
11476           /*IF g_debug THEN
11477               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11478                   'timezone_id has foreign key hz_timezones.timezone_id. ' ||
11479                   'x_return_status = ' || x_return_status, l_debug_prefix);
11480           END IF;
11481           */
11482           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11483                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11484                 p_message=>'timezone_id has foreign key hz_timezones.timezone_id. ' ||
11485                   'x_return_status = ' || x_return_status,
11486                                   p_msg_level=>fnd_log.level_statement);
11487           END IF;
11488       END IF;
11489 
11490       --------------------------------------
11491       -- validate created_by_module
11492       --------------------------------------
11493 
11494       validate_created_by_module(
11495         p_create_update_flag     => p_create_update_flag,
11496         p_created_by_module      => p_location_rec.created_by_module,
11497         p_old_created_by_module  => l_created_by_module,
11498         x_return_status          => x_return_status);
11499 
11500       --------------------------------------
11501       -- validate application_id
11502       --------------------------------------
11503 
11504       validate_application_id(
11505         p_create_update_flag     => p_create_update_flag,
11506         p_application_id         => p_location_rec.application_id,
11507         p_old_application_id     => l_application_id,
11508         x_return_status          => x_return_status);
11509 
11510       --------------------------------------------------------------
11511       -- validate sales_tax_geocode and sales_tax_inside_city_limits
11512       --------------------------------------------------------------
11513       -- Added the below validations as a part of bug fix # 4967075
11514 
11515       l_vertex_taxware_installed := zx_r11i_tax_partner_pkg.TAX_VENDOR_EXTENSION;
11516 
11517       IF p_location_rec.sales_tax_geocode IS NOT NULL AND p_location_rec.sales_tax_geocode <> fnd_api.g_miss_char THEN
11518          If (zx_r11i_tax_partner_pkg.IS_GEOCODE_VALID(p_location_rec.sales_tax_geocode) = FALSE) then
11519             x_return_status := fnd_api.g_ret_sts_error;
11520          end if;
11521       END IF;
11522 
11523       IF p_location_rec.sales_tax_inside_city_limits IS NOT NULL AND p_location_rec.sales_tax_inside_city_limits <> fnd_api.g_miss_char THEN
11524          If (zx_r11i_tax_partner_pkg.IS_CITY_LIMIT_VALID(p_location_rec.sales_tax_inside_city_limits) = FALSE) then
11525             x_return_status := fnd_api.g_ret_sts_error;
11526          end if;
11527       END IF;
11528 
11529       --------------------------
11530       -- tax location validation
11531       --------------------------
11532 
11533       -- do tax location validation when location is inserted from public API.
11534       -- restrict updates on taxable components when location is used by any
11535       -- non prospect customers.
11536       -- tax code will be created when customer account site is created for
11537       -- this location.
11538 
11539       tax_location_validation(p_location_rec,
11540                                p_create_update_flag,
11541                                x_return_status);
11542 
11543       IF x_return_status = fnd_api.g_ret_sts_error THEN
11544           RAISE FND_API.G_EXC_ERROR;
11545       END IF;
11546 
11547       -- Debug info.
11548       /*IF g_debug THEN
11549           hz_utility_v2pub.debug ('validate_location (-)');
11550       END IF;
11551       */
11552       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11553         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_location (-)',
11554                                p_msg_level=>fnd_log.level_procedure);
11555       END IF;
11556 
11557       --disable_debug;
11558 
11559   END validate_location;
11560 
11561   /**
11562    * PROCEDURE tax_location_validation
11563    *
11564    * DESCRIPTION
11565    *     Validates tax location.
11566    *
11567    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11568    *
11569    * ARGUMENTS
11570    *   IN:
11571    *     p_location_rec                 Location record.
11572    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
11573    *   IN/OUT:
11574    *     x_return_status                Return status after the call. The status can
11575    *                                    be FND_API.G_RET_STS_SUCCESS (success),
11576    *                                    fnd_api.g_ret_sts_error (error),
11577    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
11578    *
11579    * NOTES
11580    *
11581    * MODIFICATION HISTORY
11582    *
11583    *   07-23-2001    Indrajit Sen       o Created.
11584    *
11585    */
11586 
11587   PROCEDURE tax_location_validation(
11588       p_location_rec       IN      hz_location_v2pub.location_rec_type,
11589       p_create_update_flag IN      VARCHAR2,
11590       x_return_status      IN OUT NOCOPY  VARCHAR2
11591  ) IS
11592       l_location_id                NUMBER;
11593       l_loc_id                     NUMBER;
11594       l_org_id                     NUMBER;
11595       l_city                       VARCHAR2(60);
11596       l_state                      VARCHAR2(60);
11597       l_country                    VARCHAR2(60);
11598       l_county                     VARCHAR2(60);
11599       l_province                   VARCHAR2(60);
11600       l_postal_code                VARCHAR2(60);
11601       l_attribute1                 VARCHAR2(150);
11602       l_attribute2                 VARCHAR2(150);
11603       l_attribute3                 VARCHAR2(150);
11604       l_attribute4                 VARCHAR2(150);
11605       l_attribute5                 VARCHAR2(150);
11606       l_attribute6                 VARCHAR2(150);
11607       l_attribute7                 VARCHAR2(150);
11608       l_attribute8                 VARCHAR2(150);
11609       l_attribute9                 VARCHAR2(150);
11610       l_attribute10                VARCHAR2(150);
11611 
11612       -- old attributes of location to be modified
11613       o_location_id                NUMBER;
11614       o_loc_id                     NUMBER;
11615       o_org_id                     NUMBER;
11616       o_city                       VARCHAR2(60);
11617       o_state                      VARCHAR2(60);
11618       o_country                    VARCHAR2(60);
11619       o_county                     VARCHAR2(60);
11620       o_province                   VARCHAR2(60);
11621       o_postal_code                VARCHAR2(60);
11622       o_attribute1                 VARCHAR2(150);
11623       o_attribute2                 VARCHAR2(150);
11624       o_attribute3                 VARCHAR2(150);
11625       o_attribute4                 VARCHAR2(150);
11626       o_attribute5                 VARCHAR2(150);
11627       o_attribute6                 VARCHAR2(150);
11628       o_attribute7                 VARCHAR2(150);
11629       o_attribute8                 VARCHAR2(150);
11630       o_attribute9                 VARCHAR2(150);
11631       o_attribute10                VARCHAR2(150);
11632 
11633       l_loc_assignment_exist       VARCHAR2(1) := 'N';
11634       l_is_remit_to_location       VARCHAR2(1) := 'N';
11635       l_debug_prefix                   VARCHAR2(30) := '';
11636 
11637   BEGIN
11638 
11639       --enable_debug;
11640 
11641       -- Debug info.
11642       /*IF g_debug THEN
11643           hz_utility_v2pub.debug ('tax_location_validation (+)');
11644       END IF;
11645       */
11646       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11647         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_location_validation (+)',
11648                                p_msg_level=>fnd_log.level_procedure);
11649       END IF;
11650 
11651       -- tax location validation:
11652 
11653       l_country        :=  p_location_rec.country;
11654       l_city           :=  p_location_rec.city;
11655       l_state          :=  p_location_rec.state;
11656       l_county         :=  p_location_rec.county;
11657       l_province       :=  p_location_rec.province;
11658       l_postal_code    :=  p_location_rec.postal_code;
11659       l_attribute1     :=  p_location_rec.attribute1;
11660       l_attribute2     :=  p_location_rec.attribute2;
11661       l_attribute3     :=  p_location_rec.attribute3;
11662       l_attribute4     :=  p_location_rec.attribute4;
11663       l_attribute5     :=  p_location_rec.attribute5;
11664       l_attribute6     :=  p_location_rec.attribute6;
11665       l_attribute7     :=  p_location_rec.attribute7;
11666       l_attribute8     :=  p_location_rec.attribute8;
11667       l_attribute9     :=  p_location_rec.attribute9;
11668       l_attribute10    :=  p_location_rec.attribute10;
11669 
11670       IF p_create_update_flag = 'C' THEN
11671           -- no validation to be done
11672           -- tax code will be populated when customer account site is created.
11673           null;
11674 
11675       ELSIF p_create_update_flag = 'U' THEN
11676 
11677           l_location_id :=  p_location_rec.location_id;
11678 
11679           -- check if the location is only used by prospect customers
11680 
11681           BEGIN
11682               SELECT  'Y'
11683               INTO    l_loc_assignment_exist
11684               FROM    DUAL
11685               WHERE   EXISTS (SELECT  1
11686                                FROM    hz_loc_assignments la
11687                                WHERE   la.location_id = l_location_id
11688                             );
11689               SELECT  'Y'
11690               INTO    l_is_remit_to_location
11691               FROM    DUAL
11692               WHERE   EXISTS (SELECT  1
11693                                FROM    hz_party_sites ps
11694                                WHERE   ps.location_id = l_location_id
11695                                AND     ps.party_id = -1
11696                             );
11697           EXCEPTION
11698               WHEN NO_DATA_FOUND THEN
11699               NULL;
11700           END;
11701 
11702 
11703           IF l_is_remit_to_location = 'N' and l_loc_assignment_exist = 'Y' THEN
11704 
11705               -- check if the taxable components are changed
11706               IF (  (p_location_rec.country IS NOT NULL
11707                          AND p_location_rec.country <> fnd_api.g_miss_char)
11708                      OR (p_location_rec.city IS NOT NULL
11709                          AND p_location_rec.city <> fnd_api.g_miss_char)
11710                      OR (p_location_rec.state IS NOT NULL
11711                          AND p_location_rec.state <> fnd_api.g_miss_char)
11712                      OR (p_location_rec.county IS NOT NULL
11713                          AND p_location_rec.county <> fnd_api.g_miss_char)
11714                      OR (p_location_rec.province IS NOT NULL
11715                          AND p_location_rec.province <> fnd_api.g_miss_char)
11716                      OR (p_location_rec.postal_code IS NOT NULL
11717                          AND p_location_rec.postal_code <> fnd_api.g_miss_char)
11718                      OR (p_location_rec.attribute1 IS NOT NULL
11719                          AND p_location_rec.attribute1 <> fnd_api.g_miss_char)
11720                      OR (p_location_rec.attribute2 IS NOT NULL
11721                          AND p_location_rec.attribute2 <> fnd_api.g_miss_char)
11722                      OR (p_location_rec.attribute3 IS NOT NULL
11723                          AND p_location_rec.attribute3 <> fnd_api.g_miss_char)
11724                      OR (p_location_rec.attribute4 IS NOT NULL
11725                          AND p_location_rec.attribute4 <> fnd_api.g_miss_char)
11726                      OR (p_location_rec.attribute5 IS NOT NULL
11727                          AND p_location_rec.attribute5 <> fnd_api.g_miss_char)
11728                      OR (p_location_rec.attribute6 IS NOT NULL
11729                          AND p_location_rec.attribute6 <> fnd_api.g_miss_char)
11730                      OR (p_location_rec.attribute7 IS NOT NULL
11731                          AND p_location_rec.attribute7 <> fnd_api.g_miss_char)
11732                      OR (p_location_rec.attribute8 IS NOT NULL
11733                          AND p_location_rec.attribute8 <> fnd_api.g_miss_char)
11734                      OR (p_location_rec.attribute9 IS NOT NULL
11735                          AND p_location_rec.attribute9 <> fnd_api.g_miss_char)
11736                      OR (p_location_rec.attribute10 IS NOT NULL
11737                          AND p_location_rec.attribute10 <> fnd_api.g_miss_char))
11738               THEN
11739                   BEGIN
11740                       SELECT country, city,  state, county, province,  postal_code,
11741                              attribute1, attribute2, attribute3, attribute4, attribute5,
11742                              attribute6, attribute7, attribute8, attribute9, attribute10
11743                       INTO   o_country, o_city, o_state, o_county, o_province, o_postal_code,
11744                              o_attribute1,o_attribute2,o_attribute3,o_attribute4,o_attribute5,
11745                              o_attribute6,o_attribute7,o_attribute8,o_attribute9,o_attribute10
11746                       FROM   HZ_LOCATIONS
11747                       WHERE  location_id = p_location_rec.location_id ;
11748 
11749                       IF (     o_country        <>   p_location_rec.country
11750                             OR  o_city           <>   p_location_rec.city
11751                             OR  o_state          <>   p_location_rec.state
11752                             OR  o_county         <>   p_location_rec.county
11753                             OR  o_province       <>   p_location_rec.province
11754                             OR  o_postal_code    <>   p_location_rec.postal_code
11755                             )
11756                       THEN
11757                           IF ARH_ADDR_PKG.check_tran_for_all_accts(p_location_rec.location_id)
11758                           THEN
11759                               fnd_message.set_name('AR', 'AR_CUST_ADDR_HAS_TRANSACTION');
11760 --Bug 2452282                 fnd_message.set_token('COLUMN', 'tax related fields');
11761                               fnd_msg_pub.add;
11762                               x_return_status := fnd_api.g_ret_sts_error;
11763                           ELSE -- non taxable components to be modified
11764                               null; -- allow updates
11765                           END IF;
11766                       END IF;
11767                   END; -- end of first select
11768               END IF; -- taxable components are not changed
11769           END IF; -- end of p_location_rec.location_id <> -1
11770       END IF;
11771 
11772       -- Debug info.
11773       /*IF g_debug THEN
11774           hz_utility_v2pub.debug ('tax_location_validation (-)');
11775       END IF;
11776       */
11777       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11778         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_location_validation (-)',
11779                                p_msg_level=>fnd_log.level_procedure);
11780       END IF;
11781 
11782       --disable_debug;
11783 
11784   END tax_location_validation;
11785 
11786   /**
11787    * PROCEDURE validate_relationship_type
11788    *
11789    * DESCRIPTION
11790    *     Validates relationship type record. Checks for
11791    *         uniqueness
11792    *         lookup types
11793    *         mandatory columns
11794    *         non-updateable fields
11795    *         foreign key validations
11796    *         other validations
11797    *
11798    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11799    *
11800    * ARGUMENTS
11801    *   IN:
11802    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
11803    *     p_relationship_type_rec        relationship type record.
11804    *     p_rowid                        Rowid of the record (used only in update mode).
11805    *   IN/OUT:
11806    *     x_return_status                Return status after the call. The status can
11807    *                                    be FND_API.G_RET_STS_SUCCESS (success),
11808    *                                    fnd_api.g_ret_sts_error (error),
11809    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
11810    *
11811    * NOTES
11812    *
11813    * MODIFICATION HISTORY
11814    *
11815    *   07-23-2001    Indrajit Sen       o Created.
11816    *   12-23-2003    Rajib Ranjan Borah o Bug 2751613.Combination of relationship phrase,subject_type
11817    *                                      and object_type should yield an unique phrase in the reverse
11818    *                                      direction.
11819    *   29-NOV-2004   S V Sowjanya        o Bug 3491584: Added a validation in procedure validate_relationship_type
11820    *                                       to throw an error message while creating non directional relationship type
11821    *                                       with different subject type and object type.
11822    *
11823    */
11824 
11825   PROCEDURE validate_relationship_type(
11826       p_create_update_flag                    IN      VARCHAR2,
11827       p_relationship_type_rec                 IN      HZ_RELATIONSHIP_TYPE_V2PUB.RELATIONSHIP_TYPE_REC_TYPE,
11828       p_rowid                                 IN      ROWID ,
11829       x_return_status                         IN OUT NOCOPY  VARCHAR2
11830  ) IS
11831 
11832       l_dummy                                          VARCHAR2(1);
11833       l_count                                          NUMBER;
11834       l_code                                           VARCHAR2(30);
11835       l_relationship_type                              HZ_RELATIONSHIP_TYPES.RELATIONSHIP_TYPE%TYPE;
11836       l_forward_rel_code                               HZ_RELATIONSHIP_TYPES.FORWARD_REL_CODE%TYPE;
11837       l_backward_rel_code                              HZ_RELATIONSHIP_TYPES.BACKWARD_REL_CODE%TYPE;
11838       l_direction_code                                 HZ_RELATIONSHIP_TYPES.DIRECTION_CODE%TYPE;
11839       l_create_party_flag                              HZ_RELATIONSHIP_TYPES.CREATE_PARTY_FLAG%TYPE;
11840       l_allow_relate_to_self_flag                      HZ_RELATIONSHIP_TYPES.ALLOW_RELATE_TO_SELF_FLAG%TYPE;
11841       l_allow_circular_relationships                   HZ_RELATIONSHIP_TYPES.ALLOW_CIRCULAR_RELATIONSHIPS%TYPE;
11842       l_hierarchical_flag                              HZ_RELATIONSHIP_TYPES.HIERARCHICAL_FLAG%TYPE;
11843       l_multiple_parent_allowed                        HZ_RELATIONSHIP_TYPES.MULTIPLE_PARENT_ALLOWED%TYPE;
11844       l_incl_unrelated_entities                        HZ_RELATIONSHIP_TYPES.INCL_UNRELATED_ENTITIES%TYPE;
11845       l_subject_type                                   HZ_RELATIONSHIP_TYPES.SUBJECT_TYPE%TYPE;
11846       l_object_type                                    HZ_RELATIONSHIP_TYPES.OBJECT_TYPE%TYPE;
11847       l_created_by_module                              VARCHAR2(150);
11848       l_application_id                                 NUMBER;
11849       l_status                                         VARCHAR2(1);
11850       l_debug_prefix                                   VARCHAR2(30) := '';
11851       l_role                                           VARCHAR2(30);
11852 
11853   BEGIN
11854 
11855       --enable_debug;
11856 
11857       -- Debug info.
11858       /*IF g_debug THEN
11859           hz_utility_v2pub.debug ('validate_relationship_type (+)');
11860       END IF;
11861       */
11862       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11863         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship_type (+)',
11864                                p_msg_level=>fnd_log.level_procedure);
11865     END IF;
11866 
11867       -- select columns needed to be checked from table during update
11868       IF (p_create_update_flag = 'U') THEN
11869           SELECT RELATIONSHIP_TYPE,
11870                  FORWARD_REL_CODE,
11871                  BACKWARD_REL_CODE,
11872                  DIRECTION_CODE,
11873                  HIERARCHICAL_FLAG,
11874                  CREATE_PARTY_FLAG,
11875                  ALLOW_RELATE_TO_SELF_FLAG,
11876                  ALLOW_CIRCULAR_RELATIONSHIPS,
11877                  MULTIPLE_PARENT_ALLOWED,
11878                  INCL_UNRELATED_ENTITIES,
11879                  SUBJECT_TYPE,
11880                  OBJECT_TYPE,
11881                  ROLE,
11882                  CREATED_BY_MODULE,
11883                  APPLICATION_ID
11884           INTO   l_relationship_type,
11885                  l_forward_rel_code,
11886                  l_backward_rel_code,
11887                  l_direction_code,
11888                  l_hierarchical_flag,
11889                  l_create_party_flag,
11890                  l_allow_relate_to_self_flag,
11891                  l_allow_circular_relationships,
11892                  l_multiple_parent_allowed,
11893                  l_incl_unrelated_entities,
11894                  l_subject_type,
11895                  l_object_type,
11896                  l_role,
11897                  l_created_by_module,
11898                  l_application_id
11899           FROM   HZ_RELATIONSHIP_TYPES
11900           WHERE  ROWID = p_rowid;
11901       END IF;
11902 
11903 
11904       -- Validate the nonupdateability of ROLE
11905 
11906        IF (p_create_update_flag = 'U') THEN
11907           validate_nonupdateable (
11908           p_column                               => 'ROLE',
11909           p_column_value                         => p_relationship_type_rec.forward_role,
11910           p_old_column_value                     => l_role,
11911           x_return_status                        => x_return_status
11912           );
11913           --------Bug no: 3564107 ---------------------------------
11914           BEGIN
11915             SELECT ROLE INTO l_role
11916             FROM   HZ_RELATIONSHIP_TYPES
11917             WHERE  RELATIONSHIP_TYPE = l_relationship_type
11918             AND    FORWARD_REL_CODE  = l_backward_rel_code
11919             AND    BACKWARD_REL_CODE = l_forward_rel_code
11920             AND    SUBJECT_TYPE      = l_object_type
11921             AND    OBJECT_TYPE       = l_subject_type
11922             AND ROWNUM               = 1;
11923 
11924             validate_nonupdateable (
11925             p_column                               => 'ROLE',
11926             p_column_value                         => p_relationship_type_rec.backward_role,
11927             p_old_column_value                     => l_role,
11928             x_return_status                        => x_return_status
11929             );
11930           EXCEPTION
11931            WHEN NO_DATA_FOUND THEN
11932             NULL;
11933           END;
11934           --------End of Bug no: 3564107 ---------------------------------
11935         END IF;
11936 
11937       /* -- Raise an error if user tries to update forward role to NULL
11938       IF (p_create_update_flag = 'U') THEN
11939        validate_cannot_update_to_null (
11940         p_column              => 'role',
11941         p_column_value        => p_relationship_type_rec.forward_role,
11942         x_return_status       => x_return_status
11943       );
11944 
11945        -- Raise an error if user tries to update backward role to NULL
11946       IF (p_create_update_flag = 'U') THEN
11947        validate_cannot_update_to_null (
11948         p_column              => 'role',
11949         p_column_value        => p_relationship_type_rec.backward_role,
11950         x_return_status       => x_return_status
11951       );
11952       END IF;*/
11953 
11954       /*-- validate forward_role
11955              IF (p_create_update_flag = 'U') THEN
11956        validate_lookup (
11957               p_column                                => 'role',
11958               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
11959               p_column_value                          => p_relationship_type_rec.forward_role,
11960               x_return_status                         => x_return_status);
11961        END IF;
11962 
11963        -- validate backward_role
11964              IF (p_create_update_flag = 'U') THEN
11965        validate_lookup (
11966               p_column                                => 'role',
11967               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
11968               p_column_value                          => p_relationship_type_rec.backward_role,
11969               x_return_status                         => x_return_status);
11970        END IF;    */
11971 
11972 
11973       -----------------------------
11974       -- validate relationship_type
11975       -----------------------------
11976 
11977       -- relationship_type is mandatory
11978       validate_mandatory (
11979           p_create_update_flag                    => p_create_update_flag,
11980           p_column                                => 'relationship_type',
11981           p_column_value                          => p_relationship_type_rec.relationship_type,
11982           x_return_status                         => x_return_status);
11983 
11984       /*IF g_debug THEN
11985           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11986               'relationship_type is mandatory. ' ||
11987               'x_return_status = ' || x_return_status, l_debug_prefix);
11988       END IF;
11989       */
11990       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11991            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is mandatory. ' ||
11992                         'x_return_status = ' || x_return_status,
11993                                   p_msg_level=>fnd_log.level_statement);
11994       END IF;
11995 
11996 
11997       -- relationship_type is non-updateable
11998       IF p_create_update_flag = 'U' THEN
11999           validate_nonupdateable (
12000               p_column                                => 'relationship_type',
12001               p_column_value                          => p_relationship_type_rec.relationship_type,
12002               p_old_column_value                      => l_relationship_type,
12003               x_return_status                         => x_return_status);
12004           END IF;
12005 
12006           /*IF g_debug THEN
12007               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12008                   'relationship_type is non-updateable. ' ||
12009                   'x_return_status = ' || x_return_status, l_debug_prefix);
12010           END IF;
12011           */
12012           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12013             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is non-updateable. ' ||
12014                                 'x_return_status = ' || x_return_status,
12015                                   p_msg_level=>fnd_log.level_statement);
12016            END IF;
12017 
12018 
12019 
12020 
12021       ------------------
12022       -- validate status
12023       ------------------
12024 
12025       -- status cannot be set to null during update
12026       IF p_create_update_flag = 'U' THEN
12027           validate_cannot_update_to_null (
12028               p_column                                => 'status',
12029               p_column_value                          => p_relationship_type_rec.status,
12030               x_return_status                         => x_return_status);
12031 
12032           /*IF g_debug THEN
12033               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12034                   'status cannot be set to null during update. ' ||
12035                   'x_return_status = ' || x_return_status, l_debug_prefix);
12036           END IF;
12037           */
12038           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12039                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be set to null during update. ' ||
12040                   'x_return_status = ' || x_return_status,
12041                                   p_msg_level=>fnd_log.level_statement);
12042           END IF;
12043 
12044 
12045       END IF;
12046 
12047       -- status is lookup code in lookup type CODE_STATUS
12048       IF p_relationship_type_rec.status IS NOT NULL
12049          AND
12050          p_relationship_type_rec.status <> fnd_api.g_miss_char
12051          AND
12052          (p_create_update_flag = 'C'
12053           OR
12054           (p_create_update_flag = 'U'
12055            AND
12056            p_relationship_type_rec.status <> NVL(l_status, fnd_api.g_miss_char)
12057          )
12058         )
12059       THEN
12060           validate_lookup (
12061               p_column                                => 'status',
12062               p_lookup_type                           => 'CODE_STATUS',
12063               p_column_value                          => p_relationship_type_rec.status,
12064               x_return_status                         => x_return_status);
12065 
12066           /*IF g_debug THEN
12067               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12068                   'status is lookup code in lookup type CODE_STATUS. ' ||
12069                   'x_return_status = ' || x_return_status, l_debug_prefix);
12070           END IF;
12071           */
12072           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12073                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12074                 p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
12075                                 'x_return_status = ' || x_return_status,
12076                                   p_msg_level=>fnd_log.level_statement);
12077           END IF;
12078 
12079 
12080       END IF;
12081 
12082       -----------------------------
12083       -- validate create_party_flag
12084       -----------------------------
12085 
12086       -- create_party_flag is lookup code in lookup type YES/NO
12087       validate_lookup (
12088           p_column                                => 'create_party_flag',
12089           p_lookup_type                           => 'YES/NO',
12090           p_column_value                          => p_relationship_type_rec.create_party_flag,
12091           x_return_status                         => x_return_status);
12092 
12093       /*IF g_debug THEN
12094           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12095               'create_party_flag should be in lookup YES/NO. ' ||
12096               'x_return_status = ' || x_return_status, l_debug_prefix);
12097       END IF;
12098       */
12099       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12100            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'create_party_flag should be in lookup YES/NO. ' ||
12101                  'x_return_status = ' || x_return_status,
12102                                   p_msg_level=>fnd_log.level_statement);
12103      END IF;
12104 
12105 
12106       -- create_party_flag is non-updateable if relationship records are already created based
12107       -- on the current value of the flag
12108       IF p_create_update_flag = 'U' THEN
12109           IF p_relationship_type_rec.create_party_flag <> fnd_api.g_miss_char
12110              AND
12111              p_relationship_type_rec.create_party_flag IS NOT NULL
12112              AND
12113              p_relationship_type_rec.create_party_flag <> l_create_party_flag
12114           THEN
12115               IF l_create_party_flag = 'Y' AND p_relationship_type_rec.create_party_flag = 'N' THEN
12116                   -- check if there is any relationship with this relationship type having a party.
12117                   -- if there is, do not allow the update
12118                   BEGIN
12119                       SELECT 1 INTO l_count
12120                       FROM   HZ_RELATIONSHIPS
12121                       WHERE  RELATIONSHIP_TYPE = l_relationship_type
12122                       AND    SUBJECT_TYPE = l_subject_type
12123                       AND    OBJECT_TYPE = l_object_type
12124                       AND    RELATIONSHIP_CODE = l_forward_rel_code
12125                       AND    PARTY_ID IS NOT NULL
12126                       AND    STATUS = 'A'
12127                       AND    TRUNC(SYSDATE) BETWEEN TRUNC(START_DATE) AND TRUNC(NVL(END_DATE, SYSDATE))
12128                       AND    ROWNUM = 1;
12129 
12130                       -- update is not allowed, raise error
12131                       fnd_message.set_name('AR', 'HZ_API_CPF_NON_UPDATEABLE');
12132                       fnd_msg_pub.add;
12133                       x_return_status := fnd_api.g_ret_sts_error;
12134 
12135                    EXCEPTION
12136                        WHEN NO_DATA_FOUND THEN
12137                            NULL;
12138                    END;
12139                END IF;
12140 
12141                IF l_create_party_flag = 'N' AND p_relationship_type_rec.create_party_flag = 'Y' THEN
12142                    -- check if there is any relationship with this relationship type not having a party.
12143                    -- if there is, do not allow the update.
12144                   BEGIN
12145                       SELECT 1 INTO l_count
12146                       FROM   HZ_RELATIONSHIPS
12147                       WHERE  RELATIONSHIP_TYPE = l_relationship_type
12148                       AND    SUBJECT_TYPE = l_subject_type
12149                       AND    OBJECT_TYPE = l_object_type
12150                       AND    RELATIONSHIP_CODE = l_forward_rel_code
12151                       AND    PARTY_ID IS NULL
12152                       AND    STATUS = 'A'
12153                       AND    TRUNC(SYSDATE) BETWEEN TRUNC(START_DATE) AND TRUNC(NVL(END_DATE, SYSDATE))
12154                       AND    ROWNUM = 1;
12155 
12156                       -- update is not allowed, raise error
12157                       fnd_message.set_name('AR', 'HZ_API_CPF_NON_UPDATEABLE');
12158                       fnd_msg_pub.add;
12159                       x_return_status := fnd_api.g_ret_sts_error;
12160 
12161                    EXCEPTION
12162                        WHEN NO_DATA_FOUND THEN
12163                            NULL;
12164                    END;
12165 
12166               END IF;
12167           END IF;
12168       END IF;
12169 
12170       /*IF g_debug THEN
12171           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12172               'create_party_flag is updateable/non-updateable. ' ||
12173               'x_return_status = ' || x_return_status, l_debug_prefix);
12174       END IF;
12175       */
12176       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12177            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'create_party_flag is updateable/non-updateable. ' ||
12178                 'x_return_status = ' || x_return_status,
12179                                   p_msg_level=>fnd_log.level_statement);
12180       END IF;
12181 
12182 
12183       -----------------------------
12184       -- validate allow_circular_relationships
12185       -----------------------------
12186 
12187       -- allow_circular_relationships is lookup code in lookup type YES/NO
12188       validate_lookup (
12189           p_column                                => 'allow_circular_relationships',
12190           p_lookup_type                           => 'YES/NO',
12191           p_column_value                          => p_relationship_type_rec.allow_circular_relationships,
12192           x_return_status                         => x_return_status);
12193 
12194       /*IF g_debug THEN
12195           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12196               'allow_circular_relationships should be in lookup YES/NO. ' ||
12197               'x_return_status = ' || x_return_status, l_debug_prefix);
12198       END IF;
12199       */
12200       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12201            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12202            p_message=>'allow_circular_relationships should be in lookup YES/NO. ' ||
12203               'x_return_status = ' || x_return_status,
12204                                   p_msg_level=>fnd_log.level_statement);
12205        END IF;
12206 
12207 
12208       -- allow_circular_relationships is non-updateable
12209       IF p_create_update_flag = 'U' THEN
12210           validate_nonupdateable (
12211               p_column                                => 'allow_circular_relationships',
12212               p_column_value                          => p_relationship_type_rec.allow_circular_relationships,
12213               p_old_column_value                      => l_allow_circular_relationships,
12214               x_return_status                         => x_return_status);
12215 
12216           /*IF g_debug THEN
12217               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12218                   'allow_circular_relationships is non-updateable. ' ||
12219                   'x_return_status = ' || x_return_status, l_debug_prefix);
12220           END IF;
12221           */
12222           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12223             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12224             p_message=>'allow_circular_relationships is non-updateable. ' ||
12225                   'x_return_status = ' || x_return_status,
12226                                   p_msg_level=>fnd_log.level_statement);
12227           END IF;
12228 
12229 
12230       END IF;
12231 
12232       -------------------------------------
12233       -- validate allow_relate_to_self_flag
12234       -------------------------------------
12235 
12236       -- allow_relate_to_self_flag is lookup code in lookup type YES/NO
12237       validate_lookup (
12238           p_column                                => 'allow_relate_to_self_flag',
12239           p_lookup_type                           => 'YES/NO',
12240           p_column_value                          => p_relationship_type_rec.allow_relate_to_self_flag,
12241           x_return_status                         => x_return_status);
12242 
12243       /*IF g_debug THEN
12244           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12245               'allow_relate_to_self_flag should be in lookup YES/NO. ' ||
12246               'x_return_status = ' || x_return_status, l_debug_prefix);
12247       END IF;
12248       */
12249       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12250            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12251            p_message=>'allow_relate_to_self_flag should be in lookup YES/NO. ' ||
12252                                         'x_return_status = ' || x_return_status,
12253                                   p_msg_level=>fnd_log.level_statement);
12254       END IF;
12255 
12256 
12257       -- allow_relate_to_self_flag is non-updateable
12258       IF p_create_update_flag = 'U' THEN
12259           validate_nonupdateable (
12260               p_column                                => 'allow_relate_to_self_flag',
12261               p_column_value                          => p_relationship_type_rec.allow_relate_to_self_flag,
12262               p_old_column_value                      => l_allow_relate_to_self_flag,
12263               x_return_status                         => x_return_status);
12264 
12265           /*IF g_debug THEN
12266               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12267                   'allow_relate_to_self_flag is non-updateable. ' ||
12268                   'x_return_status = ' || x_return_status, l_debug_prefix);
12269           END IF;
12270           */
12271           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12272            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'allow_relate_to_self_flag is non-updateable. ' ||
12273                         'x_return_status = ' || x_return_status,
12274                                   p_msg_level=>fnd_log.level_statement);
12275          END IF;
12276 
12277 
12278       END IF;
12279 
12280       ----------------------------
12281       -- validate forward_rel_code
12282       ----------------------------
12283 
12284       -- forward_rel_code is mandatory
12285       validate_mandatory (
12286           p_create_update_flag                    => p_create_update_flag,
12287           p_column                                => 'forward_rel_code',
12288           p_column_value                          => p_relationship_type_rec.forward_rel_code,
12289           x_return_status                         => x_return_status);
12290 
12291       -- forward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE
12292       validate_lookup (
12293           p_column                                => 'forward_rel_code',
12294           p_lookup_type                           => 'PARTY_RELATIONS_TYPE',
12295           p_column_value                          => p_relationship_type_rec.forward_rel_code,
12296           x_return_status                         => x_return_status);
12297 
12298       /*IF g_debug THEN
12299           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12300               'forward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12301               'x_return_status = ' || x_return_status, l_debug_prefix);
12302       END IF;
12303       */
12304       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12305            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12306            p_message=>'forward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12307               'x_return_status = ' || x_return_status,
12308                                   p_msg_level=>fnd_log.level_statement);
12309       END IF;
12310 
12311 
12312       -- forward_rel_code is non-updateable
12313       IF p_create_update_flag = 'U' THEN
12314           validate_nonupdateable (
12315               p_column                                => 'forward_rel_code',
12316               p_column_value                          => p_relationship_type_rec.forward_rel_code,
12317               p_old_column_value                      => l_forward_rel_code,
12318               x_return_status                         => x_return_status);
12319 
12320           /*IF g_debug THEN
12321               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12322                   'forward_rel_code is non-updateable. ' ||
12323                   'x_return_status = ' || x_return_status, l_debug_prefix);
12324           END IF;
12325           */
12326           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12327             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'forward_rel_code is non-updateable. ' ||
12328                   'x_return_status = ' || x_return_status,
12329                                   p_msg_level=>fnd_log.level_statement);
12330           END IF;
12331 
12332 
12333       END IF;
12334 
12335       -----------------------------
12336       -- validate backward_rel_code
12337       -----------------------------
12338 
12339       -- backward_rel_code is mandatory
12340       validate_mandatory (
12341           p_create_update_flag                    => p_create_update_flag,
12342           p_column                                => 'backward_rel_code',
12343           p_column_value                          => p_relationship_type_rec.backward_rel_code,
12344           x_return_status                         => x_return_status);
12345 
12346       -- backward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE
12347       validate_lookup (
12348           p_column                                => 'backward_rel_code',
12349           p_lookup_type                           => 'PARTY_RELATIONS_TYPE',
12350           p_column_value                          => p_relationship_type_rec.backward_rel_code,
12351           x_return_status                         => x_return_status);
12352 
12353       /*IF g_debug THEN
12354           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12355               'backward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12356               'x_return_status = ' || x_return_status, l_debug_prefix);
12357       END IF;
12358       */
12359       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12360            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12361            p_message=>'backward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12362               'x_return_status = ' || x_return_status,
12363                                   p_msg_level=>fnd_log.level_statement);
12364       END IF;
12365 
12366 
12367       -- backward_rel_code is non-updateable
12368       IF p_create_update_flag = 'U' THEN
12369           validate_nonupdateable (
12370               p_column                                => 'backward_rel_code',
12371               p_column_value                          => p_relationship_type_rec.backward_rel_code,
12372               p_old_column_value                      => l_backward_rel_code,
12373               x_return_status                         => x_return_status);
12374 
12375           /*IF g_debug THEN
12376               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12377                   'backward_rel_code is non-updateable. ' ||
12378                   'x_return_status = ' || x_return_status, l_debug_prefix);
12379           END IF;
12380           */
12381           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12382             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'backward_rel_code is non-updateable. ' ||
12383                   'x_return_status = ' || x_return_status,
12384                                   p_msg_level=>fnd_log.level_statement);
12385           END IF;
12386 
12387 
12388       END IF;
12389 
12390       -----------------------------
12391       -- validate direction_code
12392       -----------------------------
12393 
12394       -- direction_code is mandatory
12395       validate_mandatory (
12396           p_create_update_flag                    => p_create_update_flag,
12397           p_column                                => 'direction_code',
12398           p_column_value                          => p_relationship_type_rec.direction_code,
12399           x_return_status                         => x_return_status);
12400 
12401       /*IF g_debug THEN
12402           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12403               'direction_code is mandatory. ' ||
12404               'x_return_status = ' || x_return_status, l_debug_prefix);
12405       END IF;
12406       */
12407       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12408            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'direction_code is mandatory. ' ||
12409               'x_return_status = ' || x_return_status,
12410                                   p_msg_level=>fnd_log.level_statement);
12411       END IF;
12412 
12413 
12414       -- direction_code is lookup code in lookup type DIRECTION_CODE
12415       validate_lookup (
12416           p_column                                => 'direction_code',
12417           p_lookup_type                           => 'DIRECTION_CODE',
12418           p_column_value                          => p_relationship_type_rec.direction_code,
12419           x_return_status                         => x_return_status);
12420 
12421       /*IF g_debug THEN
12422           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12423               'direction_code is lookup code in lookup type DIRECTION_CODE. ' ||
12424               'x_return_status = ' || x_return_status, l_debug_prefix);
12425       END IF;
12426       */
12427       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12428            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12429            p_message=>'direction_code is lookup code in lookup type DIRECTION_CODE. ' ||
12430               'x_return_status = ' || x_return_status,
12431                                   p_msg_level=>fnd_log.level_statement);
12432        END IF;
12433 
12434 
12435       -- direction_code is non-updateable
12436       IF p_create_update_flag = 'U' THEN
12437           validate_nonupdateable (
12438               p_column                                => 'direction_code',
12439               p_column_value                          => p_relationship_type_rec.direction_code,
12440               p_old_column_value                      => l_direction_code,
12441               x_return_status                         => x_return_status);
12442 
12443           /*IF g_debug THEN
12444               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12445                   'direction_code is non-updateable. ' ||
12446                   'x_return_status = ' || x_return_status, l_debug_prefix);
12447           END IF;
12448           */
12449           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12450             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'direction_code is non-updateable. ' ||
12451                   'x_return_status = ' || x_return_status,
12452                                   p_msg_level=>fnd_log.level_statement);
12453           END IF;
12454 
12455 
12456       END IF;
12457 
12458       --------------------
12459       -- validate subject_type
12460       --------------------
12461 
12462       -- subject_type is mandatory
12463       validate_mandatory (
12464           p_create_update_flag                    => p_create_update_flag,
12465           p_column                                => 'subject_type',
12466           p_column_value                          => p_relationship_type_rec.subject_type,
12467           x_return_status                         => x_return_status);
12468 
12469       /*IF g_debug THEN
12470           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12471               'subject_type is mandatory. ' ||
12472               'x_return_status = ' || x_return_status, l_debug_prefix);
12473       END IF;
12474       */
12475       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12476            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is mandatory. ' ||
12477               'x_return_status = ' || x_return_status,
12478                                   p_msg_level=>fnd_log.level_statement);
12479       END IF;
12480 
12481 
12482       -- subject_type has foreign key fnd_object_instance_sets.instance_set_name
12483       IF p_relationship_type_rec.subject_type IS NOT NULL
12484          AND
12485          p_relationship_type_rec.subject_type <> fnd_api.g_miss_char
12486       THEN
12487           BEGIN
12488               SELECT 'Y'
12489               INTO   l_dummy
12490               FROM   FND_OBJECT_INSTANCE_SETS
12491               WHERE  INSTANCE_SET_NAME = p_relationship_type_rec.subject_type;
12492           EXCEPTION
12493               WHEN NO_DATA_FOUND THEN
12494                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
12495                   fnd_message.set_token('FK', 'subject_type');
12496                   fnd_message.set_token('COLUMN', 'instance_set_name');
12497                   fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
12498                   fnd_msg_pub.add;
12499                   x_return_status := fnd_api.g_ret_sts_error;
12500           END;
12501 
12502           /*IF g_debug THEN
12503               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12504                   'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12505                   'x_return_status = ' || x_return_status, l_debug_prefix);
12506           END IF;
12507           */
12508           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12509              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12510              p_message=>'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12511                   'x_return_status = ' || x_return_status,
12512                                   p_msg_level=>fnd_log.level_statement);
12513           END IF;
12514 
12515 
12516       END IF;
12517 
12518       -- subject_type is non-updateable
12519       IF p_create_update_flag = 'U' THEN
12520           validate_nonupdateable (
12521               p_column                                => 'subject_type',
12522               p_column_value                          => p_relationship_type_rec.subject_type,
12523               p_old_column_value                      => l_subject_type,
12524               x_return_status                         => x_return_status);
12525 
12526           /*IF g_debug THEN
12527               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12528                   'subject_type is non-updateable. ' ||
12529                   'x_return_status = ' || x_return_status, l_debug_prefix);
12530           END IF;
12531           */
12532           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12533            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is non-updateable. ' ||
12534                   'x_return_status = ' || x_return_status,
12535                                   p_msg_level=>fnd_log.level_statement);
12536           END IF;
12537 
12538 
12539       END IF;
12540 
12541       --------------------
12542       -- validate object_type
12543       --------------------
12544 
12545       -- object_type is mandatory
12546       validate_mandatory (
12547           p_create_update_flag                    => p_create_update_flag,
12548           p_column                                => 'object_type',
12549           p_column_value                          => p_relationship_type_rec.object_type,
12550           x_return_status                         => x_return_status);
12551 
12552       /*IF g_debug THEN
12553           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12554               'object_type is mandatory. ' ||
12555               'x_return_status = ' || x_return_status, l_debug_prefix);
12556       END IF;
12557       */
12558       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12559            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is mandatory. ' ||
12560               'x_return_status = ' || x_return_status,
12561                                   p_msg_level=>fnd_log.level_statement);
12562        END IF;
12563 
12564 
12565       -- object_type has foreign key fnd_object_instance_sets.instance_set_name
12566       IF p_relationship_type_rec.object_type IS NOT NULL
12567          AND
12568          p_relationship_type_rec.object_type <> fnd_api.g_miss_char
12569       THEN
12570           BEGIN
12571               SELECT 'Y'
12572               INTO   l_dummy
12573               FROM   FND_OBJECT_INSTANCE_SETS
12574               WHERE  INSTANCE_SET_NAME = p_relationship_type_rec.object_type;
12575           EXCEPTION
12576               WHEN NO_DATA_FOUND THEN
12577                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
12578                   fnd_message.set_token('FK', 'object_type');
12579                   fnd_message.set_token('COLUMN', 'instance_set_name');
12580                   fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
12581                   fnd_msg_pub.add;
12582                   x_return_status := fnd_api.g_ret_sts_error;
12583           END;
12584 
12585           /*IF g_debug THEN
12586               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12587                   'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12588                   'x_return_status = ' || x_return_status, l_debug_prefix);
12589           END IF;
12590           */
12591           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12592            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12593            p_message=>'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12594                   'x_return_status = ' || x_return_status,
12595                                   p_msg_level=>fnd_log.level_statement);
12596           END IF;
12597 
12598 
12599       END IF;
12600 
12601       -- object_type is non-updateable
12602       IF p_create_update_flag = 'U' THEN
12603           validate_nonupdateable (
12604               p_column                                => 'object_type',
12605               p_column_value                          => p_relationship_type_rec.object_type,
12606               p_old_column_value                      => l_object_type,
12607               x_return_status                         => x_return_status);
12608 
12609           /*IF g_debug THEN
12610               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12611                   'object_type is non-updateable. ' ||
12612                   'x_return_status = ' || x_return_status, l_debug_prefix);
12613           END IF;
12614           */
12615           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12616                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is non-updateable. ' ||
12617                   'x_return_status = ' || x_return_status,
12618                                   p_msg_level=>fnd_log.level_statement);
12619           END IF;
12620 
12621 
12622       END IF;
12623 
12624       ---------------------------
12625       -- validate the combination
12626       ---------------------------
12627 
12628       -- the combination of FORWARD_REL_CODE, SUBJECT_TYPE, OBJECT_TYPE should be
12629       -- able to identify a unique BACKWARD_REL_CODE. Thus a second record with same
12630       -- combination of FORWARD_REL_CODE, SUBJECT_TYPE, OBJECT_TYPE should have
12631       -- same BACKWARD_REL_CODE.
12632       -- 07/23/2002. this validation has been enhanced to apply the validation within a
12633       -- relationship type rather than doing the validation across all relatiosnhip
12634       -- types. bug 2453736.
12635       -- first check whether there is one such record
12636       -- Bug 2751613.This validation should work for all the different combinations.
12637 /* Bug 2751613.
12638  |    SELECT COUNT(*)
12639  |    INTO   l_count
12640  |    FROM   HZ_RELATIONSHIP_TYPES
12641  |    WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
12642  |    AND    FORWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12643  |    AND    SUBJECT_TYPE = p_relationship_type_rec.subject_type
12644  |    AND    OBJECT_TYPE = p_relationship_type_rec.object_type;
12645  |
12646  |    IF l_count > 0 THEN
12647  |        --since there is one or more such records, we need to get the backward_rel_code
12648  |        SELECT BACKWARD_REL_CODE
12649  |        INTO   l_code
12650  |        FROM   HZ_RELATIONSHIP_TYPES
12651  |        WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
12652  |        AND    FORWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12653  |        AND    SUBJECT_TYPE = p_relationship_type_rec.subject_type
12654  |        AND    OBJECT_TYPE = p_relationship_type_rec.object_type
12655  |        AND    ROWNUM = 1;
12656  |        -- if the backward_rel_code passed do not match with whatever
12657  |        -- obtained from above query, error out NOCOPY
12658  |        IF l_code <> p_relationship_type_rec.backward_rel_code then
12659  |            fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION');
12660  |            fnd_msg_pub.add;
12661  |            x_return_status := FND_API.G_RET_STS_ERROR;
12662  |        END IF;
12663  |    END IF;
12664  */
12665 
12666       -- Bug 2751613.
12667       SELECT COUNT(*)
12668       INTO   l_count
12669       FROM   HZ_RELATIONSHIP_TYPES
12670       WHERE
12671            (
12672            RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
12673            )
12674           AND
12675            (
12676             (
12677              (SUBJECT_TYPE = p_relationship_type_rec.subject_type
12678              AND    OBJECT_TYPE = p_relationship_type_rec.object_type
12679              )
12680             AND
12681              (
12682               (BACKWARD_REL_CODE <> p_relationship_type_rec.backward_rel_code
12683               AND  FORWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12684               )
12685              OR
12686               (BACKWARD_REL_CODE = p_relationship_type_rec.backward_rel_code
12687               AND   FORWARD_REL_CODE <> p_relationship_type_rec.forward_rel_code
12688               )
12689              )
12690             )
12691            OR
12692             (
12693              (SUBJECT_TYPE = p_relationship_type_rec.object_type
12694              AND    OBJECT_TYPE = p_relationship_type_rec.subject_type
12695              )
12696             AND
12697              (
12698               (BACKWARD_REL_CODE <> p_relationship_type_rec.forward_rel_code
12699               AND  FORWARD_REL_CODE = p_relationship_type_rec.backward_rel_code
12700               )
12701              OR
12702               (BACKWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12703               AND   FORWARD_REL_CODE <> p_relationship_type_rec.backward_rel_code
12704               )
12705              )
12706             )
12707            );
12708 
12709       IF l_count <> 0
12710       THEN
12711         fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION');
12712               fnd_msg_pub.add;
12713               x_return_status := FND_API.G_RET_STS_ERROR;
12714       END IF;
12715 
12716       /*IF g_debug THEN
12717           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12718               'validate the combination of forward_rel_code, subject_type, object_type. ' ||
12719               'x_return_status = ' || x_return_status, l_debug_prefix);
12720       END IF;
12721       */
12722       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12723            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12724            p_message=>'validate the combination of forward_rel_code,backward_rel_code, subject_type, object_type. ' ||
12725               'x_return_status = ' || x_return_status,
12726                                   p_msg_level=>fnd_log.level_statement);
12727       END IF;
12728 
12729 
12730       -----------------------------
12731       -- check for duplicate record
12732       -----------------------------
12733 
12734       -- check for duplicate record
12735       BEGIN
12736           SELECT 1
12737           INTO   l_count
12738           FROM   HZ_RELATIONSHIP_TYPES
12739           WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
12740           AND    FORWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12741           AND    BACKWARD_REL_CODE = p_relationship_type_rec.backward_rel_code
12742           AND    SUBJECT_TYPE = p_relationship_type_rec.subject_type
12743           AND    OBJECT_TYPE = p_relationship_type_rec.object_type
12744           AND    RELATIONSHIP_TYPE_ID <> NVL(p_relationship_type_rec.relationship_type_id,-1);
12745 
12746           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
12747           fnd_message.set_token('COLUMN', 'relationship type, forward rel code, backward rel code, subject type, object type');
12748           fnd_msg_pub.add;
12749           x_return_status := fnd_api.g_ret_sts_error;
12750 
12751       EXCEPTION
12752           WHEN NO_DATA_FOUND THEN
12753               NULL;
12754       END;
12755 
12756       /*IF g_debug THEN
12757           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12758               'check for duplicate record. ' ||
12759               'x_return_status = ' || x_return_status, l_debug_prefix);
12760       END IF;
12761       */
12762       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12763            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'check for duplicate record. ' ||
12764               'x_return_status = ' || x_return_status,
12765                                   p_msg_level=>fnd_log.level_statement);
12766       END IF;
12767 
12768 
12769       --------------------------
12770       -- validate direction_code
12771       --------------------------
12772 
12773       -- if forward_rel_code and backward_rel_code are same then direction_flag
12774       -- cannot be 'P' or 'C'
12775       IF p_relationship_type_rec.forward_rel_code = p_relationship_type_rec.backward_rel_code
12776          AND
12777          p_relationship_type_rec.direction_code <> 'N'
12778       THEN
12779           fnd_message.set_name('AR', 'HZ_INVALID_DIRECTION_CODE1');
12780           fnd_msg_pub.add;
12781           x_return_status := FND_API.G_RET_STS_ERROR;
12782       END IF;
12783 
12784       -- if forward_rel_code and backward_rel_code are not same then direction_flag
12785       -- cannot be 'N'
12786       IF p_relationship_type_rec.forward_rel_code <> p_relationship_type_rec.backward_rel_code
12787          AND p_relationship_type_rec.direction_code = 'N'
12788       THEN
12789           fnd_message.set_name('AR', 'HZ_INVALID_DIRECTION_CODE2');
12790           fnd_msg_pub.add;
12791           x_return_status := FND_API.G_RET_STS_ERROR;
12792       END IF;
12793 
12794       /*IF g_debug THEN
12795           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12796               'validate direction_code. ' ||
12797               'x_return_status = ' || x_return_status, l_debug_prefix);
12798       END IF;
12799       */
12800       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12801            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate direction_code. ' ||
12802               'x_return_status = ' || x_return_status,
12803                                   p_msg_level=>fnd_log.level_statement);
12804       END IF;
12805 
12806 
12807     -----------------------------
12808     -- validate hierarchical_flag
12809     -----------------------------
12810 
12811     -- hierarchical_flag is lookup code in lookup type YES/NO
12812     validate_lookup (
12813         p_column                                => 'hierarchical_flag',
12814         p_lookup_type                           => 'YES/NO',
12815         p_column_value                          => p_relationship_type_rec.hierarchical_flag,
12816         x_return_status                         => x_return_status );
12817 
12818     /*IF G_DEBUG THEN
12819         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12820             'hierarchical_flag in lookup YES/NO. ' ||
12821             'x_return_status = ' || x_return_status, l_debug_prefix );
12822     END IF;
12823     */
12824     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12825            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'hierarchical_flag in lookup YES/NO. ' ||
12826             'x_return_status = ' || x_return_status,
12827                                   p_msg_level=>fnd_log.level_statement);
12828     END IF;
12829 
12830 
12831     -- hierarchical_flag is non-updateable
12832     IF p_create_update_flag = 'U' THEN
12833         validate_nonupdateable (
12834             p_column                                => 'hierarchical_flag',
12835             p_column_value                          => p_relationship_type_rec.hierarchical_flag,
12836             p_old_column_value                      => l_hierarchical_flag,
12837             x_return_status                         => x_return_status);
12838 
12839         /*IF g_debug THEN
12840             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12841                 'hierarchical_flag is non-updateable. ' ||
12842                 'x_return_status = ' || x_return_status, l_debug_prefix);
12843         END IF;
12844         */
12845         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12846            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'hierarchical_flag is non-updateable. ' ||
12847                 'x_return_status = ' || x_return_status,
12848                                   p_msg_level=>fnd_log.level_statement);
12849         END IF;
12850 
12851 
12852     END IF;
12853 
12854     ----------------------------------------------------------------------------
12855     -- validate combination of hierarchical_flag and allow_circular_relationship
12856     ----------------------------------------------------------------------------
12857     -- needed only during creation since these columns cannot be updated
12858     IF p_create_update_flag = 'C' THEN
12859         -- if hierarchical_flag = 'Y', then allow_circular_relationships must be 'N'
12860         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'Y' THEN
12861             IF p_relationship_type_rec.allow_circular_relationships = 'Y' THEN
12862                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
12863                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
12864                 fnd_message.set_token('VALUE1', 'Y(Yes)');
12865                 fnd_message.set_token('COLUMN2', 'allow_circular_relationships');
12866                 fnd_message.set_token('VALUE2', 'N(No)');
12867                 fnd_msg_pub.add;
12868                 x_return_status := FND_API.G_RET_STS_ERROR;
12869             END IF;
12870         END IF;
12871         /*IF g_debug THEN
12872             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12873                 'if hierarchical_flag = ''Y'', then allow_circular_relationships must be ''N''. ' ||
12874                 'x_return_status = ' || x_return_status, l_debug_prefix);
12875         END IF;
12876         */
12877         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12878            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12879            p_message=>'if hierarchical_flag = ''Y'', then allow_circular_relationships must be ''N''. ' ||
12880                 'x_return_status = ' || x_return_status,
12881                                   p_msg_level=>fnd_log.level_statement);
12882         END IF;
12883 
12884     END IF;
12885 
12886     ---------------------------------------------------------------
12887     -- validate combination of hierarchical_flag and direction_code
12888     ---------------------------------------------------------------
12889     -- needed only during creation since these columns cannot be updated
12890     IF p_create_update_flag = 'C' THEN
12891         -- if hierarchical_flag = 'Y', the direction_code must be 'P' or 'C'
12892         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'Y' THEN
12893             IF p_relationship_type_rec.direction_code = 'N' THEN
12894                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
12895                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
12896                 fnd_message.set_token('VALUE1', 'Y(Yes)');
12897                 fnd_message.set_token('COLUMN2', 'direction_code');
12898                 fnd_message.set_token('VALUE2', 'P(Parent)/C(Child)');
12899                 fnd_msg_pub.add;
12900                 x_return_status := FND_API.G_RET_STS_ERROR;
12901             END IF;
12902         END IF;
12903         /*IF g_debug THEN
12904             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12905                 'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
12906                 'x_return_status = ' || x_return_status, l_debug_prefix);
12907         END IF;
12908         */
12909         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12910            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12911            p_message=>'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
12912                 'x_return_status = ' || x_return_status,
12913                                   p_msg_level=>fnd_log.level_statement);
12914         END IF;
12915 
12916     END IF;
12917 
12918       -- check for duplicate role
12919 
12920       IF p_create_update_flag = 'C' THEN
12921       BEGIN
12922           SELECT count(*)
12923           INTO   l_count
12924           FROM   HZ_RELATIONSHIP_TYPES
12925           WHERE  ROLE = p_relationship_type_rec.forward_role
12926            OR    ROLE = p_relationship_type_rec.backward_role;
12927           IF l_count > 0 THEN
12928           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
12929           fnd_message.set_token('COLUMN', 'role');
12930           fnd_msg_pub.add;
12931           x_return_status := fnd_api.g_ret_sts_error;
12932          END IF;
12933       END;
12934      END IF;
12935 
12936     -- validate role/rel_code
12937 
12938     IF p_create_update_flag = 'C' THEN
12939       IF ( p_relationship_type_rec.forward_role IS NOT NULL AND
12940            p_relationship_type_rec.forward_role <> fnd_api.g_miss_char) AND
12941           ( p_relationship_type_rec.backward_role IS NOT NULL AND
12942             p_relationship_type_rec.backward_role <> fnd_api.g_miss_char) THEN
12943         validate_rel_code(
12944            p_forward_rel_code          =>p_relationship_type_rec.forward_rel_code,
12945            p_backward_rel_code         =>p_relationship_type_rec.backward_rel_code,
12946            p_forward_role              => p_relationship_type_rec.forward_role,
12947            p_backward_role             => p_relationship_type_rec.backward_role,
12948            x_return_status             => x_return_status);
12949      END IF;
12950    END IF;
12951 
12952     -- validate lookup
12953     IF  p_create_update_flag = 'C' THEN
12954       IF p_relationship_type_rec.forward_role IS NOT NULL THEN
12955           validate_lookup (
12956               p_column                                => 'role',
12957               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
12958               p_column_value                          => p_relationship_type_rec.forward_role,
12959               x_return_status                         => x_return_status);
12960        END IF;
12961        IF p_relationship_type_rec.backward_role IS NOT NULL THEN
12962           validate_lookup (
12963               p_column                                => 'role',
12964               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
12965               p_column_value                          => p_relationship_type_rec.backward_role,
12966               x_return_status                         => x_return_status);
12967        END IF;
12968     END IF;
12969 
12970     ----------------------------------------------------------------------------
12971     -- validate combination of hierarchical_flag and allow_relate_to_self_flag
12972     ----------------------------------------------------------------------------
12973     -- needed only during creation since these columns cannot be updated
12974     IF p_create_update_flag = 'C' THEN
12975         -- if hierarchical_flag = 'Y', then allow_relate_to_self_flag must be 'N'
12976         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'Y' THEN
12977             IF p_relationship_type_rec.allow_relate_to_self_flag = 'Y' THEN
12978                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
12979                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
12980                 fnd_message.set_token('VALUE1', 'Y(Yes)');
12981                 fnd_message.set_token('COLUMN2', 'allow_relate_to_self_flag');
12982                 fnd_message.set_token('VALUE2', 'N(No)');
12983                 fnd_msg_pub.add;
12984                 x_return_status := FND_API.G_RET_STS_ERROR;
12985             END IF;
12986         END IF;
12987         /*IF g_debug THEN
12988             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12989                 'if hierarchical_flag = ''Y'', then allow_relate_to_self_flag must be ''N''. ' ||
12990                 'x_return_status = ' || x_return_status, l_debug_prefix);
12991         END IF;
12992         */
12993         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12994            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12995            p_message=>'if hierarchical_flag = ''Y'', then allow_relate_to_self_flag must be ''N''. ' ||
12996                 'x_return_status = ' || x_return_status,
12997                                   p_msg_level=>fnd_log.level_statement);
12998         END IF;
12999 
13000     END IF;
13001 
13002 
13003     --------------------------------------------------------------------------
13004     -- validate combination of allow_circular_relationships and direction_code
13005     --------------------------------------------------------------------------
13006     -- neede only during creation since these columns cannot be updated
13007     IF p_create_update_flag = 'C' THEN
13008         -- if direction_code = 'N', the allow_circular_relationships must be 'Y'
13009         IF p_relationship_type_rec.direction_code = 'N' THEN
13010             IF NVL(p_relationship_type_rec.allow_circular_relationships, 'Y') = 'N' THEN
13011                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
13012                 fnd_message.set_token('COLUMN1', 'direction_code');
13013                 fnd_message.set_token('VALUE1', 'N(No)');
13014                 fnd_message.set_token('COLUMN2', 'allow_circular_relationships');
13015                 fnd_message.set_token('VALUE2', 'Y(Yes)');
13016                 fnd_msg_pub.add;
13017                 x_return_status := FND_API.G_RET_STS_ERROR;
13018             END IF;
13019         END IF;
13020         /*IF g_debug THEN
13021             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13022                 'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
13023                 'x_return_status = ' || x_return_status, l_debug_prefix);
13024         END IF;
13025         */
13026         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13027            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13028            p_message=>'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
13029                 'x_return_status = ' || x_return_status,
13030                                   p_msg_level=>fnd_log.level_statement);
13031         END IF;
13032 
13033     END IF;
13034 
13035     /* THIS UNNECESSARY VALIDATION HAS BEEN COMMENTED AFTER DISCUSSION WITH
13036        SRANGARA AND RPITTS, THE CONCLUSION OF WHICH IS THAT
13037        NON_HIERARCHICAL RELATIONSHIPS DO NOT NEED ANY VALUE
13038        FOR MULTIPLE_PARENT_ALLOWED,SINCE EVEN A SINGLE PARENT
13039        DOES NOT MAKE SENSE FOR A NON_HIERARCHICAL RELATIONSHIP TYPE.
13040        THE do_relationship_type IN HZ_RELATIONSHIP_TYPE_V2PUB WHICH
13041        DEFAULTS THE VALUE OF THIS FLAG TO "Y" FOR NON_HIERARCHICAL
13042        REL TYPES SHOULD ALSO BE CHANGED IN THE FUTURE.
13043 
13044       ----- VJN
13045     ------------------------------------------------------------------------
13046     -- validate combination of hierarchical_flag and multiple_parent_allowed
13047     ------------------------------------------------------------------------
13048     -- neede only during creation since these columns cannot be updated
13049     IF p_create_update_flag = 'C' THEN
13050         -- if hierarchical_flag = 'N', then multiple_parent_allowed must be 'Y'
13051         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'N' THEN
13052             IF NVL(p_relationship_type_rec.multiple_parent_allowed, 'Y') = 'N' THEN
13053                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
13054                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
13055                 fnd_message.set_token('VALUE1', 'N(No)');
13056                 fnd_message.set_token('COLUMN2', 'multiple_parent_allowed');
13057                 fnd_message.set_token('VALUE2', 'Y(Yes)');
13058                 fnd_msg_pub.add;
13059                 x_return_status := FND_API.G_RET_STS_ERROR;
13060             END IF;
13061         END IF;
13062 
13063         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13064            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13065            p_message=>'if hierarchical_flag = ''N'', the multiple_parent_allowed must be ''Y''. ' ||
13066                 'x_return_status = ' || x_return_status,
13067                                   p_msg_level=>fnd_log.level_statement);
13068         END IF;
13069 
13070     END IF;
13071 
13072     */
13073 
13074 
13075     --------------------------------------------------------------------------------
13076     -- validate that all relationship type records with same relationship_type value
13077     -- have same values for hierarchical_flag
13078     --------------------------------------------------------------------------------
13079     -- needed only during creation since hierarchical_flag is not updatable
13080     IF p_create_update_flag = 'C' THEN
13081         BEGIN
13082             SELECT HIERARCHICAL_FLAG
13083             INTO   l_hierarchical_flag
13084             FROM   HZ_RELATIONSHIP_TYPES
13085             WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
13086             AND    ROWNUM = 1;
13087 
13088             IF NVL(p_relationship_type_rec.hierarchical_flag, 'N')
13089                      <> NVL(l_hierarchical_flag, 'N')
13090                    and
13091                NVL(p_relationship_type_rec.hierarchical_flag, 'Y')
13092                      <> NVL(l_hierarchical_flag, 'Y')
13093                 THEN
13094                 fnd_message.set_name('AR', 'HZ_DIFF_VALUE_NOT_ALLOWED');
13095                 fnd_message.set_token('ENTITY', 'relationship type');
13096                 fnd_message.set_token('COLUMN1', 'relationship_type');
13097                 fnd_message.set_token('COLUMN2', 'hierarchical_flag');
13098                 fnd_msg_pub.add;
13099                 x_return_status := FND_API.G_RET_STS_ERROR;
13100             END IF;
13101 
13102         EXCEPTION
13103             -- if no data found, then its fine since this is the first record
13104             WHEN NO_DATA_FOUND THEN
13105                 NULL;
13106         END;
13107         /*IF g_debug THEN
13108             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13109                 'all relationship type records with same relationship_type value must have same values for hierarchical_flag. ' ||
13110                 'x_return_status = ' || x_return_status, l_debug_prefix);
13111         END IF;
13112         */
13113         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13114            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13115            p_message=>'all relationship type records with same relationship_type value must have same values for hierarchical_flag. ' ||
13116                 'x_return_status = ' || x_return_status,
13117                                   p_msg_level=>fnd_log.level_statement);
13118         END IF;
13119 
13120     END IF;
13121 
13122     --------------------------------------------------------------------------------
13123     -- validate that all relationship type records with same relationship_type value
13124     -- have same values for allow_circular_relationships
13125     --------------------------------------------------------------------------------
13126     -- needed only during creation since allow_circular_relationships is not updatable
13127     IF p_create_update_flag = 'C' THEN
13128         BEGIN
13129             SELECT ALLOW_CIRCULAR_RELATIONSHIPS
13130             INTO   l_allow_circular_relationships
13131             FROM   HZ_RELATIONSHIP_TYPES
13132             WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
13133             AND    ROWNUM = 1;
13134 
13135             IF NVL(p_relationship_type_rec.allow_circular_relationships, 'N') <>                   NVL(l_allow_circular_relationships, 'N')
13136                and
13137              NVL(p_relationship_type_rec.allow_circular_relationships, 'Y') <>
13138                    NVL(l_allow_circular_relationships, 'Y')
13139                 THEN
13140                 fnd_message.set_name('AR', 'HZ_DIFF_VALUE_NOT_ALLOWED');
13141                 fnd_message.set_token('ENTITY', 'relationship type');
13142                 fnd_message.set_token('COLUMN1', 'relationship_type');
13143                 fnd_message.set_token('COLUMN2', 'allow_circular_relationships');
13144                 fnd_msg_pub.add;
13145                 x_return_status := FND_API.G_RET_STS_ERROR;
13146             END IF;
13147 
13148         EXCEPTION
13149             -- if no data found, then its fine since this is the first record
13150             WHEN NO_DATA_FOUND THEN
13151                 NULL;
13152         END;
13153 
13154         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13155            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13156           p_message=>'all relationship type records with same relationship_type value must have same values for'||
13157                       ' allow_circular_relationships. ' ||
13158                 'x_return_status = ' || x_return_status,
13159                                   p_msg_level=>fnd_log.level_statement);
13160         END IF;
13161 
13162     END IF;
13163 
13164     --------------------------------------------------------------------------------
13165     -- validate that all relationship type records with same relationship_type value
13166     -- have same values for multiple_parent_allowed
13167     --------------------------------------------------------------------------------
13168     -- needed only during creation since multiple_parent_allowed is not updatable
13169     IF p_create_update_flag = 'C' THEN
13170         BEGIN
13171             SELECT MULTIPLE_PARENT_ALLOWED
13172             INTO   l_multiple_parent_allowed
13173             FROM   HZ_RELATIONSHIP_TYPES
13174             WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
13175             AND    ROWNUM = 1;
13176 
13177             IF NVL(p_relationship_type_rec.multiple_parent_allowed, 'N') <>
13178                           NVL(l_multiple_parent_allowed, 'N')
13179                and
13180                NVL(p_relationship_type_rec.multiple_parent_allowed, 'Y') <>
13181                         NVL(l_multiple_parent_allowed, 'Y')
13182                 THEN
13183                 fnd_message.set_name('AR', 'HZ_DIFF_VALUE_NOT_ALLOWED');
13184                 fnd_message.set_token('ENTITY', 'relationship type');
13185                 fnd_message.set_token('COLUMN1', 'relationship_type');
13186                 fnd_message.set_token('COLUMN2', 'multiple_parent_allowed');
13187                 fnd_msg_pub.add;
13188                 x_return_status := FND_API.G_RET_STS_ERROR;
13189             END IF;
13190 
13191         EXCEPTION
13192             -- if no data found, then its fine since this is the first record
13193             WHEN NO_DATA_FOUND THEN
13194                 NULL;
13195         END;
13196         /*IF g_debug THEN
13197             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13198                 'all relationship type records with same relationship_type value must have same values for multiple_parent_allowed. ' ||
13199                 'x_return_status = ' || x_return_status, l_debug_prefix);
13200         END IF;
13201         */
13202         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13203            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13204            p_message=>'all relationship type records with same relationship_type value must have same values for multiple_parent_allowed. ' ||
13205                                             'x_return_status = ' || x_return_status,
13206                                   p_msg_level=>fnd_log.level_statement);
13207         END IF;
13208 
13209     END IF;
13210 
13211     -----------------------------------
13212     -- validate incl_unrelated_entities
13213     -----------------------------------
13214 
13215     -- incl_unrelated_entities is lookup code in lookup type YES/NO
13216     validate_lookup (
13217         p_column                                => 'incl_unrelated_entities',
13218         p_lookup_type                           => 'YES/NO',
13219         p_column_value                          => p_relationship_type_rec.incl_unrelated_entities,
13220         x_return_status                         => x_return_status );
13221 
13222     /*IF G_DEBUG THEN
13223         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13224             'incl_unrelated_entities in lookup YES/NO. ' ||
13225             'x_return_status = ' || x_return_status, l_debug_prefix );
13226     END IF;
13227     */
13228     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13229            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'incl_unrelated_entities in lookup YES/NO. ' ||
13230                                              'x_return_status = ' || x_return_status,
13231                                   p_msg_level=>fnd_log.level_statement);
13232     END IF;
13233 
13234 
13235     -----------------------------------
13236     -- validate multiple_parent_allowed
13237     -----------------------------------
13238 
13239     -- multiple_parent_allowed is lookup code in lookup type YES/NO
13240     validate_lookup (
13241         p_column                                => 'multiple_parent_allowed',
13242         p_lookup_type                           => 'YES/NO',
13243         p_column_value                          => p_relationship_type_rec.multiple_parent_allowed,
13244         x_return_status                         => x_return_status );
13245 
13246     /*IF G_DEBUG THEN
13247         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13248             'multiple_parent_allowed in lookup YES/NO. ' ||
13249             'x_return_status = ' || x_return_status, l_debug_prefix );
13250     END IF;
13251     */
13252     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13253            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'multiple_parent_allowed in lookup YES/NO. ' ||
13254             'x_return_status = ' || x_return_status,
13255                                   p_msg_level=>fnd_log.level_statement);
13256     END IF;
13257 
13258 
13259     -- multiple_parent_allowed is non-updateable
13260     IF p_create_update_flag = 'U' THEN
13261         validate_nonupdateable (
13262             p_column                                => 'multiple_parent_allowed',
13263             p_column_value                          => p_relationship_type_rec.multiple_parent_allowed,
13264             p_old_column_value                      => l_multiple_parent_allowed,
13265             x_return_status                         => x_return_status);
13266 
13267         /*IF g_debug THEN
13268             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13269                 'multiple_parent_allowed is non-updateable. ' ||
13270                 'x_return_status = ' || x_return_status, l_debug_prefix);
13271         END IF;
13272         */
13273         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13274            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'multiple_parent_allowed is non-updateable. ' ||
13275                 'x_return_status = ' || x_return_status,
13276                                   p_msg_level=>fnd_log.level_statement);
13277         END IF;
13278 
13279 
13280     END IF;
13281 
13282       --------------------------------------
13283       -- validate created_by_module
13284       --------------------------------------
13285 
13286       validate_created_by_module(
13287         p_create_update_flag     => p_create_update_flag,
13288         p_created_by_module      => p_relationship_type_rec.created_by_module,
13289         p_old_created_by_module  => l_created_by_module,
13290         x_return_status          => x_return_status);
13291 
13292       --------------------------------------
13293       -- validate application_id
13294       --------------------------------------
13295 
13296       validate_application_id(
13297         p_create_update_flag     => p_create_update_flag,
13298         p_application_id         => p_relationship_type_rec.application_id,
13299         p_old_application_id     => l_application_id,
13300         x_return_status          => x_return_status);
13301 
13302       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
13303         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship_type (-)',
13304                                p_msg_level=>fnd_log.level_procedure);
13305     END IF;
13306 
13307 --bug 3491584
13308     IF (p_create_update_flag = 'C') THEN
13309       IF((p_relationship_type_rec.forward_rel_code = p_relationship_type_rec.backward_rel_code)
13310           AND (p_relationship_type_rec.subject_type <> p_relationship_type_rec.object_type))
13311       THEN
13312       fnd_message.set_name('AR', 'HZ_API_RELTYPE_INVALID');
13313       fnd_msg_pub.add;
13314       x_return_status := fnd_api.g_ret_sts_error;
13315 
13316       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13317                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13318                 p_message=>'Same subject and object type because the relationship phrase pair has the same subject (forward) and object (backward) phrase. ' ||
13319                   'x_return_status = ' || x_return_status,
13320                   p_msg_level=>fnd_log.level_statement);
13321           END IF;
13322       END IF;
13323     END IF;
13324 
13325       --disable_debug;
13326 
13327   END validate_relationship_type;
13328 
13329   /**
13330    * PROCEDURE validate_relationship
13331    *
13332    * DESCRIPTION
13333    *     Validates relationship record. Checks for
13334    *         uniqueness
13335    *         lookup types
13336    *         mandatory columns
13337    *         non-updateable fields
13338    *         foreign key validations
13339    *         other validations
13340    *
13341    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
13342    *
13343    * ARGUMENTS
13344    *   IN:
13345    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
13346    *     p_relationship_rec             Relationship record.
13347    *     p_rowid                        Rowid of the record (used only in update mode).
13348    *   IN/OUT:
13349    *     x_return_status                Return status after the call. The status can
13350    *                                    be FND_API.G_RET_STS_SUCCESS (success),
13351    *                                    fnd_api.g_ret_sts_error (error),
13352    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
13353    *
13354    * NOTES
13355    *
13356    * MODIFICATION HISTORY
13357    *
13358    *   07-23-2001    Indrajit Sen       o Created.
13359    *   13-DEC-2001   Joe del Callar     Bug 2145637: Modified to use the new
13360    *                                    time-dependent date overlap check.
13361    */
13362 
13363   PROCEDURE validate_relationship(
13364     p_create_update_flag  IN      VARCHAR2,
13365     p_relationship_rec    IN      hz_relationship_v2pub.relationship_rec_type,
13366     p_rowid               IN      ROWID ,
13367     x_return_status       IN OUT NOCOPY  VARCHAR2
13368   ) IS
13369     l_count                 NUMBER;
13370     l_subject_id            NUMBER := p_relationship_rec.subject_id;
13371     l_object_id             NUMBER := p_relationship_rec.object_id;
13372     l_relationship_type     hz_relationships.relationship_type%TYPE := p_relationship_rec.relationship_type;
13373     l_relationship_code     hz_relationships.relationship_code%TYPE := p_relationship_rec.relationship_code;
13374     l_subject_type          hz_relationships.subject_type%TYPE := p_relationship_rec.subject_type;
13375     l_object_type           hz_relationships.object_type%TYPE := p_relationship_rec.object_type;
13376     l_subject_table_name    hz_relationships.subject_table_name%TYPE := p_relationship_rec.subject_table_name;
13377     l_object_table_name     hz_relationships.object_table_name%TYPE := p_relationship_rec.object_table_name;
13378     l_party_id              NUMBER;
13379     l_content_source_type   hz_relationships.content_source_type%TYPE;
13380     l_start_date            DATE := p_relationship_rec.start_date;
13381     l_end_date              DATE := p_relationship_rec.end_date;
13382     l_in                    VARCHAR2(1);
13383     l_overlap               VARCHAR2(1);
13384     l_created_by_module     VARCHAR2(150);
13385     l_application_id        NUMBER;
13386     l_status                VARCHAR2(1);
13387     l_debug_prefix          VARCHAR2(30) := '';
13388 
13389     -- Bug 2197181: Added for mix-n-match
13390     db_actual_content_source   hz_relationships.actual_content_source%TYPE;
13391 
13392 
13393     -- cursor to get all the relationship records...
13394     -- for given subject_id, object_id, relationship_code
13395     -- bug - 2528427, added relationship type to the where...
13396     -- clause so that time overlap is checked among records with...
13397     -- same relationship type, relationship code, subject id and object id
13398     CURSOR c1 (
13399       p_data_source           VARCHAR2
13400     ) IS
13401       SELECT hr.start_date,
13402              hr.end_date,
13403              hr.relationship_id,
13404              hr.status
13405       FROM   hz_relationships hr
13406       WHERE  hr.subject_id = l_subject_id
13407       AND    hr.object_id = l_object_id
13408       AND    hr.subject_table_name = l_subject_table_name
13409       AND    hr.subject_type = l_subject_type
13410       AND    hr.object_table_name = l_object_table_name
13411       AND    hr.object_type = l_object_type
13412       AND    hr.relationship_code = l_relationship_code
13413       AND    hr.relationship_type = l_relationship_type
13414       --AND hr.directional_flag = 'F'
13415       AND    hr.status = 'A'
13416       AND    hr.actual_content_source = p_data_source
13417       AND    NVL(p_relationship_rec.relationship_id, fnd_api.g_miss_num) <> hr.relationship_id;
13418 
13419 -- Bug 3294936 : Comment rownum = 1 so that the cursor picks all records
13420 --               with same relationship type between same subject and object.
13421 
13422 --      AND    ROWNUM = 1;
13423 
13424 
13425     r1                      c1%ROWTYPE;
13426 
13427     l_dummy                 VARCHAR2(1);
13428     l_count                 NUMBER;
13429     l_code                  VARCHAR2(30);
13430   BEGIN
13431     --enable_debug;
13432 
13433     -- Debug info.
13434     /*IF g_debug THEN
13435         hz_utility_v2pub.debug ('validate_relationship (+)');
13436     END IF;
13437     */
13438     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
13439         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship (+)',
13440                                p_msg_level=>fnd_log.level_procedure);
13441     END IF;
13442 
13443     -- select columns needed to be checked from table during update
13444     IF (p_create_update_flag = 'U') THEN
13445 
13446     -- Bug 2197181: selecting actual_content_source for mix-n-match
13447 
13448       SELECT subject_id,
13449              subject_type,
13450              subject_table_name,
13451              object_id,
13452              object_type,
13453              object_table_name,
13454              relationship_code,
13455              relationship_type,
13456              party_id,
13457              content_source_type,
13458              start_date,
13459              end_date,
13460              status,
13461              created_by_module,
13462              application_id,
13463              actual_content_source
13464       INTO   l_subject_id,
13465              l_subject_type,
13466              l_subject_table_name,
13467              l_object_id,
13468              l_object_type,
13469              l_object_table_name,
13470              l_relationship_code,
13471              l_relationship_type,
13472              l_party_id,
13473              l_content_source_type,
13474              l_start_date,
13475              l_end_date,
13476              l_status,
13477              l_created_by_module,
13478              l_application_id,
13479              db_actual_content_source
13480       FROM   hz_relationships
13481       WHERE  ROWID = p_rowid;
13482     END IF;
13483 
13484     -----------------------------
13485     -- validate relationship_type
13486     -----------------------------
13487 
13488     -- relationship_type is mandatory
13489     validate_mandatory (
13490       p_create_update_flag    => p_create_update_flag,
13491       p_column                => 'relationship_type',
13492       p_column_value          => p_relationship_rec.relationship_type,
13493       x_return_status         => x_return_status);
13494 
13495     /*IF g_debug THEN
13496       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_type is mandatory. ' ||
13497                                'x_return_status = ' || x_return_status,
13498                              l_debug_prefix);
13499     END IF;
13500     */
13501     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13502            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is mandatory. ' ||
13503                                'x_return_status = ' || x_return_status,
13504                                   p_msg_level=>fnd_log.level_statement);
13505     END IF;
13506 
13507     -- relationship_type is non-updateable
13508     IF p_create_update_flag = 'U' THEN
13509       validate_nonupdateable (
13510         p_column                => 'relationship_type',
13511         p_column_value          => p_relationship_rec.relationship_type,
13512         p_old_column_value      => l_relationship_type,
13513         x_return_status         => x_return_status
13514       );
13515 
13516       /*IF g_debug THEN
13517         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_type is non-updateable. ' ||
13518                                  'x_return_status = ' || x_return_status,
13519                                l_debug_prefix);
13520       END IF;
13521       */
13522       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13523            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is non-updateable. ' ||
13524                                  'x_return_status = ' || x_return_status,
13525                                   p_msg_level=>fnd_log.level_statement);
13526       END IF;
13527 
13528     END IF;
13529 
13530     -----------------------------
13531     -- validate relationship_code
13532     -----------------------------
13533 
13534     -- relationship_code is mandatory
13535     validate_mandatory (
13536       p_create_update_flag      => p_create_update_flag,
13537       p_column                  => 'relationship_code',
13538       p_column_value            => p_relationship_rec.relationship_code,
13539       x_return_status           => x_return_status
13540     );
13541 
13542     /*IF g_debug THEN
13543       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_code is mandatory. ' ||
13544                                'x_return_status = ' || x_return_status,
13545                              l_debug_prefix);
13546     END IF;
13547     */
13548     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13549            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_code is mandatory. ' ||
13550                                'x_return_status = ' || x_return_status,
13551                                   p_msg_level=>fnd_log.level_statement);
13552     END IF;
13553 
13554     -- relationship_code is non-updateable
13555     IF p_create_update_flag = 'U' THEN
13556       validate_nonupdateable (
13557         p_column                => 'relationship_code',
13558         p_column_value          => p_relationship_rec.relationship_code,
13559         p_old_column_value      => l_relationship_code,
13560         x_return_status         => x_return_status
13561       );
13562 
13563       /*IF g_debug THEN
13564         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_code is non-updateable. ' ||
13565                                  'x_return_status = ' || x_return_status,
13566                                l_debug_prefix);
13567       END IF;
13568       */
13569       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13570            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_code is non-updateable. ' ||
13571                                  'x_return_status = ' || x_return_status,
13572                                   p_msg_level=>fnd_log.level_statement);
13573       END IF;
13574     END IF;
13575 
13576     -- relationship_code is lookup code in lookup type PARTY_RELATIONS_TYPE
13577     IF p_create_update_flag = 'C' THEN
13578       validate_lookup (
13579         p_column                => 'relationship_code',
13580         p_lookup_type           => 'PARTY_RELATIONS_TYPE',
13581         p_column_value          => p_relationship_rec.relationship_code,
13582         x_return_status         => x_return_status
13583       );
13584 
13585       /*IF g_debug THEN
13586         hz_utility_v2pub.debug (
13587           'relationship_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
13588             'x_return_status = ' || x_return_status,
13589           l_debug_prefix);
13590       END IF;
13591       */
13592       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13593            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13594            p_message=>'relationship_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
13595                         'x_return_status = ' || x_return_status,
13596                                   p_msg_level=>fnd_log.level_statement);
13597       END IF;
13598     END IF;
13599 
13600     ----------------------
13601     -- validate subject_id
13602     ----------------------
13603 /****Logical APIs - validation not required****/
13604   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13605     -- subject_id is mandatory
13606     validate_mandatory (
13607       p_create_update_flag                    => p_create_update_flag,
13608       p_column                                => 'subject_id',
13609       p_column_value                          => p_relationship_rec.subject_id,
13610       x_return_status                         => x_return_status);
13611 
13612     /*IF g_debug THEN
13613       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_id is mandatory. ' ||
13614                                'x_return_status = ' || x_return_status,
13615                              l_debug_prefix);
13616     END IF;
13617     */
13618     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13619            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_id is mandatory. ' ||
13620                                'x_return_status = ' || x_return_status,
13621                                   p_msg_level=>fnd_log.level_statement);
13622     END IF;
13623 
13624     -- subject_id is non-updateable
13625     IF p_create_update_flag = 'U' THEN
13626       validate_nonupdateable (
13627         p_column                => 'subject_id',
13628         p_column_value          => p_relationship_rec.subject_id,
13629         p_old_column_value      => l_subject_id,
13630         x_return_status         => x_return_status
13631       );
13632 
13633       /*IF g_debug THEN
13634         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_id is non-updateable. ' ||
13635                                  'x_return_status = ' || x_return_status,
13636                                l_debug_prefix);
13637       END IF;
13638       */
13639       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13640            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_id is non-updateable. ' ||
13641                                  'x_return_status = ' || x_return_status,
13642                                   p_msg_level=>fnd_log.level_statement);
13643       END IF;
13644 
13645     END IF;
13646   END IF;
13647 
13648     -- check whether subject_id belongs to subject_type
13649     IF p_relationship_rec.subject_id IS NOT NULL
13650        AND p_relationship_rec.subject_id <> fnd_api.g_miss_num
13651        AND p_create_update_flag = 'C'
13652     THEN
13653       l_in := hz_relationship_type_v2pub.in_instance_sets (
13654                 p_relationship_rec.subject_type,
13655                 p_relationship_rec.subject_id
13656               );
13657 
13658       IF l_in = 'N' THEN
13659         fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13660         fnd_message.set_token('FK', 'subject_id');
13661         fnd_message.set_token('COLUMN',
13662                               lower(p_relationship_rec.subject_type)||' id');
13663         fnd_message.set_token('TABLE', p_relationship_rec.subject_table_name);
13664         fnd_msg_pub.add;
13665         x_return_status := fnd_api.g_ret_sts_error;
13666       END IF;
13667 
13668       /*IF g_debug THEN
13669         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_id belongs to subject_type. ' ||
13670                                  'x_return_status = ' || x_return_status,
13671                                l_debug_prefix);
13672       END IF;
13673       */
13674       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13675            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_id belongs to subject_type. ' ||
13676                                  'x_return_status = ' || x_return_status,
13677                                   p_msg_level=>fnd_log.level_statement);
13678       END IF;
13679 
13680     END IF;
13681 
13682     ------------------------------
13683     -- validate subject_table_name
13684     ------------------------------
13685 /****Logical APIs - validation not required****/
13686   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13687     -- subject_table_name is mandatory
13688     validate_mandatory (
13689       p_create_update_flag      => p_create_update_flag,
13690       p_column                  => 'subject_table_name',
13691       p_column_value            => p_relationship_rec.subject_table_name,
13692       x_return_status           => x_return_status);
13693 
13694     /*IF g_debug THEN
13695       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_table_name is mandatory. ' ||
13696                                'x_return_status = ' || x_return_status,
13697                              l_debug_prefix);
13698     END IF;
13699     */
13700     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13701            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_table_name is mandatory. ' ||
13702                                'x_return_status = ' || x_return_status,
13703                                   p_msg_level=>fnd_log.level_statement);
13704     END IF;
13705 
13706     -- subject_table_name is non-updateable
13707     IF p_create_update_flag = 'U' THEN
13708       validate_nonupdateable (
13709         p_column                => 'subject_table_name',
13710         p_column_value          => p_relationship_rec.subject_table_name,
13711         p_old_column_value      => l_subject_table_name,
13712         x_return_status         => x_return_status);
13713 
13714       /*IF g_debug THEN
13715         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_table_name is non-updateable. ' ||
13716                                  'x_return_status = ' || x_return_status,
13717                                l_debug_prefix);
13718       END IF;
13719       */
13720       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13721            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_table_name is non-updateable. ' ||
13722                                  'x_return_status = ' || x_return_status,
13723                                   p_msg_level=>fnd_log.level_statement);
13724       END IF;
13725 
13726     END IF;
13727 
13728     -- subject_table_name has foreign key fnd_objects.obj_name
13729     -- do not need to check during update because subject_table_name is
13730     -- non-updateable.
13731     IF p_create_update_flag = 'C'
13732        AND p_relationship_rec.subject_table_name IS NOT NULL
13733        AND p_relationship_rec.subject_table_name <> fnd_api.g_miss_char
13734     THEN
13735       BEGIN
13736         SELECT 'Y'
13737         INTO   l_dummy
13738         FROM   fnd_objects fo
13739         WHERE  fo.obj_name = p_relationship_rec.subject_table_name;
13740       EXCEPTION
13741         WHEN NO_DATA_FOUND THEN
13742           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13743           fnd_message.set_token('FK', 'subject_table_name');
13744           fnd_message.set_token('COLUMN', 'obj_name');
13745           fnd_message.set_token('TABLE', 'fnd_objects');
13746           fnd_msg_pub.add;
13747           x_return_status := fnd_api.g_ret_sts_error;
13748       END;
13749 
13750       /*IF g_debug THEN
13751         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13752           'subject_table_name has foreign key fnd_objects.obj_name. ' ||
13753             'x_return_status = ' || x_return_status,
13754           l_debug_prefix
13755         );
13756       END IF;
13757       */
13758       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13759            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13760            p_message=>'subject_table_name has foreign key fnd_objects.obj_name. ' ||
13761             'x_return_status = ' || x_return_status,
13762                                   p_msg_level=>fnd_log.level_statement);
13763       END IF;
13764 
13765     END IF;
13766   END IF;
13767 
13768     ------------------------
13769     -- validate subject_type
13770     ------------------------
13771 /****Logical APIs - validation not required****/
13772   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13773     -- subject_type is mandatory
13774     validate_mandatory (
13775       p_create_update_flag      => p_create_update_flag,
13776       p_column                  => 'subject_type',
13777       p_column_value            => p_relationship_rec.subject_type,
13778       x_return_status           => x_return_status
13779     );
13780 
13781     /*IF g_debug THEN
13782       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_type is mandatory. ' ||
13783                                'x_return_status = ' || x_return_status,
13784                              l_debug_prefix);
13785     END IF;
13786     */
13787     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13788            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is mandatory. ' ||
13789                                'x_return_status = ' || x_return_status,
13790                                   p_msg_level=>fnd_log.level_statement);
13791     END IF;
13792 
13793     -- subject_type is non-updateable
13794     IF p_create_update_flag = 'U' THEN
13795       validate_nonupdateable (
13796         p_column                => 'subject_type',
13797         p_column_value          => p_relationship_rec.subject_type,
13798         p_old_column_value      => l_subject_type,
13799         x_return_status         => x_return_status);
13800 
13801       /*IF g_debug THEN
13802         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_type is non-updateable. ' ||
13803                                  'x_return_status = ' || x_return_status,
13804                                l_debug_prefix);
13805       END IF;
13806       */
13807       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13808            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is non-updateable. ' ||
13809                                  'x_return_status = ' || x_return_status,
13810                                   p_msg_level=>fnd_log.level_statement);
13811       END IF;
13812     END IF;
13813 
13814     -- subject_type has foreign key fnd_object_instance_sets.instance_set_name
13815     -- do not need to check during update because subject_type is
13816     -- non-updateable.
13817     IF p_create_update_flag = 'C'
13818        AND p_relationship_rec.subject_type IS NOT NULL
13819        AND p_relationship_rec.subject_type <> fnd_api.g_miss_char
13820     THEN
13821       BEGIN
13822         SELECT 'Y'
13823         INTO   l_dummy
13824         FROM   fnd_object_instance_sets fois
13825         WHERE  fois.instance_set_name = p_relationship_rec.subject_type;
13826       EXCEPTION
13827         WHEN NO_DATA_FOUND THEN
13828           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13829           fnd_message.set_token('FK', 'subject_type');
13830           fnd_message.set_token('COLUMN', 'instance_set_name');
13831           fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
13832           fnd_msg_pub.add;
13833           x_return_status := fnd_api.g_ret_sts_error;
13834       END;
13835 
13836       /*IF g_debug THEN
13837         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13838           'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
13839             'x_return_status = ' || x_return_status,
13840           l_debug_prefix
13841         );
13842       END IF;
13843       */
13844       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13845            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13846            p_message=>'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
13847             'x_return_status = ' || x_return_status,
13848                                   p_msg_level=>fnd_log.level_statement);
13849       END IF;
13850 
13851     END IF;
13852   END IF;
13853 
13854     ---------------------
13855     -- validate object_id
13856     ---------------------
13857 /****Logical APIs - validation not required****/
13858   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13859     -- object_id is mandatory
13860     validate_mandatory (
13861       p_create_update_flag                    => p_create_update_flag,
13862       p_column                                => 'object_id',
13863       p_column_value                          => p_relationship_rec.object_id,
13864       x_return_status                         => x_return_status
13865     );
13866 
13867     /*IF g_debug THEN
13868       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_id is mandatory. ' ||
13869                                'x_return_status = ' || x_return_status,
13870                              l_debug_prefix);
13871     END IF;
13872     */
13873     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13874            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_id is mandatory. ' ||
13875                                'x_return_status = ' || x_return_status,
13876                                   p_msg_level=>fnd_log.level_statement);
13877     END IF;
13878 
13879     -- object_id is non-updateable
13880     IF p_create_update_flag = 'U' THEN
13881       validate_nonupdateable (
13882         p_column                => 'object_id',
13883         p_column_value          => p_relationship_rec.object_id,
13884         p_old_column_value      => l_object_id,
13885         x_return_status         => x_return_status);
13886 
13887       /*IF g_debug THEN
13888         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_id is non-updateable. ' ||
13889                                  'x_return_status = ' || x_return_status,
13890                                l_debug_prefix);
13891       END IF;
13892       */
13893       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13894            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_id is non-updateable. ' ||
13895                                  'x_return_status = ' || x_return_status,
13896                                   p_msg_level=>fnd_log.level_statement);
13897      END IF;
13898 
13899     END IF;
13900   END IF;
13901 
13902     -- check whether object_id belongs to object_type
13903     IF p_relationship_rec.object_id IS NOT NULL
13904        AND p_relationship_rec.object_id <> fnd_api.g_miss_num
13905        AND p_create_update_flag = 'C'
13906     THEN
13907       l_in := hz_relationship_type_v2pub.in_instance_sets (
13908                 p_relationship_rec.object_type,
13909                 p_relationship_rec.object_id
13910               );
13911 
13912       IF l_in = 'N' THEN
13913         fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13914         fnd_message.set_token('FK', 'object_id');
13915         fnd_message.set_token('COLUMN',
13916                               LOWER(p_relationship_rec.object_type)||' id');
13917         fnd_message.set_token('TABLE', p_relationship_rec.object_table_name);
13918         fnd_msg_pub.add;
13919         x_return_status := fnd_api.g_ret_sts_error;
13920       END IF;
13921 
13922       /*IF g_debug THEN
13923         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_id belongs to object_type. ' ||
13924                                  'x_return_status = ' || x_return_status,
13925                                l_debug_prefix);
13926       END IF;
13927       */
13928       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13929            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_id belongs to object_type. ' ||
13930                                  'x_return_status = ' || x_return_status,
13931                                   p_msg_level=>fnd_log.level_statement);
13932       END IF;
13933 
13934     END IF;
13935 
13936     -----------------------------
13937     -- validate object_table_name
13938     -----------------------------
13939 /****Logical APIs - validation not required****/
13940   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13941     -- object_table_name is mandatory
13942     validate_mandatory (
13943       p_create_update_flag      => p_create_update_flag,
13944       p_column                  => 'object_table_name',
13945       p_column_value            => p_relationship_rec.object_table_name,
13946       x_return_status           => x_return_status
13947     );
13948 
13949     /*IF g_debug THEN
13950       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_table_name is mandatory. ' ||
13951                                'x_return_status = ' || x_return_status,
13952                              l_debug_prefix);
13953     END IF;
13954     */
13955     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13956            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_table_name is mandatory. ' ||
13957                                'x_return_status = ' || x_return_status,
13958                                   p_msg_level=>fnd_log.level_statement);
13959     END IF;
13960 
13961     -- object_table_name is non-updateable
13962     IF p_create_update_flag = 'U' THEN
13963       validate_nonupdateable (
13964         p_column                => 'object_table_name',
13965         p_column_value          => p_relationship_rec.object_table_name,
13966         p_old_column_value      => l_object_table_name,
13967         x_return_status         => x_return_status
13968       );
13969 
13970       /*IF g_debug THEN
13971         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_table_name is non-updateable. ' ||
13972                                  'x_return_status = ' || x_return_status,
13973                                l_debug_prefix);
13974       END IF;
13975       */
13976       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13977            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_table_name is non-updateable. ' ||
13978                                  'x_return_status = ' || x_return_status,
13979                                   p_msg_level=>fnd_log.level_statement);
13980       END IF;
13981 
13982     END IF;
13983 
13984     -- object_table_name has foreign key fnd_objects.obj_name
13985     -- do not need to check during update because object_table_name is
13986     -- non-updateable.
13987     IF p_create_update_flag = 'C'
13988        AND p_relationship_rec.object_table_name IS NOT NULL
13989        AND p_relationship_rec.object_table_name <> fnd_api.g_miss_char
13990     THEN
13991       BEGIN
13992         SELECT 'Y'
13993         INTO   l_dummy
13994         FROM   fnd_objects fo
13995         WHERE  fo.obj_name = p_relationship_rec.object_table_name;
13996       EXCEPTION
13997         WHEN NO_DATA_FOUND THEN
13998           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13999           fnd_message.set_token('FK', 'object_table_name');
14000           fnd_message.set_token('COLUMN', 'obj_name');
14001           fnd_message.set_token('TABLE', 'fnd_objects');
14002           fnd_msg_pub.add;
14003           x_return_status := fnd_api.g_ret_sts_error;
14004       END;
14005 
14006       /*IF g_debug THEN
14007         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14008           'object_table_name has foreign key fnd_objects.obj_name. ' ||
14009             'x_return_status = ' || x_return_status,
14010           l_debug_prefix
14011         );
14012       END IF;
14013       */
14014       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14015            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14016            p_message=>'object_table_name has foreign key fnd_objects.obj_name. ' ||
14017             'x_return_status = ' || x_return_status,
14018                                   p_msg_level=>fnd_log.level_statement);
14019       END IF;
14020 
14021     END IF;
14022   END IF;
14023 
14024     -----------------------
14025     -- validate object_type
14026     -----------------------
14027 /****Logical APIs - validation not required****/
14028   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
14029     -- object_type is mandatory
14030     validate_mandatory (
14031       p_create_update_flag      => p_create_update_flag,
14032       p_column                  => 'object_type',
14033       p_column_value            => p_relationship_rec.object_type,
14034       x_return_status           => x_return_status
14035     );
14036 
14037     /*IF g_debug THEN
14038       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_type is mandatory. ' ||
14039                                'x_return_status = ' || x_return_status,
14040                              l_debug_prefix);
14041     END IF;
14042     */
14043     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14044            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is mandatory. ' ||
14045                                'x_return_status = ' || x_return_status,
14046                                   p_msg_level=>fnd_log.level_statement);
14047     END IF;
14048 
14049     -- object_type is non-updateable
14050     IF p_create_update_flag = 'U' THEN
14051       validate_nonupdateable (
14052         p_column                => 'object_type',
14053         p_column_value          => p_relationship_rec.object_type,
14054         p_old_column_value      => l_object_type,
14055         x_return_status         => x_return_status
14056       );
14057 
14058       /*IF g_debug THEN
14059         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_type is non-updateable. ' ||
14060                                  'x_return_status = ' || x_return_status,
14061                                l_debug_prefix);
14062       END IF;
14063       */
14064       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14065            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is non-updateable. ' ||
14066                                  'x_return_status = ' || x_return_status,
14067                                   p_msg_level=>fnd_log.level_statement);
14068       END IF;
14069 
14070     END IF;
14071 
14072     -- object_type has foreign key fnd_object_instance_sets.instance_set_name
14073     -- do not need to check during update because object_type is
14074     -- non-updateable.
14075     IF p_create_update_flag = 'C'
14076        AND p_relationship_rec.object_type IS NOT NULL
14077        AND p_relationship_rec.object_type <> fnd_api.g_miss_char
14078     THEN
14079       BEGIN
14080         SELECT 'Y'
14081         INTO   l_dummy
14082         FROM   fnd_object_instance_sets fois
14083         WHERE  fois.instance_set_name = p_relationship_rec.object_type;
14084       EXCEPTION
14085         WHEN NO_DATA_FOUND THEN
14086           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
14087           fnd_message.set_token('FK', 'object_type');
14088           fnd_message.set_token('COLUMN', 'instance_set_name');
14089           fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
14090           fnd_msg_pub.add;
14091           x_return_status := fnd_api.g_ret_sts_error;
14092       END;
14093 
14094       /*IF g_debug THEN
14095         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14096           'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
14097             'x_return_status = ' || x_return_status,
14098           l_debug_prefix
14099         );
14100       END IF;
14101       */
14102       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14103            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14104            p_message=>'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
14105             'x_return_status = ' || x_return_status,
14106                                   p_msg_level=>fnd_log.level_statement);
14107       END IF;
14108 
14109     END IF;
14110   END IF;
14111 
14112     ----------------------
14113     -- validate start_date
14114     ----------------------
14115 /* The start_date is defaulted in table handler for bug # 2260303
14116    Hence removed the mandatory check for start_date
14117 
14118     -- start_date is mandatory
14119     validate_mandatory (
14120       p_create_update_flag      => p_create_update_flag,
14121       p_column                  => 'start_date',
14122       p_column_value            => p_relationship_rec.start_date,
14123       x_return_status           => x_return_status
14124     );
14125 
14126     IF g_debug THEN
14127       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'start_date is mandatory. ' ||
14128                                'x_return_status = ' || x_return_status,
14129                              l_debug_prefix);
14130     END IF;
14131 */
14132     -- start_date cannot be set to null during update
14133 
14134     IF p_create_update_flag = 'U' THEN
14135       validate_cannot_update_to_null (
14136         p_column              => 'start_date',
14137         p_column_value        => p_relationship_rec.start_date,
14138         x_return_status       => x_return_status
14139       );
14140 
14141       /*IF g_debug THEN
14142         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14143           'start_date cannot be set to null during update. ' ||
14144             'x_return_status = ' || x_return_status,
14145           l_debug_prefix
14146         );
14147       END IF;
14148       */
14149       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14150            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14151            p_message=>'start_date cannot be set to null during update. ' ||
14152             'x_return_status = ' || x_return_status,
14153                                   p_msg_level=>fnd_log.level_statement);
14154       END IF;
14155 
14156     END IF;
14157 
14158     --------------------
14159     -- validate party_id
14160     --------------------
14161 
14162     -- party_id is non-updateable
14163     IF p_create_update_flag = 'U' THEN
14164       validate_nonupdateable (
14165         p_column                => 'party_id',
14166         p_column_value          => p_relationship_rec.party_rec.party_id,
14167         p_old_column_value      => l_party_id,
14168         x_return_status         => x_return_status);
14169 
14170       /*IF g_debug THEN
14171         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'party_id is non-updateable. ' ||
14172                                  'x_return_status = ' || x_return_status,
14173                                l_debug_prefix);
14174       END IF;
14175       */
14176       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14177            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable. ' ||
14178                                  'x_return_status = ' || x_return_status,
14179                                   p_msg_level=>fnd_log.level_statement);
14180      END IF;
14181 
14182     END IF;
14183 
14184     ------------------
14185     -- validate status
14186     ------------------
14187 
14188     -- status cannot be set to null during update
14189     IF p_create_update_flag = 'U' THEN
14190       validate_cannot_update_to_null (
14191         p_column                                => 'status',
14192         p_column_value                          => p_relationship_rec.status,
14193         x_return_status                         => x_return_status
14194       );
14195 
14196       /*IF g_debug THEN
14197         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14198           'status cannot be set to null during update. ' ||
14199             'x_return_status = ' || x_return_status,
14200           l_debug_prefix);
14201       END IF;
14202       */
14203       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14204            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be set to null during update. ' ||
14205             'x_return_status = ' || x_return_status,
14206                                   p_msg_level=>fnd_log.level_statement);
14207     END IF;
14208 
14209     END IF;
14210 
14211 /****Logical APIs - validation not required****/
14212   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
14213     -- status is lookup code in lookup type REGISTRY_STATUS
14214     IF p_relationship_rec.status IS NOT NULL
14215        AND p_relationship_rec.status <> fnd_api.g_miss_char
14216        AND (p_create_update_flag = 'C'
14217             OR (p_create_update_flag = 'U'
14218                 AND p_relationship_rec.status <> NVL(l_status,
14219                                                      fnd_api.g_miss_char)))
14220     THEN
14221       validate_lookup (
14222         p_column                                => 'status',
14223         p_lookup_type                           => 'REGISTRY_STATUS',
14224         p_column_value                          => p_relationship_rec.status,
14225         x_return_status                         => x_return_status
14226       );
14227 
14228       /*IF g_debug THEN
14229         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14230           'status is lookup code in lookup type REGISTRY_STATUS. ' ||
14231             'x_return_status = ' || x_return_status,
14232         l_debug_prefix);
14233       END IF;
14234       */
14235       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14236            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14237            p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
14238             'x_return_status = ' || x_return_status,
14239                                   p_msg_level=>fnd_log.level_statement);
14240     END IF;
14241 
14242     END IF;
14243   END IF;
14244 
14245     /* Bug 2197181: removed content_source_type validation as this
14246        column has been obsoleted  for mix-n-match project.
14247 
14248     ----------------------------------------------
14249     -- validate content_source_type
14250     ----------------------------------------------
14251 
14252     -- do not need to chack content_source_type is mandatory because
14253     -- we default content_source_type to
14254     -- hz_party_v2pub.g_miss_content_source_type in the table handler.
14255 
14256     -- content_source_type is non-updateable
14257     IF p_create_update_flag = 'U' THEN
14258       validate_nonupdateable (
14259         p_column                => 'content_source_type',
14260         p_column_value          => p_relationship_rec.content_source_type,
14261         p_old_column_value      => l_content_source_type,
14262         x_return_status         => x_return_status
14263       );
14264 
14265 
14266       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14267            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'content_source_type is non-updateable. ' ||
14268                                  'x_return_status = ' || x_return_status,
14269                                   p_msg_level=>fnd_log.level_statement);
14270     END IF;
14271 
14272     END IF;
14273 
14274     -- content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE
14275     validate_lookup (
14276       p_column                  => 'content_source_type',
14277       p_lookup_type             => 'CONTENT_SOURCE_TYPE',
14278       p_column_value            => p_relationship_rec.content_source_type,
14279       x_return_status           => x_return_status
14280     );
14281 
14282     IF g_debug THEN
14283       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14284         'content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE. ' ||
14285           'x_return_status = ' || x_return_status,
14286         l_debug_prefix
14287       );
14288     END IF;
14289     */
14290 
14291     -- Bug 2197181: Added validation for mix-n-match
14292 
14293     ----------------------------------------
14294     -- validate content_source_type and actual_content_source_type
14295     ----------------------------------------
14296 
14297     HZ_MIXNM_UTILITY.ValidateContentSource (
14298       p_api_version                       => 'V2',
14299       p_create_update_flag                => p_create_update_flag,
14300       p_check_update_privilege            => 'N',
14301       p_content_source_type               => p_relationship_rec.content_source_type,
14302       p_old_content_source_type           => l_content_source_type,
14303       p_actual_content_source             => p_relationship_rec.actual_content_source,
14304       p_old_actual_content_source         => db_actual_content_source,
14305       p_entity_name                       => 'HZ_RELATIONSHIPS',
14306       x_return_status                     => x_return_status );
14307 
14308     ----------------------------------
14309     -- start_date, end_date validation
14310     ----------------------------------
14311 
14312     -- end_date must be null or greater than start date
14313     IF (p_create_update_flag = 'C') THEN
14314       IF p_relationship_rec.end_date IS NOT NULL AND
14315          p_relationship_rec.end_date <> fnd_api.g_miss_date AND
14316          p_relationship_rec.end_date < p_relationship_rec.start_date
14317       THEN
14318         fnd_message.set_name('AR', 'HZ_API_START_DATE_GREATER');
14319         fnd_msg_pub.add;
14320         x_return_status := fnd_api.g_ret_sts_error;
14321       END IF;
14322     ELSIF (p_create_update_flag = 'U') THEN
14323       -- old start_date, end_date has been selected from table
14324       -- and put into l_start_date, l_end_date
14325 
14326       IF p_relationship_rec.start_date <> fnd_api.g_miss_date THEN
14327         l_start_date := p_relationship_rec.start_date;
14328       END IF;
14329 
14330       IF p_relationship_rec.end_date IS NULL
14331          OR p_relationship_rec.end_date <> fnd_api.g_miss_date
14332       THEN
14333         l_end_date := p_relationship_rec.end_date;
14334       END IF;
14335 
14336       IF l_end_date IS NOT NULL
14337          AND l_end_date < l_start_date
14338       THEN
14339         fnd_message.set_name('AR', 'HZ_API_START_DATE_GREATER');
14340         fnd_msg_pub.add;
14341         x_return_status := fnd_api.g_ret_sts_error;
14342       END IF;
14343     END IF;
14344 
14345     /*IF g_debug THEN
14346       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14347         'end_date must be null or greater than start date. ' ||
14348           'x_return_status = ' || x_return_status,
14349         l_debug_prefix);
14350     END IF;
14351     */
14352     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14353            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'end_date must be null or greater than start date. ' ||
14354           'x_return_status = ' || x_return_status,
14355                                   p_msg_level=>fnd_log.level_statement);
14356     END IF;
14357 
14358     ------------------------
14359     -- validate date overlap
14360     ------------------------
14361 
14362     IF p_create_update_flag = 'C' THEN
14363       db_actual_content_source := p_relationship_rec.actual_content_source;
14364     END IF;
14365      -- Bug#12557688
14366  	 -- When you Inactivate record no need to validate date overlap
14367  	 -- between two identical relationships.
14368  	 IF p_relationship_rec.status IS NULL AND p_create_update_flag = 'U' THEN
14369  	      SELECT status
14370  	      INTO   l_status
14371  	      FROM  hz_relationships
14372  	      WHERE relationship_id = p_relationship_rec.relationship_id
14373  	      AND rownum =1;
14374  	 END IF;
14375 
14376     -- there should not be any date overlap between two identical relationships
14377 
14378 -- Bug 3294936 : check for all records in the cursor for overlap
14379 
14380 --    OPEN c1(db_actual_content_source);
14381     IF nvl(p_relationship_rec.status,l_status) <> 'I' THEN
14382     For r1 in c1(db_actual_content_source)
14383     LOOP
14384 --    FETCH c1 into r1;
14385 --    IF c1%FOUND THEN
14386       l_overlap := hz_common_pub.is_time_overlap(
14387                      NVL(p_relationship_rec.start_date,sysdate),
14388                      p_relationship_rec.end_date,
14389                      r1.start_date,
14390                      r1.end_date
14391                    );
14392       IF l_overlap = 'Y' THEN
14393         fnd_message.set_name('AR', 'HZ_RELATIONSHIP_DATE_OVERLAP');
14394         fnd_msg_pub.add;
14395         x_return_status := fnd_api.g_ret_sts_error;
14396 -- Bug 3294936 : Add exit to come out of loop
14397         EXIT;
14398       END IF;
14399     END LOOP;
14400 --    END IF;
14401 --    CLOSE c1;
14402     END IF;
14403     /*IF g_debug THEN
14404       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14405         'there should not be any date overlap between two identical relationships. ' ||
14406         'x_return_status = ' || x_return_status, l_debug_prefix);
14407     END IF;
14408     */
14409     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14410            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14411            p_message=>'there should not be any date overlap between two identical relationships. ' ||
14412         'x_return_status = ' || x_return_status,
14413                                   p_msg_level=>fnd_log.level_statement);
14414     END IF;
14415 
14416     --------------------------------------
14417     -- validate created_by_module
14418     --------------------------------------
14419 
14420     validate_created_by_module(
14421       p_create_update_flag     => p_create_update_flag,
14422       p_created_by_module      => p_relationship_rec.created_by_module,
14423       p_old_created_by_module  => l_created_by_module,
14424       x_return_status          => x_return_status);
14425 
14426     --------------------------------------
14427     -- validate application_id
14428     --------------------------------------
14429 
14430     validate_application_id(
14431       p_create_update_flag     => p_create_update_flag,
14432       p_application_id         => p_relationship_rec.application_id,
14433       p_old_application_id     => l_application_id,
14434       x_return_status          => x_return_status);
14435 
14436     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14437         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship (-)',
14438                                p_msg_level=>fnd_log.level_procedure);
14439     END IF;
14440 
14441   END validate_relationship;
14442 
14443   --
14444   -- DESCRIPTION
14445   --     Validates a contact point record (minus EFTs).  Kept for backward
14446   --     compatibility.
14447   --
14448   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14449   --
14450   -- ARGUMENTS
14451   --   IN:
14452   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14453   --     p_contact_point_rec  Contact point record.
14454   --     p_edi_rec            EDI record.
14455   --     p_email_rec          Email record.
14456   --     p_phone_rec          Phone record.
14457   --     p_telex_rec          Telex record.
14458   --     p_web_rec            Web record.
14459   --     p_rowid              Rowid of the record (used only in update mode).
14460   --   IN/OUT:
14461   --     x_return_status      Return status after the call. The status can
14462   --                          be FND_API.G_RET_STS_SUCCESS (success),
14463   --                          fnd_api.g_ret_sts_error (error),
14464   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14465   --
14466   -- NOTES
14467   --
14468   -- MODIFICATION HISTORY
14469   --
14470   --   07-23-2001    Jianying Huang      o Created.
14471   --   20-NOV-2001   Joe del Callar      Bug 2116225: Modified to accept EFT
14472   --                                     records for bank consolidation.
14473   --                                     Bug 2117973: Modified to comply with
14474   --                                     PL/SQL coding standards.
14475   --   05-DEC-2001   Joe del Callar      Bug 2136283: Modified to use generic
14476   --                                     validation procedure for improved
14477   --                                     backward compatibility.
14478   --
14479   PROCEDURE validate_contact_point (
14480     p_create_update_flag  IN     VARCHAR2,
14481     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14482     p_edi_rec             IN     hz_contact_point_v2pub.edi_rec_type := hz_contact_point_v2pub.g_miss_edi_rec,
14483     p_email_rec           IN     hz_contact_point_v2pub.email_rec_type := hz_contact_point_v2pub.g_miss_email_rec,
14484     p_phone_rec           IN     hz_contact_point_v2pub.phone_rec_type := hz_contact_point_v2pub.g_miss_phone_rec,
14485     p_telex_rec           IN     hz_contact_point_v2pub.telex_rec_type := hz_contact_point_v2pub.g_miss_telex_rec,
14486     p_web_rec             IN     hz_contact_point_v2pub.web_rec_type := hz_contact_point_v2pub.g_miss_web_rec,
14487     p_rowid               IN     ROWID,
14488     x_return_status       IN OUT NOCOPY VARCHAR2
14489   ) IS
14490   l_debug_prefix                       VARCHAR2(30) := '';
14491   BEGIN
14492     -- Check if API is called in debug mode. If yes, enable debug.
14493     --enable_debug;
14494 
14495     -- Debug info.
14496     /*IF g_debug THEN
14497       hz_utility_v2pub.debug ('validate_contact_point (+)');
14498     END IF;
14499     */
14500     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14501         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_contact_point (+)',
14502                                p_msg_level=>fnd_log.level_procedure);
14503     END IF;
14504 
14505 
14506     validate_contact_point_main(
14507       p_create_update_flag => p_create_update_flag,
14508       p_contact_point_rec  => p_contact_point_rec,
14509       p_edi_rec            => p_edi_rec,
14510       p_email_rec          => p_email_rec,
14511       p_phone_rec          => p_phone_rec,
14512       p_telex_rec          => p_telex_rec,
14513       p_web_rec            => p_web_rec,
14514       p_rowid              => p_rowid,
14515       x_return_status      => x_return_status
14516     );
14517 
14518     -- Debug info.
14519     /*IF g_debug THEN
14520       hz_utility_v2pub.debug ('validate_contact_point (-)');
14521     END IF;
14522     */
14523     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14524         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_contact_point (-)',
14525                                p_msg_level=>fnd_log.level_procedure);
14526     END IF;
14527 
14528 
14529     -- Check if API is called in debug mode. If yes, disable debug.
14530     --disable_debug;
14531   END validate_contact_point;
14532 
14533   --
14534   -- DESCRIPTION
14535   --     Validates an EDI contact point record.
14536   --
14537   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14538   --
14539   -- ARGUMENTS
14540   --   IN:
14541   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14542   --     p_contact_point_rec  Contact point record.
14543   --     p_edi_rec            EDI record.
14544   --     p_rowid              Rowid of the record (used only in update mode).
14545   --   IN/OUT:
14546   --     x_return_status      Return status after the call. The status can
14547   --                          be FND_API.G_RET_STS_SUCCESS (success),
14548   --                          fnd_api.g_ret_sts_error (error),
14549   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14550   --
14551   -- NOTES
14552   --
14553   -- MODIFICATION HISTORY
14554   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14555   --                                     backward compatibility.
14556   --
14557   PROCEDURE validate_edi_contact_point (
14558     p_create_update_flag  IN     VARCHAR2,
14559     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14560     p_edi_rec             IN     hz_contact_point_v2pub.edi_rec_type := hz_contact_point_v2pub.g_miss_edi_rec,
14561     p_rowid               IN     ROWID,
14562     x_return_status       IN OUT NOCOPY VARCHAR2
14563   ) IS
14564   l_debug_prefix                       VARCHAR2(30) := '';
14565   BEGIN
14566     -- Check if API is called in debug mode. If yes, enable debug.
14567     --enable_debug;
14568 
14569     -- Debug info.
14570     /*IF g_debug THEN
14571       hz_utility_v2pub.debug ('validate_edi_contact_point (+)');
14572     END IF;
14573     */
14574     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14575         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_edi_contact_point (+)',
14576                                p_msg_level=>fnd_log.level_procedure);
14577     END IF;
14578 
14579 
14580     validate_contact_point_main(
14581       p_create_update_flag => p_create_update_flag,
14582       p_contact_point_rec  => p_contact_point_rec,
14583       p_edi_rec            => p_edi_rec,
14584       p_rowid              => p_rowid,
14585       x_return_status      => x_return_status
14586     );
14587 
14588     -- Debug info.
14589     /*IF g_debug THEN
14590       hz_utility_v2pub.debug ('validate_edi_contact_point (-)');
14591     END IF;
14592     */
14593     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14594         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_edi_contact_point (-)',
14595                                p_msg_level=>fnd_log.level_procedure);
14596     END IF;
14597 
14598 
14599     -- Check if API is called in debug mode. If yes, disable debug.
14600     --disable_debug;
14601   END validate_edi_contact_point;
14602 
14603   --
14604   -- DESCRIPTION
14605   --     Validates an EFT contact point record.
14606   --
14607   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14608   --
14609   -- ARGUMENTS
14610   --   IN:
14611   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14612   --     p_contact_point_rec  Contact point record.
14613   --     p_eft_rec            EFT record.
14614   --     p_rowid              Rowid of the record (used only in update mode).
14615   --   IN/OUT:
14616   --     x_return_status      Return status after the call. The status can
14617   --                          be FND_API.G_RET_STS_SUCCESS (success),
14618   --                          fnd_api.g_ret_sts_error (error),
14619   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14620   --
14621   -- NOTES
14622   --
14623   -- MODIFICATION HISTORY
14624   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14625   --                                     backward compatibility.
14626   --
14627   PROCEDURE validate_eft_contact_point (
14628     p_create_update_flag  IN     VARCHAR2,
14629     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14630     p_eft_rec             IN     hz_contact_point_v2pub.eft_rec_type := hz_contact_point_v2pub.g_miss_eft_rec,
14631     p_rowid               IN     ROWID,
14632     x_return_status       IN OUT NOCOPY VARCHAR2
14633   ) IS
14634   l_debug_prefix                       VARCHAR2(30) := '';
14635   BEGIN
14636     -- Check if API is called in debug mode. If yes, enable debug.
14637     --enable_debug;
14638 
14639     -- Debug info.
14640     /*IF g_debug THEN
14641       hz_utility_v2pub.debug ('validate_eft_contact_point (+)');
14642     END IF;
14643     */
14644     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14645         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_eft_contact_point (+)',
14646                                p_msg_level=>fnd_log.level_procedure);
14647     END IF;
14648 
14649 
14650     validate_contact_point_main(
14651       p_create_update_flag => p_create_update_flag,
14652       p_contact_point_rec  => p_contact_point_rec,
14653       p_eft_rec            => p_eft_rec,
14654       p_rowid              => p_rowid,
14655       x_return_status      => x_return_status
14656     );
14657 
14658     -- Debug info.
14659     /*IF g_debug THEN
14660       hz_utility_v2pub.debug ('validate_eft_contact_point (-)');
14661     END IF;
14662     */
14663     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14664         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_eft_contact_point (-)',
14665                                p_msg_level=>fnd_log.level_procedure);
14666     END IF;
14667 
14668 
14669     -- Check if API is called in debug mode. If yes, disable debug.
14670     --disable_debug;
14671   END validate_eft_contact_point;
14672 
14673   --
14674   -- DESCRIPTION
14675   --     Validates an Web contact point record.
14676   --
14677   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14678   --
14679   -- ARGUMENTS
14680   --   IN:
14681   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14682   --     p_contact_point_rec  Contact point record.
14683   --     p_web_rec            Web record.
14684   --     p_rowid              Rowid of the record (used only in update mode).
14685   --   IN/OUT:
14686   --     x_return_status      Return status after the call. The status can
14687   --                          be FND_API.G_RET_STS_SUCCESS (success),
14688   --                          fnd_api.g_ret_sts_error (error),
14689   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14690   --
14691   -- NOTES
14692   --
14693   -- MODIFICATION HISTORY
14694   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14695   --                                     backward compatibility.
14696   --
14697   PROCEDURE validate_web_contact_point (
14698     p_create_update_flag  IN     VARCHAR2,
14699     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14700     p_web_rec             IN     hz_contact_point_v2pub.web_rec_type := hz_contact_point_v2pub.g_miss_web_rec,
14701     p_rowid               IN     ROWID,
14702     x_return_status       IN OUT NOCOPY VARCHAR2
14703   ) IS
14704   l_debug_prefix                       VARCHAR2(30) := '';
14705   BEGIN
14706     -- Check if API is called in debug mode. If yes, enable debug.
14707     --enable_debug;
14708 
14709     -- Debug info.
14710     /*IF g_debug THEN
14711       hz_utility_v2pub.debug ('validate_web_contact_point (+)');
14712     END IF;
14713     */
14714     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14715         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_web_contact_point (+)',
14716                                p_msg_level=>fnd_log.level_procedure);
14717     END IF;
14718 
14719 
14720     validate_contact_point_main(
14721       p_create_update_flag => p_create_update_flag,
14722       p_contact_point_rec  => p_contact_point_rec,
14723       p_web_rec            => p_web_rec,
14724       p_rowid              => p_rowid,
14725       x_return_status      => x_return_status
14726     );
14727 
14728     -- Debug info.
14729     /*IF g_debug THEN
14730       hz_utility_v2pub.debug ('validate_web_contact_point (-)');
14731     END IF;
14732     */
14733 
14734 
14735     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14736         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_web_contact_point (-)',
14737                                p_msg_level=>fnd_log.level_procedure);
14738     END IF;
14739 
14740     -- Check if API is called in debug mode. If yes, disable debug.
14741     --disable_debug;
14742   END validate_web_contact_point;
14743 
14744   --
14745   -- DESCRIPTION
14746   --     Validates an Phone contact point record.
14747   --
14748   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14749   --
14750   -- ARGUMENTS
14751   --   IN:
14752   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14753   --     p_contact_point_rec  Contact point record.
14754   --     p_phone_rec          Phone record.
14755   --     p_rowid              Rowid of the record (used only in update mode).
14756   --   IN/OUT:
14757   --     x_return_status      Return status after the call. The status can
14758   --                          be FND_API.G_RET_STS_SUCCESS (success),
14759   --                          fnd_api.g_ret_sts_error (error),
14760   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14761   --
14762   -- NOTES
14763   --
14764   -- MODIFICATION HISTORY
14765   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14766   --                                     backward compatibility.
14767   --
14768   PROCEDURE validate_phone_contact_point (
14769     p_create_update_flag  IN     VARCHAR2,
14770     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14771     p_phone_rec           IN     hz_contact_point_v2pub.phone_rec_type := hz_contact_point_v2pub.g_miss_phone_rec,
14772     p_rowid               IN     ROWID,
14773     x_return_status       IN OUT NOCOPY VARCHAR2
14774   ) IS
14775   l_debug_prefix                       VARCHAR2(30) := '';
14776   BEGIN
14777     -- Check if API is called in debug mode. If yes, enable debug.
14778     --enable_debug;
14779 
14780     -- Debug info.
14781 
14782     /*IF g_debug THEN
14783       hz_utility_v2pub.debug ('validate_phone_contact_point (+)');
14784     END IF;
14785     */
14786     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14787         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_phone_contact_point (+)',
14788                                p_msg_level=>fnd_log.level_procedure);
14789     END IF;
14790 
14791 
14792     validate_contact_point_main(
14793       p_create_update_flag => p_create_update_flag,
14794       p_contact_point_rec  => p_contact_point_rec,
14795       p_phone_rec          => p_phone_rec,
14796       p_rowid              => p_rowid,
14797       x_return_status      => x_return_status
14798     );
14799 
14800     -- Debug info.
14801     /*IF g_debug THEN
14802       hz_utility_v2pub.debug ('validate_phone_contact_point (-)');
14803     END IF;
14804     */
14805     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14806         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_phone_contact_point (-)',
14807                                p_msg_level=>fnd_log.level_procedure);
14808     END IF;
14809 
14810     -- Check if API is called in debug mode. If yes, disable debug.
14811     --disable_debug;
14812   END validate_phone_contact_point;
14813 
14814   --
14815   -- DESCRIPTION
14816   --     Validates an Telex contact point record.
14817   --
14818   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14819   --
14820   -- ARGUMENTS
14821   --   IN:
14822   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14823   --     p_contact_point_rec  Contact point record.
14824   --     p_telex_rec          Telex record.
14825   --     p_rowid              Rowid of the record (used only in update mode).
14826   --   IN/OUT:
14827   --     x_return_status      Return status after the call. The status can
14828   --                          be FND_API.G_RET_STS_SUCCESS (success),
14829   --                          fnd_api.g_ret_sts_error (error),
14830   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14831   --
14832   -- NOTES
14833   --
14834   -- MODIFICATION HISTORY
14835   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14836   --                                     backward compatibility.
14837   --
14838   PROCEDURE validate_telex_contact_point (
14839     p_create_update_flag  IN     VARCHAR2,
14840     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14841     p_telex_rec           IN     hz_contact_point_v2pub.telex_rec_type := hz_contact_point_v2pub.g_miss_telex_rec,
14842     p_rowid               IN     ROWID,
14843     x_return_status       IN OUT NOCOPY VARCHAR2
14844   ) IS
14845   l_debug_prefix                       VARCHAR2(30) := '';
14846   BEGIN
14847     -- Check if API is called in debug mode. If yes, enable debug.
14848     --enable_debug;
14849 
14850     -- Debug info.
14851     /*IF g_debug THEN
14852       hz_utility_v2pub.debug ('validate_telex_contact_point (+)');
14853     END IF;
14854     */
14855     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14856         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_telex_contact_point (+)',
14857                                p_msg_level=>fnd_log.level_procedure);
14858     END IF;
14859 
14860 
14861     validate_contact_point_main(
14862       p_create_update_flag => p_create_update_flag,
14863       p_contact_point_rec  => p_contact_point_rec,
14864       p_telex_rec          => p_telex_rec,
14865       p_rowid              => p_rowid,
14866       x_return_status      => x_return_status
14867     );
14868 
14869     -- Debug info.
14870     /*IF g_debug THEN
14871       hz_utility_v2pub.debug ('validate_telex_contact_point (-)');
14872     END IF;
14873     */
14874     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14875         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_telex_contact_point (-)',
14876                                p_msg_level=>fnd_log.level_procedure);
14877     END IF;
14878 
14879 
14880     -- Check if API is called in debug mode. If yes, disable debug.
14881     --disable_debug;
14882   END validate_telex_contact_point;
14883 
14884   --
14885   -- DESCRIPTION
14886   --     Validates an Email contact point record.
14887   --
14888   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14889   --
14890   -- ARGUMENTS
14891   --   IN:
14892   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14893   --     p_contact_point_rec  Contact point record.
14894   --     p_email_rec          Email record.
14895   --     p_rowid              Rowid of the record (used only in update mode).
14896   --   IN/OUT:
14897   --     x_return_status      Return status after the call. The status can
14898   --                          be FND_API.G_RET_STS_SUCCESS (success),
14899   --                          fnd_api.g_ret_sts_error (error),
14900   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14901   --
14902   -- NOTES
14903   --
14904   -- MODIFICATION HISTORY
14905   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14906   --                                     backward compatibility.
14907   --
14908   PROCEDURE validate_email_contact_point (
14909     p_create_update_flag  IN     VARCHAR2,
14910     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14911     p_email_rec           IN     hz_contact_point_v2pub.email_rec_type := hz_contact_point_v2pub.g_miss_email_rec,
14912     p_rowid               IN     ROWID,
14913     x_return_status       IN OUT NOCOPY VARCHAR2
14914   ) IS
14915   l_debug_prefix                       VARCHAR2(30) := '';
14916   BEGIN
14917     -- Check if API is called in debug mode. If yes, enable debug.
14918     --enable_debug;
14919 
14920     -- Debug info.
14921     /*IF g_debug THEN
14922       hz_utility_v2pub.debug ('validate_email_contact_point (+)');
14923     END IF;
14924     */
14925     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14926         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_email_contact_point (+)',
14927                                p_msg_level=>fnd_log.level_procedure);
14928     END IF;
14929 
14930 
14931     validate_contact_point_main(
14932       p_create_update_flag => p_create_update_flag,
14933       p_contact_point_rec  => p_contact_point_rec,
14934       p_email_rec          => p_email_rec,
14935       p_rowid              => p_rowid,
14936       x_return_status      => x_return_status
14937     );
14938 
14939     -- Debug info.
14940     /*IF g_debug THEN
14941       hz_utility_v2pub.debug ('validate_email_contact_point (-)');
14942     END IF;
14943     */
14944     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14945         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_email_contact_point (-)',
14946                                p_msg_level=>fnd_log.level_procedure);
14947     END IF;
14948 
14949 
14950     -- Check if API is called in debug mode. If yes, disable debug.
14951     --disable_debug;
14952   END validate_email_contact_point;
14953 
14954   PROCEDURE  validate_org_nonsupport_column (
14955     p_create_update_flag                    IN     VARCHAR2,
14956     p_organization_rec                      IN     HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE,
14957     x_return_status                         IN OUT NOCOPY VARCHAR2
14958   ) IS
14959   l_debug_prefix                       VARCHAR2(30) := '';
14960   BEGIN
14961         -- Debug info.
14962        /* IF G_DEBUG THEN
14963             HZ_UTILITY_V2PUB.debug ( 'validate_org_nonsupport_column (+)' );
14964         END IF;
14965         */
14966         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14967              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_nonsupport_column (+)',
14968                                p_msg_level=>fnd_log.level_procedure);
14969         END IF;
14970 
14971 
14972         IF ( p_create_update_flag = 'C' AND
14973                  p_organization_rec.avg_high_credit IS NOT NULL AND
14974                  p_organization_rec.avg_high_credit <> FND_API.G_MISS_NUM )
14975          OR
14976                ( p_create_update_flag = 'U' AND
14977                  ( p_organization_rec.avg_high_credit = FND_API.G_MISS_NUM OR
14978                    p_organization_rec.avg_high_credit IS NOT NULL
14979          ) )
14980             THEN
14981                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
14982                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'avg_high_credit' );
14983                 FND_MSG_PUB.ADD;
14984                 x_return_status := FND_API.G_RET_STS_ERROR;
14985             END IF;
14986 
14987             IF ( p_create_update_flag = 'C' AND
14988                  p_organization_rec.credit_score IS NOT NULL AND
14989                  p_organization_rec.credit_score <> FND_API.G_MISS_CHAR )
14990          OR
14991                ( p_create_update_flag = 'U' AND
14992                  ( p_organization_rec.credit_score = FND_API.G_MISS_CHAR OR
14993                    p_organization_rec.credit_score IS NOT NULL
14994          ) )
14995             THEN
14996                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
14997                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score' );
14998                 FND_MSG_PUB.ADD;
14999                 x_return_status := FND_API.G_RET_STS_ERROR;
15000             END IF;
15001 
15002             IF ( p_create_update_flag = 'C' AND
15003                  p_organization_rec.credit_score_age IS NOT NULL AND
15004                  p_organization_rec.credit_score_age <> FND_API.G_MISS_NUM )
15005          OR
15006                ( p_create_update_flag = 'U' AND
15007                  ( p_organization_rec.credit_score_age = FND_API.G_MISS_NUM  OR
15008                    p_organization_rec.credit_score_age IS NOT  NULL
15009          ) )
15010             THEN
15011                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15012                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_age' );
15013                 FND_MSG_PUB.ADD;
15014                 x_return_status := FND_API.G_RET_STS_ERROR;
15015             END IF;
15016 
15017             IF ( p_create_update_flag = 'C' AND
15018                  p_organization_rec.credit_score_class IS NOT NULL AND
15019                  p_organization_rec.credit_score_class <> FND_API.G_MISS_NUM )
15020          OR
15021                ( p_create_update_flag = 'U' AND
15022                  ( p_organization_rec.credit_score_class = FND_API.G_MISS_NUM  OR
15023                    p_organization_rec.credit_score_class IS NOT NULL
15024          ) )
15025             THEN
15026                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15027                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_class' );
15028                 FND_MSG_PUB.ADD;
15029                 x_return_status := FND_API.G_RET_STS_ERROR;
15030             END IF;
15031 
15032             IF ( p_create_update_flag = 'C' AND
15033                  p_organization_rec.credit_score_commentary IS NOT NULL AND
15034                  p_organization_rec.credit_score_commentary <> FND_API.G_MISS_CHAR )
15035          OR
15036                ( p_create_update_flag = 'U' AND
15037                  ( p_organization_rec.credit_score_commentary = FND_API.G_MISS_CHAR OR
15038                    p_organization_rec.credit_score_commentary IS NOT NULL
15039          ) )
15040             THEN
15041                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15042                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary' );
15043                 FND_MSG_PUB.ADD;
15044                 x_return_status := FND_API.G_RET_STS_ERROR;
15045             END IF;
15046 
15047             IF ( p_create_update_flag = 'C' AND
15048                  p_organization_rec.credit_score_commentary2 IS NOT NULL AND
15049                  p_organization_rec.credit_score_commentary2 <> FND_API.G_MISS_CHAR )
15050          OR
15051                ( p_create_update_flag = 'U' AND
15052                  ( p_organization_rec.credit_score_commentary2 = FND_API.G_MISS_CHAR OR
15053                    p_organization_rec.credit_score_commentary2 IS NOT NULL
15054          ) )
15055             THEN
15056                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15057                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary2' );
15058                 FND_MSG_PUB.ADD;
15059                 x_return_status := FND_API.G_RET_STS_ERROR;
15060             END IF;
15061 
15062             IF ( p_create_update_flag = 'C' AND
15063                  p_organization_rec.credit_score_commentary3 IS NOT NULL AND
15064                  p_organization_rec.credit_score_commentary3 <> FND_API.G_MISS_CHAR )
15065          OR
15066                ( p_create_update_flag = 'U' AND
15067                  ( p_organization_rec.credit_score_commentary3 = FND_API.G_MISS_CHAR OR
15068                    p_organization_rec.credit_score_commentary3 IS NOT NULL
15069          ) )
15070             THEN
15071                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15072                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary3' );
15073                 FND_MSG_PUB.ADD;
15074                 x_return_status := FND_API.G_RET_STS_ERROR;
15075             END IF;
15076 
15077             IF ( p_create_update_flag = 'C' AND
15078                  p_organization_rec.credit_score_commentary4 IS NOT NULL AND
15079                  p_organization_rec.credit_score_commentary4 <> FND_API.G_MISS_CHAR )
15080          OR
15081                ( p_create_update_flag = 'U' AND
15082                  ( p_organization_rec.credit_score_commentary4 = FND_API.G_MISS_CHAR OR
15083                    p_organization_rec.credit_score_commentary4 IS NOT NULL
15084          ) )
15085             THEN
15086                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15087                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary4' );
15088                 FND_MSG_PUB.ADD;
15089                 x_return_status := FND_API.G_RET_STS_ERROR;
15090             END IF;
15091 
15092             IF ( p_create_update_flag = 'C' AND
15093                  p_organization_rec.credit_score_commentary5 IS NOT NULL AND
15094                  p_organization_rec.credit_score_commentary5 <> FND_API.G_MISS_CHAR )
15095          OR
15096                ( p_create_update_flag = 'U' AND
15097                  ( p_organization_rec.credit_score_commentary5 = FND_API.G_MISS_CHAR OR
15098                    p_organization_rec.credit_score_commentary5 IS NOT NULL
15099          ) )
15100             THEN
15101                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15102                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary5' );
15103                 FND_MSG_PUB.ADD;
15104                 x_return_status := FND_API.G_RET_STS_ERROR;
15105             END IF;
15106 
15107             IF ( p_create_update_flag = 'C' AND
15108                  p_organization_rec.credit_score_commentary6 IS NOT NULL AND
15109                  p_organization_rec.credit_score_commentary6 <> FND_API.G_MISS_CHAR )
15110          OR
15111                ( p_create_update_flag = 'U' AND
15112                  ( p_organization_rec.credit_score_commentary6 = FND_API.G_MISS_CHAR OR
15113                    p_organization_rec.credit_score_commentary6 IS NOT NULL
15114          ) )
15115             THEN
15116                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15117                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary6' );
15118                 FND_MSG_PUB.ADD;
15119                 x_return_status := FND_API.G_RET_STS_ERROR;
15120             END IF;
15121 
15122             IF ( p_create_update_flag = 'C' AND
15123                  p_organization_rec.credit_score_commentary7 IS NOT NULL AND
15124                  p_organization_rec.credit_score_commentary7 <> FND_API.G_MISS_CHAR )
15125          OR
15126                ( p_create_update_flag = 'U' AND
15127                  ( p_organization_rec.credit_score_commentary7 = FND_API.G_MISS_CHAR OR
15128                    p_organization_rec.credit_score_commentary7 IS NOT NULL
15129          ) )
15130             THEN
15131                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15132                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary7' );
15133                 FND_MSG_PUB.ADD;
15134                 x_return_status := FND_API.G_RET_STS_ERROR;
15135             END IF;
15136 
15137             IF ( p_create_update_flag = 'C' AND
15138                  p_organization_rec.credit_score_commentary8 IS NOT NULL AND
15139                  p_organization_rec.credit_score_commentary8 <> FND_API.G_MISS_CHAR )
15140          OR
15141                ( p_create_update_flag = 'U' AND
15142                  ( p_organization_rec.credit_score_commentary8 = FND_API.G_MISS_CHAR OR
15143                    p_organization_rec.credit_score_commentary8 IS NOT NULL
15144          ) )
15145             THEN
15146                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15147                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary8' );
15148                 FND_MSG_PUB.ADD;
15149                 x_return_status := FND_API.G_RET_STS_ERROR;
15150             END IF;
15151 
15152             IF ( p_create_update_flag = 'C' AND
15153                  p_organization_rec.credit_score_commentary9 IS NOT NULL AND
15154                  p_organization_rec.credit_score_commentary9 <> FND_API.G_MISS_CHAR )
15155          OR
15156                ( p_create_update_flag = 'U' AND
15157                  ( p_organization_rec.credit_score_commentary9 = FND_API.G_MISS_CHAR OR
15158                    p_organization_rec.credit_score_commentary9 IS NOT NULL
15159          ) )
15160             THEN
15161                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15162                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary9' );
15163                 FND_MSG_PUB.ADD;
15164                 x_return_status := FND_API.G_RET_STS_ERROR;
15165             END IF;
15166 
15167             IF ( p_create_update_flag = 'C' AND
15168                  p_organization_rec.credit_score_commentary10 IS NOT NULL AND
15169                  p_organization_rec.credit_score_commentary10 <> FND_API.G_MISS_CHAR )
15170          OR
15171                ( p_create_update_flag = 'U' AND
15172                  ( p_organization_rec.credit_score_commentary10 = FND_API.G_MISS_CHAR OR
15173                    p_organization_rec.credit_score_commentary10 IS NOT NULL
15174          ) )
15175             THEN
15176                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15177                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary10' );
15178                 FND_MSG_PUB.ADD;
15179                 x_return_status := FND_API.G_RET_STS_ERROR;
15180             END IF;
15181 
15182             IF ( p_create_update_flag = 'C' AND
15183                  p_organization_rec.credit_score_date IS NOT NULL AND
15184                  p_organization_rec.credit_score_date <> FND_API.G_MISS_DATE )
15185          OR
15186                ( p_create_update_flag = 'U' AND
15187                  ( p_organization_rec.credit_score_date = FND_API.G_MISS_DATE OR
15188                    p_organization_rec.credit_score_date IS NOT NULL
15189          ) )
15190             THEN
15191                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15192                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_date' );
15193                 FND_MSG_PUB.ADD;
15194                 x_return_status := FND_API.G_RET_STS_ERROR;
15195             END IF;
15196 
15197             IF ( p_create_update_flag = 'C' AND
15198                  p_organization_rec.credit_score_incd_default IS NOT NULL AND
15199                  p_organization_rec.credit_score_incd_default <> FND_API.G_MISS_NUM )
15200          OR
15201                ( p_create_update_flag = 'U' AND
15202                  ( p_organization_rec.credit_score_incd_default =  FND_API.G_MISS_NUM  OR
15203                    p_organization_rec.credit_score_incd_default IS NOT  NULL
15204          ) )
15205             THEN
15206                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15207                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_incd_default' );
15208                 FND_MSG_PUB.ADD;
15209                 x_return_status := FND_API.G_RET_STS_ERROR;
15210             END IF;
15211 
15212             IF ( p_create_update_flag = 'C' AND
15213                  p_organization_rec.credit_score_natl_percentile IS NOT NULL AND
15214                  p_organization_rec.credit_score_natl_percentile <> FND_API.G_MISS_NUM)
15215          OR
15216                ( p_create_update_flag = 'U' AND
15217                  ( p_organization_rec.credit_score_natl_percentile = FND_API.G_MISS_NUM  OR
15218                    p_organization_rec.credit_score_natl_percentile IS NOT NULL
15219          ) )
15220             THEN
15221                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15222                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_natl_percentile' );
15223                 FND_MSG_PUB.ADD;
15224                 x_return_status := FND_API.G_RET_STS_ERROR;
15225             END IF;
15226 
15227             IF ( p_create_update_flag = 'C' AND
15228                  p_organization_rec.db_rating IS NOT NULL AND
15229                  p_organization_rec.db_rating <> FND_API.G_MISS_CHAR )
15230          OR
15231                ( p_create_update_flag = 'U' AND
15232                  ( p_organization_rec.db_rating = FND_API.G_MISS_CHAR OR
15233                    p_organization_rec.db_rating IS NOT NULL
15234          ) )
15235             THEN
15236                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15237                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'db_rating' );
15238                 FND_MSG_PUB.ADD;
15239                 x_return_status := FND_API.G_RET_STS_ERROR;
15240             END IF;
15241 
15242             IF ( p_create_update_flag = 'C' AND
15243                  p_organization_rec.debarment_ind IS NOT NULL AND
15244                  p_organization_rec.debarment_ind <> FND_API.G_MISS_CHAR )
15245          OR
15246                ( p_create_update_flag = 'U' AND
15247                  ( p_organization_rec.debarment_ind = FND_API.G_MISS_CHAR OR
15248                    p_organization_rec.debarment_ind IS NOT NULL
15249          ) )
15250             THEN
15251                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15252                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'debarment_ind' );
15253                 FND_MSG_PUB.ADD;
15254                 x_return_status := FND_API.G_RET_STS_ERROR;
15255             END IF;
15256 
15257             IF ( p_create_update_flag = 'C' AND
15258                  p_organization_rec.debarments_count IS NOT NULL AND
15259                  p_organization_rec.debarments_count <> FND_API.G_MISS_NUM )
15260          OR
15261                ( p_create_update_flag = 'U' AND
15262                  ( p_organization_rec.debarments_count = FND_API.G_MISS_NUM  OR
15263                    p_organization_rec.debarments_count IS NOT NULL
15264          ) )
15265             THEN
15266                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15267                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'debarments_count' );
15268                 FND_MSG_PUB.ADD;
15269                 x_return_status := FND_API.G_RET_STS_ERROR;
15270             END IF;
15271 
15272             IF ( p_create_update_flag = 'C' AND
15273                  p_organization_rec.debarments_date IS NOT NULL AND
15274                  p_organization_rec.debarments_date <> FND_API.G_MISS_DATE )
15275          OR
15276                ( p_create_update_flag = 'U' AND
15277                  ( p_organization_rec.debarments_date = FND_API.G_MISS_DATE OR
15278                    p_organization_rec.debarments_date IS NOT NULL
15279          ) )
15280             THEN
15281                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15282                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'debarments_date' );
15283                 FND_MSG_PUB.ADD;
15284                 x_return_status := FND_API.G_RET_STS_ERROR;
15285             END IF;
15286 
15287             IF ( p_create_update_flag = 'C' AND
15288                  p_organization_rec.high_credit IS NOT NULL AND
15289                  p_organization_rec.high_credit <> FND_API.G_MISS_NUM )
15290          OR
15291                ( p_create_update_flag = 'U' AND
15292                  ( p_organization_rec.high_credit = FND_API.G_MISS_NUM  OR
15293                    p_organization_rec.high_credit IS NOT NULL
15294          ) )
15295             THEN
15296                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15297                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'high_credit' );
15298                 FND_MSG_PUB.ADD;
15299                 x_return_status := FND_API.G_RET_STS_ERROR;
15300             END IF;
15301 
15302             IF ( p_create_update_flag = 'C' AND
15303                  p_organization_rec.maximum_credit_currency_code IS NOT NULL AND
15304                  p_organization_rec.maximum_credit_currency_code <> FND_API.G_MISS_CHAR )
15305          OR
15306                ( p_create_update_flag = 'U' AND
15307                  ( p_organization_rec.maximum_credit_currency_code = FND_API.G_MISS_CHAR OR
15308                    p_organization_rec.maximum_credit_currency_code IS NOT NULL
15309          ) )
15310             THEN
15311                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15312                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'maximum_credit_currency_code' );
15313                 FND_MSG_PUB.ADD;
15314                 x_return_status := FND_API.G_RET_STS_ERROR;
15315             END IF;
15316 
15317             IF ( p_create_update_flag = 'C' AND
15318                  p_organization_rec.maximum_credit_recommendation IS NOT NULL AND
15319                  p_organization_rec.maximum_credit_recommendation <> FND_API.G_MISS_NUM)
15320          OR
15321                ( p_create_update_flag = 'U' AND
15322                  ( p_organization_rec.maximum_credit_recommendation = FND_API.G_MISS_NUM  OR
15323                    p_organization_rec.maximum_credit_recommendation IS NOT NULL
15324          ) )
15325             THEN
15326                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15327                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'maximum_credit_recommendation' );
15328                 FND_MSG_PUB.ADD;
15329                 x_return_status := FND_API.G_RET_STS_ERROR;
15330             END IF;
15331 
15332             IF ( p_create_update_flag = 'C' AND
15333                  p_organization_rec.paydex_norm IS NOT NULL AND
15334                  p_organization_rec.paydex_norm <> FND_API.G_MISS_CHAR )
15335          OR
15336                ( p_create_update_flag = 'U' AND
15337                  ( p_organization_rec.paydex_norm = FND_API.G_MISS_CHAR OR
15338                    p_organization_rec.paydex_norm IS NOT NULL
15339          ) )
15340             THEN
15341                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15342                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'paydex_norm' );
15343                 FND_MSG_PUB.ADD;
15344                 x_return_status := FND_API.G_RET_STS_ERROR;
15345             END IF;
15346 
15347             IF ( p_create_update_flag = 'C' AND
15348                  p_organization_rec.paydex_score IS NOT NULL AND
15349                  p_organization_rec.paydex_score <> FND_API.G_MISS_CHAR )
15350          OR
15351                ( p_create_update_flag = 'U' AND
15352                  ( p_organization_rec.paydex_score = FND_API.G_MISS_CHAR OR
15353                    p_organization_rec.paydex_score IS NOT NULL
15354          ) )
15355             THEN
15356                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15357                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'paydex_score' );
15358                 FND_MSG_PUB.ADD;
15359                 x_return_status := FND_API.G_RET_STS_ERROR;
15360             END IF;
15361 
15362             IF ( p_create_update_flag = 'C' AND
15363                  p_organization_rec.paydex_three_months_ago IS NOT NULL AND
15364                  p_organization_rec.paydex_three_months_ago <> FND_API.G_MISS_CHAR )
15365          OR
15366                ( p_create_update_flag = 'U' AND
15367                  ( p_organization_rec.paydex_three_months_ago = FND_API.G_MISS_CHAR OR
15368                    p_organization_rec.paydex_three_months_ago IS NOT NULL
15369          ) )
15370             THEN
15371                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15372                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'paydex_three_months_ago' );
15373                 FND_MSG_PUB.ADD;
15374                 x_return_status := FND_API.G_RET_STS_ERROR;
15375             END IF;
15376 
15377             IF ( p_create_update_flag = 'C' AND
15378                  p_organization_rec.failure_score IS NOT NULL AND
15379                  p_organization_rec.failure_score <> FND_API.G_MISS_CHAR )
15380          OR
15381                ( p_create_update_flag = 'U' AND
15382                  ( p_organization_rec.failure_score = FND_API.G_MISS_CHAR OR
15383                    p_organization_rec.failure_score IS NOT NULL
15384          ) )
15385             THEN
15386                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15387                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score' );
15388                 FND_MSG_PUB.ADD;
15389                 x_return_status := FND_API.G_RET_STS_ERROR;
15390             END IF;
15391 
15392             IF ( p_create_update_flag = 'C' AND
15393                  p_organization_rec.failure_score_age IS NOT NULL AND
15394                  p_organization_rec.failure_score_age <> FND_API.G_MISS_NUM )
15395          OR
15396                ( p_create_update_flag = 'U' AND
15397                  ( p_organization_rec.failure_score_age = FND_API.G_MISS_NUM  OR
15398                    p_organization_rec.failure_score_age IS NOT  NULL
15399          ) )
15400             THEN
15401                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15402                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_age' );
15403                 FND_MSG_PUB.ADD;
15404                 x_return_status := FND_API.G_RET_STS_ERROR;
15405             END IF;
15406 
15407             IF ( p_create_update_flag = 'C' AND
15408                  p_organization_rec.failure_score_class IS NOT NULL AND
15409                  p_organization_rec.failure_score_class <> FND_API.G_MISS_NUM )
15410          OR
15411                ( p_create_update_flag = 'U' AND
15412                  ( p_organization_rec.failure_score_class = FND_API.G_MISS_NUM  OR
15413                    p_organization_rec.failure_score_class IS NOT NULL
15414          ) )
15415             THEN
15416                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15417                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_class' );
15418                 FND_MSG_PUB.ADD;
15419                 x_return_status := FND_API.G_RET_STS_ERROR;
15420             END IF;
15421 
15422             IF ( p_create_update_flag = 'C' AND
15423                  p_organization_rec.failure_score_commentary IS NOT NULL AND
15424                  p_organization_rec.failure_score_commentary <> FND_API.G_MISS_CHAR )
15425          OR
15426                ( p_create_update_flag = 'U' AND
15427                  ( p_organization_rec.failure_score_commentary = FND_API.G_MISS_CHAR OR
15428                    p_organization_rec.failure_score_commentary IS NOT NULL
15429          ) )
15430             THEN
15431                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15432                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary' );
15433                 FND_MSG_PUB.ADD;
15434                 x_return_status := FND_API.G_RET_STS_ERROR;
15435             END IF;
15436 
15437             IF ( p_create_update_flag = 'C' AND
15438                  p_organization_rec.failure_score_commentary2 IS NOT NULL AND
15439                  p_organization_rec.failure_score_commentary2 <> FND_API.G_MISS_CHAR )
15440          OR
15441                ( p_create_update_flag = 'U' AND
15442                  ( p_organization_rec.failure_score_commentary2 = FND_API.G_MISS_CHAR OR
15443                    p_organization_rec.failure_score_commentary2 IS NOT NULL
15444          ) )
15445             THEN
15446                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15447                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary2' );
15448                 FND_MSG_PUB.ADD;
15449                 x_return_status := FND_API.G_RET_STS_ERROR;
15450             END IF;
15451 
15452             IF ( p_create_update_flag = 'C' AND
15453                  p_organization_rec.failure_score_commentary3 IS NOT NULL AND
15454                  p_organization_rec.failure_score_commentary3 <> FND_API.G_MISS_CHAR )
15455          OR
15456                ( p_create_update_flag = 'U' AND
15457                  ( p_organization_rec.failure_score_commentary3 = FND_API.G_MISS_CHAR OR
15458                    p_organization_rec.failure_score_commentary3 IS NOT NULL
15459          ) )
15460             THEN
15461                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15462                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary3' );
15463                 FND_MSG_PUB.ADD;
15464                 x_return_status := FND_API.G_RET_STS_ERROR;
15465             END IF;
15466 
15467             IF ( p_create_update_flag = 'C' AND
15468                  p_organization_rec.failure_score_commentary4 IS NOT NULL AND
15469                  p_organization_rec.failure_score_commentary4 <> FND_API.G_MISS_CHAR )
15470          OR
15471                ( p_create_update_flag = 'U' AND
15472                  ( p_organization_rec.failure_score_commentary4 = FND_API.G_MISS_CHAR OR
15473                    p_organization_rec.failure_score_commentary4 IS NOT NULL
15474          ) )
15475             THEN
15476                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15477                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary4' );
15478                 FND_MSG_PUB.ADD;
15479                 x_return_status := FND_API.G_RET_STS_ERROR;
15480             END IF;
15481 
15482             IF ( p_create_update_flag = 'C' AND
15483                  p_organization_rec.failure_score_commentary5 IS NOT NULL AND
15484                  p_organization_rec.failure_score_commentary5 <> FND_API.G_MISS_CHAR )
15485          OR
15486                ( p_create_update_flag = 'U' AND
15487                  ( p_organization_rec.failure_score_commentary5 = FND_API.G_MISS_CHAR OR
15488                    p_organization_rec.failure_score_commentary5 IS NOT NULL
15489          ) )
15490             THEN
15491                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15492                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary5' );
15493                 FND_MSG_PUB.ADD;
15494                 x_return_status := FND_API.G_RET_STS_ERROR;
15495             END IF;
15496 
15497             IF ( p_create_update_flag = 'C' AND
15498                  p_organization_rec.failure_score_commentary6 IS NOT NULL AND
15499                  p_organization_rec.failure_score_commentary6 <> FND_API.G_MISS_CHAR )
15500          OR
15501                ( p_create_update_flag = 'U' AND
15502                  ( p_organization_rec.failure_score_commentary6 = FND_API.G_MISS_CHAR OR
15503                    p_organization_rec.failure_score_commentary6 IS NOT NULL
15504          ) )
15505             THEN
15506                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15507                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary6' );
15508                 FND_MSG_PUB.ADD;
15509                 x_return_status := FND_API.G_RET_STS_ERROR;
15510             END IF;
15511 
15512             IF ( p_create_update_flag = 'C' AND
15513                  p_organization_rec.failure_score_commentary7 IS NOT NULL AND
15514                  p_organization_rec.failure_score_commentary7 <> FND_API.G_MISS_CHAR )
15515          OR
15516                ( p_create_update_flag = 'U' AND
15517                  ( p_organization_rec.failure_score_commentary7 = FND_API.G_MISS_CHAR OR
15518                    p_organization_rec.failure_score_commentary7 IS NOT NULL
15519          ) )
15520             THEN
15521                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15522                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary7' );
15523                 FND_MSG_PUB.ADD;
15524                 x_return_status := FND_API.G_RET_STS_ERROR;
15525             END IF;
15526 
15527             IF ( p_create_update_flag = 'C' AND
15528                  p_organization_rec.failure_score_commentary8 IS NOT NULL AND
15529                  p_organization_rec.failure_score_commentary8 <> FND_API.G_MISS_CHAR )
15530          OR
15531                ( p_create_update_flag = 'U' AND
15532                  ( p_organization_rec.failure_score_commentary8 = FND_API.G_MISS_CHAR OR
15533                    p_organization_rec.failure_score_commentary8 IS NOT NULL
15534          ) )
15535             THEN
15536                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15537                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary8' );
15538                 FND_MSG_PUB.ADD;
15539                 x_return_status := FND_API.G_RET_STS_ERROR;
15540             END IF;
15541 
15542             IF ( p_create_update_flag = 'C' AND
15543                  p_organization_rec.failure_score_commentary9 IS NOT NULL AND
15544                  p_organization_rec.failure_score_commentary9 <> FND_API.G_MISS_CHAR )
15545          OR
15546                ( p_create_update_flag = 'U' AND
15547                  ( p_organization_rec.failure_score_commentary9 = FND_API.G_MISS_CHAR OR
15548                    p_organization_rec.failure_score_commentary9 IS NOT NULL
15549          ) )
15550             THEN
15551                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15552                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary9' );
15553                 FND_MSG_PUB.ADD;
15554                 x_return_status := FND_API.G_RET_STS_ERROR;
15555             END IF;
15556 
15557             IF ( p_create_update_flag = 'C' AND
15558                  p_organization_rec.failure_score_commentary10 IS NOT NULL AND
15559                  p_organization_rec.failure_score_commentary10 <> FND_API.G_MISS_CHAR )
15560          OR
15561                ( p_create_update_flag = 'U' AND
15562                  ( p_organization_rec.failure_score_commentary10 = FND_API.G_MISS_CHAR OR
15563                    p_organization_rec.failure_score_commentary10 IS NOT NULL
15564          ) )
15565             THEN
15566                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15567                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary10' );
15568                 FND_MSG_PUB.ADD;
15569                 x_return_status := FND_API.G_RET_STS_ERROR;
15570             END IF;
15571 
15572             IF ( p_create_update_flag = 'C' AND
15573                  p_organization_rec.failure_score_date IS NOT NULL AND
15574                  p_organization_rec.failure_score_date <> FND_API.G_MISS_DATE )
15575          OR
15576                ( p_create_update_flag = 'U' AND
15577                  ( p_organization_rec.failure_score_date = FND_API.G_MISS_DATE OR
15578                    p_organization_rec.failure_score_date IS NOT NULL
15579          ) )
15580             THEN
15581                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15582                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_date' );
15583                 FND_MSG_PUB.ADD;
15584                 x_return_status := FND_API.G_RET_STS_ERROR;
15585             END IF;
15586 
15587             IF ( p_create_update_flag = 'C' AND
15588                  p_organization_rec.failure_score_incd_default IS NOT NULL AND
15589                  p_organization_rec.failure_score_incd_default <> FND_API.G_MISS_NUM )
15590          OR
15591                ( p_create_update_flag = 'U' AND
15592                  ( p_organization_rec.failure_score_incd_default =  FND_API.G_MISS_NUM  OR
15593                    p_organization_rec.failure_score_incd_default IS NOT  NULL
15594          ) )
15595             THEN
15596                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15597                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_incd_default' );
15598                 FND_MSG_PUB.ADD;
15599                 x_return_status := FND_API.G_RET_STS_ERROR;
15600             END IF;
15601 
15602             IF ( p_create_update_flag = 'C' AND
15603                  p_organization_rec.failure_score_natnl_percentile IS NOT NULL AND
15604                  p_organization_rec.failure_score_natnl_percentile <> FND_API.G_MISS_NUM)
15605          OR
15606                ( p_create_update_flag = 'U' AND
15607                  ( p_organization_rec.failure_score_natnl_percentile = FND_API.G_MISS_NUM  OR
15608                    p_organization_rec.failure_score_natnl_percentile IS NOT NULL
15609          ) )
15610             THEN
15611                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15612                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_natnl_percentile' );
15613                 FND_MSG_PUB.ADD;
15614                 x_return_status := FND_API.G_RET_STS_ERROR;
15615             END IF;
15616 
15617             IF ( p_create_update_flag = 'C' AND
15618                  p_organization_rec.failure_score_override_code IS NOT NULL AND
15619                  p_organization_rec.failure_score_override_code <> FND_API.G_MISS_CHAR)
15620          OR
15621                ( p_create_update_flag = 'U' AND
15622                  ( p_organization_rec.failure_score_override_code = FND_API.G_MISS_CHAR  OR
15623                    p_organization_rec.failure_score_override_code IS NOT NULL
15624          ) )
15625             THEN
15626                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15627                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_override_code' );
15628                 FND_MSG_PUB.ADD;
15629                 x_return_status := FND_API.G_RET_STS_ERROR;
15630             END IF;
15631 
15632             IF ( p_create_update_flag = 'C' AND
15633                  p_organization_rec.global_failure_score IS NOT NULL AND
15634                  p_organization_rec.global_failure_score <> FND_API.G_MISS_CHAR)
15635          OR
15636                ( p_create_update_flag = 'U' AND
15637                  ( p_organization_rec.global_failure_score = FND_API.G_MISS_CHAR  OR
15638                    p_organization_rec.global_failure_score IS NOT NULL
15639          ) )
15640             THEN
15641                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15642                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'global_failure_score' );
15643                 FND_MSG_PUB.ADD;
15644                 x_return_status := FND_API.G_RET_STS_ERROR;
15645             END IF;
15646 
15647         -- Debug info.
15648         /*IF G_DEBUG THEN
15649             HZ_UTILITY_V2PUB.debug ( 'validate_org_nonsupport_column (-)' );
15650         END IF;
15651         */
15652         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
15653                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_nonsupport_column (-)',
15654                                p_msg_level=>fnd_log.level_procedure);
15655          END IF;
15656 
15657   END validate_org_nonsupport_column;
15658 
15659    PROCEDURE validate_rel_code (
15660       p_forward_rel_code                      IN     VARCHAR2,
15661       p_backward_rel_code                     IN     VARCHAR2,
15662       p_forward_role                          IN     VARCHAR2,
15663       p_backward_role                         IN     VARCHAR2,
15664       x_return_status                         IN OUT NOCOPY VARCHAR2
15665  ) IS
15666 
15667       l_error1                                 BOOLEAN := FALSE;
15668       l_error2                                 BOOLEAN := FALSE;
15669 
15670   BEGIN
15671 
15672       IF p_forward_rel_code = p_backward_rel_code THEN
15673         IF p_forward_role <> p_backward_role THEN
15674            fnd_message.set_name('AR', 'HZ_INVALID_ROLE1');
15675            fnd_msg_pub.add;
15676           x_return_status := FND_API.G_RET_STS_ERROR;
15677         END IF;
15678       END IF;
15679 
15680       IF p_forward_rel_code <> p_backward_rel_code THEN
15681         IF p_forward_role = p_backward_role THEN
15682            fnd_message.set_name('AR', 'HZ_INVALID_ROLE2');
15683            fnd_msg_pub.add;
15684           x_return_status := FND_API.G_RET_STS_ERROR;
15685         END IF;
15686       END IF;
15687 
15688   END validate_rel_code;
15689 
15690   /**
15691    * PROCEDURE validate_financial_report
15692    *
15693    * DESCRIPTION
15694    *     Validates financial report record. Checks for
15695    *         uniqueness
15696    *         lookup types
15697    *         mandatory columns
15698    *         non-updateable fields
15699    *         foreign key validations
15700    *         other validations
15701    *
15702    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
15703    *
15704    * ARGUMENTS
15705    *   IN:
15706    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
15707    *     p_financial_report_rec         Financial report record.
15708    *     p_rowid                        Rowid of the record (used only in update mode).
15709    *   IN/OUT:
15710    *     x_return_status                Return status after the call. The status can
15711    *                                    be FND_API.G_RET_STS_SUCCESS (success),
15712    *                                    fnd_api.g_ret_sts_error (error),
15713    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
15714    *
15715    * NOTES
15716    *
15717    * MODIFICATION HISTORY
15718    *
15719    *   29-JAN-2003   Sreedhar Mohan     o Created.
15720    *   11-MAR-2003   Sreedhar Mohan     o Bug 2829046: Changed the message token values.
15721    *   10-OCT-2003   Rajib Ranjan Borah o Bug Number 3148753.Commented old validation
15722    *                                      which did not take care of the case when both
15723    *                                      issue_period and report_start_date are not
15724    *                                      provided.Furthermore new validation does the check
15725    *                                      only if p_create_update_flag='C' as both these
15726    *                                      fields are non_updateable.
15727    *   23-MAR-2004   Rajib Ranjan Borah o Bug 3456205.Validation for party_id being a foreing
15728    *                                      key of HZ_PARTIES and party_type should be
15729    *                                      'ORGANIZATION', are performed using a single cursor now.
15730    *                                    o Validation on report_start_date, report_end_date,
15731    *                                      party_id will be performed only during creation as these
15732    *                                      are non-updateable columns.
15733    *                                    o Removed unused local variables.
15734    *   01-APR-2004   Rajib Ranjan Borah o Bug 3539597.Commented out changes incorporated in fix
15735    *                                      3200870. Issued_period and report_start_date cannot be
15736    *                                      both null or not null. Fix 3200870 had added
15737    *                                      date_report_issued to the list of attributes which cannot
15738    *                                      be NULL at the same time.
15739    *                                    o Modified cursor c_unique_financial_report_rec as it used
15740    *                                      fail earlier when issued_period was null.Truncated the
15741    *                                      date parameters.
15742    *  01-03-2005  Rajib Ranjan Borah   o SSM SST Integration and Extension.
15743    *                                      Actual_content_source will be validated against HZ_ORIG_SYSTEMS_B
15744    *                                      in HZ_MIXNM_UTILITY.ValidateContentSource instead of
15745    *                                      being validated against lookup OCNTENT_SOURCE_TYPE.
15746    */
15747 
15748   PROCEDURE validate_financial_report(
15749       p_create_update_flag                    IN      VARCHAR2,
15750       p_financial_report_rec                  IN      HZ_ORGANIZATION_INFO_V2PUB.FINANCIAL_REPORT_REC_TYPE,
15751       p_rowid                                 IN      ROWID,
15752       x_return_status                         IN OUT NOCOPY  VARCHAR2
15753  ) IS
15754 
15755      CURSOR c_dup_financial_report_id (p_financial_report_id IN NUMBER) IS
15756       SELECT 'Y'
15757       FROM   hz_financial_reports hfr
15758       WHERE  hfr.financial_report_id = p_financial_report_id;
15759 
15760      CURSOR c_unique_financial_report_rec ( p_party_id IN NUMBER,
15761                                             p_type_of_financial_report IN VARCHAR2,
15762                                             p_document_reference IN VARCHAR2,
15763                                             p_date_report_issued IN DATE,
15764                                             p_issued_period IN VARCHAR2,
15765                                             p_report_start_date IN DATE,
15766                                             p_report_end_date IN DATE,
15767                                             p_actual_content_source IN VARCHAR2) IS
15768       SELECT 'Y'
15769       FROM   hz_financial_reports
15770       WHERE  party_id = p_party_id
15771       AND    nvl(type_of_financial_report, 'XXX') = nvl(p_type_of_financial_report, 'XXX')
15772       AND    nvl(document_reference, 'XXX') = nvl(p_document_reference, 'XXX')
15773       AND    actual_content_source = nvl(p_actual_content_source,'USER_ENTERED')
15774       AND    trunc(nvl(date_report_issued, to_date('12/31/4712','MM/DD/YYYY'))) =
15775              trunc(nvl(p_date_report_issued, to_date('12/31/4712','MM/DD/YYYY')))
15776       AND    nvl(issued_period, to_date('12/31/4712','MM/DD/YYYY')) =
15777              nvl( p_issued_period, to_date('12/31/4712','MM/DD/YYYY'))
15778       AND    trunc(nvl(report_start_date, to_date('12/31/4712','MM/DD/YYYY'))) =
15779              trunc(nvl(p_report_start_date, to_date('12/31/4712','MM/DD/YYYY')))
15780       AND    trunc(nvl(report_end_date, to_date('12/31/4712','MM/DD/YYYY'))) =
15781              trunc(nvl(p_report_end_date, to_date('12/31/4712','MM/DD/YYYY')))
15782              ;
15783 
15784       CURSOR c_partytype IS
15785         SELECT hp.party_type
15786         FROM   hz_parties hp
15787         WHERE  hp.party_id = p_financial_report_rec.party_id;
15788 
15789       l_party_type                            VARCHAR2(30);
15790       l_financial_report_id                   hz_financial_reports.financial_report_id%TYPE;
15791       l_document_reference                    hz_financial_reports.document_reference%TYPE;
15792       l_date_report_issued                    hz_financial_reports.date_report_issued%TYPE;
15793       l_issued_period                         hz_financial_reports.issued_period%TYPE;
15794       l_party_id                              hz_financial_reports.party_id%TYPE;
15795 --      l_requiring_authority                   hz_financial_reports.requiring_authority%TYPE;
15796       l_type_of_financial_report              hz_financial_reports.type_of_financial_report%TYPE;
15797       l_report_start_date                     hz_financial_reports.report_start_date%TYPE;
15798       l_report_end_date                       hz_financial_reports.report_end_date%TYPE;
15799 --      l_audit_ind                             hz_financial_reports.audit_ind%TYPE;
15800 --      l_consolidated_ind                      hz_financial_reports.consolidated_ind%TYPE;
15801 --      l_estimated_ind                         hz_financial_reports.estimated_ind%TYPE;
15802 --      l_fiscal_ind                            hz_financial_reports.fiscal_ind%TYPE;
15803 --      l_final_ind                             hz_financial_reports.final_ind%TYPE;
15804 --      l_forecast_ind                          hz_financial_reports.forecast_ind%TYPE;
15805 --      l_opening_ind                           hz_financial_reports.opening_ind%TYPE;
15806 --      l_proforma_ind                          hz_financial_reports.proforma_ind%TYPE;
15807 --      l_qualified_ind                         hz_financial_reports.qualified_ind%TYPE;
15808 --      l_restated_ind                          hz_financial_reports.restated_ind%TYPE;
15809 --      l_signed_by_principals_ind              hz_financial_reports.signed_by_principals_ind%TYPE;
15810 --      l_trial_balance_ind                     hz_financial_reports.trial_balance_ind%TYPE;
15811 --      l_unbalanced_ind                        hz_financial_reports.unbalanced_ind%TYPE;
15812       l_content_source_type                   hz_financial_reports.content_source_type%TYPE;
15813       l_actual_content_source                 hz_financial_reports.actual_content_source%TYPE;
15814 --      l_request_id                            hz_financial_reports.request_id%TYPE;
15815       l_status                                hz_financial_reports.status%TYPE;
15816       l_created_by_module                     hz_financial_reports.created_by_module%TYPE;
15817 
15818 --      l_temp_issued_period                    hz_financial_reports.issued_period%TYPE;
15819 --      l_temp_report_start_date                hz_financial_reports.report_start_date%TYPE;
15820 --      l_temp_report_end_date                  hz_financial_reports.report_end_date%TYPE;
15821       l_dummy                                 VARCHAR2(1);
15822       l_debug_prefix                          VARCHAR2(30) := '';
15823 
15824   BEGIN
15825 
15826       --enable_debug;
15827 
15828       -- Debug info.
15829       /*IF g_debug THEN
15830           hz_utility_v2pub.debug ('validate_financial_report (+)');
15831       END IF;
15832       */
15833       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
15834         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_report (+)',
15835                                p_msg_level=>fnd_log.level_procedure);
15836       END IF;
15837 
15838 
15839       -- do the query to get old values for update
15840 
15841       -- Bug 3456205. Some of the local variables populated by this select statement were not
15842       -- used at all and have been commented out.
15843 
15844       IF p_create_update_flag = 'U'
15845       THEN
15846           SELECT FINANCIAL_REPORT_ID,
15847                  PARTY_ID,
15848                  DOCUMENT_REFERENCE,
15849                  DATE_REPORT_ISSUED,
15850                  ISSUED_PERIOD,
15851                --  REQUIRING_AUTHORITY,
15852                  TYPE_OF_FINANCIAL_REPORT,
15853                  REPORT_START_DATE,
15854                  REPORT_END_DATE,
15855                --  AUDIT_IND,
15856                --  CONSOLIDATED_IND,
15857                --  ESTIMATED_IND,
15858                --  FISCAL_IND,
15859                --  FINAL_IND,
15860                --  FORECAST_IND,
15861                --  OPENING_IND,
15862                --  PROFORMA_IND,
15863                --  QUALIFIED_IND,
15864                --  RESTATED_IND,
15865                --  SIGNED_BY_PRINCIPALS_IND,
15866                --  TRIAL_BALANCE_IND,
15867                --  UNBALANCED_IND,
15868                  CONTENT_SOURCE_TYPE,
15869                  ACTUAL_CONTENT_SOURCE,
15870                --  REQUEST_ID,
15871                  STATUS,
15872                  CREATED_BY_MODULE
15873           INTO   l_financial_report_id,
15874                  l_party_id,
15875                  l_document_reference,
15876                  l_date_report_issued,
15877                  l_issued_period,
15878                --  l_requiring_authority,
15879                  l_type_of_financial_report,
15880                  l_report_start_date,
15881                  l_report_end_date,
15882                --  l_audit_ind,
15883                --  l_consolidated_ind,
15884                --  l_estimated_ind,
15885                --  l_fiscal_ind,
15886                --  l_final_ind,
15887                --  l_forecast_ind,
15888                --  l_opening_ind,
15889                --  l_proforma_ind,
15890                --  l_qualified_ind,
15891                --  l_restated_ind,
15892                --  l_signed_by_principals_ind,
15893                --  l_trial_balance_ind,
15894                --  l_unbalanced_ind,
15895                  l_content_source_type,
15896                  l_actual_content_source,
15897                --  l_request_id,
15898                  l_status,
15899                  l_created_by_module
15900           FROM   HZ_FINANCIAL_REPORTS
15901           WHERE  ROWID = p_rowid;
15902       END IF;
15903 
15904       -------------------------------------
15905       -- validation for financial_report_id
15906       -------------------------------------
15907 /****Logical APIs - validation not required****/
15908   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
15909       --check for unique financial_report_id
15910       IF p_create_update_flag = 'C' THEN
15911         IF p_financial_report_rec.financial_report_id IS NOT NULL AND
15912            p_financial_report_rec.financial_report_id <> fnd_api.g_miss_num
15913         THEN
15914           OPEN c_dup_financial_report_id (p_financial_report_rec.financial_report_id);
15915           FETCH c_dup_financial_report_id INTO l_dummy;
15916 
15917           -- key is not unique, push an error onto the stack.
15918           IF NVL(c_dup_financial_report_id%FOUND, FALSE) THEN
15919             fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
15920             fnd_message.set_token('COLUMN', 'financial_report_id');
15921             fnd_msg_pub.add;
15922             x_return_status := fnd_api.g_ret_sts_error;
15923           END IF;
15924           CLOSE c_dup_financial_report_id;
15925 
15926           /*IF g_debug THEN
15927             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15928               'check that financial_report_id is unique during creation. ' ||
15929               ' x_return_status = ' || x_return_status, l_debug_prefix);
15930           END IF;
15931           */
15932           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15933              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'check that financial_report_id is unique during creation. ' ||
15934                                     ' x_return_status = ' || x_return_status,
15935                                   p_msg_level=>fnd_log.level_statement);
15936           END IF;
15937 
15938 
15939         END IF;
15940       END IF;
15941 
15942       /*IF g_debug THEN
15943         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15944           '(+) after validate financial_report_id ... ' ||
15945           'x_return_status = ' || x_return_status, l_debug_prefix);
15946       END IF;
15947       */
15948       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15949            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate financial_report_id ... ' ||
15950                                              'x_return_status = ' || x_return_status,
15951                                   p_msg_level=>fnd_log.level_statement);
15952       END IF;
15953 
15954 
15955       -- financial_report_id is non-updateable field
15956       IF p_create_update_flag = 'U' THEN
15957           validate_nonupdateable (
15958               p_column                                => 'financial_report_id',
15959               p_column_value                          => p_financial_report_rec.financial_report_id,
15960               p_old_column_value                      => l_financial_report_id,
15961               x_return_status                         => x_return_status);
15962 
15963           /*IF g_debug THEN
15964               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15965                   'financial_report_id is non-updateable field. ' ||
15966                   'x_return_status = ' || x_return_status, l_debug_prefix);
15967           END IF;
15968           */
15969           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15970               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'financial_report_id is non-updateable field. ' ||
15971                                         'x_return_status = ' || x_return_status,
15972                                   p_msg_level=>fnd_log.level_statement);
15973           END IF;
15974 
15975 
15976       END IF;
15977   END IF;
15978 
15979       --------------------------
15980       -- validation for party_id
15981       --------------------------
15982 /****Logical APIs - validation not required****/
15983   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
15984       -- party_id is mandatory field
15985       IF p_create_update_flag = 'C' THEN
15986           validate_mandatory (
15987               p_create_update_flag                    => p_create_update_flag,
15988               p_column                                => 'party_id',
15989               p_column_value                          => p_financial_report_rec.party_id,
15990               x_return_status                         => x_return_status);
15991 
15992           /*IF g_debug THEN
15993               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15994                   'party_id is mandatory field. ' ||
15995                   'x_return_status = ' || x_return_status, l_debug_prefix);
15996           END IF;
15997           */
15998           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15999              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
16000                                         'x_return_status = ' || x_return_status,
16001                                   p_msg_level=>fnd_log.level_statement);
16002           END IF;
16003 
16004 
16005       END IF;
16006 
16007       -- party_id is non-updateable field
16008       IF p_create_update_flag = 'U' THEN
16009           validate_nonupdateable (
16010               p_column                                => 'party_id',
16011               p_column_value                          => p_financial_report_rec.party_id,
16012               p_old_column_value                      => l_party_id,
16013               x_return_status                         => x_return_status);
16014 
16015           /*IF g_debug THEN
16016               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16017                   'party_id is non-updateable field. ' ||
16018                   'x_return_status = ' || x_return_status, l_debug_prefix);
16019           END IF;
16020           */
16021           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16022              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
16023                                          'x_return_status = ' || x_return_status,
16024                                   p_msg_level=>fnd_log.level_statement);
16025           END IF;
16026 
16027 
16028       END IF;
16029 /*
16030       -- party_id has foreign key HZ_PARTIES.PARTY_ID
16031       IF p_create_update_flag = 'C'
16032          AND
16033          p_financial_report_rec.party_id IS NOT NULL
16034          AND
16035          p_financial_report_rec.party_id <> fnd_api.g_miss_num
16036       THEN
16037           BEGIN
16038               SELECT 'Y'
16039               INTO   l_dummy
16040               FROM   hz_parties p
16041               WHERE  p.party_id = p_financial_report_rec.party_id;
16042 
16043           EXCEPTION
16044               WHEN NO_DATA_FOUND THEN
16045                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
16046                   fnd_message.set_token('FK', 'party_id');
16047                   fnd_message.set_token('COLUMN', 'party_id');
16048                   fnd_message.set_token('TABLE', 'hz_parties');
16049                   fnd_msg_pub.add;
16050                   x_return_status := fnd_api.g_ret_sts_error;
16051           END;
16052 */
16053           /*IF g_debug THEN
16054               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16055                   'party_id has foreign key hz_parties.party_id. ' ||
16056                   'x_return_status = ' || x_return_status, l_debug_prefix);
16057           END IF;
16058           */
16059 /*          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16060              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
16061                                                  'x_return_status = ' || x_return_status,
16062                                   p_msg_level=>fnd_log.level_statement);
16063           END IF;
16064 
16065 
16066       END IF;
16067 */
16068       -- make sure that the l_party_id belongs to an organization.
16069       IF p_create_update_flag = 'C'
16070         /* Bug 3456205 Party_id is not updateable.
16071          OR
16072          p_create_update_flag = 'U'
16073          If the value is NULL / G_MISS, error should be thrown in validate_mandatory only.
16074          */
16075          AND p_financial_report_rec.party_id IS NOT NULL
16076          AND p_financial_report_rec.party_id <> FND_API.G_MISS_NUM
16077       THEN
16078           --Bug 2886268: Added the following code instead of calling check_organization
16079           OPEN c_partytype;
16080 
16081           FETCH c_partytype INTO l_party_type;
16082           IF c_partytype%FOUND
16083           THEN
16084               IF rtrim(ltrim(l_party_type)) <> 'ORGANIZATION'
16085               THEN
16086                   -- This is not an organization. Hence throw error
16087                   fnd_message.set_name('AR', 'HZ_API_INVALID_PARTY_TYPE');
16088                   fnd_message.set_token('PARTY_ID', TO_CHAR(p_financial_report_rec.party_id));
16089                   fnd_message.set_token('TYPE', 'ORGANIZATION');
16090                   fnd_msg_pub.add;
16091                   x_return_status := fnd_api.g_ret_sts_error;
16092               END IF;
16093           ELSE -- 3456205
16094               -- party_id has foreign key HZ_PARTIES.PARTY_ID
16095               -- However since no record found in HZ_PARTIES, therefore throw error.
16096               fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
16097               fnd_message.set_token('FK', 'party_id');
16098               fnd_message.set_token('COLUMN', 'party_id');
16099               fnd_message.set_token('TABLE', 'hz_parties');
16100               fnd_msg_pub.add;
16101               x_return_status := fnd_api.g_ret_sts_error;
16102           END IF;
16103           CLOSE c_partytype;
16104           --Bug 2886268: Commented out the following call as it is throwing erroneous message
16105           --check_organization(p_financial_report_rec.party_id, x_return_status);
16106       END IF;
16107       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16108              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
16109                                                  'x_return_status = ' || x_return_status,
16110                                   p_msg_level=>fnd_log.level_statement);
16111       END IF;
16112   END IF;
16113 
16114       -------------------------------
16115       -- validation for issued_period
16116       -------------------------------
16117       --Either issued_period or report_start_date must be provided (not both).
16118       --Added database values when passed with null values
16119 
16120       --Bug Number 3148753.Commented the validation code as it only checked for the case
16121       --when both the values are set.
16122       --There is no validation for the case when both the values are not provided.
16123 
16124       --Furthermore as both the fields are non-updateable, therefore it is enough to check
16125       --during creation that only one of the fields is being provided.
16126 
16127       /*
16128       |IF ((nvl(p_financial_report_rec.issued_period, l_issued_period) IS NOT NULL AND
16129       |     nvl(p_financial_report_rec.issued_period, l_issued_period) <> fnd_api.g_miss_char) AND
16130       |    (nvl(p_financial_report_rec.report_start_date, l_report_start_date) IS NOT NULL AND
16131       |    nvl(p_financial_report_rec.report_start_date, l_report_start_date) <> fnd_api.g_miss_date))
16132       |THEN
16133       |   fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
16134       |   fnd_message.set_token('COLUMN1', 'issued_period');
16135       |   fnd_message.set_token('COLUMN2', 'report_start_date');
16136       |   fnd_msg_pub.add;
16137       |   x_return_status := fnd_api.g_ret_sts_error;
16138       |END IF;
16139       */
16140 
16141       --Bug Number 3148753.As both the fields are non-updateable,therefore validation
16142       --during creation is enough.
16143 
16144 
16145       IF(p_create_update_flag='C')
16146       THEN
16147         IF (
16148              (--Both the values are not set during creation.
16149                (
16150                p_financial_report_rec.issued_period IS NULL
16151                OR
16152                p_financial_report_rec.issued_period = fnd_api.g_miss_char
16153                )
16154              AND
16155                (
16156                p_financial_report_rec.report_start_date IS NULL
16157                OR
16158                p_financial_report_rec.report_start_date = fnd_api.g_miss_date
16159                )
16160 /*           Bug 3539597.Commented out changes incorporated in fix 3200870.
16161  |           AND
16162  |             (
16163  |             p_financial_report_rec.DATE_REPORT_ISSUED IS NULL
16164  |             OR
16165  |             p_financial_report_rec.DATE_REPORT_ISSUED = fnd_api.g_miss_date
16166  |             )
16167  */
16168              )
16169            OR
16170              (--Both the values are provided during creation
16171                (
16172                p_financial_report_rec.issued_period IS NOT NULL
16173                AND
16174                p_financial_report_rec.issued_period <> fnd_api.g_miss_char
16175                )
16176              AND
16177                (
16178                p_financial_report_rec.report_start_date IS NOT NULL
16179                AND
16180                p_financial_report_rec.report_start_date <> fnd_api.g_miss_date
16181                )
16182              )
16183            )
16184         THEN
16185           fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
16186           fnd_message.set_token('COLUMN1', 'issued_period');
16187           fnd_message.set_token('COLUMN2', 'report_start_date');
16188           fnd_msg_pub.add;
16189           x_return_status := fnd_api.g_ret_sts_error;
16190         END IF;
16191       END IF;
16192 
16193       -----------------------------------
16194       -- validation for report_start_date
16195       -----------------------------------
16196 
16197    -- bug 4417943.
16198    IF p_create_update_flag = 'C' /*Bug 3456205 Both these columns are non-updateable */
16199    AND  (
16200          (p_financial_report_rec.report_start_date IS NOT NULL
16201           AND p_financial_report_rec.report_start_date <> fnd_api.g_miss_date
16202           AND (p_financial_report_rec.report_end_date IS NULL OR
16203                p_financial_report_rec.report_end_date = fnd_api.g_miss_date )
16204           ) OR
16205           (p_financial_report_rec.report_end_date IS NOT NULL
16206            AND  p_financial_report_rec.report_end_date <> fnd_api.g_miss_date
16207            AND (p_financial_report_rec.report_start_date IS NULL OR
16208                 p_financial_report_rec.report_start_date = fnd_api.g_miss_date)
16209           ))
16210    THEN
16211         fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION3');
16212         fnd_message.set_token('COLUMN1', 'report_start_date');
16213         fnd_message.set_token('COLUMN2', 'report_end_date');
16214         fnd_msg_pub.add;
16215         x_return_status := fnd_api.g_ret_sts_error;
16216    END IF;
16217 
16218       --Bug 2888670: Modified the end_date validation as per V1 validation.
16219       --If report_start_date is provided, then it must be less than or equal
16220       --to report_end_date.
16221 
16222       IF p_create_update_flag = 'C' THEN
16223          IF p_financial_report_rec.report_end_date is  NOT NULL  AND
16224             p_financial_report_rec.report_end_date <> FND_API.G_MISS_DATE  THEN
16225               if (p_financial_report_rec.report_end_date
16226                   < p_financial_report_rec.report_start_date
16227                   )  THEN
16228                     FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16229                     FND_MSG_PUB.ADD;
16230                     x_return_status := FND_API.G_RET_STS_ERROR;
16231               end if;
16232           END IF;
16233       END IF;
16234 
16235       /* Bug 3456205. As both report_start_date, report_end_date are non-updateable,
16236         therefore this validation need not be performed during updation.
16237 
16238       -- compare end_date with database data and user passed data.
16239       ELSIF p_create_update_flag = 'U' THEN
16240              if (p_financial_report_rec.report_end_date is  NOT NULL  AND
16241                  p_financial_report_rec.report_end_date <> FND_API.G_MISS_DATE)   THEN
16242                    if p_financial_report_rec.report_start_date is NOT NULL  AND
16243                       p_financial_report_rec.report_start_date <> FND_API.G_MISS_DATE  then
16244                         if p_financial_report_rec.report_end_date
16245                            < p_financial_report_rec.report_start_date then
16246                              FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16247                              FND_MSG_PUB.ADD;
16248                              x_return_status := FND_API.G_RET_STS_ERROR;
16249 
16250                         end if;
16251                    elsif ( p_financial_report_rec.report_end_date < l_report_start_date  OR
16252                            l_report_start_date is NULL) then
16253                            FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16254                            FND_MSG_PUB.ADD;
16255                            x_return_status := FND_API.G_RET_STS_ERROR;
16256 
16257                    end if;
16258               elsif (p_financial_report_rec.report_start_date is  NOT NULL  AND
16259                      p_financial_report_rec.report_start_date <> FND_API.G_MISS_DATE)   THEN
16260                       if l_report_end_date < p_financial_report_rec.report_start_date then
16261                         FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16262                         FND_MSG_PUB.ADD;
16263                         x_return_status := FND_API.G_RET_STS_ERROR;
16264 
16265                       end if;
16266               end if;
16267 
16268       END IF;*/
16269 
16270       ---------------------------------------
16271       --Bug 2868953: Unique record Validation
16272       ---------------------------------------
16273       IF p_create_update_flag = 'C' THEN
16274          OPEN c_unique_financial_report_rec ( p_financial_report_rec.party_id,
16275                                               p_financial_report_rec.type_of_financial_report,
16276                                               p_financial_report_rec.document_reference,
16277                                               p_financial_report_rec.date_report_issued,
16278                                               p_financial_report_rec.issued_period,
16279                                               p_financial_report_rec.report_start_date,
16280                                               p_financial_report_rec.report_end_date,
16281                                               p_financial_report_rec.actual_content_source);
16282 
16283           FETCH c_unique_financial_report_rec INTO l_dummy;
16284 
16285           -- combination key is not unique, push an error onto the stack.
16286           IF NVL(c_unique_financial_report_rec%FOUND, FALSE) THEN
16287             fnd_message.set_name('AR', 'HZ_API_DUP_FIN_REPORT_REC');
16288             fnd_msg_pub.add;
16289             x_return_status := fnd_api.g_ret_sts_error;
16290           END IF;
16291           CLOSE c_unique_financial_report_rec;
16292 
16293           /*IF g_debug THEN
16294             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16295               'The following column combination should be unique:' ||
16296               ' PARTY_ID, FINANCIAL_REPORT_TYPE, DOCUMENT_REFERENCE, DATE_REPORT_ISSUED, ' ||
16297               ' (ISSUED_PERIOD or REPORT_START_DATE and REPORT_END_DATE).' ||
16298               ' x_return_status = ' || x_return_status, l_debug_prefix);
16299           END IF;
16300           */
16301           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16302                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16303                  p_message=>'The following column combination should be unique:' ||
16304                                               ' PARTY_ID, FINANCIAL_REPORT_TYPE, DOCUMENT_REFERENCE, DATE_REPORT_ISSUED, ' ||
16305                                               ' (ISSUED_PERIOD or REPORT_START_DATE and REPORT_END_DATE).' ||
16306                                               ' x_return_status = ' || x_return_status,
16307                                   p_msg_level=>fnd_log.level_statement);
16308           END IF;
16309 
16310       END IF;
16311       -- type_of_financial_report is non-updateable field
16312       IF p_create_update_flag = 'U' THEN
16313           validate_nonupdateable (
16314               p_column                                => 'type_of_financial_report',
16315               p_column_value                          => p_financial_report_rec.type_of_financial_report,
16316               p_old_column_value                      => l_type_of_financial_report,
16317               x_return_status                         => x_return_status);
16318 
16319           /*IF g_debug THEN
16320               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16321                   'type_of_financial_report is non-updateable field. ' ||
16322                   'x_return_status = ' || x_return_status, l_debug_prefix);
16323           END IF;
16324           */
16325           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16326             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'type_of_financial_report is non-updateable field. ' ||
16327                                                  'x_return_status = ' || x_return_status,
16328                                   p_msg_level=>fnd_log.level_statement);
16329           END IF;
16330 
16331 
16332       END IF;
16333       -- document_reference is non-updateable field
16334       IF p_create_update_flag = 'U' THEN
16335           validate_nonupdateable (
16336               p_column                                => 'document_reference',
16337               p_column_value                          => p_financial_report_rec.document_reference,
16338               p_old_column_value                      => l_document_reference,
16339               x_return_status                         => x_return_status);
16340 
16341           /*IF g_debug THEN
16342               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16343                   'document_reference is non-updateable field. ' ||
16344                   'x_return_status = ' || x_return_status, l_debug_prefix);
16345           END IF;
16346           */
16347           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16348                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'document_reference is non-updateable field. ' ||
16349                   'x_return_status = ' || x_return_status,
16350                                   p_msg_level=>fnd_log.level_statement);
16351           END IF;
16352 
16353 
16354       END IF;
16355       -- date_report_issued is non-updateable field
16356       IF p_create_update_flag = 'U' THEN
16357           validate_nonupdateable (
16358               p_column                                => 'date_report_issued',
16359               p_column_value                          => trunc(p_financial_report_rec.date_report_issued),
16360               p_old_column_value                      => trunc(l_date_report_issued),
16361               x_return_status                         => x_return_status);
16362 
16363           /*IF g_debug THEN
16364               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16365                   'date_report_issued is non-updateable field. ' ||
16366                   'x_return_status = ' || x_return_status, l_debug_prefix);
16367           END IF;
16368           */
16369           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16370              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'date_report_issued is non-updateable field. ' ||
16371                                                'x_return_status = ' || x_return_status,
16372                                   p_msg_level=>fnd_log.level_statement);
16373           END IF;
16374 
16375 
16376       END IF;
16377       -- issued_period is non-updateable field
16378       IF p_create_update_flag = 'U' THEN
16379           validate_nonupdateable (
16380               p_column                                => 'issued_period',
16381               p_column_value                          => p_financial_report_rec.issued_period,
16382               p_old_column_value                      => l_issued_period,
16383               x_return_status                         => x_return_status);
16384 
16385           /*IF g_debug THEN
16386               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16387                   'issued_period is non-updateable field. ' ||
16388                   'x_return_status = ' || x_return_status, l_debug_prefix);
16389           END IF;
16390           */
16391           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16392              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'issued_period is non-updateable field. ' ||
16393                   'x_return_status = ' || x_return_status,
16394                                   p_msg_level=>fnd_log.level_statement);
16395           END IF;
16396 
16397 
16398       END IF;
16399       -- report_start_date is non-updateable field
16400       IF p_create_update_flag = 'U' THEN
16401           validate_nonupdateable (
16402               p_column                                => 'report_start_date',
16403               p_column_value                          => trunc(p_financial_report_rec.report_start_date),
16404               p_old_column_value                      => trunc(l_report_start_date),
16405               x_return_status                         => x_return_status);
16406 
16407           /*IF g_debug THEN
16408               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16409                   'report_start_date is non-updateable field. ' ||
16410                   'x_return_status = ' || x_return_status, l_debug_prefix);
16411           END IF;
16412           */
16413           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16414                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'report_start_date is non-updateable field. ' ||
16415                                          'x_return_status = ' || x_return_status,
16416                                   p_msg_level=>fnd_log.level_statement);
16417            END IF;
16418 
16419 
16420       END IF;
16421       -- report_end_date is non-updateable field
16422       IF p_create_update_flag = 'U' THEN
16423           validate_nonupdateable (
16424               p_column                                => 'report_end_date',
16425               p_column_value                          => trunc(p_financial_report_rec.report_end_date),
16426               p_old_column_value                      => trunc(l_report_end_date),
16427               x_return_status                         => x_return_status);
16428 
16429           /*IF g_debug THEN
16430               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16431                   'report_end_date is non-updateable field. ' ||
16432                   'x_return_status = ' || x_return_status, l_debug_prefix);
16433           END IF;
16434           */
16435           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16436             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'report_end_date is non-updateable field. ' ||
16437                         'x_return_status = ' || x_return_status,
16438                                   p_msg_level=>fnd_log.level_statement);
16439           END IF;
16440 
16441 
16442       END IF;
16443       ------------------------------------
16444       --Lookup Validations
16445       --validation for audit_ind
16446       ------------------------------------
16447 /****Logical APIs - validation not required****/
16448   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16449       -- audit_ind is lookup code in lookup type YES/NO
16450       validate_lookup (
16451           p_column                                => 'audit_ind',
16452           p_lookup_type                           => 'YES/NO',
16453           p_column_value                          => p_financial_report_rec.audit_ind,
16454           x_return_status                         => x_return_status);
16455 
16456       /*IF g_debug THEN
16457           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16458               'audit_ind should be in lookup YES/NO. ' ||
16459               'x_return_status = ' || x_return_status, l_debug_prefix);
16460       END IF;
16461       */
16462       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16463            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'audit_ind should be in lookup YES/NO. ' ||
16464                                         'x_return_status = ' || x_return_status,
16465                                   p_msg_level=>fnd_log.level_statement);
16466       END IF;
16467   END IF;
16468 
16469       ----------------------------------
16470       -- validation for consolidated_ind
16471       ----------------------------------
16472 /****Logical APIs - validation not required****/
16473   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16474       -- consolidated_ind is lookup code in lookup type YES/NO
16475       validate_lookup (
16476           p_column                                => 'consolidated_ind',
16477           p_lookup_type                           => 'YES/NO',
16478           p_column_value                          => p_financial_report_rec.consolidated_ind,
16479           x_return_status                         => x_return_status);
16480 
16481       /*IF g_debug THEN
16482           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16483               'consolidated_ind should be in lookup YES/NO. ' ||
16484               'x_return_status = ' || x_return_status, l_debug_prefix);
16485       END IF;
16486       */
16487       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16488            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'consolidated_ind should be in lookup YES/NO. ' ||
16489                                         'x_return_status = ' || x_return_status,
16490                                   p_msg_level=>fnd_log.level_statement);
16491       END IF;
16492   END IF;
16493 
16494       ------------------------------------
16495       --validation for estimated_ind
16496       ------------------------------------
16497 /****Logical APIs - validation not required****/
16498   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16499       -- estimated_ind is lookup code in lookup type YES/NO
16500       validate_lookup (
16501           p_column                                => 'estimated_ind',
16502           p_lookup_type                           => 'YES/NO',
16503           p_column_value                          => p_financial_report_rec.estimated_ind,
16504           x_return_status                         => x_return_status);
16505 
16506       /*IF g_debug THEN
16507           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16508               'estimated_ind should be in lookup YES/NO. ' ||
16509               'x_return_status = ' || x_return_status, l_debug_prefix);
16510       END IF;
16511       */
16512       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16513            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'estimated_ind should be in lookup YES/NO. ' ||
16514                                         'x_return_status = ' || x_return_status,
16515                                   p_msg_level=>fnd_log.level_statement);
16516        END IF;
16517   END IF;
16518 
16519       ----------------------------------
16520       -- validation for fiscal_ind
16521       ----------------------------------
16522 /****Logical APIs - validation not required****/
16523   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16524       -- fiscal_ind is lookup code in lookup type YES/NO
16525       validate_lookup (
16526           p_column                                => 'fiscal_ind',
16527           p_lookup_type                           => 'YES/NO',
16528           p_column_value                          => p_financial_report_rec.fiscal_ind,
16529           x_return_status                         => x_return_status);
16530 
16531       /*IF g_debug THEN
16532           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16533               'fiscal_ind should be in lookup YES/NO. ' ||
16534               'x_return_status = ' || x_return_status, l_debug_prefix);
16535       END IF;
16536       */
16537       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16538            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fiscal_ind should be in lookup YES/NO. ' ||
16539                                                  'x_return_status = ' || x_return_status,
16540                                   p_msg_level=>fnd_log.level_statement);
16541       END IF;
16542   END IF;
16543 
16544      --Bug 2940399: Added FINAL_IND column in financial_report_rec_type. Hence
16545      --added the validation for final_ind.
16546 
16547       ----------------------------------
16548       -- validation for final_ind
16549       ----------------------------------
16550 /****Logical APIs - validation not required****/
16551   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16552       -- fiscal_ind is lookup code in lookup type YES/NO
16553       validate_lookup (
16554           p_column                                => 'final_ind',
16555           p_lookup_type                           => 'YES/NO',
16556           p_column_value                          => p_financial_report_rec.final_ind,
16557           x_return_status                         => x_return_status);
16558 
16559       /*IF g_debug THEN
16560           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16561               'final_ind should be in lookup YES/NO. ' ||
16562               'x_return_status = ' || x_return_status, l_debug_prefix);
16563       END IF;
16564       */
16565       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16566            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'final_ind should be in lookup YES/NO. ' ||
16567               'x_return_status = ' || x_return_status,
16568                                   p_msg_level=>fnd_log.level_statement);
16569       END IF;
16570   END IF;
16571 
16572       ------------------------------------
16573       --validation for forecast_ind
16574       ------------------------------------
16575 /****Logical APIs - validation not required****/
16576   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16577       -- forecast_ind is lookup code in lookup type YES/NO
16578       validate_lookup (
16579           p_column                                => 'forecast_ind',
16580           p_lookup_type                           => 'YES/NO',
16581           p_column_value                          => p_financial_report_rec.forecast_ind,
16582           x_return_status                         => x_return_status);
16583 
16584       /*IF g_debug THEN
16585           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16586               'forecast_ind should be in lookup YES/NO. ' ||
16587               'x_return_status = ' || x_return_status, l_debug_prefix);
16588       END IF;
16589       */
16590       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16591            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'forecast_ind should be in lookup YES/NO. ' ||
16592                                                 'x_return_status = ' || x_return_status,
16593                                   p_msg_level=>fnd_log.level_statement);
16594       END IF;
16595   END IF;
16596 
16597       ----------------------------------
16598       -- validation for opening_ind
16599       ----------------------------------
16600 /****Logical APIs - validation not required****/
16601   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16602       -- opening_ind is lookup code in lookup type YES/NO
16603       validate_lookup (
16604           p_column                                => 'opening_ind',
16605           p_lookup_type                           => 'YES/NO',
16606           p_column_value                          => p_financial_report_rec.opening_ind,
16607           x_return_status                         => x_return_status);
16608 
16609       /*IF g_debug THEN
16610           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16611               'opening_ind should be in lookup YES/NO. ' ||
16612               'x_return_status = ' || x_return_status, l_debug_prefix);
16613       END IF;
16614       */
16615       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16616            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'opening_ind should be in lookup YES/NO. ' ||
16617                                                 'x_return_status = ' || x_return_status,
16618                                   p_msg_level=>fnd_log.level_statement);
16619       END IF;
16620   END IF;
16621 
16622       ------------------------------------
16623       --validation for proforma_ind
16624       ------------------------------------
16625 /****Logical APIs - validation not required****/
16626   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16627       -- proforma_ind is lookup code in lookup type YES/NO
16628       validate_lookup (
16629           p_column                                => 'proforma_ind',
16630           p_lookup_type                           => 'YES/NO',
16631           p_column_value                          => p_financial_report_rec.proforma_ind,
16632           x_return_status                         => x_return_status);
16633 
16634       /*IF g_debug THEN
16635           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16636               'proforma_ind should be in lookup YES/NO. ' ||
16637               'x_return_status = ' || x_return_status, l_debug_prefix);
16638       END IF;
16639       */
16640       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16641            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'proforma_ind should be in lookup YES/NO. ' ||
16642                                          'x_return_status = ' || x_return_status,
16643                                   p_msg_level=>fnd_log.level_statement);
16644       END IF;
16645   END IF;
16646 
16647       ----------------------------------
16648       -- validation for qualified_ind
16649       ----------------------------------
16650 /****Logical APIs - validation not required****/
16651   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16652       -- qualified_ind is lookup code in lookup type YES/NO
16653       validate_lookup (
16654           p_column                                => 'qualified_ind',
16655           p_lookup_type                           => 'YES/NO',
16656           p_column_value                          => p_financial_report_rec.qualified_ind,
16657           x_return_status                         => x_return_status);
16658 
16659       /*IF g_debug THEN
16660           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16661               'qualified_ind should be in lookup YES/NO. ' ||
16662               'x_return_status = ' || x_return_status, l_debug_prefix);
16663       END IF;
16664       */
16665       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16666            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'qualified_ind should be in lookup YES/NO. ' ||
16667                         'x_return_status = ' || x_return_status,
16668                                   p_msg_level=>fnd_log.level_statement);
16669       END IF;
16670   END IF;
16671 
16672       ------------------------------------
16673       --validation for restated_ind
16674       ------------------------------------
16675 /****Logical APIs - validation not required****/
16676   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16677       -- restated_ind is lookup code in lookup type YES/NO
16678       validate_lookup (
16679           p_column                                => 'restated_ind',
16680           p_lookup_type                           => 'YES/NO',
16681           p_column_value                          => p_financial_report_rec.restated_ind,
16682           x_return_status                         => x_return_status);
16683 
16684       /*IF g_debug THEN
16685           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16686               'restated_ind should be in lookup YES/NO. ' ||
16687               'x_return_status = ' || x_return_status, l_debug_prefix);
16688       END IF;
16689       */
16690       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16691            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'restated_ind should be in lookup YES/NO. ' ||
16692                                                 'x_return_status = ' || x_return_status,
16693                                   p_msg_level=>fnd_log.level_statement);
16694       END IF;
16695   END IF;
16696 
16697       ----------------------------------
16698       -- validation for signed_by_principals_ind
16699       ----------------------------------
16700 /****Logical APIs - validation not required****/
16701   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16702       -- signed_by_principals_ind is lookup code in lookup type YES/NO
16703       validate_lookup (
16704           p_column                                => 'signed_by_principals_ind',
16705           p_lookup_type                           => 'YES/NO',
16706           p_column_value                          => p_financial_report_rec.signed_by_principals_ind,
16707           x_return_status                         => x_return_status);
16708 
16709       /*IF g_debug THEN
16710           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16711               'signed_by_principals_ind should be in lookup YES/NO. ' ||
16712               'x_return_status = ' || x_return_status, l_debug_prefix);
16713       END IF;
16714       */
16715       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16716            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'signed_by_principals_ind should be in lookup YES/NO. ' ||
16717                                              'x_return_status = ' || x_return_status,
16718                                   p_msg_level=>fnd_log.level_statement);
16719      END IF;
16720   END IF;
16721 
16722       ------------------------------------
16723       --validation for trial_balance_ind
16724       ------------------------------------
16725 /****Logical APIs - validation not required****/
16726   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16727       -- trial_balance_ind is lookup code in lookup type YES/NO
16728       validate_lookup (
16729           p_column                                => 'trial_balance_ind',
16730           p_lookup_type                           => 'YES/NO',
16731           p_column_value                          => p_financial_report_rec.trial_balance_ind,
16732           x_return_status                         => x_return_status);
16733 
16734       /*IF g_debug THEN
16735           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16736               'trial_balance_ind should be in lookup YES/NO. ' ||
16737               'x_return_status = ' || x_return_status, l_debug_prefix);
16738       END IF;
16739       */
16740       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16741            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'trial_balance_ind should be in lookup YES/NO. ' ||
16742                                                  'x_return_status = ' || x_return_status,
16743                                   p_msg_level=>fnd_log.level_statement);
16744       END IF;
16745   END IF;
16746 
16747       ----------------------------------
16748       -- validation for unbalanced_ind
16749       ----------------------------------
16750 /****Logical APIs - validation not required****/
16751   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16752       -- unbalanced_ind is lookup code in lookup type YES/NO
16753       validate_lookup (
16754           p_column                                => 'unbalanced_ind',
16755           p_lookup_type                           => 'YES/NO',
16756           p_column_value                          => p_financial_report_rec.unbalanced_ind,
16757           x_return_status                         => x_return_status);
16758 
16759       /*IF g_debug THEN
16760           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16761               'unbalanced_ind should be in lookup YES/NO. ' ||
16762               'x_return_status = ' || x_return_status, l_debug_prefix);
16763       END IF;
16764       */
16765       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16766            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'unbalanced_ind should be in lookup YES/NO. ' ||
16767               'x_return_status = ' || x_return_status,
16768                                   p_msg_level=>fnd_log.level_statement);
16769       END IF;
16770   END IF;
16771 
16772       ------------------------
16773       -- validation for status
16774       ------------------------
16775 /****Logical APIs - validation not required****/
16776   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16777       -- status is lookup code in lookup type REGISTRY_STATUS
16778       IF p_financial_report_rec.status IS NOT NULL
16779          AND
16780          p_financial_report_rec.status <> fnd_api.g_miss_char
16781          AND
16782          (p_create_update_flag = 'C'
16783           OR
16784           (p_create_update_flag = 'U'
16785            AND
16786            p_financial_report_rec.status <> NVL(l_status, fnd_api.g_miss_char)
16787          )
16788         )
16789       THEN
16790           validate_lookup (
16791               p_column                                => 'status',
16792               p_lookup_type                           => 'REGISTRY_STATUS',
16793               p_column_value                          => p_financial_report_rec.status,
16794               x_return_status                         => x_return_status);
16795 
16796           /*IF g_debug THEN
16797               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16798                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
16799                   'x_return_status = ' || x_return_status, l_debug_prefix);
16800           END IF;
16801           */
16802           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16803                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=> 'status is lookup code in lookup type REGISTRY_STATUS. ' ||
16804                   'x_return_status = ' || x_return_status,
16805                                   p_msg_level=>fnd_log.level_statement);
16806            END IF;
16807 
16808 
16809       END IF;
16810   END IF;
16811 
16812       -- status cannot be set to null during update
16813       IF p_create_update_flag = 'U' THEN
16814           validate_cannot_update_to_null (
16815               p_column                                => 'status',
16816               p_column_value                          => p_financial_report_rec.status,
16817               x_return_status                         => x_return_status);
16818       END IF;
16819 
16820       --------------------------------
16821       --validate actual_content_source
16822       --------------------------------
16823 
16824       -- actual_content_source is mandatory field
16825       IF p_create_update_flag = 'C' THEN
16826           validate_mandatory (
16827               p_create_update_flag                    => p_create_update_flag,
16828               p_column                                => 'actual_content_source',
16829               p_column_value                          => p_financial_report_rec.actual_content_source,
16830               x_return_status                         => x_return_status);
16831 
16832           /*IF g_debug THEN
16833               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16834                   'actual_content_source is mandatory field. ' ||
16835                   'x_return_status = ' || x_return_status, l_debug_prefix);
16836           END IF;
16837           */
16838           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16839                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'actual_content_source is mandatory field. ' ||
16840                         'x_return_status = ' || x_return_status,
16841                                   p_msg_level=>fnd_log.level_statement);
16842           END IF;
16843 
16844 
16845       END IF;
16846 
16847     /* SSM SST Integration and Extension
16848      * actual_content_source is now a foreign key to HZ_ORIG_SYSTEMS_B.orig_system where sst_flag = 'Y'.
16849       -- actual_content_source is lookup code in lookup type CONTENT_SOURCE_TYPE
16850       validate_lookup (
16851           p_column                                => 'actual_content_source',
16852           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
16853           p_column_value                          => p_financial_report_rec.actual_content_source,
16854           x_return_status                         => x_return_status);
16855     */
16856       /*IF g_debug THEN
16857           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16858               'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
16859               'x_return_status = ' || x_return_status, l_debug_prefix);
16860       END IF;
16861       */
16862     /*
16863       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16864            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16865            p_message=>'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
16866                                                 'x_return_status = ' || x_return_status,
16867                                   p_msg_level=>fnd_log.level_statement);
16868       END IF;
16869     */
16870 
16871       HZ_MIXNM_UTILITY.ValidateContentSource (
16872         p_api_version                       => 'V2',
16873         p_create_update_flag                => p_create_update_flag,
16874         p_check_update_privilege            => 'Y',
16875         p_content_source_type               => 'USER_ENTERED',
16876         p_old_content_source_type           => 'USER_ENTERED',
16877         p_actual_content_source             => p_financial_report_rec.actual_content_source,
16878         p_old_actual_content_source         => l_actual_content_source,
16879         p_entity_name                       => 'HZ_FINANCIAL_REPORTS',
16880         x_return_status                     => x_return_status );
16881 
16882       ----------------------------
16883       --validate created_by_module
16884       ----------------------------
16885 
16886       validate_created_by_module(
16887         p_create_update_flag     => p_create_update_flag,
16888         p_created_by_module      => p_financial_report_rec.created_by_module,
16889         p_old_created_by_module  => l_created_by_module,
16890         x_return_status          => x_return_status);
16891 
16892       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
16893         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_report (-)',
16894                                p_msg_level=>fnd_log.level_procedure);
16895       END IF;
16896 
16897   END validate_financial_report;
16898 
16899   /**
16900    * PROCEDURE validate_financial_number
16901    *
16902    * DESCRIPTION
16903    *     Validates financial number record. Checks for
16904    *         uniqueness
16905    *         lookup types
16906    *         mandatory columns
16907    *         non-updateable fields
16908    *         foreign key validations
16909    *         other validations
16910    *
16911    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
16912    *
16913    * ARGUMENTS
16914    *   IN:
16915    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
16916    *     p_financial_number_rec         Financial number record.
16917    *     p_rowid                        Rowid of the record (used only in update mode).
16918    *   IN/OUT:
16919    *     x_return_status                Return status after the call. The status can
16920    *                                    be FND_API.G_RET_STS_SUCCESS (success),
16921    *                                    fnd_api.g_ret_sts_error (error),
16922    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
16923    *
16924    * NOTES
16925    *
16926    * MODIFICATION HISTORY
16927    *
16928    *   29-JAN-2003   Sreedhar Mohan     o Created.
16929    *
16930    */
16931  --bug 3942332: added out parameter x_actual_content_source
16932   PROCEDURE validate_financial_number(
16933       p_create_update_flag                    IN      VARCHAR2,
16934       p_financial_number_rec                  IN      HZ_ORGANIZATION_INFO_V2PUB.FINANCIAL_NUMBER_REC_TYPE,
16935       p_rowid                                 IN      ROWID,
16936       x_return_status                         IN OUT NOCOPY  VARCHAR2,
16937       x_actual_content_source                 OUT NOCOPY VARCHAR2
16938  ) IS
16939 
16940      CURSOR c_dup_financial_number_id (p_financial_report_id IN NUMBER) IS
16941       SELECT 'Y'
16942       FROM   hz_financial_numbers hfr
16943       WHERE  hfr.financial_number_id = financial_number_id;
16944 
16945      CURSOR c_unique_financial_number_rec ( p_financial_report_id IN NUMBER,
16946                                             p_financial_number_name IN VARCHAR2) IS
16947       SELECT 'Y'
16948       FROM   hz_financial_numbers
16949       WHERE  financial_report_id = p_financial_report_id
16950       AND    nvl(financial_number_name, 'XXX') = nvl(p_financial_number_name, 'XXX');
16951 
16952       l_financial_number_id                   hz_financial_numbers.financial_number_id%TYPE;
16953       l_financial_number_name                 hz_financial_numbers.financial_number_name%TYPE;
16954       l_financial_report_id                   hz_financial_numbers.financial_report_id%TYPE;
16955       l_status                                hz_financial_numbers.status%TYPE;
16956       l_created_by_module                     hz_financial_numbers.created_by_module%TYPE;
16957       l_dummy                                 VARCHAR2(1);
16958       l_debug_prefix                          VARCHAR2(30) := '';
16959 
16960   BEGIN
16961 
16962       --enable_debug;
16963 
16964       -- Debug info.
16965       /*IF g_debug THEN
16966           hz_utility_v2pub.debug ('validate_financial_number (+)');
16967       END IF;
16968       */
16969       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
16970         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_number (+)',
16971                                p_msg_level=>fnd_log.level_procedure);
16972       END IF;
16973 
16974       -- do the query to get old values for update
16975       IF p_create_update_flag = 'U'
16976       THEN
16977           SELECT FINANCIAL_NUMBER_ID,
16978                  FINANCIAL_REPORT_ID,
16979                  FINANCIAL_NUMBER_NAME,
16980                  STATUS,
16981                  CREATED_BY_MODULE
16982           INTO   l_financial_number_id,
16983                  l_financial_report_id,
16984                  l_financial_number_name,
16985                  l_status,
16986                  l_created_by_module
16987           FROM   HZ_FINANCIAL_NUMBERS
16988           WHERE  ROWID = p_rowid;
16989       END IF;
16990 
16991       -------------------------------------
16992       -- validation for financial_number_id
16993       -------------------------------------
16994 /****Logical APIs - validation not required****/
16995   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16996       --check for unique financial_number_id
16997       IF p_create_update_flag = 'C' THEN
16998         IF p_financial_number_rec.financial_number_id IS NOT NULL AND
16999            p_financial_number_rec.financial_number_id <> fnd_api.g_miss_num
17000         THEN
17001           OPEN c_dup_financial_number_id (p_financial_number_rec.financial_number_id);
17002           FETCH c_dup_financial_number_id INTO l_dummy;
17003 
17004           -- key is not unique, push an error onto the stack.
17005           IF NVL(c_dup_financial_number_id%FOUND, FALSE) THEN
17006             fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
17007             fnd_message.set_token('COLUMN', 'financial_number_id');
17008             fnd_msg_pub.add;
17009             x_return_status := fnd_api.g_ret_sts_error;
17010           END IF;
17011           CLOSE c_dup_financial_number_id;
17012 
17013           /*IF g_debug THEN
17014             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17015               'check that financial_number_id is unique during creation. ' ||
17016               ' x_return_status = ' || x_return_status, l_debug_prefix);
17017           END IF;
17018           */
17019           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17020            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'check that financial_number_id is unique during creation. ' ||
17021                                         ' x_return_status = ' || x_return_status,
17022                                   p_msg_level=>fnd_log.level_statement);
17023          END IF;
17024 
17025         END IF;
17026       END IF;
17027 
17028       /*IF g_debug THEN
17029         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17030           '(+) after validate financial_number_id ... ' ||
17031           'x_return_status = ' || x_return_status, l_debug_prefix);
17032       END IF;
17033       */
17034       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17035            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate financial_number_id ... ' ||
17036           'x_return_status = ' || x_return_status,
17037                                   p_msg_level=>fnd_log.level_statement);
17038     END IF;
17039 
17040       -- financial_number_id is non-updateable field
17041       IF p_create_update_flag = 'U' THEN
17042           validate_nonupdateable (
17043               p_column                                => 'financial_number_id',
17044               p_column_value                          => p_financial_number_rec.financial_number_id,
17045               p_old_column_value                      => l_financial_number_id,
17046               x_return_status                         => x_return_status);
17047 
17048           /*IF g_debug THEN
17049               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17050                   'financial_number_id is non-updateable field. ' ||
17051                   'x_return_status = ' || x_return_status, l_debug_prefix);
17052           END IF;
17053           */
17054           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17055            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'financial_number_id is non-updateable field. ' ||
17056                         'x_return_status = ' || x_return_status,
17057                                   p_msg_level=>fnd_log.level_statement);
17058           END IF;
17059 
17060       END IF;
17061   END IF;
17062 
17063       -------------------------------------
17064       -- validation for financial_report_id
17065       -------------------------------------
17066 /****Logical APIs - validation not required****/
17067   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17068       --Must exist in HZ_FINANCIAL_REPORTS.  Non-updateable.
17069       -- financial_report_id has foreign key HZ_FINANCIAL_REPORTS.FINANCIAL_REPORT_ID
17070       IF p_create_update_flag = 'C'
17071          AND
17072          p_financial_number_rec.financial_report_id IS NOT NULL
17073          AND
17074          p_financial_number_rec.financial_report_id <> fnd_api.g_miss_num
17075       THEN
17076           BEGIN
17077               --bug 3942332: selected actual_content_source from the hz_financial_reports record.
17078               --SELECT 'Y'
17079               --INTO l_dummy
17080               SELECT actual_content_source
17081               INTO   x_actual_content_source
17082               FROM   hz_financial_reports hfr
17083               WHERE  hfr.financial_report_id = p_financial_number_rec.financial_report_id;
17084 
17085           EXCEPTION
17086               WHEN NO_DATA_FOUND THEN
17087                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
17088                   fnd_message.set_token('FK', 'financial_report_id');
17089                   fnd_message.set_token('COLUMN', 'financial_report_id');
17090                   fnd_message.set_token('TABLE', 'hz_financial_reports');
17091                   fnd_msg_pub.add;
17092                   x_return_status := fnd_api.g_ret_sts_error;
17093           END;
17094 
17095           /*IF g_debug THEN
17096               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17097                   'financial_report_id has foreign key hz_financial_reports.financial_report_id. ' ||
17098                   'x_return_status = ' || x_return_status, l_debug_prefix);
17099           END IF;
17100           */
17101           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17102             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17103             p_message=>'financial_report_id has foreign key hz_financial_reports.financial_report_id. ' ||
17104                          'x_return_status = ' || x_return_status,
17105                                   p_msg_level=>fnd_log.level_statement);
17106           END IF;
17107 
17108       END IF;
17109 
17110       -- financial_report_id is non-updateable field
17111       IF p_create_update_flag = 'U' THEN
17112           validate_nonupdateable (
17113               p_column                                => 'financial_report_id',
17114               p_column_value                          => p_financial_number_rec.financial_report_id,
17115               p_old_column_value                      => l_financial_report_id,
17116               x_return_status                         => x_return_status);
17117 
17118           /*IF g_debug THEN
17119               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17120                   'financial_report_id is non-updateable field. ' ||
17121                   'x_return_status = ' || x_return_status, l_debug_prefix);
17122           END IF;
17123           */
17124           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17125              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'financial_report_id is non-updateable field. ' ||
17126                         'x_return_status = ' || x_return_status,
17127                                   p_msg_level=>fnd_log.level_statement);
17128           END IF;
17129 
17130       END IF;
17131 
17132       -- financial_report_id is mandatory field
17133       IF p_create_update_flag = 'C' THEN
17134           validate_mandatory (
17135               p_create_update_flag                    => p_create_update_flag,
17136               p_column                                => 'financial_report_id',
17137               p_column_value                          => p_financial_number_rec.financial_report_id,
17138               x_return_status                         => x_return_status);
17139 
17140           /*IF g_debug THEN
17141               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17142                   'financial_report_id is mandatory field. ' ||
17143                   'x_return_status = ' || x_return_status, l_debug_prefix);
17144           END IF;
17145           */
17146           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17147              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'financial_report_id is mandatory field. ' ||
17148                         'x_return_status = ' || x_return_status,
17149                                   p_msg_level=>fnd_log.level_statement);
17150           END IF;
17151 
17152       END IF;
17153   END IF;
17154 
17155       ---------------------------------------
17156       --Bug 2869162: Unique record Validation
17157       ---------------------------------------
17158       IF p_create_update_flag = 'C' THEN
17159          OPEN c_unique_financial_number_rec ( p_financial_number_rec.financial_report_id,
17160                                               p_financial_number_rec.financial_number_name);
17161 
17162           FETCH c_unique_financial_number_rec INTO l_dummy;
17163 
17164           -- combination key is not unique, push an error onto the stack.
17165           IF NVL(c_unique_financial_number_rec%FOUND, FALSE) THEN
17166             fnd_message.set_name('AR', 'HZ_API_DUP_FIN_NUMBER_REC');
17167             fnd_msg_pub.add;
17168             x_return_status := fnd_api.g_ret_sts_error;
17169           END IF;
17170           CLOSE c_unique_financial_number_rec;
17171 
17172           /*IF g_debug THEN
17173             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17174               'The following column combination should be unique:' ||
17175               ' FINANCIAL_REPORT_ID, FINANCIAL_NUMBER_NAME. ' ||
17176               ' x_return_status = ' || x_return_status, l_debug_prefix);
17177           END IF;
17178           */
17179           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17180            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'The following column combination should be unique:' ||
17181                                       ' FINANCIAL_REPORT_ID, FINANCIAL_NUMBER_NAME. ' ||
17182                                       ' x_return_status = ' || x_return_status,
17183                                   p_msg_level=>fnd_log.level_statement);
17184           END IF;
17185       END IF;
17186       -----------------------------------------
17187       --financial_number_name in non-updateable
17188       -----------------------------------------
17189       IF p_create_update_flag = 'U' THEN
17190           validate_nonupdateable (
17191               p_column                                => 'financial_number_name',
17192               p_column_value                          => p_financial_number_rec.financial_number_name,
17193               p_old_column_value                      => l_financial_number_name,
17194               x_return_status                         => x_return_status);
17195 
17196           /*IF g_debug THEN
17197               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17198                   'financial_number_name is non-updateable field. ' ||
17199                   'x_return_status = ' || x_return_status, l_debug_prefix);
17200           END IF;
17201           */
17202           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17203                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17204                  p_message=>'financial_number_name is non-updateable field. ' ||
17205                   'x_return_status = ' || x_return_status,
17206                                   p_msg_level=>fnd_log.level_statement);
17207           END IF;
17208 
17209       END IF;
17210       ---------------------------------------
17211       -- validation for financial_number_name
17212       ---------------------------------------
17213 
17214       -- financial_number_name is lookup code in lookup type FIN_NUM_NAME
17215       validate_lookup (
17216           p_column                                => 'financial_number_name',
17217           p_lookup_type                           => 'FIN_NUM_NAME',
17218           p_column_value                          => p_financial_number_rec.financial_number_name,
17219           x_return_status                         => x_return_status);
17220 
17221       /*IF g_debug THEN
17222           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17223               'financial_number_name should be in lookup YES/NO. ' ||
17224               'x_return_status = ' || x_return_status, l_debug_prefix);
17225       END IF;
17226       */
17227       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17228            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17229            p_message=>'financial_number_name should be in lookup YES/NO. ' ||
17230                    'x_return_status = ' || x_return_status,
17231                                   p_msg_level=>fnd_log.level_statement);
17232     END IF;
17233 
17234       ------------------------
17235       -- validation for status
17236       ------------------------
17237 /****Logical APIs - validation not required****/
17238   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17239       -- status is lookup code in lookup type REGISTRY_STATUS
17240       IF p_financial_number_rec.status IS NOT NULL
17241          AND
17242          p_financial_number_rec.status <> fnd_api.g_miss_char
17243          AND
17244          (p_create_update_flag = 'C'
17245           OR
17246           (p_create_update_flag = 'U'
17247            AND
17248            p_financial_number_rec.status <> NVL(l_status, fnd_api.g_miss_char)
17249          )
17250         )
17251       THEN
17252           validate_lookup (
17253               p_column                                => 'status',
17254               p_lookup_type                           => 'REGISTRY_STATUS',
17255               p_column_value                          => p_financial_number_rec.status,
17256               x_return_status                         => x_return_status);
17257 
17258           /*IF g_debug THEN
17259               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17260                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
17261                   'x_return_status = ' || x_return_status, l_debug_prefix);
17262           END IF;
17263           */
17264           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17265                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17266                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
17267                         'x_return_status = ' || x_return_status,
17268                                   p_msg_level=>fnd_log.level_statement);
17269           END IF;
17270 
17271       END IF;
17272   END IF;
17273 
17274       -- status cannot be set to null during update
17275       IF p_create_update_flag = 'U' THEN
17276           validate_cannot_update_to_null (
17277               p_column                                => 'status',
17278               p_column_value                          => p_financial_number_rec.status,
17279               x_return_status                         => x_return_status);
17280       END IF;
17281 
17282       --------------------------------------
17283       -- validate created_by_module
17284       --------------------------------------
17285 
17286       validate_created_by_module(
17287         p_create_update_flag     => p_create_update_flag,
17288         p_created_by_module      => p_financial_number_rec.created_by_module,
17289         p_old_created_by_module  => l_created_by_module,
17290         x_return_status          => x_return_status);
17291 
17292       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
17293         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_number (-)',
17294                                p_msg_level=>fnd_log.level_procedure);
17295       END IF;
17296 
17297   END validate_financial_number;
17298 
17299   /**
17300    * PROCEDURE validate_credit_rating
17301    *
17302    * DESCRIPTION
17303    *     Validates credit rating record. Checks for
17304    *         uniqueness
17305    *         lookup types
17306    *         mandatory columns
17307    *         non-updateable fields
17308    *         foreign key validations
17309    *         other validations
17310    *
17311    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
17312    *
17313    * ARGUMENTS
17314    *   IN:
17315    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
17316    *     p_credit_rating_rec            Credit rating record.
17317    *     p_rowid                        Rowid of the record (used only in update mode).
17318    *   IN/OUT:
17319    *     x_return_status                Return status after the call. The status can
17320    *                                    be FND_API.G_RET_STS_SUCCESS (success),
17321    *                                    fnd_api.g_ret_sts_error (error),
17322    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
17323    *
17324    * NOTES
17325    *
17326    * MODIFICATION HISTORY
17327    *
17328    *   01-27-2003    Sreedhar Mohan     o Created.
17329    *   03-11-2003    Sreedhar Mohan     Changed the lookup_type to FAILURE_SCORE_OVERRIDE_CODE
17330    *                                    instead of FAILURE_SCORE_OVERRIDE_SCORE
17331    *                                    for the code credit_score_override_code
17332    *   03-14-2003    Sreedhar Mohan     Bug 2843453, modified such that, fincl_embt_ind should
17333    *                                    be validated against YES/NO instead of REGISTRY_STATUS
17334    *   10-09-2003    Rajib R Borah    o Bug 3090928.Commented the code to check for uniqueness of
17335    *                                    party_id,rated_as_of_date,rating_organization. This is now
17336    *                                    handled by the unique index HZ_CREDIT_RATINGS_U2.
17337    *   04-05-2004    Rajib R Borah    o Bug 3181460. Credit_score_natl_percentile and
17338    *                                    failure_score_natnl_percentile should have a value
17339    *                                    within 0 to 100 only.
17340    *                                  o Added local variables l_credit_score_natl_percentile and
17341    *                                    l_fail_score_natnl_percentile for the same.
17342    *   01-03-2005  Rajib Ranjan Borah   o SSM SST Integration and Extension.
17343    *                                      Actual_content_source will now be validated against
17344    *                                      HZ_ORIG_SYSTEMS_B by calling Hz_MIXNM_UTILITY.ValidateContentSource
17345    *                                      instead of being validated against lookup CONTENT_SOURCE_TYPE.
17346    *   01-24-2005    Kalyan           o Bug 3877782. Added the condition to consider 'start_date_active' and
17347    *                                    'end_date_active'.
17348    */
17349 
17350   PROCEDURE validate_credit_rating(
17351       p_create_update_flag                    IN      VARCHAR2,
17352       p_credit_rating_rec                     IN      HZ_PARTY_INFO_V2PUB.CREDIT_RATING_REC_TYPE,
17353       p_rowid                                 IN      ROWID,
17354       x_return_status                         IN OUT NOCOPY  VARCHAR2
17355  ) IS
17356 
17357      CURSOR c_dup_credit_rating_id (p_credting_rating_id IN NUMBER) IS
17358       SELECT 'Y'
17359       FROM   hz_credit_ratings hcr
17360       WHERE  hcr.credit_rating_id = p_credting_rating_id;
17361 
17362      CURSOR c_unique_credit_rating_rec ( p_party_id IN NUMBER,
17363                                          p_rated_as_of_date IN DATE,
17364                                          p_rating_organization IN VARCHAR2,
17365                                          p_actual_content_source IN VARCHAR2) IS
17366       SELECT 'Y'
17367       FROM   hz_credit_ratings hc
17368       WHERE  hc.party_id = p_party_id
17369       AND    trunc(nvl(hc.rated_as_of_date, to_date('12/31/4712','MM/DD/YYYY'))) =
17370              trunc(nvl(p_rated_as_of_date, to_date('12/31/4712','MM/DD/YYYY')))
17371       AND    nvl(hc.rating_organization, 'XXX') = nvl(p_rating_organization, 'XXX')
17372       AND    nvl(hc.actual_content_source, hz_party_v2pub.G_MISS_CONTENT_SOURCE_TYPE) =
17373              nvl(p_actual_content_source, hz_party_v2pub.G_MISS_CONTENT_SOURCE_TYPE);
17374 
17375       l_credit_rating_id                      hz_credit_ratings.credit_rating_id%TYPE;
17376       l_party_id                              hz_credit_ratings.party_id%TYPE;
17377       l_rating_organization                   hz_credit_ratings.rating_organization%TYPE;
17378       l_rated_as_of_date                      hz_credit_ratings.rated_as_of_date%TYPE;
17379       l_fincl_embt_ind                        hz_credit_ratings.fincl_embt_ind%TYPE;
17380       l_credit_score_commentary               hz_credit_ratings.credit_score_commentary%TYPE;
17381       l_credit_score_commentary2              hz_credit_ratings.credit_score_commentary2%TYPE;
17382       l_credit_score_commentary3              hz_credit_ratings.credit_score_commentary3%TYPE;
17383       l_credit_score_commentary4              hz_credit_ratings.credit_score_commentary4%TYPE;
17384       l_credit_score_commentary5              hz_credit_ratings.credit_score_commentary5%TYPE;
17385       l_credit_score_commentary6              hz_credit_ratings.credit_score_commentary6%TYPE;
17386       l_credit_score_commentary7              hz_credit_ratings.credit_score_commentary7%TYPE;
17387       l_credit_score_commentary8              hz_credit_ratings.credit_score_commentary8%TYPE;
17388       l_credit_score_commentary9              hz_credit_ratings.credit_score_commentary9%TYPE;
17389       l_credit_score_commentary10             hz_credit_ratings.credit_score_commentary10%TYPE;
17390       l_failure_score_commentary              hz_credit_ratings.failure_score_commentary%TYPE;
17391       l_failure_score_commentary2             hz_credit_ratings.failure_score_commentary2%TYPE;
17392       l_failure_score_commentary3             hz_credit_ratings.failure_score_commentary3%TYPE;
17393       l_failure_score_commentary4             hz_credit_ratings.failure_score_commentary4%TYPE;
17394       l_failure_score_commentary5             hz_credit_ratings.failure_score_commentary5%TYPE;
17395       l_failure_score_commentary6             hz_credit_ratings.failure_score_commentary6%TYPE;
17396       l_failure_score_commentary7             hz_credit_ratings.failure_score_commentary7%TYPE;
17397       l_failure_score_commentary8             hz_credit_ratings.failure_score_commentary8%TYPE;
17398       l_failure_score_commentary9             hz_credit_ratings.failure_score_commentary9%TYPE;
17399       l_failure_score_commentary10            hz_credit_ratings.failure_score_commentary10%TYPE;
17400       l_status                                hz_credit_ratings.status%TYPE;
17401       l_created_by_module                     hz_credit_ratings.created_by_module%TYPE;
17402       l_debarment_ind                         hz_credit_ratings.debarment_ind%TYPE;
17403       l_maximum_credit_currency_code          hz_credit_ratings.maximum_credit_currency_code%TYPE;
17404       l_credit_score_override_code            hz_credit_ratings.credit_score_override_code%TYPE;
17405       l_suit_ind                              hz_credit_ratings.suit_ind%TYPE;
17406       l_lien_ind                              hz_credit_ratings.lien_ind%TYPE;
17407       l_judgement_ind                         hz_credit_ratings.judgement_ind%TYPE;
17408       l_bankruptcy_ind                        hz_credit_ratings.bankruptcy_ind%TYPE;
17409       l_no_trade_ind                          hz_credit_ratings.no_trade_ind%TYPE;
17410       l_prnt_hq_bkcy_ind                      hz_credit_ratings.prnt_hq_bkcy_ind%TYPE;
17411       l_actual_content_source                 hz_credit_ratings.actual_content_source%TYPE;
17412       l_credit_score_natl_percentile          hz_credit_ratings.credit_score_natl_percentile%TYPE;
17413       l_fail_score_natnl_percentile           hz_credit_ratings.failure_score_natnl_percentile%TYPE;
17414       l_dummy                                 VARCHAR2(1);
17415       l_debug_prefix                          VARCHAR2(30) := '';
17416 
17417   BEGIN
17418 
17419       --enable_debug;
17420 
17421       -- Debug info.
17422       /*IF g_debug THEN
17423           hz_utility_v2pub.debug ('validate_credit_rating (+)');
17424       END IF;
17425       */
17426       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
17427         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_credit_rating (+)',
17428                                p_msg_level=>fnd_log.level_procedure);
17429        END IF;
17430 
17431       -- do the query to get old values for update
17432       IF p_create_update_flag = 'U'
17433       THEN
17434           SELECT   CREDIT_RATING_ID,
17435                    PARTY_ID,
17436                    RATING_ORGANIZATION,
17437                    RATED_AS_OF_DATE,
17438                    FINCL_EMBT_IND,
17439                    CREDIT_SCORE_COMMENTARY,
17440                    CREDIT_SCORE_COMMENTARY2,
17441                    CREDIT_SCORE_COMMENTARY3,
17442                    CREDIT_SCORE_COMMENTARY4,
17443                    CREDIT_SCORE_COMMENTARY5,
17444                    CREDIT_SCORE_COMMENTARY6,
17445                    CREDIT_SCORE_COMMENTARY7,
17446                    CREDIT_SCORE_COMMENTARY8,
17447                    CREDIT_SCORE_COMMENTARY9,
17448                    CREDIT_SCORE_COMMENTARY10,
17449                    FAILURE_SCORE_COMMENTARY,
17450                    FAILURE_SCORE_COMMENTARY2,
17451                    FAILURE_SCORE_COMMENTARY3,
17452                    FAILURE_SCORE_COMMENTARY4,
17453                    FAILURE_SCORE_COMMENTARY5,
17454                    FAILURE_SCORE_COMMENTARY6,
17455                    FAILURE_SCORE_COMMENTARY7,
17456                    FAILURE_SCORE_COMMENTARY8,
17457                    FAILURE_SCORE_COMMENTARY9,
17458                    FAILURE_SCORE_COMMENTARY10,
17459                    DEBARMENT_IND,
17460                    MAXIMUM_CREDIT_CURRENCY_CODE,
17461                    CREDIT_SCORE_OVERRIDE_CODE,
17462                    SUIT_IND,
17463                    LIEN_IND,
17464                    JUDGEMENT_IND,
17465                    BANKRUPTCY_IND,
17466                    NO_TRADE_IND,
17467                    PRNT_HQ_BKCY_IND,
17468                    ACTUAL_CONTENT_SOURCE,
17469                    STATUS,
17470                    CREATED_BY_MODULE,
17471                    CREDIT_SCORE_NATL_PERCENTILE,
17472                    FAILURE_SCORE_NATNL_PERCENTILE
17473           INTO     l_credit_rating_id,
17474                    l_party_id,
17475                    l_rating_organization,
17476                    l_rated_as_of_date,
17477                    l_fincl_embt_ind,
17478                    l_credit_score_commentary,
17479                    l_credit_score_commentary2,
17480                    l_credit_score_commentary3,
17481                    l_credit_score_commentary4,
17482                    l_credit_score_commentary5,
17483                    l_credit_score_commentary6,
17484                    l_credit_score_commentary7,
17485                    l_credit_score_commentary8,
17486                    l_credit_score_commentary9,
17487                    l_credit_score_commentary10,
17488                    l_failure_score_commentary,
17489                    l_failure_score_commentary2,
17490                    l_failure_score_commentary3,
17491                    l_failure_score_commentary4,
17492                    l_failure_score_commentary5,
17493                    l_failure_score_commentary6,
17494                    l_failure_score_commentary7,
17495                    l_failure_score_commentary8,
17496                    l_failure_score_commentary9,
17497                    l_failure_score_commentary10,
17498                    l_debarment_ind,
17499                    l_maximum_credit_currency_code,
17500                    l_credit_score_override_code,
17501                    l_suit_ind,
17502                    l_lien_ind,
17503                    l_judgement_ind,
17504                    l_bankruptcy_ind,
17505                    l_no_trade_ind,
17506                    l_prnt_hq_bkcy_ind,
17507                    l_actual_content_source,
17508                    l_status,
17509                    l_created_by_module,
17510                    l_credit_score_natl_percentile,
17511                    l_fail_score_natnl_percentile
17512           FROM   HZ_CREDIT_RATINGS
17513           WHERE  ROWID = p_rowid;
17514       END IF;
17515 
17516       -------------------------------------
17517       -- validation for credit_rating_id
17518       -------------------------------------
17519 /****Logical APIs - validation not required****/
17520   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17521       --check for unique credit_rating_id
17522       IF p_create_update_flag = 'C' THEN
17523         IF p_credit_rating_rec.credit_rating_id IS NOT NULL AND
17524            p_credit_rating_rec.credit_rating_id <> fnd_api.g_miss_num
17525         THEN
17526           OPEN c_dup_credit_rating_id (p_credit_rating_rec.credit_rating_id);
17527           FETCH c_dup_credit_rating_id INTO l_dummy;
17528 
17529           -- key is not unique, push an error onto the stack.
17530           IF NVL(c_dup_credit_rating_id%FOUND, FALSE) THEN
17531             fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
17532             fnd_message.set_token('COLUMN', 'credit_rating_id');
17533             fnd_msg_pub.add;
17534             x_return_status := fnd_api.g_ret_sts_error;
17535           END IF;
17536           CLOSE c_dup_credit_rating_id;
17537 
17538           /*IF g_debug THEN
17539             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17540               'check that credit_rating_id is unique during creation. ' ||
17541               ' x_return_status = ' || x_return_status, l_debug_prefix);
17542           END IF;
17543           */
17544           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17545            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17546            p_message=>'check that credit_rating_id is unique during creation. ' ||
17547                                 ' x_return_status = ' || x_return_status,
17548                                   p_msg_level=>fnd_log.level_statement);
17549            END IF;
17550 
17551         END IF;
17552       END IF;
17553 
17554       /*IF g_debug THEN
17555         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17556           '(+) after validate credit_rating_id ... ' ||
17557           'x_return_status = ' || x_return_status, l_debug_prefix);
17558       END IF;
17559       */
17560       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17561            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate credit_rating_id ... ' ||
17562                                                 'x_return_status = ' || x_return_status,
17563                                   p_msg_level=>fnd_log.level_statement);
17564       END IF;
17565 
17566       -- credit_rating_id is non-updateable field
17567       IF p_create_update_flag = 'U' THEN
17568           validate_nonupdateable (
17569               p_column                                => 'credit_rating_id',
17570               p_column_value                          => p_credit_rating_rec.credit_rating_id,
17571               p_old_column_value                      => l_credit_rating_id,
17572               x_return_status                         => x_return_status);
17573 
17574           /*IF g_debug THEN
17575               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17576                   'credit_rating_id is non-updateable field. ' ||
17577                   'x_return_status = ' || x_return_status, l_debug_prefix);
17578           END IF;
17579           */
17580           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17581                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_rating_id is non-updateable field. ' ||
17582                          'x_return_status = ' || x_return_status,
17583                                   p_msg_level=>fnd_log.level_statement);
17584          END IF;
17585 
17586       END IF;
17587   END IF;
17588 
17589       -------------------------------------
17590       -- validation for party_id
17591       -------------------------------------
17592 /****Logical APIs - validation not required****/
17593   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17594       --party_id is a mandatory field
17595       IF p_create_update_flag = 'C' THEN
17596           validate_mandatory (
17597               p_create_update_flag                    => p_create_update_flag,
17598               p_column                                => 'party_id',
17599               p_column_value                          => p_credit_rating_rec.party_id,
17600               x_return_status                         => x_return_status);
17601 
17602           /*IF g_debug THEN
17603               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17604                   'party_id is mandatory field. ' ||
17605                   'x_return_status = ' || x_return_status, l_debug_prefix);
17606           END IF;
17607           */
17608           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17609                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
17610                                                 'x_return_status = ' || x_return_status,
17611                                   p_msg_level=>fnd_log.level_statement);
17612            END IF;
17613 
17614       END IF;
17615       -- party_id has foreign key HZ_PARTIES.PARTY_ID
17616       IF p_create_update_flag = 'C'
17617          AND
17618          p_credit_rating_rec.party_id IS NOT NULL
17619          AND
17620          p_credit_rating_rec.party_id <> fnd_api.g_miss_num
17621       THEN
17622           BEGIN
17623               SELECT 'Y'
17624               INTO   l_dummy
17625               FROM   hz_parties p
17626               WHERE  p.party_id = p_credit_rating_rec.party_id;
17627 
17628           EXCEPTION
17629               WHEN NO_DATA_FOUND THEN
17630                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
17631                   fnd_message.set_token('FK', 'party_id');
17632                   fnd_message.set_token('COLUMN', 'party_id');
17633                   fnd_message.set_token('TABLE', 'hz_parties');
17634                   fnd_msg_pub.add;
17635                   x_return_status := fnd_api.g_ret_sts_error;
17636           END;
17637 
17638           /*IF g_debug THEN
17639               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17640                   'party_id has foreign key hz_parties.party_id. ' ||
17641                   'x_return_status = ' || x_return_status, l_debug_prefix);
17642           END IF;
17643           */
17644           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17645              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
17646                                  'x_return_status = ' || x_return_status,
17647                                   p_msg_level=>fnd_log.level_statement);
17648           END IF;
17649 
17650       END IF;
17651 
17652       -- party_id is non-updateable field
17653       IF p_create_update_flag = 'U' THEN
17654           validate_nonupdateable (
17655               p_column                                => 'party_id',
17656               p_column_value                          => p_credit_rating_rec.party_id,
17657               p_old_column_value                      => l_party_id,
17658               x_return_status                         => x_return_status);
17659 
17660           /*IF g_debug THEN
17661               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17662                   'party_id is non-updateable field. ' ||
17663                   'x_return_status = ' || x_return_status, l_debug_prefix);
17664           END IF;
17665           */
17666           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17667                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
17668                                                 'x_return_status = ' || x_return_status,
17669                                   p_msg_level=>fnd_log.level_statement);
17670            END IF;
17671 
17672       END IF;
17673   END IF;
17674 
17675       /**********************************************************************************
17676       Bug Number 3090928:Removed the validation below and used the unique index HZ_CREDIT_RATINGS_U2
17677       on table HZ_CREDIT_RATINGS to check for uniqueness.Now this check is done by handling the
17678       exception DUP_VAL_ON_INDEX for the unique index HZ_CREDIT_RATINGS_U2 in the procedure
17679       HZ_CREDIT_RATINGS_PKG.Insert_Row.
17680       ***********************************************************************************
17681       |---------------------------------------
17682       |--Bug 2869178: Unique record Validation
17683       |---------------------------------------
17684       |IF p_create_update_flag = 'C' THEN
17685       |    OPEN c_unique_credit_rating_rec (p_credit_rating_rec.party_id,
17686       |                                     p_credit_rating_rec.rated_as_of_date,
17687       |                                     p_credit_rating_rec.rating_organization,
17688       |                                     p_credit_rating_rec.actual_content_source);
17689       |    FETCH c_unique_credit_rating_rec INTO l_dummy;
17690       |
17691       |    -- combination key is not unique, push an error onto the stack.
17692       |    IF NVL(c_unique_credit_rating_rec%FOUND, FALSE) THEN
17693       |      fnd_message.set_name('AR', 'HZ_API_DUP_CREDIT_RATING_REC');
17694       |      fnd_msg_pub.add;
17695       |      x_return_status := fnd_api.g_ret_sts_error;
17696       |    END IF;
17697       |    CLOSE c_unique_credit_rating_rec;
17698       |
17699       |    IF g_debug THEN
17700       |      hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17701       |        'The following column combination should be unique:' ||
17702       |        ' PARTY_ID, TRUNC(RATED_AS_OF_DATE), RATING_ORGANIZATION, and ACTUAL_CONTENT_SOURCE. ' ||
17703       |        ' x_return_status = ' || x_return_status, l_debug_prefix);
17704       |    END IF;
17705       |END IF;
17706       ********************************************************************************
17707       End of code commented for Bug Number 3090928.
17708       ********************************************************************************/
17709       ------------------------------------
17710       --rated_as_of_date is not updateable
17711       ------------------------------------
17712       IF p_create_update_flag = 'U' THEN
17713           validate_nonupdateable (
17714               p_column                                => 'rated_as_of_date',
17715               p_column_value                          => trunc(p_credit_rating_rec.rated_as_of_date),
17716               p_old_column_value                      => trunc(l_rated_as_of_date),
17717               x_return_status                         => x_return_status);
17718 
17719           /*IF g_debug THEN
17720               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17721                   'rated_as_of_date is non-updateable field. ' ||
17722                   'x_return_status = ' || x_return_status, l_debug_prefix);
17723           END IF;
17724           */
17725           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17726            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'rated_as_of_date is non-updateable field. ' ||
17727                   'x_return_status = ' || x_return_status,
17728                                   p_msg_level=>fnd_log.level_statement);
17729            END IF;
17730 
17731       END IF;
17732       ---------------------------------------
17733       --rating_organization is not updateable
17734       ---------------------------------------
17735       IF p_create_update_flag = 'U' THEN
17736           validate_nonupdateable (
17737               p_column                                => 'rating_organization',
17738               p_column_value                          => p_credit_rating_rec.rating_organization,
17739               p_old_column_value                      => l_rating_organization,
17740               x_return_status                         => x_return_status);
17741 
17742           /*IF g_debug THEN
17743               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17744                   'rating_organization is non-updateable field. ' ||
17745                   'x_return_status = ' || x_return_status, l_debug_prefix);
17746           END IF;
17747           */
17748           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17749            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'rating_organization is non-updateable field. ' ||
17750                                          'x_return_status = ' || x_return_status,
17751                                   p_msg_level=>fnd_log.level_statement);
17752           END IF;
17753 
17754       END IF;
17755       ----------------------------------
17756       -- validation for fincl_embt_ind
17757       ----------------------------------
17758 /****Logical APIs - validation not required****/
17759   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17760       --bug 2843453, fincl_embt_ind should be validated against YES/NO instead
17761       --of REGISTRY_STATUS
17762       -- fincl_embt_ind is lookup code in lookup type YES/NO
17763       validate_lookup (
17764           p_column                                => 'fincl_embt_ind',
17765           p_lookup_type                           => 'YES/NO',
17766           p_column_value                          => p_credit_rating_rec.fincl_embt_ind,
17767           x_return_status                         => x_return_status);
17768 
17769       /*IF g_debug THEN
17770           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17771               'fincl_embt_ind should be in lookup YES/NO. ' ||
17772               'x_return_status = ' || x_return_status, l_debug_prefix);
17773       END IF;
17774       */
17775       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17776            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fincl_embt_ind should be in lookup YES/NO. ' ||
17777               'x_return_status = ' || x_return_status,
17778                                   p_msg_level=>fnd_log.level_statement);
17779     END IF;
17780   END IF;
17781 
17782       -----------------------------------------
17783       -- validation for credit_score_commentary
17784       -----------------------------------------
17785 
17786       -- credit_score_commentary is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17787       validate_lookup (
17788           p_column                                => 'credit_score_commentary',
17789           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17790           p_column_value                          => p_credit_rating_rec.credit_score_commentary,
17791           x_return_status                         => x_return_status);
17792 
17793       /*IF g_debug THEN
17794           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17795               'credit_score_commentary should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17796               'x_return_status = ' || x_return_status, l_debug_prefix);
17797       END IF;
17798       */
17799         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17800            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17801            p_message=>'credit_score_commentary should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17802               'x_return_status = ' || x_return_status,
17803                                   p_msg_level=>fnd_log.level_statement);
17804        END IF;
17805 
17806 
17807       ------------------------------------------
17808       -- validation for credit_score_commentary2
17809       ------------------------------------------
17810 
17811       -- credit_score_commentary2 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17812       validate_lookup (
17813           p_column                                => 'credit_score_commentary2',
17814           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17815           p_column_value                          => p_credit_rating_rec.credit_score_commentary2,
17816           x_return_status                         => x_return_status);
17817 
17818       /*IF g_debug THEN
17819           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17820               'credit_score_commentary2 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17821               'x_return_status = ' || x_return_status, l_debug_prefix);
17822       END IF;
17823       */
17824       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17825            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary2 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17826               'x_return_status = ' || x_return_status,
17827                                   p_msg_level=>fnd_log.level_statement);
17828       END IF;
17829 
17830       ------------------------------------------
17831       -- validation for credit_score_commentary3
17832       ------------------------------------------
17833 
17834       -- credit_score_commentary3 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17835       validate_lookup (
17836           p_column                                => 'credit_score_commentary3',
17837           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17838           p_column_value                          => p_credit_rating_rec.credit_score_commentary3,
17839           x_return_status                         => x_return_status);
17840 
17841       /*IF g_debug THEN
17842           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17843               'credit_score_commentary3 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17844               'x_return_status = ' || x_return_status, l_debug_prefix);
17845       END IF;
17846       */
17847       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17848            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary3 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17849               'x_return_status = ' || x_return_status,
17850                                   p_msg_level=>fnd_log.level_statement);
17851       END IF;
17852 
17853       ------------------------------------------
17854       -- validation for credit_score_commentary4
17855       ------------------------------------------
17856 
17857       -- credit_score_commentary4 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17858       validate_lookup (
17859           p_column                                => 'credit_score_commentary4',
17860           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17861           p_column_value                          => p_credit_rating_rec.credit_score_commentary4,
17862           x_return_status                         => x_return_status);
17863 
17864       /*IF g_debug THEN
17865           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17866               'credit_score_commentary4 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17867               'x_return_status = ' || x_return_status, l_debug_prefix);
17868       END IF;
17869       */
17870       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17871            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary4 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17872               'x_return_status = ' || x_return_status,
17873                                   p_msg_level=>fnd_log.level_statement);
17874     END IF;
17875 
17876       ------------------------------------------
17877       -- validation for credit_score_commentary5
17878       ------------------------------------------
17879 
17880       -- credit_score_commentary5 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17881       validate_lookup (
17882           p_column                                => 'credit_score_commentary5',
17883           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17884           p_column_value                          => p_credit_rating_rec.credit_score_commentary5,
17885           x_return_status                         => x_return_status);
17886 
17887       /*IF g_debug THEN
17888           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17889               'credit_score_commentary5 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17890               'x_return_status = ' || x_return_status, l_debug_prefix);
17891       END IF;
17892       */
17893       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17894            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary5 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17895               'x_return_status = ' || x_return_status,
17896                                   p_msg_level=>fnd_log.level_statement);
17897     END IF;
17898 
17899       ------------------------------------------
17900       -- validation for credit_score_commentary6
17901       ------------------------------------------
17902 
17903       -- credit_score_commentary6 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17904       validate_lookup (
17905           p_column                                => 'credit_score_commentary6',
17906           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17907           p_column_value                          => p_credit_rating_rec.credit_score_commentary6,
17908           x_return_status                         => x_return_status);
17909 
17910       /*IF g_debug THEN
17911           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17912               'credit_score_commentary6 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17913               'x_return_status = ' || x_return_status, l_debug_prefix);
17914       END IF;
17915       */
17916       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17917            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary6 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17918               'x_return_status = ' || x_return_status,
17919                                   p_msg_level=>fnd_log.level_statement);
17920       END IF;
17921 
17922        ------------------------------------------
17923       -- validation for credit_score_commentary7
17924       ------------------------------------------
17925 
17926       -- credit_score_commentary7 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17927       validate_lookup (
17928           p_column                                => 'credit_score_commentary7',
17929           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17930           p_column_value                          => p_credit_rating_rec.credit_score_commentary7,
17931           x_return_status                         => x_return_status);
17932 
17933       /*IF g_debug THEN
17934           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17935               'credit_score_commentary7 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17936               'x_return_status = ' || x_return_status, l_debug_prefix);
17937       END IF;
17938       */
17939       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17940            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary7 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17941               'x_return_status = ' || x_return_status,
17942                                   p_msg_level=>fnd_log.level_statement);
17943      END IF;
17944 
17945       ------------------------------------------
17946       -- validation for credit_score_commentary8
17947       ------------------------------------------
17948 
17949       -- credit_score_commentary8 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17950       validate_lookup (
17951           p_column                                => 'credit_score_commentary8',
17952           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17953           p_column_value                          => p_credit_rating_rec.credit_score_commentary8,
17954           x_return_status                         => x_return_status);
17955 
17956       /*IF g_debug THEN
17957           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17958               'credit_score_commentary8 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17959               'x_return_status = ' || x_return_status, l_debug_prefix);
17960       END IF;
17961       */
17962       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17963            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17964            p_message=>'credit_score_commentary8 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17965                   'x_return_status = ' || x_return_status,
17966                                   p_msg_level=>fnd_log.level_statement);
17967       END IF;
17968 
17969       ------------------------------------------
17970       -- validation for credit_score_commentary9
17971       ------------------------------------------
17972 
17973       -- credit_score_commentary9 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17974       validate_lookup (
17975           p_column                                => 'credit_score_commentary9',
17976           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17977           p_column_value                          => p_credit_rating_rec.credit_score_commentary9,
17978           x_return_status                         => x_return_status);
17979 
17980       /*IF g_debug THEN
17981           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17982               'credit_score_commentary9 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17983               'x_return_status = ' || x_return_status, l_debug_prefix);
17984       END IF;
17985       */
17986       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17987            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17988            p_message=>'credit_score_commentary9 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17989                         'x_return_status = ' || x_return_status,
17990                                   p_msg_level=>fnd_log.level_statement);
17991       END IF;
17992 
17993       -------------------------------------------
17994       -- validation for credit_score_commentary10
17995       -------------------------------------------
17996 
17997       -- credit_score_commentary10 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17998       validate_lookup (
17999           p_column                                => 'credit_score_commentary10',
18000           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
18001           p_column_value                          => p_credit_rating_rec.credit_score_commentary10,
18002           x_return_status                         => x_return_status);
18003 
18004       /*IF g_debug THEN
18005           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18006               'credit_score_commentary10 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
18007               'x_return_status = ' || x_return_status, l_debug_prefix);
18008       END IF;
18009       */
18010       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18011            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18012            p_message=>'credit_score_commentary10 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
18013                  'x_return_status = ' || x_return_status,
18014                                   p_msg_level=>fnd_log.level_statement);
18015       END IF;
18016 
18017       ------------------------------------------
18018       -- validation for failure_score_commentary
18019       ------------------------------------------
18020 
18021       -- failure_score_commentary is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18022       validate_lookup (
18023           p_column                                => 'failure_score_commentary',
18024           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18025           p_column_value                          => p_credit_rating_rec.failure_score_commentary,
18026           x_return_status                         => x_return_status);
18027 
18028       /*IF g_debug THEN
18029           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18030               'failure_score_commentary should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18031               'x_return_status = ' || x_return_status, l_debug_prefix);
18032       END IF;
18033       */
18034       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18035            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18036            p_message=>'failure_score_commentary should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18037               'x_return_status = ' || x_return_status,
18038                                   p_msg_level=>fnd_log.level_statement);
18039       END IF;
18040 
18041       -------------------------------------------
18042       -- validation for failure_score_commentary2
18043       -------------------------------------------
18044 
18045       -- failure_score_commentary2 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18046       validate_lookup (
18047           p_column                                => 'failure_score_commentary2',
18048           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18049           p_column_value                          => p_credit_rating_rec.failure_score_commentary2,
18050           x_return_status                         => x_return_status);
18051 
18052       /*IF g_debug THEN
18053           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18054               'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18055               'x_return_status = ' || x_return_status, l_debug_prefix);
18056       END IF;
18057       */
18058       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18059            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18060            p_message=>'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18061                   'x_return_status = ' || x_return_status,
18062                                   p_msg_level=>fnd_log.level_statement);
18063     END IF;
18064 
18065       -------------------------------------------
18066       -- validation for failure_score_commentary3
18067       -------------------------------------------
18068 
18069       -- failure_score_commentary3 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18070       validate_lookup (
18071           p_column                                => 'failure_score_commentary3',
18072           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18073           p_column_value                          => p_credit_rating_rec.failure_score_commentary3,
18074           x_return_status                         => x_return_status);
18075 
18076       /*IF g_debug THEN
18077           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18078               'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18079               'x_return_status = ' || x_return_status, l_debug_prefix);
18080       END IF;
18081       */
18082       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18083            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18084            p_message=>'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18085               'x_return_status = ' || x_return_status,
18086                                   p_msg_level=>fnd_log.level_statement);
18087     END IF;
18088 
18089       -------------------------------------------
18090       -- validation for failure_score_commentary4
18091       -------------------------------------------
18092 
18093       -- failure_score_commentary4 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18094       validate_lookup (
18095           p_column                                => 'failure_score_commentary4',
18096           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18097           p_column_value                          => p_credit_rating_rec.failure_score_commentary4,
18098           x_return_status                         => x_return_status);
18099 
18100       /*IF g_debug THEN
18101           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18102               'failure_score_commentary4 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18103               'x_return_status = ' || x_return_status, l_debug_prefix);
18104       END IF;
18105       */
18106       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18107            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18108            p_message=>'failure_score_commentary4 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18109                                         'x_return_status = ' || x_return_status,
18110                                   p_msg_level=>fnd_log.level_statement);
18111     END IF;
18112 
18113       -------------------------------------------
18114       -- validation for failure_score_commentary5
18115       -------------------------------------------
18116 
18117       -- failure_score_commentary5 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18118       validate_lookup (
18119           p_column                                => 'failure_score_commentary5',
18120           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18121           p_column_value                          => p_credit_rating_rec.failure_score_commentary5,
18122           x_return_status                         => x_return_status);
18123 
18124       /*IF g_debug THEN
18125           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18126               'failure_score_commentary5 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18127               'x_return_status = ' || x_return_status, l_debug_prefix);
18128       END IF;
18129       */
18130       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18131            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18132            p_message=>'failure_score_commentary5 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18133                                         'x_return_status = ' || x_return_status,
18134                                   p_msg_level=>fnd_log.level_statement);
18135       END IF;
18136 
18137       -------------------------------------------
18138       -- validation for failure_score_commentary6
18139       -------------------------------------------
18140 
18141       -- failure_score_commentary6 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18142       validate_lookup (
18143           p_column                                => 'failure_score_commentary6',
18144           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18145           p_column_value                          => p_credit_rating_rec.failure_score_commentary6,
18146           x_return_status                         => x_return_status);
18147 
18148       /*IF g_debug THEN
18149           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18150               'failure_score_commentary6 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18151               'x_return_status = ' || x_return_status, l_debug_prefix);
18152       END IF;
18153       */
18154       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18155            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18156            p_message=>'failure_score_commentary6 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18157                                         'x_return_status = ' || x_return_status,
18158                                   p_msg_level=>fnd_log.level_statement);
18159       END IF;
18160 
18161       -------------------------------------------
18162       -- validation for failure_score_commentary7
18163       -------------------------------------------
18164 
18165       -- failure_score_commentary7 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18166       validate_lookup (
18167           p_column                                => 'failure_score_commentary7',
18168           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18169           p_column_value                          => p_credit_rating_rec.failure_score_commentary7,
18170           x_return_status                         => x_return_status);
18171 
18172       /*IF g_debug THEN
18173           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18174               'failure_score_commentary7 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18175               'x_return_status = ' || x_return_status, l_debug_prefix);
18176       END IF;
18177       */
18178       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18179            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18180            p_message=>'failure_score_commentary7 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18181                           'x_return_status = ' || x_return_status,
18182                                   p_msg_level=>fnd_log.level_statement);
18183       END IF;
18184 
18185       -------------------------------------------
18186       -- validation for failure_score_commentary8
18187       -------------------------------------------
18188 
18189       -- failure_score_commentary8 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18190       validate_lookup (
18191           p_column                                => 'failure_score_commentary8',
18192           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18193           p_column_value                          => p_credit_rating_rec.failure_score_commentary8,
18194           x_return_status                         => x_return_status);
18195 
18196       /*IF g_debug THEN
18197           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18198               'failure_score_commentary8 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18199               'x_return_status = ' || x_return_status, l_debug_prefix);
18200       END IF;
18201       */
18202       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18203            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18204            p_message=>'failure_score_commentary8 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18205                                         'x_return_status = ' || x_return_status,
18206                                   p_msg_level=>fnd_log.level_statement);
18207       END IF;
18208 
18209       -------------------------------------------
18210       -- validation for failure_score_commentary9
18211       -------------------------------------------
18212 
18213       -- failure_score_commentary9 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18214       validate_lookup (
18215           p_column                                => 'failure_score_commentary9',
18216           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18217           p_column_value                          => p_credit_rating_rec.failure_score_commentary9,
18218           x_return_status                         => x_return_status);
18219 
18220       /*IF g_debug THEN
18221           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18222               'failure_score_commentary9 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18223               'x_return_status = ' || x_return_status, l_debug_prefix);
18224       END IF;
18225       */
18226       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18227            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18228            p_message=>'failure_score_commentary9 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18229                          'x_return_status = ' || x_return_status,
18230                                   p_msg_level=>fnd_log.level_statement);
18231       END IF;
18232 
18233       --------------------------------------------
18234       -- validation for failure_score_commentary10
18235       --------------------------------------------
18236 
18237       -- failure_score_commentary10 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18238       validate_lookup (
18239           p_column                                => 'failure_score_commentary10',
18240           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18241           p_column_value                          => p_credit_rating_rec.failure_score_commentary10,
18242           x_return_status                         => x_return_status);
18243 
18244       /*IF g_debug THEN
18245           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18246               'failure_score_commentary10 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18247               'x_return_status = ' || x_return_status, l_debug_prefix);
18248       END IF;
18249       */
18250       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18251            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18252            p_message=>'failure_score_commentary10 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18253               'x_return_status = ' || x_return_status,
18254                                   p_msg_level=>fnd_log.level_statement);
18255     END IF;
18256 
18257       --------------------------------------------
18258       -- validation for credit_score_override_code
18259       --------------------------------------------
18260 
18261       -- credit_score_override_code is lookup code in lookup type FAILURE_SCORE_OVERRIDE_CODE
18262       validate_lookup (
18263           p_column                                => 'credit_score_override_code',
18264           p_lookup_type                           => 'FAILURE_SCORE_OVERRIDE_CODE',
18265           p_column_value                          => p_credit_rating_rec.credit_score_override_code,
18266           x_return_status                         => x_return_status);
18267 
18268       /*IF g_debug THEN
18269           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18270               'credit_score_override_code should be in lookup FAILURE_SCORE_OVERRIDE_CODE. ' ||
18271               'x_return_status = ' || x_return_status, l_debug_prefix);
18272       END IF;
18273       */
18274       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18275            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18276            p_message=>'credit_score_override_code should be in lookup FAILURE_SCORE_OVERRIDE_CODE. ' ||
18277                                         'x_return_status = ' || x_return_status,
18278                                   p_msg_level=>fnd_log.level_statement);
18279     END IF;
18280 
18281       --------------------------------------------
18282       -- validation for debarment_ind
18283       --------------------------------------------
18284 /****Logical APIs - validation not required****/
18285   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18286       -- debarment_ind is lookup code in lookup type YES/NO
18287       validate_lookup (
18288           p_column                                => 'debarment_ind',
18289           p_lookup_type                           => 'YES/NO',
18290           p_column_value                          => p_credit_rating_rec.debarment_ind,
18291           x_return_status                         => x_return_status);
18292 
18293       /*IF g_debug THEN
18294           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18295               'debarment_ind should be in lookup YES/NO. ' ||
18296               'x_return_status = ' || x_return_status, l_debug_prefix);
18297       END IF;
18298       */
18299       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18300            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'debarment_ind should be in lookup YES/NO. ' ||
18301                          'x_return_status = ' || x_return_status,
18302                                   p_msg_level=>fnd_log.level_statement);
18303       END IF;
18304   END IF;
18305 
18306       --------------------------------------------
18307       -- validation for suit_ind
18308       --------------------------------------------
18309 /****Logical APIs - validation not required****/
18310   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18311       -- suit_ind is lookup code in lookup type YES/NO
18312       validate_lookup (
18313           p_column                                => 'suit_ind',
18314           p_lookup_type                           => 'YES/NO',
18315           p_column_value                          => p_credit_rating_rec.suit_ind,
18316           x_return_status                         => x_return_status);
18317 
18318       /*IF g_debug THEN
18319           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18320               'suit_ind should be in lookup YES/NO. ' ||
18321               'x_return_status = ' || x_return_status, l_debug_prefix);
18322       END IF;
18323       */
18324       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18325            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'suit_ind should be in lookup YES/NO. ' ||
18326                                   'x_return_status = ' || x_return_status,
18327                                   p_msg_level=>fnd_log.level_statement);
18328       END IF;
18329   END IF;
18330 
18331       --------------------------------------------
18332       -- validation for lien_ind
18333       --------------------------------------------
18334 /****Logical APIs - validation not required****/
18335   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18336       -- lien_ind is lookup code in lookup type YES/NO
18337       validate_lookup (
18338           p_column                                => 'lien_ind',
18339           p_lookup_type                           => 'YES/NO',
18340           p_column_value                          => p_credit_rating_rec.lien_ind,
18341           x_return_status                         => x_return_status);
18342 
18343       /*IF g_debug THEN
18344           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18345               'lien_ind should be in lookup YES/NO. ' ||
18346               'x_return_status = ' || x_return_status, l_debug_prefix);
18347       END IF;
18348       */
18349       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18350            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'lien_ind should be in lookup YES/NO. ' ||
18351                                                  'x_return_status = ' || x_return_status,
18352                                   p_msg_level=>fnd_log.level_statement);
18353       END IF;
18354   END IF;
18355 
18356       --------------------------------------------
18357       -- validation for judgement_ind
18358       --------------------------------------------
18359 /****Logical APIs - validation not required****/
18360   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18361       -- judgement_ind is lookup code in lookup type YES/NO
18362       validate_lookup (
18363           p_column                                => 'judgement_ind',
18364           p_lookup_type                           => 'YES/NO',
18365           p_column_value                          => p_credit_rating_rec.judgement_ind,
18366           x_return_status                         => x_return_status);
18367 
18368       /*IF g_debug THEN
18369           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18370               'judgement_ind should be in lookup YES/NO. ' ||
18371               'x_return_status = ' || x_return_status, l_debug_prefix);
18372       END IF;
18373       */
18374       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18375            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'judgement_ind should be in lookup YES/NO. ' ||
18376               'x_return_status = ' || x_return_status,
18377                                   p_msg_level=>fnd_log.level_statement);
18378       END IF;
18379   END IF;
18380 
18381       --------------------------------------------
18382       -- validation for no_trade_ind
18383       --------------------------------------------
18384 /****Logical APIs - validation not required****/
18385   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18386       -- no_trade_ind is lookup code in lookup type YES/NO
18387       validate_lookup (
18388           p_column                                => 'no_trade_ind',
18389           p_lookup_type                           => 'YES/NO',
18390           p_column_value                          => p_credit_rating_rec.no_trade_ind,
18391           x_return_status                         => x_return_status);
18392 
18393       /*IF g_debug THEN
18394           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18395               'no_trade_ind should be in lookup YES/NO. ' ||
18396               'x_return_status = ' || x_return_status, l_debug_prefix);
18397       END IF;
18398       */
18399       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18400            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'no_trade_ind should be in lookup YES/NO. ' ||
18401                                          'x_return_status = ' || x_return_status,
18402                                   p_msg_level=>fnd_log.level_statement);
18403      END IF;
18404   END IF;
18405 
18406       --------------------------------------------
18407       -- validation for prnt_hq_bkcy_ind
18408       --------------------------------------------
18409       --Bug 2898670: prnt_hq_bkcy_ind lookup code should be in the
18410       --lookup_type PRNT_HQ_IND instead of YES/NO
18411       validate_lookup (
18412           p_column                                => 'prnt_hq_bkcy_ind',
18413           p_lookup_type                           => 'PRNT_HQ_IND',
18414           p_column_value                          => p_credit_rating_rec.prnt_hq_bkcy_ind,
18415           x_return_status                         => x_return_status);
18416 
18417       /*IF g_debug THEN
18418           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18419               'prnt_hq_bkcy_ind should be in lookup PRNT_HQ_IND. ' ||
18420               'x_return_status = ' || x_return_status, l_debug_prefix);
18421       END IF;
18422       */
18423       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18424            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'prnt_hq_bkcy_ind should be in lookup PRNT_HQ_IND. ' ||
18425                                         'x_return_status = ' || x_return_status,
18426                                   p_msg_level=>fnd_log.level_statement);
18427       END IF;
18428 
18429       ----------------------------------------------
18430       -- validation for maximum_credit_currency_code
18431       ----------------------------------------------
18432 
18433       -- maximum_credit_currency_code is foreign key to FND_CURRENCIES.CURRENCY_CODE
18434       IF p_create_update_flag = 'C'
18435          AND
18436          p_credit_rating_rec.maximum_credit_currency_code IS NOT NULL
18437          AND
18438          p_credit_rating_rec.maximum_credit_currency_code <> fnd_api.g_miss_char
18439       THEN
18440           BEGIN
18441               --Bug 2898670: Changed the validation as the foreign key validation
18442               --has to be against active records
18443               --Bug 3877782. Added the condition to consider start_date_active and end_date_active.
18444               SELECT 'Y'
18445               INTO   l_dummy
18446               FROM   fnd_currencies f
18447               WHERE  f.currency_code = p_credit_rating_rec.maximum_credit_currency_code
18448               AND    currency_flag = 'Y'
18449               AND    enabled_flag = 'Y'
18450               AND    trunc(sysdate) between trunc(nvl(start_date_active,sysdate))
18451                                     and      trunc(nvl(end_date_active,sysdate));
18452           EXCEPTION
18453               WHEN NO_DATA_FOUND THEN
18454                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
18455                   fnd_message.set_token('FK', 'currency_code');
18456                   fnd_message.set_token('COLUMN', 'maximum_credit_currency_code');
18457                   fnd_message.set_token('TABLE', 'fnd_currencies');
18458                   fnd_msg_pub.add;
18459                   x_return_status := fnd_api.g_ret_sts_error;
18460           END;
18461 
18462           /*IF g_debug THEN
18463               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18464                   'maximum_credit_currency_code has foreign key fnd_currencies.currency_code. ' ||
18465                   'x_return_status = ' || x_return_status, l_debug_prefix);
18466           END IF;
18467           */
18468           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18469                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18470                 p_message=>'maximum_credit_currency_code has foreign key fnd_currencies.currency_code. ' ||
18471                           'x_return_status = ' || x_return_status,
18472                                   p_msg_level=>fnd_log.level_statement);
18473           END IF;
18474 
18475       END IF;
18476 
18477 
18478       ------------------------
18479       -- validation for status
18480       ------------------------
18481 /****Logical APIs - validation not required****/
18482   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18483       -- status is lookup code in lookup type REGISTRY_STATUS
18484       IF p_credit_rating_rec.status IS NOT NULL
18485          AND
18486          p_credit_rating_rec.status <> fnd_api.g_miss_char
18487          AND
18488          (p_create_update_flag = 'C'
18489           OR
18490           (p_create_update_flag = 'U'
18491            AND
18492            p_credit_rating_rec.status <> NVL(l_status, fnd_api.g_miss_char)
18493          )
18494         )
18495       THEN
18496           validate_lookup (
18497               p_column                                => 'status',
18498               p_lookup_type                           => 'REGISTRY_STATUS',
18499               p_column_value                          => p_credit_rating_rec.status,
18500               x_return_status                         => x_return_status);
18501 
18502           /*IF g_debug THEN
18503               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18504                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
18505                   'x_return_status = ' || x_return_status, l_debug_prefix);
18506           END IF;
18507           */
18508           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18509              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18510              p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
18511                                                 'x_return_status = ' || x_return_status,
18512                                   p_msg_level=>fnd_log.level_statement);
18513           END IF;
18514 
18515       END IF;
18516   END IF;
18517 
18518       -- status cannot be set to null during update
18519       IF p_create_update_flag = 'U' THEN
18520           validate_cannot_update_to_null (
18521               p_column                                => 'status',
18522               p_column_value                          => p_credit_rating_rec.status,
18523               x_return_status                         => x_return_status);
18524       END IF;
18525 
18526       --------------------------------------------------------
18527       -- validate credit_score_natl_percentile ( Bug 3181460 )
18528       --------------------------------------------------------
18529       -- This column should have a value within the range 0 - 100.
18530 
18531       IF p_credit_rating_rec.credit_score_natl_percentile IS NOT NULL AND
18532          p_credit_rating_rec.credit_score_natl_percentile <> FND_API.G_MISS_NUM AND
18533          (p_create_update_flag = 'C' OR
18534           (
18535           p_create_update_flag = 'U' AND
18536           p_credit_rating_rec.credit_score_natl_percentile <> l_credit_score_natl_percentile
18537           )
18538          )
18539       THEN
18540           IF p_credit_rating_rec.credit_score_natl_percentile < 0 OR
18541              p_credit_rating_rec.credit_score_natl_percentile > 100
18542           THEN
18543               FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_PERCENTAGE');
18544               FND_MESSAGE.SET_TOKEN('INVALIDVAL', p_credit_rating_rec.credit_score_natl_percentile);
18545               FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'credit_score_natl_percentile');
18546               FND_MSG_PUB.ADD;
18547               x_return_status := fnd_api.g_ret_sts_error;
18548           END IF;
18549       END IF;
18550 
18551       ----------------------------------------------------------
18552       -- validate failure_score_natnl_percentile ( Bug 3181460 )
18553       ----------------------------------------------------------
18554       -- This column should have a value within the range 0 - 100.
18555 
18556       IF p_credit_rating_rec.failure_score_natnl_percentile IS NOT NULL AND
18557          p_credit_rating_rec.failure_score_natnl_percentile <> FND_API.G_MISS_NUM AND
18558          (
18559          p_create_update_flag = 'C' OR
18560           (
18561           p_create_update_flag = 'U' AND
18562           p_credit_rating_rec.failure_score_natnl_percentile <> l_fail_score_natnl_percentile
18563           )
18564          )
18565       THEN
18566           IF p_credit_rating_rec.failure_score_natnl_percentile < 0 OR
18567              p_credit_rating_rec.failure_score_natnl_percentile > 100
18568           THEN
18569               FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_PERCENTAGE');
18570               FND_MESSAGE.SET_TOKEN('INVALIDVAL', p_credit_rating_rec.failure_score_natnl_percentile);
18571               FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'failure_score_natnl_percentile');
18572               FND_MSG_PUB.ADD;
18573               x_return_status := fnd_api.g_ret_sts_error;
18574           END IF;
18575       END IF;
18576 
18577 
18578       --------------------------------------
18579       -- validate created_by_module
18580       --------------------------------------
18581 
18582       validate_created_by_module(
18583         p_create_update_flag     => p_create_update_flag,
18584         p_created_by_module      => p_credit_rating_rec.created_by_module,
18585         p_old_created_by_module  => l_created_by_module,
18586         x_return_status          => x_return_status);
18587 
18588       --------------------------------------------------------------
18589       -- validate content_source_type and actual_content_source_type
18590       --------------------------------------------------------------
18591     /* SSM SST Integration and Extension
18592      * actual_content_source is now a foreign key to HZ_ORIG_SYSTEMS_B.orig_system with sst_flag = 'Y'.
18593       -- actual_content_source is lookup code in lookup type CONTENT_SOURCE_TYPE
18594       validate_lookup (
18595           p_column                                => 'actual_content_source',
18596           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
18597           p_column_value                          => p_credit_rating_rec.actual_content_source,
18598           x_return_status                         => x_return_status);
18599     */
18600       /*IF g_debug THEN
18601           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18602               'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
18603               'x_return_status = ' || x_return_status, l_debug_prefix);
18604       END IF;
18605       */
18606     /*
18607       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18608            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18609            p_message=>'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
18610                                                 'x_return_status = ' || x_return_status,
18611                                   p_msg_level=>fnd_log.level_statement);
18612        END IF;
18613     */
18614       HZ_MIXNM_UTILITY.ValidateContentSource (
18615         p_api_version                       => 'V2',
18616         p_create_update_flag                => p_create_update_flag,
18617         p_check_update_privilege            => 'Y',
18618         p_content_source_type               => 'USER_ENTERED',
18619         p_old_content_source_type           => 'USER_ENTERED',
18620         p_actual_content_source             => p_credit_rating_rec.actual_content_source,
18621         p_old_actual_content_source         => l_actual_content_source,
18622         p_entity_name                       => 'HZ_CREDIT_RATINGS',
18623         x_return_status                     => x_return_status );
18624 
18625       -- Debug info.
18626       /*IF g_debug THEN
18627           hz_utility_v2pub.debug ('validate_credit_rating (-)');
18628       END IF;
18629       */
18630       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
18631         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_credit_rating (-)',
18632                                p_msg_level=>fnd_log.level_procedure);
18633       END IF;
18634 
18635       --disable_debug;
18636 
18637   END validate_credit_rating;
18638 
18639 
18640   /**
18641    * PROCEDURE validate_created_by_module
18642    *
18643    * DESCRIPTION
18644    *    validate created by module
18645    * ARGUMENTS
18646    *   IN:
18647    *     p_create_update_flag      create update flag
18648    *     p_created_by_module       created by module
18649    *     p_old_created_by_module   old value of created by module
18650    *     x_return_status           return status
18651    */
18652 
18653   PROCEDURE validate_created_by_module (
18654       p_create_update_flag          IN     VARCHAR2,
18655       p_created_by_module           IN     VARCHAR2,
18656       p_old_created_by_module       IN     VARCHAR2,
18657       x_return_status               IN OUT NOCOPY VARCHAR2
18658   ) IS
18659 
18660       l_column                      CONSTANT VARCHAR2(30) := 'created_by_module';
18661 
18662   BEGIN
18663 
18664       -- skip mandatory and non-updateable check from logical API
18665       IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
18666         -- created_by_module is mandatory field
18667         -- Since created_by_module is non-updateable, we only need to check mandatory
18668         -- during creation.
18669 
18670         IF p_create_update_flag = 'C' THEN
18671           validate_mandatory (
18672             p_create_update_flag     => p_create_update_flag,
18673             p_column                 => l_column,
18674             p_column_value           => p_created_by_module,
18675             x_return_status          => x_return_status);
18676 
18677           IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18678             hz_utility_v2pub.debug(
18679               p_prefix               => '',
18680               p_message              => l_column || ' is mandatory. ' ||
18681                                         'x_return_status = ' || x_return_status,
18682               p_msg_level            => fnd_log.level_statement);
18683           END IF;
18684         END IF;
18685 
18686         -- created_by_module is non-updateable field. But it can be updated from
18687         -- NULL to some value.
18688 
18689         IF p_create_update_flag = 'U' AND
18690            p_created_by_module IS NOT NULL
18691         THEN
18692           validate_nonupdateable (
18693             p_column                 => l_column,
18694             p_column_value           => p_created_by_module,
18695             p_old_column_value       => p_old_created_by_module,
18696             p_restricted             => 'N',
18697             x_return_status          => x_return_status);
18698 
18699           IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18700             hz_utility_v2pub.debug(
18701               p_prefix               => '',
18702               p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
18703                                         'x_return_status = ' || x_return_status,
18704               p_msg_level            => fnd_log.level_statement);
18705           END IF;
18706         END IF;
18707       END IF;
18708 
18709       -- created_by_module is lookup code in lookup type HZ_CREATED_BY_MODULES
18710       IF p_created_by_module IS NOT NULL AND
18711          p_created_by_module <> fnd_api.g_miss_char AND
18712          (p_create_update_flag = 'C' OR
18713           (p_create_update_flag = 'U' AND
18714            (p_old_created_by_module IS NULL OR
18715             p_created_by_module <> p_old_created_by_module)))
18716       THEN
18717         validate_lookup (
18718           p_column                   => l_column,
18719           p_lookup_type              => 'HZ_CREATED_BY_MODULES',
18720           p_column_value             => p_created_by_module,
18721           x_return_status            => x_return_status);
18722 
18723         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18724           hz_utility_v2pub.debug(
18725             p_prefix                 => '',
18726             p_message                => l_column || ' is lookup code in lookup type HZ_CREATED_BY_MODULES. ' ||
18727                                         'x_return_status = ' || x_return_status,
18728             p_msg_level              => fnd_log.level_statement);
18729         END IF;
18730       END IF;
18731 
18732       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18733         hz_utility_v2pub.debug(
18734           p_prefix                   => '',
18735           p_message                  => 'after validate ' || l_column || ' ... ' ||
18736                                         'x_return_status = ' || x_return_status,
18737           p_msg_level                => fnd_log.level_statement);
18738       END IF;
18739 
18740   END validate_created_by_module;
18741 
18742 
18743   /**
18744    * PROCEDURE validate_application_id
18745    *
18746    * DESCRIPTION
18747    *    validate application id
18748    * ARGUMENTS
18749    *   IN:
18750    *     p_create_update_flag      create update flag
18751    *     p_application_id          application id
18752    *     p_old_application_id      old value of application id
18753    *     x_return_status           return status
18754    */
18755 
18756   PROCEDURE validate_application_id (
18757       p_create_update_flag          IN     VARCHAR2,
18758       p_application_id              IN     NUMBER,
18759       p_old_application_id          IN     NUMBER,
18760       x_return_status               IN OUT NOCOPY VARCHAR2
18761   ) IS
18762 
18763       l_column                      CONSTANT VARCHAR2(30) := 'application_id';
18764 
18765   BEGIN
18766 
18767       -- skip non-updateable check from logical API
18768       IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
18769         -- application_id is non-updateable field. But it can be updated from NULL
18770         -- to some value.
18771 
18772         IF p_create_update_flag = 'U' AND
18773            p_application_id IS NOT NULL
18774         THEN
18775           validate_nonupdateable (
18776             p_column                 => l_column,
18777             p_column_value           => p_application_id,
18778             p_old_column_value       => p_old_application_id,
18779             p_restricted             => 'N',
18780             x_return_status          => x_return_status);
18781 
18782           IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18783             hz_utility_v2pub.debug(
18784               p_prefix               => '',
18785               p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
18786                                         'x_return_status = ' || x_return_status,
18787               p_msg_level            => fnd_log.level_statement);
18788           END IF;
18789         END IF;
18790       END IF;
18791 
18792       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18793         hz_utility_v2pub.debug(
18794           p_prefix                   => '',
18795           p_message                  => 'after validate ' || l_column || ' ... ' ||
18796                                         'x_return_status = ' || x_return_status,
18797           p_msg_level                => fnd_log.level_statement);
18798       END IF;
18799 
18800   END validate_application_id;
18801 
18802 END hz_registry_validate_v2pub;